/* Copyright (c) 2002-2012 Croteam Ltd. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SE_INCL_PLAYERBUFFER_H #define SE_INCL_PLAYERBUFFER_H #ifdef PRAGMA_ONCE #pragma once #endif #include #include #include /* * Player buffer, located on server; buffers action messages */ class ENGINE_API CPlayerBuffer { public: BOOL plb_Active; // set if this player exists INDEX plb_Index; INDEX plb_iClient; // client that controls this player INDEX plb_iPing; // ping in milliseconds CPlayerAction plb_paLastAction; // last action sent (used for delta-packing) CActionBuffer plb_abReceived; // buffer of actions that were received, but not sent yet CPlayerCharacter plb_pcCharacter; // this player's character data public: /* Default constructor. */ CPlayerBuffer(void); /* Destructor. */ ~CPlayerBuffer(void); /* Activate player buffer for a new player. */ void Activate(INDEX iClient); /* Deactivate player data for removed player. */ void Deactivate(void); /* Check if this player is active. */ BOOL IsActive(void) { return plb_Active; }; /* Receive action packet from player source. */ void ReceiveActionPacket(CNetworkMessage *pnm, INDEX iMaxBuffer); /* Create action packet for player target from oldest buffered action. */ // (prepares lag info for given client number) void CreateActionPacket(CNetworkMessage *pnm, INDEX iClient); /* Advance action buffer by one tick by removing oldest action. */ void AdvanceActionBuffer(void); }; #endif /* include-once check. */