Example #1
0
 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));
 }
Example #2
0
        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;
            }
        }