internal UpdateOutgoingMessage(MatchPlayer matchPlayer)
        {
            UpdateStatus status = matchPlayer.ToUpdate;

            ServerMessage message = new ServerMessage();

            message.WriteUShort(UpdateOutgoingMessage.PACKET_HEADER);
            message.WriteUInt(matchPlayer.SocketId);
            message.WriteUInt((uint)status);
            if (status.HasFlag(UpdateStatus.X))
            {
                message.WriteDouble(matchPlayer.X);
            }

            if (status.HasFlag(UpdateStatus.Y))
            {
                message.WriteDouble(matchPlayer.Y);
            }

            if (status.HasFlag(UpdateStatus.VelX))
            {
                message.WriteFloat(matchPlayer.VelX);
            }

            if (status.HasFlag(UpdateStatus.VelY))
            {
                message.WriteFloat(matchPlayer.VelY);
            }

            if (status.HasFlag(UpdateStatus.ScaleX))
            {
                message.WriteByte(matchPlayer.ScaleX);
            }

            if (status.HasFlag(UpdateStatus.Space))
            {
                message.WriteBool(matchPlayer.Space);
            }

            if (status.HasFlag(UpdateStatus.Left))
            {
                message.WriteBool(matchPlayer.Left);
            }

            if (status.HasFlag(UpdateStatus.Right))
            {
                message.WriteBool(matchPlayer.Right);
            }

            if (status.HasFlag(UpdateStatus.Down))
            {
                message.WriteBool(matchPlayer.Down);
            }

            if (status.HasFlag(UpdateStatus.Up))
            {
                message.WriteBool(matchPlayer.Up);
            }

            if (status.HasFlag(UpdateStatus.Speed))
            {
                message.WriteInt(matchPlayer.Speed);
            }

            if (status.HasFlag(UpdateStatus.Accel))
            {
                message.WriteInt(matchPlayer.Accel);
            }

            if (status.HasFlag(UpdateStatus.Jump))
            {
                message.WriteInt(matchPlayer.Jump);
            }

            if (status.HasFlag(UpdateStatus.Rot))
            {
                message.WriteInt((int)matchPlayer.Rot);
            }

            if (status.HasFlag(UpdateStatus.Item))
            {
                message.WriteString(matchPlayer.Item);
            }

            if (status.HasFlag(UpdateStatus.Life))
            {
                message.WriteUInt(matchPlayer.Life);
            }

            if (status.HasFlag(UpdateStatus.Hurt))
            {
                message.WriteBool(matchPlayer.Hurt);
            }

            if (status.HasFlag(UpdateStatus.Coins))
            {
                message.WriteUInt(matchPlayer.Coins);
            }

            this.Bytes = message.GetBytes();
        }
    public UpdatePacketIncomingPacket Parse(ref PacketReader reader)
    {
        UpdateStatus status = (UpdateStatus)reader.ReadUInt32();

        return(new UpdatePacketIncomingPacket(
                   status: status,

                   x: status.HasFlag(UpdateStatus.X) ? reader.ReadDouble() : 0,
                   y: status.HasFlag(UpdateStatus.Y) ? reader.ReadDouble() : 0,

                   velX: status.HasFlag(UpdateStatus.VelX) ? reader.ReadSingle() : 0,
                   velY: status.HasFlag(UpdateStatus.VelY) ? reader.ReadSingle() : 0,

                   scaleX: status.HasFlag(UpdateStatus.ScaleX) ? reader.ReadByte() : (byte)0,

                   space: status.HasFlag(UpdateStatus.Space) ? reader.ReadBool() : false,

                   left: status.HasFlag(UpdateStatus.Left) ? reader.ReadBool() : false,
                   right: status.HasFlag(UpdateStatus.Right) ? reader.ReadBool() : false,

                   down: status.HasFlag(UpdateStatus.Down) ? reader.ReadBool() : false,
                   up: status.HasFlag(UpdateStatus.Up) ? reader.ReadBool() : false,

                   speed: status.HasFlag(UpdateStatus.Speed) ? reader.ReadInt32() : 0,
                   accel: status.HasFlag(UpdateStatus.Accel) ? reader.ReadInt32() : 0,
                   jump: status.HasFlag(UpdateStatus.Jump) ? reader.ReadInt32() : 0,

                   rotation: status.HasFlag(UpdateStatus.Rot) ? reader.ReadInt32() : 0,

                   item: status.HasFlag(UpdateStatus.Item) ? reader.ReadFixedUInt16String() : null,

                   life: status.HasFlag(UpdateStatus.Life) ? reader.ReadUInt32() : 0,
                   hurt: status.HasFlag(UpdateStatus.Hurt) ? reader.ReadBool() : false,

                   coins: status.HasFlag(UpdateStatus.Coins) ? reader.ReadUInt32() : 0,
                   team: status.HasFlag(UpdateStatus.Team) ? reader.ReadFixedUInt16String() : null
                   ));
    }
Пример #3
0
        public void Handle(ClientSession session, IncomingMessage message)
        {
            MultiplayerMatch match = session.MultiplayerMatchSession?.Match;

            if (match != null)
            {
                MatchPlayer matchPlayer = session.MultiplayerMatchSession.MatchPlayer;

                UpdateStatus status = (UpdateStatus)message.ReadUInt();
                if (status.HasFlag(UpdateStatus.X))
                {
                    matchPlayer.X = message.ReadDouble();
                }

                if (status.HasFlag(UpdateStatus.Y))
                {
                    matchPlayer.Y = message.ReadDouble();
                }

                if (status.HasFlag(UpdateStatus.VelX))
                {
                    matchPlayer.VelX = message.ReadFloat();
                }

                if (status.HasFlag(UpdateStatus.VelY))
                {
                    matchPlayer.VelY = message.ReadFloat();
                }

                if (status.HasFlag(UpdateStatus.ScaleX))
                {
                    matchPlayer.ScaleX = message.ReadByte();
                }

                if (status.HasFlag(UpdateStatus.Space))
                {
                    matchPlayer.Space = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Left))
                {
                    matchPlayer.Left = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Right))
                {
                    matchPlayer.Right = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Down))
                {
                    matchPlayer.Down = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Up))
                {
                    matchPlayer.Up = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Speed))
                {
                    matchPlayer.Speed = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Accel))
                {
                    matchPlayer.Accel = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Jump))
                {
                    matchPlayer.Jump = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Rot))
                {
                    matchPlayer.Rot = message.ReadInt();
                }

                if (status.HasFlag(UpdateStatus.Item))
                {
                    matchPlayer.Item = message.ReadString();
                }

                if (status.HasFlag(UpdateStatus.Life))
                {
                    matchPlayer.Life = message.ReadUInt();
                }

                if (status.HasFlag(UpdateStatus.Hurt))
                {
                    matchPlayer.Hurt = message.ReadBool();
                }

                if (status.HasFlag(UpdateStatus.Coins))
                {
                    matchPlayer.Coins = message.ReadUInt();
                }

                match.SendUpdateIfRequired(session, matchPlayer);
            }
        }