diff options
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/game.cc | 132 |
1 files changed, 109 insertions, 23 deletions
diff --git a/src/game/game.cc b/src/game/game.cc index 77e534f..f0fd190 100644 --- a/src/game/game.cc +++ b/src/game/game.cc @@ -13,7 +13,7 @@ #include "sys/sys.h" #include "math/mathlib.h" #include "filesystem/filesystem.h" - +#include "filesystem/inifile.h" namespace game { @@ -25,7 +25,7 @@ void func_join(core::Player *player, std::string const &args) if (player->control()) return; - player->player_control = new Ship(player, "micron_vector"); + player->player_control = new Ship(player, "vector"); player->control()->entity_color = player->color(); std::string message(player->name()); @@ -64,7 +64,7 @@ void func_buy(core::Player *player, std::string const &args) std::string shipname; std::istringstream is(args); is >> shipname; - if ((shipname == "micron_vector") || (shipname == "canasta")) { + if ((shipname == "vector") || (shipname == "canasta")) { // player has only ship for now player->player_control->die(); player->player_control = 0; @@ -75,7 +75,7 @@ void func_buy(core::Player *player, std::string const &args) core::server()->broadcast(player->name() + " purchased a " + shipname); player->player_dirty = true; } else { - core::server()->send(player, "Usage: buy <canasta|micron_vector>"); + core::server()->send(player, "Usage: buy <canasta|vector>"); } } /*----- Game ------------------------------------------------------ */ @@ -96,11 +96,89 @@ void Game::init() module_running = false; // setup the game world - - // the star - Star *star = new Star(); - star->entity_location = Vector3f(256.0f, -256.0f, 0.0f); - star->entity_name = "star: Sabishi Hoshi"; + filesystem::IniFile f; + f.open("world"); + + if (!f.is_open()) { + return; + } + + Star *star = 0; + core::Entity *entity = 0; + std::string tmp; + + while (f.getline()) { + if (f.got_key()) { + if (f.section() == "star") { + + if (f.got_key_string("name", tmp)) { + star->entity_name = tmp; + + } else if (f.got_key_string("model", tmp)) { + star->entity_modelname = tmp; + + } else if (f.got_key_string("location", tmp)) { + std::istringstream is(tmp); + float x, y, z; + if ((is >> x) && (is >> y) && (is >> z)) { + star->entity_location = math::Vector3f(x,y,z); + } + + } else if (f.got_key_string("color", tmp)) { + std::istringstream is(tmp); + float r, g, b; + if ((is >> r) && (is >> g) && (is >> b)) { + star->entity_color = math::Color(r, g, b); + } + } else + con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; + + } else if (f.section() == "entity") { + + if (f.got_key_string("name", tmp)) { + entity->entity_name = tmp; + + } else if (f.got_key_string("model", tmp)) { + entity->entity_modelname = tmp; + + } else if (f.got_key_string("direction", tmp)) { + std::istringstream is(tmp); + float a; + if (is >> a) { + entity->entity_direction = math::degrees360f(a); + } + + } else if (f.got_key_string("location", tmp)) { + std::istringstream is(tmp); + float x, y, z; + if ((is >> x) && (is >> y) && (is >> z)) { + entity->entity_location = math::Vector3f(x,y,z); + } + + } else if (f.got_key_string("color", tmp)) { + std::istringstream is(tmp); + float r, g, b; + if ((is >> r) && (is >> g) && (is >> b)) { + entity->entity_color = math::Color(r, g, b); + } + + } else { + con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl; + } + } + } else if (f.got_section("star")) { + //con_debug << "[star] section" << std::endl; + star = new Star(); + + } else if (f.got_section("entity")) { + //con_debug << "[entity] section" << std::endl; + entity = new core::Entity(); + + } else if (f.got_section()) { + con_warn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl; + } + } + f.close(); // the green cube core::Entity *cube = new core::Entity(core::Entity::Solid & core::Entity::Static); @@ -120,6 +198,27 @@ void Game::init() cube->entity_modelname = "cube"; 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, 32.0f, 0.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"; + + /* + + // the star + Star *star = new Star(); + star->entity_location = Vector3f(256.0f, -256.0f, 0.0f); + star->entity_name = "star: Sabishi Hoshi"; + // Canasta cube = new core::Entity(core::Entity::Solid & core::Entity::Static); cube->entity_shape = core::Entity::Diamond; @@ -141,20 +240,7 @@ void Game::init() alexandria->entity_location = Vector3f(0.0f, -64.0f, 0.0f); alexandria->entity_name = "station: Alexandria"; alexandria->entity_modelname = "stations/alexandria"; - - // 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, 32.0f, 0.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("buy", (core::GameFuncPtr) func_buy); |