Exemplo n.º 1
0
        IEnumerator StartGameWhenPlayersReady(bool showCountdown)
        {
            yield return(new WaitUntil(() => sPlayerData.All(d => d.player.IsInitialized())));

            //stateChangeListener = stateChangeListenerFactory.Get();
            stateChangeListener.GameStarted();
            for (var i = 0; i < sPlayerData.Count; i++)
            {
                var player = sPlayerData[i].player;
                EventLifeChanged(player.eId, player.eLives, player.eDamage);
                stateChangeListener.LifeChanged(player.eId, player.eLives);
                stateChangeListener.DamageChanged(player.eId, player.eDamage);
            }

            RpcCreateCharacterList(sPlayerData.Select(d => d.player.netId).ToArray());

            this.countdown = GameObject.Find("StaticCanvas").GetComponent <Countdown>();
            RpcStartGame(showCountdown);
            if (showCountdown)
            {
                this.countdown.Start();
                System.GC.Collect();
                this.countdown.OnFinished += _ => {
                    this.isPlaying = true;
                    _GameStarted();
                    stateChangeListener.GameStarted();
                };
            }
            else
            {
                this.isPlaying = true;
                _GameStarted();
                stateChangeListener.GameStarted();
            }
        }
Exemplo n.º 2
0
        IEnumerator WaitForPlayersToSync()
        {
            yield return(new WaitWhile(() => sPlayerData.Count(d => d.player.eId == 0) > 1));

            yield return(new WaitUntil(() => sPlayerData.Any(d => d.player.hasAuthority)));

            cPlayerId           = sPlayerData.First(d => d.player.hasAuthority).player.eId;
            stateChangeListener = stateChangeListenerFactory.Get();
            foreach (var pd in sPlayerData)
            {
                stateChangeListener.LifeChanged(pd.player.eId, pd.player.eLives);
                stateChangeListener.DamageChanged(pd.player.eId, pd.player.eDamage);
            }
            InitializePlayers();
        }
Exemplo n.º 3
0
        void OnStateChanged(NetworkMessage msg)
        {
            var type = (MessageType)msg.reader.ReadByte();

            switch (type)
            {
            case MessageType.GameStarted:
                listener.GameStarted();
                break;

            case MessageType.GameEnded:
                listener.GameEnded();
                break;

            case MessageType.BoolControlStateChanged: {
                uint control = msg.reader.ReadUInt32();
                bool active  = (control & (1 << 16)) != 0;
                control &= 0xFFFEFFFF;
                listener.ControlStateChanged((int)control, active);
                break;
            }

            case MessageType.AxisControlStateChanged: {
                int   control = msg.reader.ReadInt32();
                float axis    = msg.reader.ReadSingle();
                listener.ControlStateChanged(control, axis);
                break;
            }

            case MessageType.PlayerPositionChanged: {
                int     player   = msg.reader.ReadByte();
                Vector2 position = msg.reader.ReadVector2();
                listener.PlayerPositionChanged(player, position);
                break;
            }

            case MessageType.DamageChanged: {
                int player = msg.reader.ReadInt32();
                int damage = msg.reader.ReadInt32();
                listener.DamageChanged(player, damage);
                break;
            }

            case MessageType.LifeChanged: {
                int player = msg.reader.ReadInt32();
                int lives  = msg.reader.ReadInt32();
                listener.LifeChanged(player, lives);
                break;
            }

            case MessageType.ObjectCreated: {
                NetworkInstanceId id = msg.reader.ReadNetworkId();
                listener.ObjectCreated(ClientScene.FindLocalObject(id));
                break;
            }

            case MessageType.ObjectWillBeDestroyed: {
                NetworkInstanceId id = msg.reader.ReadNetworkId();
                listener.ObjectWillBeDestroyed(ClientScene.FindLocalObject(id));
                break;
            }
            }
        }