Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2012-10-13 12:13:04 +0000
committerStijn Buys <ingar@osirion.org>2012-10-13 12:13:04 +0000
commit3b8ea0849fac5532d61a90608bda876cf518ba1b (patch)
treedb7f34c22e746cfdc04574e0054c324c53838122 /src/game/base/weapon.cc
parent0d58c4f8ab1d174c808c77bf94342c91f6e0c443 (diff)
Read weapons.ini.
Diffstat (limited to 'src/game/base/weapon.cc')
-rw-r--r--src/game/base/weapon.cc214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/game/base/weapon.cc b/src/game/base/weapon.cc
new file mode 100644
index 0000000..8eca691
--- /dev/null
+++ b/src/game/base/weapon.cc
@@ -0,0 +1,214 @@
+/*
+ base/weapon.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 <assert.h>
+#include <cmath>
+
+#include "sys/sys.h"
+#include "filesystem/inifile.h"
+#include "auxiliary/functions.h"
+#include "core/func.h"
+#include "base/game.h"
+#include "base/weapon.h"
+
+namespace game
+{
+
+core::InfoType *Weapon::weapon_infotype = 0;
+
+void func_list_weapons(const std::string &args)
+{
+ Weapon::list();
+}
+
+// load weapon types from ini file
+bool Weapon::init()
+{
+
+ // initialize weapon InfoType
+ weapon_infotype = new core::InfoType("weapon");
+
+ filesystem::IniFile weaponsini;
+ weaponsini.open("ini/weapons");
+ if (!weaponsini.is_open()) {
+ con_error << "Could not open " << weaponsini.name() << "!" << std::endl;
+ return false;
+ }
+
+ con_print << "^BLoading weapons..." << std::endl;
+
+ size_t count = 0;
+
+ Weapon *weapon = 0;
+ std::string str;
+ long l;
+ float f;
+
+ while (weaponsini.getline()) {
+ if (weaponsini.got_key()) {
+
+ if (weaponsini.section().compare("mine") == 0) {
+ if (weaponsini.got_key_label("label", str)) {
+ weapon->set_label(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("name", str)) {
+ weapon->set_name(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("info", str)) {
+ weapon->add_text(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("model", str)) {
+ weapon->set_modelname(str);
+ continue;
+
+ } else if (weaponsini.got_key_long("price", l)) {
+ weapon->set_price(l);
+ continue;
+
+ } else if (weaponsini.got_key_float("volume", f)) {
+ weapon->set_volume(f);
+ continue;
+
+ } else if (weaponsini.got_key_long("level", l)) {
+ weapon->set_level(l);
+ continue;
+
+ } else {
+ weaponsini.unknown_key();
+ }
+ } else if (weaponsini.section().compare("cannon") == 0) {
+ if (weaponsini.got_key_label("label", str)) {
+ weapon->set_label(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("name", str)) {
+ weapon->set_name(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("info", str)) {
+ weapon->add_text(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("model", str)) {
+ weapon->set_modelname(str);
+ continue;
+
+ } else if (weaponsini.got_key_long("price", l)) {
+ weapon->set_price(l);
+ continue;
+
+ } else if (weaponsini.got_key_float("volume", f)) {
+ weapon->set_volume(f);
+ continue;
+
+ } else if (weaponsini.got_key_long("level", l)) {
+ weapon->set_level(l);
+ continue;
+
+ } else {
+ weaponsini.unknown_key();
+ }
+ } else if (weaponsini.section().compare("turret") == 0) {
+ if (weaponsini.got_key_label("label", str)) {
+ weapon->set_label(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("name", str)) {
+ weapon->set_name(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("info", str)) {
+ weapon->add_text(str);
+ continue;
+
+ } else if (weaponsini.got_key_string("model", str)) {
+ weapon->set_modelname(str);
+ continue;
+
+ } else if (weaponsini.got_key_long("price", l)) {
+ weapon->set_price(l);
+ continue;
+
+ } else if (weaponsini.got_key_float("volume", f)) {
+ weapon->set_volume(f);
+ continue;
+
+ } else if (weaponsini.got_key_long("level", l)) {
+ weapon->set_level(l);
+ continue;
+
+ } else {
+ weaponsini.unknown_key();
+ }
+ }
+
+ } else if (weaponsini.got_section()) {
+
+ if (weaponsini.got_section("mine")) {
+ weapon = new Weapon();
+ count++;
+
+ } else if (weaponsini.got_section("cannon")) {
+ weapon = new Weapon();
+ count++;
+
+ } else if (weaponsini.got_section("turret")) {
+ weapon = new Weapon();
+ count++;
+
+ } else if (weaponsini.got_section()) {
+ weaponsini.unknown_section();
+ }
+ }
+ }
+
+ // add weapon infos
+ con_debug << " " << weaponsini.name() << " " << count << " weapon types" << std::endl;
+
+ weaponsini.close();
+
+ core::Func *func = core::Func::add("list_weapons", func_list_weapons);
+ func->set_info("list available weapon types");
+
+ return true;
+}
+
+void Weapon::done()
+{
+ core::Func::remove("list_weapons");
+}
+
+/* ---- class Weapon ------------------------------------------- */
+
+Weapon::Weapon() : core::Info(weapon_infotype)
+{
+ set_volume(1);
+ set_level(1);
+}
+
+Weapon::~Weapon()
+{
+}
+
+Weapon *Weapon::find(const std::string & label)
+{
+ if (!label.size()) {
+ return 0;
+ }
+
+ return (Weapon *) core::Info::find(weapon_infotype, label);
+}
+
+void Weapon::list()
+{
+ core::Info::list(weapon_infotype);
+}
+
+} // namespace game
+