From 40698bac1e7d03b8f472fa4d8d35aa644da95c5f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Mon, 28 Jul 2008 20:56:18 +0000 Subject: d'oh --- src/core/zone.h | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/core/zone.h (limited to 'src/core/zone.h') diff --git a/src/core/zone.h b/src/core/zone.h new file mode 100644 index 0000000..cd1fec2 --- /dev/null +++ b/src/core/zone.h @@ -0,0 +1,150 @@ +/* + core/zone.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_CORE_ZONE_H__ +#define __INCLUDED_CORE_ZONE_H__ + +#include +#include +#include + +namespace core { + +class Zone; + +} + +#include "core/entity.h" + +namespace core +{ + +/// a Zone contains a compartment of the game universe +class Zone { +public: + /// type definition for the content of a zone + typedef std::list Content; + + /// type definition for the zone registry + typedef std::map Registry; + + /* ---- static functions ----------------------------------- */ + + /// add a zone to the zone registry + static void add(Zone *zone); + + /// add a zone with a specific id to the registry + static void add(Zone *zone, unsigned int id); + + /// find a zone in the zone registry + static Zone *find(unsigned int id); + + /// find a zone in the zone registry + static Zone *find(std::string const & name); + + /// find a zone in the zone registry (searches on id and name) + static Zone *find_zone(std::string const & searchname); + + /// remove a zone from the zone registry + static void remove(Zone *zone); + + /// list the zone registry + static void list(); + + /// list the content of a single zone + static void list_zone(std::string const & searchname); + + /// clear the zone registry + static void clear(); + + /// the zone registry + static inline Registry & registry() { return zone_registry; } + + /* ---- Zone class ----------------------------------------- */ + + /// create a new zone + Zone(std::string const & label); + + /// create a zone from stream data + Zone(std::istream & is); + + + /// delete a zone + ~Zone(); + + /* ---- inspectors ----------------------------------------- */ + + /// zone id + inline unsigned int id() const { return zone_id; } + + /// zone label + inline std::string const & label() const { return zone_label; } + + /// zone name + inline std::string const & name() const { return zone_name; } + + /// the name of the texture to be used as sky for this zone + inline std::string const & sky() const { return zone_sky; } + + /// texture id for the sky + inline size_t sky_texture() const { return zone_sky_texture; } + + /// find an entity inside a zone + Entity *find_entity(Entity *entity); + + /// find an entity inside a zone + Entity *find_entity(unsigned int id); + + /* ---- mutators ------------------------------------------- */ + + /// set the Zone label + inline void set_label(std::string const & label) { zone_label.assign(label); } + + /// set the Zone label + inline void set_name(std::string const & name) { zone_name.assign(name); } + + /// set the sky texture name to be used for this zone + inline void set_sky(std::string const & sky) { zone_sky.assign(sky); } + + /// set the texture id for the sky + inline void set_sky_texture(size_t texture) { zone_sky_texture = texture; } + + /* ---- serializers ---------------------------------------- */ + + /// serialize a server-to-client update on a stream + void serialize_server_update(std::ostream & os) const; + + /// receive a server-to-client update from a stream + void receive_server_update(std::istream &is); + + /* ---- zone content --------------------------------------- */ + + /// the entities belonging to this zone + inline Content & content() { return zone_content; } + + /// add an entity to this zone + void add(Entity *entity); + + /// remove an entity from this zone + void remove(Entity *entity); + +private: + unsigned int zone_id; + + std::string zone_label; + std::string zone_name; + std::string zone_sky; + + size_t zone_sky_texture; + + Content zone_content; + static Registry zone_registry; +}; + +} + +#endif // __INCLUDED_CORE_ZONE_H__ + -- cgit v1.2.3