ddnet/src/game/server/entity.h

157 lines
3.6 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#ifndef GAME_SERVER_ENTITY_H
#define GAME_SERVER_ENTITY_H
2010-05-29 07:25:38 +00:00
#include <base/vmath.h>
#include "alloc.h"
#include "gamecontext.h"
#include "gameworld.h"
/*
Class: Entity
Basic entity class.
*/
2010-05-29 07:25:38 +00:00
class CEntity
{
MACRO_ALLOC_HEAP()
private:
friend class CGameWorld; // entity list handling
2010-05-29 07:25:38 +00:00
CEntity *m_pPrevTypeEntity;
CEntity *m_pNextTypeEntity;
/* Identity */
2013-11-13 12:25:26 +00:00
class CGameWorld *m_pGameWorld;
int m_ID;
int m_ObjType;
/*
Variable: m_ProximityRadius
Contains the physical size of the entity.
*/
float m_ProximityRadius;
2021-05-22 18:02:00 +00:00
protected:
/* State */
bool m_MarkedForDestroy;
public: // TODO: Maybe make protected
/*
Variable: m_Pos
Contains the current posititon of the entity.
*/
vec2 m_Pos;
/* Getters */
int GetID() const { return m_ID; }
/* Constructor */
CEntity(CGameWorld *pGameWorld, int Objtype, vec2 Pos = vec2(0, 0), int ProximityRadius = 0);
/* Destructor */
2010-05-29 07:25:38 +00:00
virtual ~CEntity();
/* Objects */
2010-05-29 07:25:38 +00:00
class CGameWorld *GameWorld() { return m_pGameWorld; }
class CConfig *Config() { return m_pGameWorld->Config(); }
class CGameContext *GameServer() { return m_pGameWorld->GameServer(); }
class IServer *Server() { return m_pGameWorld->Server(); }
/* Getters */
2010-05-29 07:25:38 +00:00
CEntity *TypeNext() { return m_pNextTypeEntity; }
CEntity *TypePrev() { return m_pPrevTypeEntity; }
const vec2 &GetPos() const { return m_Pos; }
float GetProximityRadius() const { return m_ProximityRadius; }
/* Other functions */
/*
Function: Destroy
2018-07-10 09:29:02 +00:00
Destroys the entity.
*/
2010-05-29 07:25:38 +00:00
virtual void Destroy() { delete this; }
/*
Function: Reset
Called when the game resets the map. Puts the entity
back to its starting state or perhaps destroys it.
*/
2010-05-29 07:25:38 +00:00
virtual void Reset() {}
/*
Function: Tick
Called to progress the entity to the next tick. Updates
and moves the entity to its new state and position.
*/
2010-05-29 07:25:38 +00:00
virtual void Tick() {}
/*
Function: TickDefered
Called after all entities Tick() function has been called.
*/
2010-05-29 07:25:38 +00:00
virtual void TickDefered() {}
2012-01-09 23:49:31 +00:00
/*
Function: TickPaused
Called when the game is paused, to freeze the state and position of the entity.
*/
virtual void TickPaused() {}
/*
Function: Snap
Called when a new snapshot is being generated for a specific
client.
Arguments:
SnappingClient - ID of the client which snapshot is
being generated. Could be -1 to create a complete
snapshot of everything in the game for demo
recording.
*/
2010-05-29 07:25:38 +00:00
virtual void Snap(int SnappingClient) {}
/*
Function: SwapClients
Called when two players have swapped their client ids.
Arguments:
Client1 - First client ID
Client2 - Second client ID
*/
virtual void SwapClients(int Client1, int Client2) {}
/*
Function: NetworkClipped
Performs a series of test to see if a client can see the
entity.
Arguments:
SnappingClient - ID of the client which snapshot is
being generated. Could be -1 to create a complete
snapshot of everything in the game for demo
recording.
Returns:
True if the entity doesn't have to be in the snapshot.
*/
2021-12-08 17:02:04 +00:00
bool NetworkClipped(int SnappingClient) const;
bool NetworkClipped(int SnappingClient, vec2 CheckPos) const;
bool GameLayerClipped(vec2 CheckPos);
// DDRace
bool GetNearestAirPos(vec2 Pos, vec2 PrevPos, vec2 *pOutPos);
bool GetNearestAirPosPlayer(vec2 PlayerPos, vec2 *OutPos);
int m_Number;
int m_Layer;
};
2021-12-08 17:02:04 +00:00
bool NetworkClipped(const CGameContext *pGameServer, int SnappingClient, vec2 CheckPos);
#endif