コード例 #1
0
        private void ClientActivity(List <GameObject> gameObjects)
        {
            //SEND INPUT
            if (mAgent.IsPlayerConnected)
            {
                if (PlayerList.Count > PlayerID)
                {
                    if (!(PlayerList[PlayerID].keycount == PlayerList[PlayerID].oldkeycount) || LastTick + ticktime < TimeManager.CurrentTime)
                    {
                        mAgent.WriteMessage(PlayerID);
                        mAgent.WriteMessage((byte)PlayerList[PlayerID].keycount);
                        if ((PlayerList[PlayerID].keycount & 64) == 64 || (PlayerList[PlayerID].keycount & 32) == 32 || (PlayerList[PlayerID].keycount & 128) == 128)
                        {
                            mAgent.WriteMessage(PlayerList[PlayerID].MouseX);
                            mAgent.WriteMessage(PlayerList[PlayerID].MouseY);
                        }
                        mAgent.SendMessage(mAgent.Connections[0]);
                    }
                    if (LastTick + ticktime < TimeManager.CurrentTime)
                    {
                        LastTick = TimeManager.CurrentTime;
                    }
                }
            }

            //RECEIVE MESSAGE AND UPDATE POSITIONS
            List <NetIncomingMessage> incomingMessages;

            incomingMessages = mAgent.CheckForMessages();
            foreach (NetIncomingMessage incomingMessage in incomingMessages)
            {
                if (incomingMessage.MessageType == NetIncomingMessageType.Data)
                {
                    // server sent a data message
                    byte type = incomingMessage.ReadByte();
                    for (byte i = 0; i < PlayerList.Count; i++)
                    {
                        if (type == i && i != PlayerID)
                        {
                            PlayerList[i].keycount = incomingMessage.ReadByte();
                            if ((PlayerList[i].keycount & 64) == 64 || (PlayerList[i].keycount & 32) == 32 || (PlayerList[i].keycount & 128) == 128)
                            {
                                PlayerList[i].MouseX = incomingMessage.ReadFloat();
                                PlayerList[i].MouseY = incomingMessage.ReadFloat();
                            }
                        }
                    }
                    switch (type)
                    {
                    case (byte)MessageType.Action:
                        switch (incomingMessage.ReadByte())
                        {
                        case (byte)ActionType.ServerRestart:
                            Playercount = incomingMessage.ReadByte();
                            StartNewRound(gameObjects);
                            break;
                        }
                        break;

                    case (byte)MessageType.Spellpicks:
                        Player pl = PlayerList[incomingMessage.ReadByte()];
                        pl.PickedSpell[0] = incomingMessage.ReadByte();
                        pl.PickedSpell[1] = incomingMessage.ReadByte();
                        pl.PickedSpell[2] = incomingMessage.ReadByte();
                        pl.Playerskin     = incomingMessage.ReadByte();
                        break;

                    case (byte)MessageType.Tick:
                        ReadActor(incomingMessage);
                        break;
                    //case (byte)MessageType.Scores:
                    //    ScoreHudInstance.Score1 = incomingMessage.ReadByte();
                    //    ScoreHudInstance.Score2 = incomingMessage.ReadByte();
                    //    break;

                    //case (byte)MessageType.Puck:
                    //    PuckInstance.X = incomingMessage.ReadFloat();
                    //    PuckInstance.Y = incomingMessage.ReadFloat();
                    //    break;

                    case (byte)MessageType.PlayerID:
                        PlayerID = incomingMessage.ReadByte();
                        break;
                    }
                }
            }
        }