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();
CEntity *m_pNextTraverseEntity;
CEntity *m_apFirstEntityTypes[NUM_ENTTYPES];
2010-05-29 07:25:38 +00:00
class CGameContext *m_pGameServer;
class IServer *m_pServer;
public:
2010-05-29 07:25:38 +00:00
class CGameContext *GameServer() { return m_pGameServer; }
class IServer *Server() { return m_pServer; }
bool m_ResetRequested;
bool m_Paused;
CWorldCore m_Core;
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: find_entities
Finds entities close to a position and returns them in a list.
Arguments:
pos - Position.
radius - How close the entities have to be.
ents - 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);
2011-01-06 03:46:10 +00:00
/*
Function: InterserctCharacters
Finds the CCharacters that intersects the line. // made for types lasers=1 and doors=0
2011-01-06 03:46:10 +00:00
Arguments:
pos0 - Start position
pos2 - End position
2010-05-29 07:25:38 +00:00
radius - How for from the line the CCharacter is allowed to be.
new_pos - Intersection position
notthis - Entity to ignore intersecting with
2011-01-06 03:46:10 +00:00
Returns:
Returns a pointer to the closest hit or NULL of there is no intersection.
*/
class CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CCharacter *pNotThis = 0, int CollideWith = -1, class CCharacter *pThisOnly = 0);
/*
2010-05-29 07:25:38 +00:00
Function: closest_CCharacter
Finds the closest CCharacter to a specific point.
Arguments:
pos - The center position.
2010-05-29 07:25:38 +00:00
radius - How far off the CCharacter is allowed to be
notthis - 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.
*/
2010-05-29 07:25:38 +00:00
class CCharacter *ClosestCharacter(vec2 Pos, float Radius, CEntity *ppNotThis);
/*
Function: insert_entity
Adds an entity to the world.
Arguments:
entity - Entity to add
*/
2010-05-29 07:25:38 +00:00
void InsertEntity(CEntity *pEntity);
/*
Function: remove_entity
Removes an entity from the world.
Arguments:
entity - Entity to remove
*/
2010-05-29 07:25:38 +00:00
void RemoveEntity(CEntity *pEntity);
/*
Function: destroy_entity
Destroys an entity in the world.
Arguments:
entity - Entity to destroy
*/
2010-05-29 07:25:38 +00:00
void DestroyEntity(CEntity *pEntity);
/*
Function: snap
Calls snap on all the entities in the world to create
the snapshot.
Arguments:
snapping_client - 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
std::list<class CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis);
void ReleaseHooked(int ClientID);
2010-09-11 09:42:35 +00:00
/*
Function: interserct_CCharacters
Finds all CCharacters that intersect the line.
Arguments:
pos0 - Start position
pos2 - End position
radius - How for from the line the CCharacter is allowed to be.
new_pos - Intersection position
notthis - Entity to ignore intersecting with
Returns:
Returns list with all Characters on line.
*/
std::list<class CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, class CEntity *pNotThis = 0);
};
#endif