Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r--src/game/base/game.cc92
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();
}