void handleNetworkedAbilityInput(IncomingNetworkStreamMessage m, int index, AbstractAbility ability, AbilityType type)
    {
        switch (players[index].networkMode)
        {
        case NetworkMode.REMOTESERVER:
        {
            Vector2 direction = m.reader.ReadVector2();
            activateAndSend(m.packetType, direction, (byte)(players[index].playerID), ability);
            //no response when failed; client uses RTT to realize this
            break;
        }

        case NetworkMode.LOCALCLIENT:
        case NetworkMode.REMOTECLIENT:
        {
            //server sent it, so it's 100% valid
            Vector2 direction = m.reader.ReadVector2();
            bool    activated = false;
            if (m.reader.ReadBoolean() && _abilitiesEnabled)         //if it is a IRandomAbility
            {
                activated = ((IRandomAbility)ability).Fire(direction, m.reader.ReadInt32());
            }
            else if (_abilitiesEnabled)
            {
                activated = ability.Fire(direction);
            }
            switch (type)
            {
            case AbilityType.MOVEMENT:
                movementAbilityObservable.Post(new MovementAbilityFiredMessage(direction));
                break;

            case AbilityType.GENERIC:
                genericAbilityObservable.Post(new GenericAbilityFiredMessage(direction));
                break;

            case AbilityType.SUPER:
                superAbilityObservable.Post(new SuperAbilityFiredMessage());
                break;

            default:
                Debug.Log("Invalid Ability Type");
                break;
            }

            //maybe call a ForceFire method?
            Assert.IsTrue(activated);
            break;
        }

        default:
            Debug.Log("Unauthorized ability input");
            break;
        }
    }
    public void Notify(IncomingNetworkStreamMessage m)
    {
        int index = findPlayerIndex(m.reader);

        switch (m.packetType)
        {
        case PacketType.PLAYERLOCATION:
            if (checkValidPlayer(m, index, 2))
            {
                players[index].inputToAction.transform.position = m.reader.ReadVector2();
                Vector2 velocity = m.reader.ReadVector2();
                players[index].inputToAction.rigid.velocity = velocity;
                if (players[index].networkMode == NetworkMode.REMOTECLIENT)
                {
                    players[index].inputToAction.normalizedMovementInput = velocity.normalized;
                }
            }
            break;

        case PacketType.PLAYERINPUT:
            if (checkValidPlayer(m, index))
            {
                Assert.IsTrue(players[index].networkMode == NetworkMode.REMOTESERVER);
                players[index].inputToAction.normalizedMovementInput = m.reader.ReadVector2();
            }
            break;

        case PacketType.PLAYERMOVEMENTABILITY:
            if (checkValidPlayer(m, index))
            {
                handleNetworkedAbilityInput(m, index, players[index].inputToAction.moveAbility, AbilityType.MOVEMENT);
            }
            break;

        case PacketType.PLAYERGENERICABILITY:
            if (checkValidPlayer(m, index))
            {
                handleNetworkedAbilityInput(m, index, players[index].inputToAction.genAbility, AbilityType.GENERIC);
            }
            break;

        case PacketType.PLAYERSUPERABILITY:
            if (checkValidPlayer(m, index))
            {
                handleNetworkedAbilityInput(m, index, players[index].inputToAction.superAbility, AbilityType.SUPER);
            }
            break;


        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }
 bool checkValidPlayer(IncomingNetworkStreamMessage m, int index, int numVector2s = 1)
 {
     if (index < 0)
     {
         Debug.Log("Unknown Player");
         for (int i = 0; i < numVector2s; i++)
         {
             m.reader.ReadVector2(); //move the stream for the next data element
         }
         return(false);
     }
     return(true);
 }
Esempio n. 4
0
    public void Notify(IncomingNetworkStreamMessage m)
    {
        switch (m.packetType)
        {
        case PacketType.SCENEJUMP:
            Assert.IsTrue(NetworkNode.node is Client);
            Application.LoadLevel(Tags.Scenes.select);
            break;

        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }
Esempio n. 5
0
    public void Notify(IncomingNetworkStreamMessage m)
    {
        switch (m.packetType)
        {
        case PacketType.PUCKLOCATION:
            this.transform.position = m.reader.ReadVector2();
            rigid.velocity          = m.reader.ReadVector2();
            updateDrag();
            break;

        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }
    public void Notify(IncomingNetworkStreamMessage m)
    {
        int index = m.reader.ReadByte();

        Assert.IsTrue(boids.ContainsKey(index));
        switch (m.packetType)
        {
        case PacketType.BOIDPOSITION:
            boids[index].rigid.position = m.reader.ReadVector2();
            boids[index].rigid.velocity = m.reader.ReadVector2();
            break;

        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }
 public void Notify(IncomingNetworkStreamMessage m)
 {
     switch (m.packetType)
     {
         case PacketType.SUPERGOALSPAWNING:
             int spawnPointIndex = m.reader.ReadByte();
             spawnSuperGoals(spawnPointIndex);
             break;
         case PacketType.SUPERGOALSCORED:
             int playerID = m.reader.ReadByte();
             GameObject player = InputToAction.IDToInputToAction(playerID).gameObject;
             player.GetComponentInChildren<SuperAbility>().ready = true;
             playFX(player.GetComponent<Stats>().side);
             break;
         default:
             Debug.LogError("Invalid Message Type");
             break;
     }
 }
Esempio n. 8
0
    public void Notify(IncomingNetworkStreamMessage m)
    {
        switch (m.packetType)
        {
        case PacketType.SUPERGOALSPAWNING:
            int spawnPointIndex = m.reader.ReadByte();
            spawnSuperGoals(spawnPointIndex);
            break;

        case PacketType.SUPERGOALSCORED:
            int        playerID = m.reader.ReadByte();
            GameObject player   = InputToAction.IDToInputToAction(playerID).gameObject;
            player.GetComponentInChildren <SuperAbility>().ready = true;
            playFX(player.GetComponent <Stats>().side);
            break;

        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }
 public void Notify(IncomingNetworkStreamMessage m)
 {
     switch (m.packetType)
     {
         case PacketType.SCENEJUMP:
             Assert.IsTrue(NetworkNode.node is Client);
             Application.LoadLevel(Tags.Scenes.select);
             break;
         default:
             Debug.LogError("Invalid Message Type");
             break;
     }
 }
    public void Notify(IncomingNetworkStreamMessage m)
    {
        Debug.Log(mode);
        Debug.Log(m.packetType);
        switch (m.packetType)
        {
            case PacketType.REGISTRATIONREQUEST:
                if (mode == NetworkMode.LOCALSERVER)
                {
                    int playerID = Stats.nextPlayerID();

                    node.BinaryWriter.Write(PacketType.REGISTRATIONREQUEST);
                    node.BinaryWriter.Write(false); //is a confirmation of local control, no
                    //node.BinaryWriter.Write(m.reader.ReadByte()); //local playerID
                    node.BinaryWriter.Write((byte)playerID);
                    node.Send(node.ConnectionIDs.Where((int id) => id != m.connectionID), node.AllCostChannel);

                    spawnPlayerRegistration(playerID, NetworkMode.REMOTESERVER);

                    node.BinaryWriter.Write(PacketType.REGISTRATIONREQUEST);
                    node.BinaryWriter.Write(true); //is a confirmation, yes, is locally controlled
                    node.BinaryWriter.Write((byte)playerID);
                    node.BinaryWriter.Write(m.reader.ReadByte()); //local playerID
                    node.Send(new int[] { m.connectionID }, node.AllCostChannel);
                }
                else // if running on the client
                {
                    bool localControl = m.reader.ReadBoolean();
                    int playerID = m.reader.ReadByte();
                    if (localControl)
                    {
                        int localID = m.reader.ReadByte();
                        spawnPlayerRegistration(localID, playerID, NetworkMode.LOCALCLIENT);
                    }
                    else
                    {
                        spawnPlayerRegistration(playerID, NetworkMode.REMOTECLIENT);
                    }
                }
                break;
            case PacketType.PLAYERREGISTER:
                {
                    int playerID = m.reader.ReadByte();
                    RegistrationState newState = (RegistrationState)(m.reader.ReadByte());
                    switch(newState)
                    {
                        case RegistrationState.REGISTERING:
                            spawnPlayerRegistration(playerID, NetworkMode.REMOTECLIENT);
                            if(mode == NetworkMode.LOCALSERVER)
                                Debug.LogError("Invalid Message Type");
                            break;
                        case RegistrationState.READY:
                            int characterID = m.reader.ReadByte();
                            if (mode == NetworkMode.LOCALSERVER)
                            {
                                node.BinaryWriter.Write(PacketType.PLAYERREGISTER);
                                node.BinaryWriter.Write((byte)(playerID));
                                node.BinaryWriter.Write((byte)(RegistrationState.READY));
                                node.BinaryWriter.Write((byte)(characterID));
                                node.Send(node.AllCostChannel);
                            }
                            setPlayerReady(playerID);

                            break;
                        default:
                            Debug.LogError("Invalid Message Type");
                            break;
                    }
                    break;
                }
            case PacketType.PLAYERDEREGISTER:
                {
                    int playerID = m.reader.ReadByte();
                    RegistrationState newState = (RegistrationState)(m.reader.ReadByte());
                    switch (newState)
                    {
                        case RegistrationState.REGISTERING:
                            if (mode == NetworkMode.LOCALSERVER)
                            {
                                node.BinaryWriter.Write(PacketType.PLAYERDEREGISTER);
                                node.BinaryWriter.Write((byte)(playerID));
                                node.BinaryWriter.Write((byte)(RegistrationState.REGISTERING));
                                node.Send(node.AllCostChannel);
                            }
                            setPlayerNotReady(playerID);
                            break;
                        case RegistrationState.NOTREGISTERED:
                            if (mode == NetworkMode.LOCALSERVER)
                            {
                                node.BinaryWriter.Write(PacketType.PLAYERDEREGISTER);
                                node.BinaryWriter.Write((byte)(playerID));
                                node.BinaryWriter.Write((byte)(RegistrationState.NOTREGISTERED));
                                node.Send(node.AllCostChannel);
                            }
                            despawnPlayerRegistrationPuck(playerID, true);
                            break;
                        default:
                            Debug.LogError("Invalid Message Type");
                            break;
                    }
                    break;
                }
            case PacketType.SCENEJUMP:
                {
                    Assert.IsTrue(startCountdown != null);
                    startGame();
                    break;
                }
            default:
                Debug.LogError("Invalid Message Type");
                break;
        }
    }
    public void Notify(IncomingNetworkStreamMessage m)
    {
        Debug.Log(mode);
        Debug.Log(m.packetType);
        switch (m.packetType)
        {
        case PacketType.REGISTRATIONREQUEST:
            if (mode == NetworkMode.LOCALSERVER)
            {
                int playerID = Stats.nextPlayerID();

                node.BinaryWriter.Write(PacketType.REGISTRATIONREQUEST);
                node.BinaryWriter.Write(false);     //is a confirmation of local control, no
                //node.BinaryWriter.Write(m.reader.ReadByte()); //local playerID
                node.BinaryWriter.Write((byte)playerID);
                node.Send(node.ConnectionIDs.Where((int id) => id != m.connectionID), node.AllCostChannel);

                spawnPlayerRegistration(playerID, NetworkMode.REMOTESERVER);

                node.BinaryWriter.Write(PacketType.REGISTRATIONREQUEST);
                node.BinaryWriter.Write(true);                //is a confirmation, yes, is locally controlled
                node.BinaryWriter.Write((byte)playerID);
                node.BinaryWriter.Write(m.reader.ReadByte()); //local playerID
                node.Send(new int[] { m.connectionID }, node.AllCostChannel);
            }
            else     // if running on the client
            {
                bool localControl = m.reader.ReadBoolean();
                int  playerID     = m.reader.ReadByte();
                if (localControl)
                {
                    int localID = m.reader.ReadByte();
                    spawnPlayerRegistration(localID, playerID, NetworkMode.LOCALCLIENT);
                }
                else
                {
                    spawnPlayerRegistration(playerID, NetworkMode.REMOTECLIENT);
                }
            }
            break;

        case PacketType.PLAYERREGISTER:
        {
            int playerID = m.reader.ReadByte();
            RegistrationState newState = (RegistrationState)(m.reader.ReadByte());
            switch (newState)
            {
            case RegistrationState.REGISTERING:
                spawnPlayerRegistration(playerID, NetworkMode.REMOTECLIENT);
                if (mode == NetworkMode.LOCALSERVER)
                {
                    Debug.LogError("Invalid Message Type");
                }
                break;

            case RegistrationState.READY:
                int characterID = m.reader.ReadByte();
                if (mode == NetworkMode.LOCALSERVER)
                {
                    node.BinaryWriter.Write(PacketType.PLAYERREGISTER);
                    node.BinaryWriter.Write((byte)(playerID));
                    node.BinaryWriter.Write((byte)(RegistrationState.READY));
                    node.BinaryWriter.Write((byte)(characterID));
                    node.Send(node.AllCostChannel);
                }
                setPlayerReady(playerID);

                break;

            default:
                Debug.LogError("Invalid Message Type");
                break;
            }
            break;
        }

        case PacketType.PLAYERDEREGISTER:
        {
            int playerID = m.reader.ReadByte();
            RegistrationState newState = (RegistrationState)(m.reader.ReadByte());
            switch (newState)
            {
            case RegistrationState.REGISTERING:
                if (mode == NetworkMode.LOCALSERVER)
                {
                    node.BinaryWriter.Write(PacketType.PLAYERDEREGISTER);
                    node.BinaryWriter.Write((byte)(playerID));
                    node.BinaryWriter.Write((byte)(RegistrationState.REGISTERING));
                    node.Send(node.AllCostChannel);
                }
                setPlayerNotReady(playerID);
                break;

            case RegistrationState.NOTREGISTERED:
                if (mode == NetworkMode.LOCALSERVER)
                {
                    node.BinaryWriter.Write(PacketType.PLAYERDEREGISTER);
                    node.BinaryWriter.Write((byte)(playerID));
                    node.BinaryWriter.Write((byte)(RegistrationState.NOTREGISTERED));
                    node.Send(node.AllCostChannel);
                }
                despawnPlayerRegistrationPuck(playerID, true);
                break;

            default:
                Debug.LogError("Invalid Message Type");
                break;
            }
            break;
        }

        case PacketType.SCENEJUMP:
        {
            Assert.IsTrue(startCountdown != null);
            startGame();
            break;
        }

        default:
            Debug.LogError("Invalid Message Type");
            break;
        }
    }