Serious-Engine/Sources/Engine/Network/PlayerTarget.h

75 lines
2.6 KiB
C
Raw Normal View History

2016-03-12 01:20:51 +01:00
/* 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. */
2016-03-11 14:57:17 +01:00
#ifndef SE_INCL_PLAYERTARGET_H
#define SE_INCL_PLAYERTARGET_H
#ifdef PRAGMA_ONCE
#pragma once
#endif
#include <Engine/Base/Synchronization.h>
#include <Engine/Network/NetworkMessage.h>
#include <Engine/Network/ActionBuffer.h>
/*
* Player target, located in each session state; receiving actions
*/
class CPlayerTarget {
public:
BOOL plt_bActive; // set if this player exists
CPlayerEntity *plt_penPlayerEntity; // player entity used by this player
CTCriticalSection plt_csAction; // access to player action
CPlayerAction plt_paPreLastAction;
CPlayerAction plt_paLastAction; // last action received (used for delta-unpacking)
CActionBuffer plt_abPrediction; // buffer of sent actions (used for prediction)
FLOAT3D plt_vPredictorPos; // last position of predictor - for range calculations
public:
/* Default constructor. */
CPlayerTarget(void);
/* Destructor. */
~CPlayerTarget(void);
/* Activate player target for a new player. */
void Activate(void);
/* Deactivate player target for removed player. */
void Deactivate(void);
/* Check if this player is active. */
BOOL IsActive(void) { return plt_bActive; };
/* Attach an entity to this player. */
void AttachEntity(CPlayerEntity *penClientEntity);
/* Apply action packet to current actions. */
void ApplyActionPacket(const CPlayerAction &paDelta);
/* Remember prediction action. */
void PrebufferActionPacket(const CPlayerAction &paPrediction);
// flush prediction actions that were already processed
void FlushProcessedPredictions(void);
// get maximum number of actions that can be predicted
INDEX GetNumberOfPredictions(void);
/* Apply predicted action with given index. */
void ApplyPredictedAction(INDEX iAction, FLOAT fFactor);
/* Read player information from a stream. */
void Read_t(CTStream *pstr); // throw char *
/* Write player information into a stream. */
void Write_t(CTStream *pstr); // throw char *
};
#endif /* include-once check. */