Pol  Revision:cb584c9
region.h
Go to the documentation of this file.
1 
7 #ifndef REGION_H
8 #define REGION_H
9 
10 #include <map>
11 #include <string>
12 
13 #include "../clib/compilerspecifics.h"
14 #include "poltype.h"
15 #include "proplist.h"
16 #include "zone.h"
17 
18 namespace Pol
19 {
20 namespace Bscript
21 {
22 class BObjectImp;
23 }
24 namespace Realms
25 {
26 class Realm;
27 }
28 namespace Core
29 {
30 class RegionGroupBase;
31 
32 class Region
33 {
34 public:
35  Bscript::BObjectImp* get_region_string( const std::string& propname );
36  const std::string& name() const;
37  RegionId regionid() const;
38  virtual size_t estimateSize() const;
39 
40 protected:
41  explicit Region( Clib::ConfigElem& elem, RegionId id );
42  virtual ~Region();
43 
44  // virtual void read_config( ConfigElem& elem );
45  void read_custom_config( Clib::ConfigElem& elem );
46 
47  friend class RegionGroupBase;
48 
49 protected:
50  std::string name_;
52  //
53  // custom per-region properties
54  //
55  // Note, these aren't "script-packed", they're just strings.
56  //
58 };
59 
60 inline const std::string& Region::name() const
61 {
62  return name_;
63 }
64 
65 inline RegionId Region::regionid() const
66 {
67  return regionid_;
68 }
69 
71 {
72 public:
73  explicit RegionGroupBase( const char* name );
74  virtual ~RegionGroupBase();
75  virtual size_t estimateSize() const;
76 
77  void read_region( Clib::ConfigElem& elem );
78  void create_bgnd_region( Clib::ConfigElem& elem );
79 
80  const std::string& name() const;
81 
82 protected:
83  Region* getregion_byname( const std::string& regionname );
84  Region* getregion_byloc( xcoord x, ycoord y, Realms::Realm* realm );
85 
86  std::vector<Region*> regions_;
87 
88  typedef std::map<Realms::Realm*, RegionId**> RegionRealms;
89  RegionRealms regionrealms;
90 
91 private:
92  virtual Region* create_region( Clib::ConfigElem& elem, RegionId id ) const = 0;
93 
94  RegionId getregionid( xcoord x, ycoord y, Realms::Realm* realm );
95  void paint_zones( Clib::ConfigElem& elem, RegionId ridx );
96  std::string name_;
97  typedef std::map<std::string, Region*> RegionsByName;
98  RegionsByName regions_byname_;
99 };
100 
101 inline const std::string& RegionGroupBase::name() const
102 {
103  return name_;
104 }
105 
106 template <class T>
108 {
109 public:
110  explicit RegionGroup( const char* name );
111 
112  virtual T* getregion( xcoord x, ycoord y, Realms::Realm* realm );
113  virtual T* getregion( const std::string& regionname );
114 
115 protected:
116  virtual Region* create_region( Clib::ConfigElem& elem, RegionId id ) const POL_OVERRIDE;
117 };
118 
119 template <class T>
121  : RegionGroupBase( name )
122 {
123 }
124 
125 template <class T>
127 {
128  return static_cast<T*>( getregion_byloc( x, y, realm ) );
129 }
130 
131 template <class T>
132 inline T* RegionGroup<T>::getregion( const std::string& regionname )
133 {
134  return static_cast<T*>( getregion_byname( regionname ) );
135 }
136 
137 template <class T>
139 {
140  return new T( elem, id );
141 }
142 
143 void read_region_data( RegionGroupBase& grp, const char* preferred_filename,
144  const char* other_filename, const char* tags_expected );
145 }
146 }
147 #endif
void read_region_data(RegionGroupBase &grp, const char *preferred_filename, const char *other_filename, const char *tags_expected)
Definition: region.cpp:225
Region * getregion_byloc(xcoord x, ycoord y, Realms::Realm *realm)
Definition: region.cpp:170
#define POL_OVERRIDE
RegionsByName regions_byname_
Definition: region.h:98
RegionId regionid() const
Definition: region.h:65
unsigned short ycoord
Definition: poltype.h:20
std::vector< Region * > regions_
Definition: region.h:86
virtual Region * create_region(Clib::ConfigElem &elem, RegionId id) const POL_OVERRIDE
Definition: region.h:138
virtual T * getregion(xcoord x, ycoord y, Realms::Realm *realm)
Definition: region.h:126
RegionGroup(const char *name)
Definition: region.h:120
RegionRealms regionrealms
Definition: region.h:89
const std::string & name() const
Definition: region.h:101
std::map< Realms::Realm *, RegionId ** > RegionRealms
Definition: region.h:88
RegionId regionid_
Definition: region.h:51
Region * getregion_byname(const std::string &regionname)
Definition: region.cpp:161
unsigned short RegionId
Definition: zone.h:23
Bscript::BObjectImp * get_region_string(const char *resource, xcoord x, ycoord y, Realms::Realm *realm, const std::string &propname)
Definition: resource.cpp:298
std::string name
Definition: osmod.cpp:943
PropertyList proplist_
Definition: region.h:57
std::string name_
Definition: region.h:50
const std::string & name() const
Definition: region.h:60
std::map< std::string, Region * > RegionsByName
Definition: region.h:97
Definition: berror.cpp:12
unsigned short xcoord
Definition: poltype.h:19