public void End(bool forced = true) { if (!forced) { OnEnd(); } Team.Clear(); started = false; Core.Match.State = MatchState.KickOff; MatchTimer.Stop(); Chat.MessageAll("Restarting game"); Core.Ball.PickedUp = null; Core.Ball.SpawnAt(Constants.CenterPoint); Barriers.OnSetPieceTake(); Task.Run(() => KickOff(true)); }
private void UpdateStateOfPlay() { #region in play if (!started) { return; } if (_state == MatchState.InGame) { // assuming the ball was in play last time we checked. BallState ballState = DetermineBallState(Core.Ball.Position3d); switch (ballState) { case BallState.InBounds: break; case BallState.NetLeft: Core.Ball.PickedUp = null; _state = MatchState.KickOff; Core.Ball.SpawnAt(Constants.CenterPoint); _teamInPossession = _teamLeft; TeamRight.Goals++; if (Core.Ball.LastTouch == TeamLeft) { Chat.MessageAll("Magnificent OWN goal by Team " + TeamLeft.Color + TeamLeft.Name + " " + Server.DefaultColor + "(" + Core.Ball.LastTouchPlayer.ColoredName + Server.DefaultColor + ")"); Core.Ball.LastTouchPlayer.ExtraData.ChangeOrCreate("OwnGoals", (int)Core.Ball.LastTouchPlayer.ExtraData["OwnGoals"] + 1); } else { Chat.MessageAll("Magnificent goal by Team " + TeamRight.Color + TeamRight.Name + " " + Server.DefaultColor + "(" + Core.Ball.LastTouchPlayer.ColoredName + Server.DefaultColor + ")"); try { if (TeamRight.SecondLastTouch != null) { Chat.MessageAll("Awesome assist by " + TeamRight.SecondLastTouch.ColoredName); TeamRight.SecondLastTouch.ExtraData.ChangeOrCreate("Assists", (int)TeamRight.SecondLastTouch.ExtraData["Assists"] + 1); } } catch { } Core.Ball.LastTouchPlayer.ExtraData.ChangeOrCreate("Goals", (int)Core.Ball.LastTouchPlayer.ExtraData["Goals"] + 1); } foreach (Player p in Player.players) { HUD.UpdateAll(p); } Task.Run(() => KickOff(true)); break; case BallState.NetRight: Core.Ball.PickedUp = null; _state = MatchState.KickOff; Core.Ball.SpawnAt(Constants.CenterPoint); _teamInPossession = _teamRight; TeamLeft.Goals++; if (Core.Ball.LastTouch == TeamRight) { Player.GlobalMessage("Magnificent OWN goal by Team " + TeamRight.Color + TeamRight.Name + " " + Server.DefaultColor + "(" + Core.Ball.LastTouchPlayer.ColoredName + Server.DefaultColor + ")"); Core.Ball.LastTouchPlayer.ExtraData.ChangeOrCreate("OwnGoals", (int)Core.Ball.LastTouchPlayer.ExtraData["OwnGoals"] + 1); } else { Player.GlobalMessage("Magnificent goal by Team " + TeamLeft.Color + TeamLeft.Name + " " + Server.DefaultColor + "(" + Core.Ball.LastTouchPlayer.ColoredName + Server.DefaultColor + ")"); Core.Ball.LastTouchPlayer.ExtraData.ChangeOrCreate("Goals", (int)Core.Ball.LastTouchPlayer.ExtraData["Goals"] + 1); try { if (TeamLeft.SecondLastTouch != null) { Chat.MessageAll("Awesome assist by " + TeamRight.SecondLastTouch.ColoredName); TeamLeft.SecondLastTouch.ExtraData.ChangeOrCreate("Assists", (int)TeamLeft.SecondLastTouch.ExtraData["Assists"] + 1); } } catch { } } foreach (Player p in Player.players) { HUD.UpdateAll(p); } Task.Run(() => KickOff(false)); break; case BallState.OutLeftTop: if (Core.Ball.LastTouch == _teamLeft) { _state = MatchState.Corner; _deadBallLocation = Constants.CornerPoint[0]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamRight; Chat.MessageAll("Corner for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleCorner(); } else { _state = MatchState.GoalKick; _deadBallLocation = Constants.GoalKickPoint[0]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamLeft; Chat.MessageAll("Goalkick for Team " + _teamInPossession.Color + _teamInPossession.Name); } break; case BallState.OutLeftBottom: if (Core.Ball.LastTouch == _teamLeft) { _state = MatchState.Corner; _deadBallLocation = Constants.CornerPoint[1]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamRight; Chat.MessageAll("Corner for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleCorner(); } else { _state = MatchState.GoalKick; _deadBallLocation = Constants.GoalKickPoint[0]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamLeft; Chat.MessageAll("Goalkick for Team " + _teamInPossession.Color + _teamInPossession.Name); } break; case BallState.OutRightTop: if (Core.Ball.LastTouch == _teamRight) { _state = MatchState.Corner; _deadBallLocation = Constants.CornerPoint[2]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamLeft; Chat.MessageAll("Corner for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleCorner(); } else { _state = MatchState.GoalKick; _deadBallLocation = Constants.GoalKickPoint[1]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamRight; Chat.MessageAll("Goalkick for Team " + _teamInPossession.Color + _teamInPossession.Name); } break; case BallState.OutRightBottom: if (Core.Ball.LastTouch == _teamRight) { _state = MatchState.Corner; _deadBallLocation = Constants.CornerPoint[3]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamLeft; Chat.MessageAll("Corner for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleCorner(); } else { _state = MatchState.GoalKick; _deadBallLocation = Constants.GoalKickPoint[1]; Core.Ball.SpawnAt(_deadBallLocation); _teamInPossession = _teamRight; Chat.MessageAll("Goalkick for Team " + _teamInPossession.Color + _teamInPossession.Name); } break; case BallState.ThrowTop: _state = MatchState.ThrowIn; _deadBallLocation = new Vector2d(Core.Ball.Position3d.X, Constants.TouchLineTop); Core.Ball.SpawnAt(_deadBallLocation); if (Core.Ball.LastTouch == _teamLeft) { _teamInPossession = _teamRight; } else { _teamInPossession = _teamLeft; } Chat.MessageAll("Throw In for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleThrowIn(); break; case BallState.ThrowBottom: _state = MatchState.ThrowIn; _deadBallLocation = new Vector2d(Core.Ball.Position3d.X, Constants.TouchLineBottom); Core.Ball.SpawnAt(_deadBallLocation); if (Core.Ball.LastTouch == _teamLeft) { _teamInPossession = _teamRight; } else { _teamInPossession = _teamLeft; } Chat.MessageAll("Throw In for Team " + _teamInPossession.Color + _teamInPossession.Name); Barriers.HandleThrowIn(); break; } } #endregion else if (_teamInPossession.TakenSetPiece) { Barriers.OnSetPieceTake(); Chat.MessageAll("Set piece taken by Team " + _teamInPossession.Color + _teamInPossession.Name); _teamInPossession.TakenSetPiece = false; _state = MatchState.InGame; } }