/* base/faction.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "core/func.h" #include "core/parser.h" #include "base/faction.h" namespace game { core::InfoType *Faction::faction_infotype = 0; void func_list_faction(const std::string &args) { Faction::list(); } Faction *Faction::find(const std::string & label) { if (!label.size()) { return 0; } return (Faction *) core::Info::find(faction_infotype, label); } void Faction::list() { core::Info::list(faction_infotype); } bool Faction::init() { // initialize faction InfoType faction_infotype = new core::InfoType("faction"); std::string inifilename("ini/factions"); filesystem::IniFile inifile; inifile.open(inifilename); if (!inifile.is_open()) { con_warn << "Could not open " << inifile.name() << std::endl; return false; } con_print << "^BLoading factions..." << std::endl; size_t count = 0; Faction *faction = 0; std::string strvalue; math::Color colorvalue; while (inifile.getline()) { if (inifile.got_section()) { faction = 0; if (inifile.got_section("faction")) { count++; faction = new Faction(); } else { inifile.unknown_section(); } } else if (inifile.got_key()) { if (inifile.in_section("faction")) { if (inifile.got_key_label("label", strvalue)) { faction->set_label(strvalue); } else if (inifile.got_key_string("name", strvalue)) { faction->set_name(strvalue); } else if (inifile.got_key_string("info", strvalue)) { faction->add_text(strvalue); } else if (inifile.got_key_color("color", colorvalue)) { faction->set_color(colorvalue); } else if (inifile.got_key_color("colorsecond", colorvalue)) { faction->set_color_second(colorvalue); } else { inifile.unknown_key(); } } } } inifile.close(); if (!count) { con_warn << "No factions found!" << std::endl; return true; // non-fatal } con_debug << " " << inifile.name() << " " << count << " factions" << std::endl; core::Func *func = core::Func::add("list_faction", func_list_faction); func->set_info("list available factions"); return true; } void Faction::done() { core::Func::remove("list_faction"); } Faction::Faction() : core::Info(faction_infotype), faction_color(), faction_color_second() { } Faction::~Faction() { } void Faction::apply(core::Entity *entity) const { // set primary color entity->set_color(color()); // set secondary color entity->set_color_second(color_second()); } } // namespace game