/* client/client.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ // project headers #include "client/client.h" #include "client/video.h" #include "client/camera.h" #include "client/console.h" #include "client/input.h" #include "client/view.h" #include "core/core.h" #include "game/game.h" // SDL headers #include // C++ headers #include #include namespace client { //--- private definition ------------------------------------------ /// client application implementation class Client : public core::ApplicationInterface { public: /// initialize the client Client virtual void init(); /// run the client Client virtual void run(); /// shutdown the client Client virtual void shutdown(); /// quit the client Client virtual void quit(int status); }; Client app; //--- public ------------------------------------------------------ game::Game game; void main(int count, char **arguments) { std::cout << "The Osirion Project " << VERSION << std::endl; for (int i =0; i < count; i++) std::cout << arguments[i] << " "; std::cout << std::endl; app.init(); app.run(); app.shutdown(); } //--- private ----------------------------------------------------- void Client::quit(int status) { SDL_Quit(); core::ApplicationInterface::quit(status); } void Client::init() { con_print << "Initializing client..." << std::endl; // initialize core core::ApplicationInterface::init(); // Initialize the video subsystem if (!client::video::init()) quit(1); // initialize console console::init(); // initialize input input::init(); } void Client::run() { con_print << "Running client..." << std::endl; Uint32 chrono = SDL_GetTicks(); while (true) { Uint32 current = SDL_GetTicks(); // overflow protection ~49 days if (current < chrono) { chrono = current; } // run a core frame float seconds = ((float)(current - chrono)) / 1000.0f; core::ApplicationInterface::frame(seconds); // run a video frame video::frame(seconds); // process input input::frame(seconds); // update the main loop chronometer chrono = current; } } void Client::shutdown() { con_print << "Shutting down client..." << std::endl; console::flush(); console::shutdown(); console::flush(); input::shutdown(); console::flush(); video::shutdown(); console::flush(); core::ApplicationInterface::shutdown(); console::flush(); quit(0); } } // namespace client