Pol  Revision:cb584c9
realms.cpp
Go to the documentation of this file.
1 
11 #include "realms.h"
12 
13 #include <stddef.h>
14 
15 #include "../clib/dirlist.h"
16 #include "../clib/logfacility.h"
17 #include "../clib/passert.h"
18 #include "../clib/strutil.h"
19 #include "../clib/timer.h"
20 #include "../plib/systemstate.h"
21 #include "globals/uvars.h"
22 #include "realms/realm.h"
23 
24 namespace Pol
25 {
26 namespace Core
27 {
29 {
30  Realms::Realm* temprealm;
31  int realm_counter = 0;
32  for ( Clib::DirList dl( Plib::systemstate.config.realm_data_path.c_str() ); !dl.at_end();
33  dl.next() )
34  {
35  std::string realm_name = dl.name();
36  if ( realm_name[0] == '.' )
37  continue;
38 
40  "You can't use more than " + Clib::decint( MAX_NUMER_REALMS ) + " realms" );
41 
42  POLLOG_INFO << "Loading Realm " << realm_name << ".\n";
43  Tools::Timer<> timer;
44  temprealm =
45  new Realms::Realm( realm_name, Plib::systemstate.config.realm_data_path + realm_name );
46  POLLOG_INFO << "Completed in " << timer.ellapsed() << " ms.\n";
47  gamestate.Realms.push_back( temprealm );
48  ++realm_counter;
49 
50  // To-Fix - Nasty kludge assuming 'britannia' is the default realm
51  // May want to make this configurable in later core releases.
52  if ( realm_name == "britannia" )
53  gamestate.main_realm = temprealm;
54  }
55  // main_realm = new DummyRealm();
56  gamestate.baserealm_count = realm_counter;
58  if ( realm_counter > 0 )
59  return true;
60  else
61  return false;
62 }
63 
64 Realms::Realm* find_realm( const std::string& name )
65 {
66  for ( auto& realm : gamestate.Realms )
67  {
68  if ( realm->name() == name )
69  return realm;
70  }
71  return nullptr;
72 }
73 
74 bool defined_realm( const std::string& name )
75 {
76  for ( const auto& realm : gamestate.Realms )
77  {
78  if ( realm->name() == name )
79  return true;
80  }
81  return false;
82 }
83 
84 void add_realm( const std::string& name, Realms::Realm* base )
85 {
86  Realms::Realm* r = new Realms::Realm( name, base );
89  gamestate.Realms.push_back( r );
90 }
91 
92 void remove_realm( const std::string& name )
93 {
94  std::vector<Realms::Realm*>::iterator itr;
95  for ( itr = gamestate.Realms.begin(); itr != gamestate.Realms.end(); ++itr )
96  {
97  if ( ( *itr )->name() == name )
98  {
100  gamestate.shadowrealms_by_id[( *itr )->shadowid] = nullptr; // used inside the decaythread
101  delete *itr;
102  gamestate.Realms.erase( itr );
103  break;
104  }
105  }
106 }
107 }
108 }
bool defined_realm(const std::string &name)
Definition: realms.cpp:74
SystemState systemstate
Definition: systemstate.cpp:12
void on_delete_realm(Realms::Realm *realm)
Definition: storage.cpp:201
void remove_realm(const std::string &name)
Definition: realms.cpp:92
#define POLLOG_INFO
Definition: logfacility.h:213
std::string decint(unsigned short v)
Definition: strutil.cpp:64
bool load_realms()
Definition: realms.cpp:28
bool at_end() const
Definition: dirlist.cpp:102
const std::string name() const
Definition: realm.cpp:124
#define passert_r(exp, reason)
Definition: passert.h:66
std::vector< Realms::Realm * > Realms
Definition: uvars.h:163
unsigned int shadowrealm_count
Definition: uvars.h:166
#define MAX_NUMER_REALMS
Definition: realms.h:31
GameState gamestate
Definition: uvars.cpp:74
long long ellapsed() const
Definition: timer.cpp:46
Realms::Realm * find_realm(const std::string &name)
Definition: realms.cpp:64
std::string name
Definition: osmod.cpp:943
std::map< int, Realms::Realm * > shadowrealms_by_id
Definition: uvars.h:164
void add_realm(const std::string &name, Realms::Realm *base)
Definition: realms.cpp:84
unsigned int baserealm_count
Definition: uvars.h:165
Realms::Realm * main_realm
Definition: uvars.h:162
Storage storage
Definition: uvars.h:156
Definition: berror.cpp:12
unsigned int shadowid
Definition: realm.h:65