diff options
author | Stijn Buys <ingar@osirion.org> | 2010-11-11 20:32:21 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2010-11-11 20:32:21 +0000 |
commit | 128d1f7b752a25f2fd2ee105c9acfe8f9d1b9be5 (patch) | |
tree | b43c33b8d2b91f1b63c0867903bb0217e033293a /src/game/base/game.cc | |
parent | 5eeb90aeaa0ab78455a3e55e048df12d1ddd3b91 (diff) |
added initial faction support, entities can receive faction colors
added list_cargo, list_ship and list_faction engine functions
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r-- | src/game/base/game.cc | 92 |
1 files changed, 75 insertions, 17 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index f110962..295b2f1 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -17,6 +17,7 @@ #include "filesystem/inifile.h" #include "base/game.h" #include "base/cargo.h" +#include "base/faction.h" #include "base/navpoint.h" #include "base/jumppoint.h" #include "base/planet.h" @@ -848,8 +849,14 @@ void Game::func_goto(core::Player *player, const std::string &args) Game::Game() : core::Module("Project::OSiRiON", true) { - // reset default player values + // clear defaults Default::clear(); + + // read factions.ini + if (!Faction::init()) { + // not fatal + + } // read cargo.ini if (!Cargo::init()) { @@ -951,59 +958,68 @@ Game::~Game() g_damping = 0; g_deplete = 0; + // clear defaults Default::clear(); + + // clear Factions + Faction::clear(); } bool Game::load_world() { std::string inifilename("ini/world"); - filesystem::IniFile worldini; - worldini.open(inifilename); + filesystem::IniFile inifile; + inifile.open(inifilename); - if (!worldini.is_open()) { - con_error << "Could not open " << worldini.name() << std::endl; + if (!inifile.is_open()) { + con_error << "Could not open " << inifile.name() << std::endl; return false; } con_print << "^BLoading world..." << std::endl; + Faction *faction = 0; core::Zone *zone = 0; std::string label; + math::Color color; - while (worldini.getline()) { + while (inifile.getline()) { - if (worldini.got_section()) { + if (inifile.got_section()) { + zone = 0; + faction = 0; - if (worldini.got_section("world")) { + if (inifile.got_section("world")) { continue; + } else { - worldini.unknown_section(); + inifile.unknown_section(); } - } else if (worldini.got_key()) { + } else if (inifile.got_key()) { - if (worldini.in_section("world")) { + if (inifile.in_section("world")) { - if (worldini.got_key_string("zone", label)) { + if (inifile.got_key_string("zone", label)) { aux::to_label(label); zone = new core::Zone(label); core::Zone::add(zone); } else { - worldini.unkown_key(); - } + inifile.unkown_key(); + } } } } - worldini.close(); + inifile.close(); if (!core::Zone::registry().size()) { con_error << "No zones found!" << std::endl; return false; } - con_debug << " " << worldini.name() << " " << core::Zone::registry().size() << " zones" << std::endl; + con_debug << " " << inifile.name() << " " << core::Zone::registry().size() << " zones" << std::endl; for (core::Zone::Registry::iterator it = core::Zone::registry().begin(); it != core::Zone::registry().end(); it++) { if (!load_zone((*it).second)) { @@ -1184,9 +1200,27 @@ bool Game::load_zone(core::Zone *zone) zoneini.unkown_key(); } - } else if (zoneini.in_section("jumppoint") || zoneini.in_section("jumpgate")) { + } else if (zoneini.in_section("jumppoint")) { + if (core::Parser::got_entity_key(zoneini, jumppoint)) { + continue; + } else if (zoneini.got_key_string("target", strval)) { + jumppoint->set_targetlabel(strval); + continue; + } else { + zoneini.unkown_key(); + } + + } else if (zoneini.in_section("jumpgate")) { if (core::Parser::got_entity_key(zoneini, jumppoint)) { continue; + } else if (zoneini.got_key_label("faction", strval)) { + Faction *faction = Faction::find(strval); + if (!faction) { + zoneini.unknown_error("unkown faction '" + strval + "'"); + } else { + jumppoint->set_color(faction->color()); + jumppoint->set_color_second(faction->color_second()); + } } else if (zoneini.got_key_string("target", strval)) { jumppoint->set_targetlabel(strval); continue; @@ -1212,6 +1246,14 @@ bool Game::load_zone(core::Zone *zone) zone->set_default_view(planet); } continue; + } else if (zoneini.got_key_label("faction", strval)) { + Faction *faction = Faction::find(strval); + if (!faction) { + zoneini.unknown_error("unkown faction '" + strval + "'"); + } else { + planet->set_color(faction->color()); + planet->set_color_second(faction->color_second()); + } } else { zoneini.unkown_key(); } @@ -1223,6 +1265,14 @@ bool Game::load_zone(core::Zone *zone) if (b) { zone->set_default_view(station); } + } else if (zoneini.got_key_label("faction", strval)) { + Faction *faction = Faction::find(strval); + if (!faction) { + zoneini.unknown_error("unkown faction '" + strval + "'"); + } else { + station->set_color(faction->color()); + station->set_color_second(faction->color_second()); + } } else { zoneini.unkown_key(); } @@ -1248,6 +1298,14 @@ bool Game::load_zone(core::Zone *zone) if (b) { zone->set_default_view(entity); } + } else if (zoneini.got_key_label("faction", strval)) { + Faction *faction = Faction::find(strval); + if (!faction) { + zoneini.unknown_error("unkown faction '" + strval + "'"); + } else { + entity->set_color(faction->color()); + entity->set_color_second(faction->color_second()); + } } else { zoneini.unkown_key(); } |