ddnet/src/game/server/gameworld.h
GreYFoXGTi 2151883b43 Merge branch 'master' of http://github.com/oy/teeworlds
Conflicts:
	src/game/gamecore.cpp
	src/game/server/entities/character.cpp
	src/game/server/entities/laser.cpp
	src/game/server/entities/pickup.cpp
	src/game/server/entities/projectile.cpp
	src/game/server/entity.h
	src/game/server/gamecontext.cpp
	src/game/server/player.cpp
	src/game/variables.h
2011-01-20 16:10:32 +02:00

170 lines
4 KiB
C++

/* (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
#include <game/gamecore.h>
#include <list>
class CEntity;
class CCharacter;
/*
Class: Game World
Tracks all entities in the game. Propagates tick and
snap calls to all entities.
*/
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];
class CGameContext *m_pGameServer;
class IServer *m_pServer;
public:
class CGameContext *GameServer() { return m_pGameServer; }
class IServer *Server() { return m_pServer; }
bool m_ResetRequested;
bool m_Paused;
CWorldCore m_Core;
CGameWorld();
~CGameWorld();
void SetGameServer(CGameContext *pGameServer);
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);
/*
Function: InterserctCharacters
Finds the CCharacters that intersects the line. // made for types lasers=1 and doors=0
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 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);
/*
Function: closest_CCharacter
Finds the closest CCharacter to a specific point.
Arguments:
pos - The center position.
radius - How far off the CCharacter is allowed to be
notthis - Entity to ignore
Returns:
Returns a pointer to the closest CCharacter or NULL if no CCharacter is close enough.
*/
class CCharacter *ClosestCharacter(vec2 Pos, float Radius, CEntity *ppNotThis);
/*
Function: insert_entity
Adds an entity to the world.
Arguments:
entity - Entity to add
*/
void InsertEntity(CEntity *pEntity);
/*
Function: remove_entity
Removes an entity from the world.
Arguments:
entity - Entity to remove
*/
void RemoveEntity(CEntity *pEntity);
/*
Function: destroy_entity
Destroys an entity in the world.
Arguments:
entity - Entity to destroy
*/
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.
*/
void Snap(int SnappingClient);
/*
Function: tick
Calls tick on all the entities in the world to progress
the world to the next tick.
*/
void Tick();
std::list<class CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis);
void ReleaseHooked(int ClientId);
/*
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