Exemple #1
0
        public static void ParsePlayerstate(frame_t oldframe, frame_t newframe)
        {
            Int32          flags;
            player_state_t state;
            Int32          i;
            Int32          statbits;

            state = newframe.playerstate;
            if (oldframe != null)
            {
                state.Set(oldframe.playerstate);
            }
            else
            {
                state.Clear();
            }
            flags = MSG.ReadShort(Globals.net_message);
            if ((flags & Defines.PS_M_TYPE) != 0)
            {
                state.pmove.pm_type = MSG.ReadByte(Globals.net_message);
            }
            if ((flags & Defines.PS_M_ORIGIN) != 0)
            {
                state.pmove.origin[0] = MSG.ReadShort(Globals.net_message);
                state.pmove.origin[1] = MSG.ReadShort(Globals.net_message);
                state.pmove.origin[2] = MSG.ReadShort(Globals.net_message);
            }

            if ((flags & Defines.PS_M_VELOCITY) != 0)
            {
                state.pmove.velocity[0] = MSG.ReadShort(Globals.net_message);
                state.pmove.velocity[1] = MSG.ReadShort(Globals.net_message);
                state.pmove.velocity[2] = MSG.ReadShort(Globals.net_message);
            }

            if ((flags & Defines.PS_M_TIME) != 0)
            {
                state.pmove.pm_time = ( Byte )MSG.ReadByte(Globals.net_message);
            }

            if ((flags & Defines.PS_M_FLAGS) != 0)
            {
                state.pmove.pm_flags = ( Byte )MSG.ReadByte(Globals.net_message);
            }
            if ((flags & Defines.PS_M_GRAVITY) != 0)
            {
                state.pmove.gravity = MSG.ReadShort(Globals.net_message);
            }
            if ((flags & Defines.PS_M_DELTA_ANGLES) != 0)
            {
                state.pmove.delta_angles[0] = MSG.ReadShort(Globals.net_message);
                state.pmove.delta_angles[1] = MSG.ReadShort(Globals.net_message);
                state.pmove.delta_angles[2] = MSG.ReadShort(Globals.net_message);
            }

            if (Globals.cl.attractloop)
            {
                state.pmove.pm_type = Defines.PM_FREEZE;
            }
            if ((flags & Defines.PS_VIEWOFFSET) != 0)
            {
                state.viewoffset[0] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.viewoffset[1] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.viewoffset[2] = MSG.ReadChar(Globals.net_message) * 0.25F;
            }

            if ((flags & Defines.PS_VIEWANGLES) != 0)
            {
                state.viewangles[0] = MSG.ReadAngle16(Globals.net_message);
                state.viewangles[1] = MSG.ReadAngle16(Globals.net_message);
                state.viewangles[2] = MSG.ReadAngle16(Globals.net_message);
            }

            if ((flags & Defines.PS_KICKANGLES) != 0)
            {
                state.kick_angles[0] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.kick_angles[1] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.kick_angles[2] = MSG.ReadChar(Globals.net_message) * 0.25F;
            }

            if ((flags & Defines.PS_WEAPONINDEX) != 0)
            {
                state.gunindex = MSG.ReadByte(Globals.net_message);
            }

            if ((flags & Defines.PS_WEAPONFRAME) != 0)
            {
                state.gunframe     = MSG.ReadByte(Globals.net_message);
                state.gunoffset[0] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.gunoffset[1] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.gunoffset[2] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.gunangles[0] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.gunangles[1] = MSG.ReadChar(Globals.net_message) * 0.25F;
                state.gunangles[2] = MSG.ReadChar(Globals.net_message) * 0.25F;
            }

            if ((flags & Defines.PS_BLEND) != 0)
            {
                state.blend[0] = MSG.ReadByte(Globals.net_message) / 255F;
                state.blend[1] = MSG.ReadByte(Globals.net_message) / 255F;
                state.blend[2] = MSG.ReadByte(Globals.net_message) / 255F;
                state.blend[3] = MSG.ReadByte(Globals.net_message) / 255F;
            }

            if ((flags & Defines.PS_FOV) != 0)
            {
                state.fov = MSG.ReadByte(Globals.net_message);
            }
            if ((flags & Defines.PS_RDFLAGS) != 0)
            {
                state.rdflags = MSG.ReadByte(Globals.net_message);
            }
            statbits = MSG.ReadLong(Globals.net_message);
            for (i = 0; i < Defines.MAX_STATS; i++)
            {
                if ((statbits & (1 << i)) != 0)
                {
                    state.stats[i] = MSG.ReadShort(Globals.net_message);
                }
            }
        }