Example #1
0
    public void AttackButtonPressed(InputAction.CallbackContext context)
    {
        Player closestPlayer = null;

        for (int i = 0; i < GameManager.Instance.m_Players.Count; i++)
        {
            if ((Vector2.Distance(m_PlayerInfo.position, GameManager.Instance.m_Players[i].transform.position) <= m_AttackRange) && GameManager.Instance.m_Players[i] != this)
            {
                closestPlayer = GameManager.Instance.m_Players[i];
            }
        }
        Debug.Log(closestPlayer);
        if (closestPlayer != null)
        {
            if (closestPlayer.m_PlayerInfo.collidable && m_PlayerInfo.collidable)
            {
                StartCoroutine(Attack(m_AttackDuration));
                Debug.Log("attack happen)");
                if (m_AttackStaminaCost <= m_PlayerInfo.stamina)
                {
                    m_PlayerInfo.stamina -= m_AttackStaminaCost;
                    PlayerAttackedPlayerMessage msg = new PlayerAttackedPlayerMessage(closestPlayer.GetUsername(), GetUsername());
                    if (VOnlinePlayer.Instance == null)
                    {
                        VHostBehavior.Instance.SendMessageToAllPlayers(msg, Valve.Sockets.SendType.Reliable);
                    }
                    else
                    {
                        VOnlinePlayer.Instance.SendMessage(msg, Valve.Sockets.SendType.Reliable);
                    }
                }
            }
        }
    }
    public static Message decipherMessage(byte[] msgBytes)
    {
        if (BitConverter.IsLittleEndian)
        {
            //Array.Reverse(msgBytes);
        }
        Message msg;

        byte[] eventTypeBytes = new byte[2];
        Buffer.BlockCopy(msgBytes, 0, eventTypeBytes, 0, 2);

        ushort       sho       = BitConverter.ToUInt16(eventTypeBytes, 0);
        NetworkEvent eventType = (NetworkEvent)sho;

        switch (eventType)
        {
        case NetworkEvent.StartGame:
            msg = new GameStartMessage(msgBytes);
            break;

        case NetworkEvent.PlayerUpdateInfo:
            msg = new PlayerUpdateMessage(msgBytes);
            break;

        case NetworkEvent.PlayerConnected:
            msg = new PlayerConnectedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerDisconnected:
            msg = new PlayerDisconnectedMessage(msgBytes);
            break;

        case NetworkEvent.ObstacleGenerated:
            msg = new ObstacleGeneratedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerFellBehind:
            msg = new PlayerFellBehindMessage(msgBytes);
            break;

        case NetworkEvent.ObstacleModified:
            msg = new ObstacleModifiedMessage(msgBytes);
            break;

        case NetworkEvent.PlayerWonRace:
            msg = new PlayerWonMessage(msgBytes);
            break;

        case NetworkEvent.PlayerAttackPlayer:
            msg = new PlayerAttackedPlayerMessage(msgBytes);
            break;

        default:
            throw new Exception("oops " + eventType);
        }
        return(msg);
    }
Example #3
0
    public override void HandleNetworkMessage(Message msg)
    {
        base.HandleNetworkMessage(msg);
        if (msg is PlayerConnectedMessage) //player sends this once connected to send name
        {
            PlayerConnectedMessage nMsg = msg as PlayerConnectedMessage;
            if (GameManager.Instance.GetPlayer(nMsg.playerID) != null) //player name already used, prepare to kick
            {
                m_ConnectionToAdd = new KeyValuePair <uint, string>(m_NetworkMessageConnectionSource, "");
            }
            else
            {
                m_ConnectionToAdd = new KeyValuePair <uint, string>(m_NetworkMessageConnectionSource, nMsg.playerID);
                //Send the player connected info to everyone
                ClientPlayer cP = GameManager.Instance.ClientPlayer;
                if (cP != null)
                {
                    SendMessageToAllExceptPlayer(nMsg.playerID, new PlayerConnectedMessage(nMsg.playerID), SendType.Reliable);
                }
                //send current players to the connected player
                List <Player> players = GameManager.Instance.m_Players;
                for (int i = 0; i < players.Count; i++)
                {
                    if (players[i] is ClientPlayer)
                    {
                        m_Server.SendMessageToConnection(m_NetworkMessageConnectionSource, new PlayerConnectedMessage(GameManager.Instance.m_PlayerUsername).toBuffer(), SendType.Reliable);
                    }
                    else
                    {
                        m_Server.SendMessageToConnection(m_NetworkMessageConnectionSource, new PlayerConnectedMessage((players[i] as NetworkedPlayer).playerID).toBuffer(), SendType.Reliable);
                    }
                }
                GameManager.Instance.AddPlayer(nMsg.playerID);
                Invoke("RealignPlayersAndSend", 0.1f); //need a delay for them to add the player
            }
        }
        if (msg is PlayerUpdateMessage)
        {
            PlayerUpdateMessage nMsg = msg as PlayerUpdateMessage;
            GameManager.Instance.UpdatePlayerInformation(ref nMsg.info, nMsg.playerID);
            SendMessageToAllExceptPlayer(nMsg.playerID, nMsg);
        }
        if (msg is ObstacleModifiedMessage)
        {
            Debug.Log("Obstacle Modified Message");
            ObstacleModifiedMessage nMsg = msg as ObstacleModifiedMessage;
            SendMessageToAllExceptPlayer(nMsg.playerID, nMsg, SendType.Reliable);
            (GameManager.Instance.m_AllObstacles[(int)nMsg.obstacleID] as IObstacle).InteractedWith(GameManager.Instance.GetPlayer(nMsg.playerID));
        }

        if (msg is PlayerAttackedPlayerMessage)
        {
            PlayerAttackedPlayerMessage nMsg = msg as PlayerAttackedPlayerMessage;
            SendMessageToAllExceptPlayer(nMsg.attackeePlayerID, nMsg, SendType.Reliable);
            GameManager.Instance.PlayerAttacked(nMsg.attackedPlayerID);
        }
    }
