/* game/game.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 "game/game.h" #include "game/sector.h" #include "game/ship.h" #include "game/star.h" #include "core/entity.h" #include "sys/sys.h" #include "math/mathlib.h" #include "filesystem/filesystem.h" namespace game { /// a player joins the game void func_join(core::Player &player, std::stringstream &args) { Ship *ship = new Ship(); ship->location = math::Vector3f(0,0,0); ship->label = "ship: <" + player.name + "> Micron Vector"; ship->owner = &player; player.controled = ship; con_print << player.name << " joins the game" << std::endl; /// TODO net broadcast } /// a player joins the spectators void func_spectate(core::Player &player, std::stringstream &args) { con_print << player.name << " joins the spectators" << std::endl; /// TODO net broadcast if (player.controled) { // player only has one ship for now core::entity::remove(player.controled->id); player.controled = 0; } } Game::Game() { } Game::~Game() { } bool Game::init() { using math::Vector3f; using math::Color; //using filesystem::IniFile; con_print << "Initializing game..." << std::endl; /* // read game.ini IniFile f; f.open("ini/game.ini"); while (f) { f.getline(); if (f.got_key()) { if (f.section() == "game") { // game::name if (f.got_key_string("name", name)); else // game::label if (f.got_key_string("label", label)); else // game::author if (f.got_key_string("author", author)); else // unknown value con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } } else if (f.got_section("game")) { } else if (f.got_section()) { con_warn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl; } } f.close(); con_print << name << std::endl; con_print << "by " << author << std::endl; // read world.ini std::string tmp; Sector *sector =0; f.open("ini/world.ini"); while (f) { f.getline(); if (f.got_key()) { if (f.section() == "world") { // world::name if (f.got_key_string("name", tmp)); else // world:label if (f.got_key_string("label", tmp)); else // unknown value con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } else if (f.section() == "sector") { // sector::name if (f.got_key_string("name", tmp)) { sector->name = tmp; } else // sector:label if (f.got_key_string("label", tmp)) { sector->label = tmp; } else // unknown value con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; } } else if (f.got_section("world")) { //con_debug << "[world] section" << std::endl; } else if (f.got_section("sector")) { sector = new Sector(); sectors.push_back(sector); } else if (f.got_section()) { con_warn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl; } } f.close(); con_print << "Loading sectors..." << std::endl; for (unsigned n =0; n < sectors.size(); n++) con_print << " " << sectors[n]->label << " " << sectors[n]->name << std::endl; */ Star *star = new Star(); star->location = Vector3f(256.0f, 0.0f, 256.0f); star->label = "star: Sabishi Hoshi"; core::Entity *cube = new core::Entity(core::entity::Solid & core::entity::Static); cube->core_shape = core::entity::Cube; cube->core_color = Color(0.0f, 0.8f, 0.0f); cube->location = Vector3f(24.0f, 0.0f, -24.0f); cube->label ="cube: Borg cube green"; cube->type = cube_enttype; cube = new core::Entity(core::entity::Solid & core::entity::Static); cube->core_shape = core::entity::Cube; cube->core_color = Color(1.0f, 0.0f, 0.0f); cube->location = Vector3f(16.0f, 0.0f, -16.0f); cube->label ="cube: Borg cube red"; cube->type = cube_enttype; core::Entity *sphere = new core::Entity(core::entity::Solid & core::entity::Static); sphere->core_shape = core::entity::Sphere; sphere->core_color = Color(0.8f, 0.8f, 0.0f); sphere->location = Vector3f(0.0f, 0.0f, -32.0f); sphere->label ="sphere: The Sphere"; core::Entity *axis = new core::Entity(core::entity::Static); axis->core_shape = core::entity::Diamond; axis->core_color = Color(1.0f, 1.0f, 0.0f); axis->location = Vector3f(0, 0, 0); axis->label = "axis: Origin"; core::func::add("join", func_join, core::func::Game); core::func::add("spectate", func_spectate, core::func::Game); return true; } void Game::shutdown() { con_print << "Shutting down game..." << std::endl; core::func::remove("join"); core::func::remove("spectate"); // delete every sector object in the sectors vector for (unsigned int n =0; n< sectors.size(); n++) { delete sectors[n]; sectors[n] = 0; } // clear the sectors vector sectors.clear(); } void Game::frame(float seconds) { } void Game::player_connect(core::Player &player) { std::stringstream args; game::func_spectate(player, args); } void Game::player_disconnect(core::Player &player) { std::stringstream args; game::func_spectate(player, args); } } // namespace game