コード例 #1
0
ファイル: GameData.cs プロジェクト: icefortress/OceanMars
        /// <summary>
        /// Create a new piece of GameData from a byte array representation.
        /// </summary>
        /// <param name="byteArray">A byte array to create a GameData packet from.</param>
        public GameData(byte[] byteArray)
        {
            using (MemoryStream memoryStream = new MemoryStream(byteArray))
            {
                using (BinaryReader binaryReader = new BinaryReader(memoryStream))
                {
                    Type = (GameDataType)binaryReader.ReadByte();
                    PlayerID = (int)binaryReader.ReadByte();
                    EventDetail = (int)binaryReader.ReadByte();

                    byte[] subData  = new byte[byteArray.Length - 3];
                    Array.ConstrainedCopy(byteArray, 3, subData, 0, byteArray.Length - 3);

                    if (Type == GameDataType.Movement)
                    {
                        TransformData = new TransformData(subData);
                    }
                    else if (Type == GameDataType.NewEntity)
                    {
                        EntityData = new EntityData(subData);
                    }
                    else if (Type == GameDataType.EntityStateChange)
                    {
                        EntityStateData = new EntityStateData(subData);
                    }
                }
            }

            return;
        }
コード例 #2
0
ファイル: GameBase.cs プロジェクト: icefortress/OceanMars
        /// <summary>
        /// Send out state change information
        /// </summary>
        /// <param name="entity">The entity to update.</param>
        public virtual void OnEntityStateChange(Entity entity)
        {
            EntityStateData stateData;
            // Invoke class-specific constructors, to avoid sending extra information
            if (entity is MobileEntity)
            {
                stateData = new EntityStateData((MobileEntity)entity);
            }
            else
            {
                stateData = new EntityStateData(entity);
            }

            GameData gameData = new GameData(GameData.GameDataType.EntityStateChange, LocalPlayer.PlayerID, 0);
            gameData.EventDetail = entity.id;
            gameData.EntityStateData = stateData;

            lock (gameStatesToSend)
            {
                gameStatesToSend.Add(gameData);
            }
            return;
        }