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. */
|
2008-08-14 18:42:47 +00:00
|
|
|
#ifndef GAME_SERVER_GAMEWORLD_H
|
|
|
|
#define GAME_SERVER_GAMEWORLD_H
|
2008-08-14 18:25:44 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
#include <game/gamecore.h>
|
2008-08-14 18:42:47 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
class CEntity;
|
|
|
|
class CCharacter;
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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
|
2008-08-14 18:25:44 +00:00
|
|
|
{
|
2010-05-29 07:25:38 +00:00
|
|
|
void Reset();
|
|
|
|
void RemoveEntities();
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
NUM_ENT_TYPES=10, // TODO: are more exact value perhaps? :)
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO: two lists seams kinda not good, shouldn't be needed
|
2010-05-29 07:25:38 +00:00
|
|
|
CEntity *m_pFirstEntity;
|
|
|
|
CEntity *m_apFirstEntityTypes[NUM_ENT_TYPES];
|
|
|
|
|
|
|
|
class CGameContext *m_pGameServer;
|
|
|
|
class IServer *m_pServer;
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
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();
|
2008-08-14 18:25:44 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
void SetGameServer(CGameContext *pGameServer);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
CEntity *FindFirst() { return m_pFirstEntity; }
|
|
|
|
CEntity *FindFirst(int Type);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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. -1 for all types.
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
Number of entities found and added to the ents array.
|
|
|
|
*/
|
2010-05-29 07:25:38 +00:00
|
|
|
int FindEntities(vec2 Pos, float Radius, CEntity **ppEnts, int Max, int Type = -1);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
2010-05-29 07:25:38 +00:00
|
|
|
Function: interserct_CCharacter
|
|
|
|
Finds the closest CCharacter that intersects the line.
|
2008-08-14 18:25:44 +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.
|
2008-08-14 18:25:44 +00:00
|
|
|
new_pos - Intersection position
|
|
|
|
notthis - Entity to ignore intersecting with
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
Returns a pointer to the closest hit or NULL of there is no intersection.
|
|
|
|
*/
|
2010-05-29 07:25:38 +00:00
|
|
|
class CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis = 0);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
2010-05-29 07:25:38 +00:00
|
|
|
Function: closest_CCharacter
|
|
|
|
Finds the closest CCharacter to a specific point.
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
Arguments:
|
|
|
|
pos - The center position.
|
2010-05-29 07:25:38 +00:00
|
|
|
radius - How far off the CCharacter is allowed to be
|
2008-08-14 18:25:44 +00:00
|
|
|
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.
|
2008-08-14 18:25:44 +00:00
|
|
|
*/
|
2010-05-29 07:25:38 +00:00
|
|
|
class CCharacter *ClosestCharacter(vec2 Pos, float Radius, CEntity *ppNotThis);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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);
|
2008-08-14 18:25:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
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();
|
2008-08-14 18:25:44 +00:00
|
|
|
};
|
2008-08-14 18:42:47 +00:00
|
|
|
|
|
|
|
#endif
|