/* core/gameinterface.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include #include #include "sys/sys.h" #include "core/application.h" #include "core/cvar.h" #include "core/func.h" #include "core/gameinterface.h" #include "core/player.h" namespace core { Player GameInterface::game_localplayer; EntityControlable *localcontrol() { if (game()->localplayer()) return game()->localplayer()->control(); else return 0; } Player *localplayer() { return game()->localplayer(); } GameInterface::GameInterface() { clear(); if (Cvar::sv_dedicated->value()) game_localplayer.player_name.assign("Console"); else { Cvar *cl_name = Cvar::find("cl_name"); if (cl_name) { game_localplayer.player_name = cl_name->str(); } Cvar *cl_color = Cvar::find("cl_color"); math::Color color(1.0, 1.0, 1.0, 1.0); if (cl_color) { std::istringstream is(cl_color->str()); is >> color; } game_localplayer.player_color = color; } } GameInterface::~GameInterface() { clear(); } // clear all game related objects void GameInterface::clear() { con_debug << "Clearing game data\n"; // remove all entities for (std::map::iterator it = Entity::registry.begin(); it != Entity::registry.end(); it++) { delete (*it).second; } Entity::registry.clear(); // remove all game functions for (std::map::iterator it = Func::registry.begin(); it != Func::registry.end(); it++) { if ( ((*it).second->flags() & Func::Game) == Func::Game) { delete (*it).second; Func::registry.erase(it); } } // remove all game cvars for (std::map::iterator it = Cvar::registry.begin(); it != Cvar::registry.end(); it++) { if ( ((*it).second->flags() & Cvar::Game) == Cvar::Game) { delete (*it).second; Cvar::registry.erase(it); } } } } // namespace core