Example #4
0
    public override void Start()
    {
        m_Instance = this;
        m_Address.SetAddress("::0", m_Port);
        m_ListenSocket = m_Server.CreateListenSocket(ref m_Address);
        SetupStatusDelegate();
        PlayerAttackedPlayerMessage msg = new PlayerAttackedPlayerMessage("help", "me");
        Message nMsg = Message.decipherMessage(msg.toBuffer());

        base.Start();
    }
Example #5
0
 public override void HandleNetworkMessage(Message msg)
 {
     base.HandleNetworkMessage(msg);
     if (msg is GameStartMessage)
     {
         GameStartMessage nMsg  = msg as GameStartMessage;
         ConnectionStatus cStat = new ConnectionStatus();
         m_Server.GetQuickConnectionStatus(m_Connection, cStat);
         uniformTimeOffset = ((nMsg.uniformTime.Ticks / TimeSpan.TicksPerSecond) + (((float)cStat.ping) * 0.01f)) - (DateTime.UtcNow.Ticks / TimeSpan.TicksPerSecond);
         GameManager.Instance.StartGameInSeconds(nMsg.timeAfterToSpawn + uniformTimeOffset);
     }
     if (msg is PlayerConnectedMessage)
     {
         PlayerConnectedMessage nMsg = msg as PlayerConnectedMessage;
         NetworkedPlayer        p    = GameManager.Instance.AddPlayer(nMsg.playerID);
         p.playerID = nMsg.playerID;
     }
     else if (msg is PlayerDisconnectedMessage)
     {
         PlayerDisconnectedMessage nMsg = msg as PlayerDisconnectedMessage;
         GameManager.Instance.RemovePlayer(nMsg.playerID);
     }
     else if (msg is PlayerUpdateMessage)
     {
         PlayerUpdateMessage nMsg = msg as PlayerUpdateMessage;
         GameManager.Instance.UpdatePlayerInformation(ref nMsg.info, nMsg.playerID);
     }
     else if (msg is ObstacleGeneratedMessage)
     {
         ObstacleGeneratedMessage nMsg = msg as ObstacleGeneratedMessage;
         TileManager.Instance.SpawnObstacle(nMsg.itemID, nMsg.itemPos, nMsg.itemType);
     }
     else if (msg is ObstacleModifiedMessage)
     {
         ObstacleModifiedMessage nMsg = msg as ObstacleModifiedMessage;
         (GameManager.Instance.m_AllObstacles[(int)nMsg.obstacleID] as IObstacle).InteractedWith(GameManager.Instance.GetPlayer(nMsg.playerID));
     }
     else if (msg is PlayerFellBehindMessage)
     {
         PlayerFellBehindMessage nMsg = msg as PlayerFellBehindMessage;
         GameManager.Instance.PlayerFellBehind(nMsg.playerID);
     }
     else if (msg is PlayerWonMessage)
     {
         PlayerWonMessage nMsg = msg as PlayerWonMessage;
         GameManager.Instance.PlayerHasWonGame(GameManager.Instance.GetPlayer(nMsg.playerID));
     }
     else if (msg is PlayerAttackedPlayerMessage)
     {
         PlayerAttackedPlayerMessage nMsg = msg as PlayerAttackedPlayerMessage;
         GameManager.Instance.PlayerAttacked(nMsg.attackedPlayerID);
     }
 }
Example #6
0
    public override void Start()
    {
        m_Instance = this;
        m_Status   = (info, context) =>
        {
            switch (info.connectionInfo.state)
            {
            case ConnectionState.None:
                print("no connection exist, reset?");
                m_Connection         = uint.MaxValue;
                m_ConnectionApproved = false;
                break;

            case ConnectionState.Connected:
                Debug.Log("I, the Client, connected to server - ID: " + info.connection);
                m_Connection         = info.connection;
                m_ConnectionApproved = true;
                m_Server.SendMessageToConnection(m_Connection, new PlayerConnectedMessage(GameManager.Instance.m_PlayerUsername).toBuffer(), SendType.Reliable);
                break;

            case ConnectionState.ClosedByPeer:
                m_Server.CloseConnection(m_Connection);
                m_Connection = uint.MaxValue;
                Debug.Log("I, the Client, disconnected from server");
                break;

            case ConnectionState.ProblemDetectedLocally:
                m_Server.CloseConnection(m_Connection);
                m_Connection = uint.MaxValue;
                Debug.Log("I, the Client, unable to connect");
                break;
            }
        };

        PlayerAttackedPlayerMessage msg = new PlayerAttackedPlayerMessage("bunny", "rabbit");
        Message nMsg = Message.decipherMessage(msg.toBuffer());

        base.Start();
    }