IEnumerator ConnectProcess(Player player)
        {
            Log("ConnectProcess=" + ConnectionState.Start);
            SetConnectionState(ConnectionState.Start);
            player.State = ClientState.Connection;
            yield return(WaitAccept(player, ClientState.Verification));

            SetConnectionState(ConnectionState.LoadLevel);
            yield return(WaitLoadGameLevel());

            yield return(WaitAccept(player, ClientState.Register));

            SendRegisterAccept(player);
            SetConnectionState(ConnectionState.LoadData);
            yield return(CheckAllPlayersConnected(player));

            Log("ConnectProcess=" + ConnectionState.End);
            SetConnectionState(ConnectionState.End);
            m_Client.AddPlayer(player);
            player.State = ClientState.Connected;
            //m_Client.AddPlayer(player);
            m_Client.CallConnectEvents(new Args()
            {
                Event = ProcessConnection.Connected
            });
        }
Exemple #2
0
        public GameLevel(InputHandler tInput, GameClient tClient)
        {
            Input                = tInput;
            Client               = tClient;
            Client.GetGameMode  += Client_GetGameMode;
            Client.GetGameState += Client_GetGameState;
            Client.GetBonuses   += Client_GetBonuses;

            if (Client.IsMain)
            {
                object[] ParsedLevel = LevelGen.ParseLevel(Level);

                CurrentLevelWidth  = (int)ParsedLevel[0];
                CurrentLevelHeight = (int)ParsedLevel[1];

                Tiles    = (List <GEntity>)ParsedLevel[2];
                Entities = (List <GEntity>)ParsedLevel[3];
                Spawners = (List <GEntity>)ParsedLevel[4];

                foreach (GEntity D in LevelGen.GetLevelDetails(Tiles))
                {
                    Tiles.Add(D);
                }

                GEntity S = Player.GetSpawnCoordinates(Spawners);
                Player  p = new Player(0, S.X, S.Y);

                Players.Add(p);
                CurrentPlayer        = p;
                Client.CurrentPlayer = p;
            }
            else
            {
                var addPlayerResult = Client.AddPlayer(Players);
                Tiles    = addPlayerResult.Tiles;
                Entities = addPlayerResult.Entities;
                Spawners = addPlayerResult.Spawners;
                Bonuses  = addPlayerResult.Bonuses;
                SetMode((Modes)addPlayerResult.Mode);
                CurrentLevelWidth         = addPlayerResult.LevelWidth;
                CurrentLevelHeight        = addPlayerResult.LevelHeight;
                CurrentPlayer             = addPlayerResult.Player;
                Client.AddPlayerProgress += Client_AddPlayerProgress;
                Client.AddPlayerComplete += Client_AddPlayerComplete;
            }

            Client.OnBonusRemoved += Client_OnBonusRemoved;
            Client.Init(Entities, Players);
            CurrentPlayer.Controllable = true;
            CenterCameraOnPlayer();

            GenerateBackground();

            int lw = CurrentLevelWidth * GTile.WIDTH;
            int lh = CurrentLevelHeight * GTile.HEIGHT;

            Fog          = new GBitmap(lw, lh);
            BuildingGrid = new GBitmap(lw, lh);
            UpdateBitmapSize();
            Fog.Fill(255, 0, 0, 0);
            GenerateBuildingGrid();

            if (GameComponent.DEV)
            {
                for (int i = 0; i < 48; ++i)
                {
                    CurrentPlayer.AddInvItem(new TurretInv());
                    CurrentPlayer.AddInvItem(new MineInv());
                    CurrentPlayer.AddInvItem(new DispenserInv());
                }
            }
        }