/* 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/ship.h" #include "game/star.h" #include "core/gameserver.h" #include "sys/sys.h" #include "math/mathlib.h" #include "filesystem/filesystem.h" namespace game { /*----- engine game functions ------------------------------------- */ /// a player joins the game void func_join(core::Player *player, std::string const &args) { if (player->control) return; player->control = new Ship(player); std::string message(player->name()); message.append(" joins the game."); core::server()->broadcast(message); } /// a player joins the spectators void func_spectate(core::Player *player, std::string const &args) { if (!player->control) return; std::string message(player->name()); message.append(" spectates."); core::server()->broadcast(message); if (player->control) { // player has only ship for now core::Entity::remove(player->control->id()); player->control = 0; } } /*----- Game ------------------------------------------------------ */ Game::Game() : core::Module("Project::OSiRiON") { } Game::~Game() { } void Game::init() { using math::Vector3f; using math::Color; module_running = false; // setup the game world // the star Star *star = new Star(); star->entity_location = Vector3f(256.0f, 0.0f, 256.0f); star->entity_name = "star: Sabishi Hoshi"; // the green cube core::Entity *cube = new core::Entity(core::Entity::Solid & core::Entity::Static); cube->entity_shape = core::Entity::Cube; cube->entity_color = Color(0.0f, 0.8f, 0.0f); cube->entity_location = Vector3f(24.0f, 0.0f, -24.0f); cube->entity_name ="cube: Borg cube green"; cube->entity_moduletypeid = cube_enttype; // the red cube cube = new core::Entity(core::Entity::Solid & core::Entity::Static); cube->entity_shape = core::Entity::Cube; cube->entity_color = Color(1.0f, 0.0f, 0.0f); cube->entity_location = Vector3f(16.0f, 0.0f, -16.0f); cube->entity_name ="cube: Borg cube red"; cube->entity_moduletypeid = cube_enttype; // the yellow sphere core::Entity *sphere = new core::Entity(core::Entity::Solid & core::Entity::Static); sphere->entity_shape = core::Entity::Sphere; sphere->entity_color = Color(0.8f, 0.8f, 0.0f); sphere->entity_location = Vector3f(0.0f, 0.0f, -32.0f); sphere->entity_name ="sphere: The Sphere"; // the galactic origin core::Entity *axis = new core::Entity(core::Entity::Static); axis->entity_shape = core::Entity::Diamond; axis->entity_color = Color(1.0f, 1.0f, 0.0f); axis->entity_location = Vector3f(0, 0, 0); axis->entity_name = "axis: Origin"; // add engine game functions core::Func::add("join", (core::GameFuncPtr) func_join); core::Func::add("spectate", (core::GameFuncPtr) func_spectate); // add engine game variables core::Cvar::set("g_borgcubes", "2", core::Cvar::Game); core::Cvar::set("g_name", name().c_str(), core::Cvar::Game | core::Cvar::ReadOnly); // indicate the module is ready to run frames module_running = true; } void Game::shutdown() { module_running = false; } void Game::frame(float seconds) { if (!running()) return; } void Game::player_connect(core::Player *player) { std::string args; func_spectate(player, args); } void Game::player_disconnect(core::Player *player) { if (player->control) { // player has only one ship for now core::Entity::remove(player->control->id()); player->control = 0; } } } // namespace game