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); } } }