/* (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 #include 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; void UpdatePlayerMaps(); 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 CEntity *pNotThis = 0); class CCharacter *IntersectCharacter(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CCharacter *pNotThis = 0, int CollideWith = -1, class CCharacter *pThisOnly = 0); /* 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(); // DDRace std::list 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 IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, class CEntity *pNotThis = 0); }; #endif