terom@185: terom@185: #include "Engine.hh" terom@185: #include "SinglePlayer.hh" terom@380: #include "Network/Reactor.hh" terom@380: #include "Config.hh" terom@185: terom@185: #include terom@185: terom@233: Engine::Engine (const std::string resource_xml_path) : terom@233: is_running(true), resources(resource_xml_path) terom@233: { terom@233: terom@185: } terom@185: terom@185: void Engine::setupGraphics (void) { terom@185: // create the graphics terom@185: graphics = new Graphics(*this, game_state); terom@185: } terom@185: terom@185: void Engine::setupNetworkServer (const std::string &listen_port) { terom@185: // create the server terom@185: net_server = new NetworkServer(game_state, listen_port); terom@185: } terom@185: terom@185: void Engine::setupNetworkClient (const std::string &connect_host, const std::string &connect_port) { terom@185: // connect_to terom@378: NetworkAddress connect_addr(connect_host, connect_port); terom@185: terom@185: // create the client terom@332: net_client = new NetworkClient(*this, game_state, connect_addr); terom@185: } terom@185: terom@185: void Engine::setupSinglePlayer (void) { terom@185: // create player directly terom@185: LocalPlayer* lp = new SinglePlayer(game_state); terom@185: terom@185: // add to gamestate terom@274: game_state.setLocalPlayer(lp); terom@185: } terom@185: terom@185: void Engine::stop (void) { terom@185: is_running = false; terom@185: } terom@185: terom@185: void Engine::run (void) { terom@380: // our NetworkReactor terom@380: NetworkReactor *reactor = NetworkReactor::current; terom@380: terom@380: // timeout info terom@380: timeval timeout; terom@380: terom@185: while (is_running) { terom@185: // this does.... magical things terom@185: CL_System::keep_alive(); terom@380: terom@380: // setup our timeout to ENGINE_TIMEOUT_MS terom@380: timeout.tv_sec = 0; terom@380: timeout.tv_usec = ENGINE_TIMEOUT_MS * 1000; terom@380: terom@380: /* terom@380: * Thursday came and went, I re-wrote clan-event. terom@380: * terom@380: * We use the NetworkReactor for sleeping, as it handles it effeciently even if we're not using network. terom@380: */ terom@380: reactor->poll(&timeout); terom@185: } terom@185: } terom@185: terom@233: CL_ResourceManager* Engine::getResourceManager (void) { terom@233: return &resources; terom@218: } terom@218: terom@185: Logger Engine::log (enum LogLevel level, const char *type) { terom@185: return Logger(level <= WARN ? std::cerr : std::cout, level, type); terom@185: } terom@185: