public void BallPlayerCollision(GameObject player, Collision2D collision) { PlayerController playerController; if (!playerDictionary.TryGetValue(player, out playerController)) { playerController = player.GetComponent <PlayerController>(); playerDictionary.Add(player, playerController); } Ball ball = collision.gameObject.GetComponent <Ball>(); // Check if the ball has been touched by anyone PlayerController lastTouchedBy = ball.GetLastTouchedBy(playerController); if (lastTouchedBy != null && GameRunning) { lastTouchedBy.RegisterKill(playerController); if (gameMode == EMode.Deathmatch) { if (lastTouchedBy.GetTeamNumber() == playerController.GetTeamNumber()) { // Suicide ETeam scorer = lastTouchedBy.GetTeamNumber() == ETeam.RedTeam ? ETeam.BlueTeam : ETeam.RedTeam; if (lightsController != null) { lightsController.HitTheTeamLights(scorer, 3); } if (modeManager.AltUpdateScore(scorer, 1)) { GameRunning = false; StopCoroutine("StartGameTimer"); gameData.SetGameWinner(scorer); lightsController.HitAllTheLightsAsTeam(scorer, 10); StartCoroutine("DelayedWinScreen"); } } else { if (lightsController != null) { lightsController.HitTheTeamLights(lastTouchedBy.GetTeamNumber(), 3); } if (modeManager.AltUpdateScore(lastTouchedBy.GetTeamNumber(), 1)) { GameRunning = false; StopCoroutine("StartGameTimer"); gameData.SetGameWinner(lastTouchedBy.GetTeamNumber()); lightsController.HitAllTheLightsAsTeam(lastTouchedBy.GetTeamNumber(), 10); StartCoroutine("DelayedWinScreen"); } } } } else { if (gameMode == EMode.Deathmatch) { ETeam scorer = playerController.GetTeamNumber() == ETeam.BlueTeam ? ETeam.RedTeam : ETeam.BlueTeam; if (lightsController != null) { lightsController.HitTheTeamLights(scorer, 3); } if (modeManager.AltUpdateScore(scorer, 1)) { GameRunning = false; StopCoroutine("StartGameTimer"); gameData.SetGameWinner(scorer); lightsController.HitAllTheLightsAsTeam(scorer, 10); BallHandling(ball); StartCoroutine("DelayedWinScreen"); } } } ball.RedirectBall(collision.relativeVelocity, Vector2.zero); playerController.PlayerDead(); StartCoroutine(RespawnPlayer(playerController)); StartCoroutine(Camera.main.GetComponent <CCShaders.ChromaticAberrationEffect>().PlayEffect(1)); }