ddnet/src/game/server/gameworld.h

170 lines
4 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_GAMEWORLD_H
#define GAME_SERVER_GAMEWORLD_H
2010-05-29 07:25:38 +00:00
#include <game/gamecore.h>
#include <list>
2010-05-29 07:25:38 +00:00
class CEntity;
class CCharacter;
/*
Class: Game World
Tracks all entities in the game. Propagates tick and
snap calls to all entities.
*/
2010-05-29 07:25:38 +00:00
class CGameWorld
{
public:
enum
{
ENTTYPE_PROJECTILE = 0,
ENTTYPE_LASER,
ENTTYPE_PICKUP,
ENTTYPE_FLAG,
ENTTYPE_CHARACTER,
NUM_ENTTYPES
};
private:
void Reset();
void RemoveEntities();
2022-02-09 14:26:50 +00:00
CEntity *m_pNextTraverseEntity = nullptr;
CEntity *m_apFirstEntityTypes[NUM_ENTTYPES];
2010-05-29 07:25:38 +00:00
class CGameContext *m_pGameServer;
class CConfig *m_pConfig;
2010-05-29 07:25:38 +00:00
class IServer *m_pServer;
2013-12-31 05:13:57 +00:00
void UpdatePlayerMaps();
public:
2010-05-29 07:25:38 +00:00
class CGameContext *GameServer() { return m_pGameServer; }
class CConfig *Config() { return m_pConfig; }
2010-05-29 07:25:38 +00:00
class IServer *Server() { return m_pServer; }
bool m_ResetRequested;
bool m_Paused;
CWorldCore m_Core;
2010-05-29 07:25:38 +00:00
CGameWorld();
~CGameWorld();
2010-05-29 07:25:38 +00:00
void SetGameServer(CGameContext *pGameServer);
2010-05-29 07:25:38 +00:00
CEntity *FindFirst(int Type);
/*
Function: FindEntities
Finds entities close to a position and returns them in a list.
Arguments:
Pos - Position.
Radius - How close the entities have to be.
ppEnts - Pointer to a list that should be filled with the pointers
to the entities.
Max - Number of entities that fits into the ents array.
Type - Type of the entities to find.
Returns:
Number of entities found and added to the ents array.
*/
int FindEntities(vec2 Pos, float Radius, CEntity **ppEnts, int Max, int Type);
/*
Function: InterserctCharacters
Finds the CCharacters that intersects the line. // made for types lasers=1 and doors=0
Arguments:
Pos0 - Start position
Pos1 - End position
Radius - How for from the line the CCharacter is allowed to be.
NewPos - Intersection position
pNotThis - Entity to ignore intersecting with
Returns:
Returns a pointer to the closest hit or NULL of there is no intersection.
*/
2022-06-17 17:54:10 +00:00
//CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis = 0);
CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, CCharacter *pNotThis = 0, int CollideWith = -1, CCharacter *pThisOnly = 0);
/*
Function: ClosestCharacter
2010-05-29 07:25:38 +00:00
Finds the closest CCharacter to a specific point.
Arguments:
Pos - The center position.
Radius - How far off the CCharacter is allowed to be
ppNotThis - Entity to ignore
Returns:
2010-05-29 07:25:38 +00:00
Returns a pointer to the closest CCharacter or NULL if no CCharacter is close enough.
*/
2022-06-17 17:54:10 +00:00
CCharacter *ClosestCharacter(vec2 Pos, float Radius, CEntity *ppNotThis);
/*
Function: InsertEntity
Adds an entity to the world.
Arguments:
pEntity - Entity to add
*/
2010-05-29 07:25:38 +00:00
void InsertEntity(CEntity *pEntity);
/*
Function: RemoveEntity
Removes an entity from the world.
Arguments:
pEntity - Entity to remove
*/
2010-05-29 07:25:38 +00:00
void RemoveEntity(CEntity *pEntity);
/*
Function: Snap
Calls Snap on all the entities in the world to create
the snapshot.
Arguments:
SnappingClient - ID of the client which snapshot
is being created.
*/
2010-05-29 07:25:38 +00:00
void Snap(int SnappingClient);
/*
Function: Tick
Calls Tick on all the entities in the world to progress
the world to the next tick.
*/
2010-05-29 07:25:38 +00:00
void Tick();
2010-09-11 09:42:35 +00:00
/*
Function: SwapClients
Calls SwapClients on all the entities in the world to ensure that /swap
command is handled safely.
*/
void SwapClients(int Client1, int Client2);
// DDRace
void ReleaseHooked(int ClientID);
2010-09-11 09:42:35 +00:00
/*
Function: IntersectedCharacters
Finds all CCharacters that intersect the line.
Arguments:
Pos0 - Start position
Pos1 - End position
Radius - How for from the line the CCharacter is allowed to be.
pNotThis - Entity to ignore intersecting with
Returns:
Returns list with all Characters on line.
*/
2022-06-17 17:54:10 +00:00
std::list<CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, class CEntity *pNotThis = 0);
};
#endif