00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_singleton.hpp"
00012
00013 #include "xrb.hpp"
00014
00015 #include "xrb_inputstate.hpp"
00016 #include "xrb_key.hpp"
00017 #include "xrb_keymap.hpp"
00018 #include "xrb_pal.hpp"
00019 #include "xrb_resourcelibrary.hpp"
00020
00021 namespace Xrb
00022 {
00023
00024 namespace
00025 {
00026
00027 InputState *g_inputstate = NULL;
00028
00029
00030 KeyMap const *g_key_map = NULL;
00031
00032 Pal *g_pal = NULL;
00033
00034 ResourceLibrary *g_resource_library = NULL;
00035
00036
00037 bool g_is_initialized = false;
00038 }
00039
00040 InputState &Singleton::InputState ()
00041 {
00042 ASSERT1(g_is_initialized && "can't use Singleton::InputState() before Singleton::Initialize()");
00043 ASSERT1(g_inputstate != NULL);
00044 return *g_inputstate;
00045 }
00046
00047 KeyMap const &Singleton::KeyMap ()
00048 {
00049 ASSERT1(g_is_initialized && "can't use Singleton::KeyMap() before Singleton::Initialize()");
00050 ASSERT1(g_key_map != NULL);
00051 return *g_key_map;
00052 }
00053
00054 Pal &Singleton::Pal ()
00055 {
00056 ASSERT1(g_is_initialized && "can't use Singleton::Pal() before Singleton::Initialize()");
00057 ASSERT1(g_pal != NULL);
00058 return *g_pal;
00059 }
00060
00061 ResourceLibrary &Singleton::ResourceLibrary ()
00062 {
00063 ASSERT1(g_is_initialized && "can't use Singleton::ResourceLibrary() before Singleton::Initialize()");
00064 ASSERT1(g_resource_library != NULL);
00065 return *g_resource_library;
00066 }
00067
00068 void Singleton::Initialize (PalFactory CreatePal, char const *const key_map_name)
00069 {
00070 ASSERT1(key_map_name != NULL);
00071
00072 ASSERT1(!g_is_initialized);
00073
00074 fprintf(stderr, "Singleton::Initialize();\n");
00075
00076 g_pal = CreatePal();
00077 g_inputstate = new Xrb::InputState();
00078 g_key_map = Xrb::KeyMap::Create(key_map_name);
00079 g_resource_library = new Xrb::ResourceLibrary();
00080
00081 ASSERT0(g_pal != NULL && "CreatePal() returned NULL");
00082 ASSERT0(g_key_map != NULL && "failed to create KeyMap");
00083
00084
00085 g_is_initialized = true;
00086 }
00087
00088 void Singleton::Shutdown ()
00089 {
00090 ASSERT1(g_is_initialized);
00091 ASSERT1(g_inputstate != NULL);
00092 ASSERT1(g_key_map != NULL);
00093 ASSERT1(g_resource_library != NULL);
00094
00095 fprintf(stderr, "Singleton::Shutdown();\n");
00096
00097
00098
00099 DeleteAndNullify(g_inputstate);
00100 DeleteAndNullify(g_resource_library);
00101 DeleteAndNullify(g_key_map);
00102 DeleteAndNullify(g_pal);
00103
00104 g_is_initialized = false;
00105 }
00106
00107 }