about summary refs log tree commit diff
path: root/src/game/server/gameworld.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/server/gameworld.h')
-rw-r--r--src/game/server/gameworld.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/game/server/gameworld.h b/src/game/server/gameworld.h
new file mode 100644
index 00000000..2d1cc4be
--- /dev/null
+++ b/src/game/server/gameworld.h
@@ -0,0 +1,141 @@
+#ifndef GAME_SERVER_GAMEWORLD_H
+#define GAME_SERVER_GAMEWORLD_H
+
+#include <game/gamecore.h>
+
+class CEntity;
+class CCharacter;
+
+/*
+	Class: Game World
+		Tracks all entities in the game. Propagates tick and
+		snap calls to all entities.
+*/
+class CGameWorld
+{
+	void Reset();
+	void RemoveEntities();
+
+	enum
+	{
+		NUM_ENT_TYPES=10, // TODO: are more exact value perhaps? :)
+	};
+
+	// TODO: two lists seams kinda not good, shouldn't be needed
+	CEntity *m_pFirstEntity;
+	CEntity *m_apFirstEntityTypes[NUM_ENT_TYPES];
+	
+	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() { return m_pFirstEntity; }
+	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. -1 for all types.
+			
+		Returns:
+			Number of entities found and added to the ents array.
+	*/
+	int FindEntities(vec2 Pos, float Radius, CEntity **ppEnts, int Max, int Type = -1);
+	
+	/*
+		Function: interserct_CCharacter
+			Finds the closest CCharacter that intersects 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 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);
+	
+	/*
+		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();
+};
+
+#endif