diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/info.cc | 27 | ||||
-rw-r--r-- | src/core/info.h | 9 | ||||
-rw-r--r-- | src/game/base/shipmodel.cc | 22 | ||||
-rw-r--r-- | src/game/base/shipmodel.h | 3 | ||||
-rw-r--r-- | src/game/base/weapon.cc | 56 | ||||
-rw-r--r-- | src/game/base/weapon.h | 9 |
6 files changed, 111 insertions, 15 deletions
diff --git a/src/core/info.cc b/src/core/info.cc index dbe4c76..dde1b20 100644 --- a/src/core/info.cc +++ b/src/core/info.cc @@ -146,13 +146,38 @@ void Info::clear_timestamp() info_timestamp = 0; } -void Info::add_text(const char *text) +void Info::add_line(const std::string & text) +{ + add_line(text.c_str()); +} + +void Info::add_line(const char *text) { std::string str(text); aux::strip_quotes(str); info_text.push_back(str); } +void Info::add_text(const char *text) +{ + std::string str(text); + aux::strip_quotes(str); + + if (!info_text.size()) { + info_text.push_back(str); + + } else if (str.size()) { + if ((*info_text.rbegin()).size()) { + (*info_text.rbegin()) += ' '; + (*info_text.rbegin()).append(str); + } else { + info_text.push_back(str); + } + } else { + info_text.push_back(str); + } +} + void Info::add_text(const std::string & text) { add_text(text.c_str()); diff --git a/src/core/info.h b/src/core/info.h index dfec17c..2859dac 100644 --- a/src/core/info.h +++ b/src/core/info.h @@ -143,11 +143,18 @@ public: void set_timestamp(const unsigned long timestamp); /// add a line of info text - void add_text(const std::string & text); + void add_line(const std::string & text); /// add a line of info text + void add_line(const char *text); + + /// add info text without newline + void add_text(const std::string & text); + + /// add info text without newline void add_text(const char *text); + /// clear the info text void clear_text(); diff --git a/src/game/base/shipmodel.cc b/src/game/base/shipmodel.cc index ba01765..a308b64 100644 --- a/src/game/base/shipmodel.cc +++ b/src/game/base/shipmodel.cc @@ -230,32 +230,34 @@ void ShipModel::generate_info() { // default mass set_mass(radius() * 100.0f); - - //clear_text(); if (text().size()) - add_text(""); + add_line(""); - add_text("^BSpecifications:^N"); + add_line("^BSpecifications:^N"); std::stringstream str; str << "price: ^B" << price() << " ^Ncredits"; - add_text(str.str()); + add_line(str.str()); str.str(""); - str << "cargo hold: ^B" << maxcargo() << " ^Ncubic meters"; - add_text(str.str()); + str << "cargo hold: ^B" << maxcargo() << " ^Ncubic meter"; + add_line(str.str()); str.str(""); str << "mass: ^B" << mass() << " ^Nmetric tonnes"; - add_text(str.str()); + add_line(str.str()); + str.str(""); + + str << "hull strength ^B" << maxarmor() << "^N"; + add_line(str.str()); str.str(""); if (jumpdrive()) { - add_text("^Bhyperspace jump drive"); + add_line("^Bhyperspace jump drive"); } if (dockable()) { - add_text("^Bdockable"); + add_line("^Bdockable"); } } diff --git a/src/game/base/shipmodel.h b/src/game/base/shipmodel.h index 243860d..ef37cbf 100644 --- a/src/game/base/shipmodel.h +++ b/src/game/base/shipmodel.h @@ -232,6 +232,9 @@ protected: } public: + /** + * @brief generate specifications info. + * */ void generate_info(); void buy(core::EntityControlable *buyer, core::Entity *seller); diff --git a/src/game/base/weapon.cc b/src/game/base/weapon.cc index ab1ae49..22527c2 100644 --- a/src/game/base/weapon.cc +++ b/src/game/base/weapon.cc @@ -196,20 +196,24 @@ bool Weapon::init() } else if (weaponsini.got_section()) { + Weapon *previous = 0; if (weaponsini.got_section("mine")) { + previous = weapon; weapon = new Weapon(); weapon->set_stackable(true); weapon->set_subtype(Mine); count++; } else if (weaponsini.got_section("cannon")) { + previous = weapon; weapon = new Weapon(); weapon->set_stackable(false); weapon->set_subtype(Cannon); count++; } else if (weaponsini.got_section("turret")) { + previous = weapon; weapon = new Weapon(); weapon->set_stackable(false); weapon->set_subtype(Turret); @@ -222,10 +226,18 @@ bool Weapon::init() } else if (weaponsini.got_section()) { weaponsini.unknown_section(); - } + } + + if (previous) { + previous->generate_info(); + } } } + if (weapon) { + weapon->generate_info(); + } + // add weapon infos con_debug << " " << weaponsini.name() << " " << count << " weapon types" << std::endl; @@ -290,5 +302,47 @@ void Weapon::set_subtype(const SubType subtype) weapon_subtype = subtype; } +void Weapon::generate_info() +{ + if (text().size()) + add_line(""); + + add_line("^BSpecifications:^N"); + + std::stringstream str; + str << "price: ^B" << price() << " ^Ncredits"; + add_line(str.str()); + str.str(""); + + str << "volume: ^B" << volume() << " ^Ncubic meter"; + add_line(str.str()); + str.str(""); + + if (subtype() == Cannon) { + add_line(""); + add_line("^BProjectiles:^N"); + str << "damage: ^B" << damage() << "^N"; + add_line(str.str()); + str.str(""); + + str << "range: ^B" << floor(((float) projectile_lifespan() * projectile_speed()) / 10.0f) << " ^Nmeter"; + add_line(str.str()); + str.str(""); + + str << "speed: ^B" << floor(projectile_speed()) * 100.0f << " ^Nm/sec"; + add_line(str.str()); + str.str(""); + + str << "interval: ^B" << projectile_interval() << " ^Nms"; + add_line(str.str()); + str.str(""); + + } else { + str << "damage: ^B" << damage() << "^N"; + add_line(str.str()); + str.str(""); + } +} + } // namespace game diff --git a/src/game/base/weapon.h b/src/game/base/weapon.h index b4a790c..746a9ad 100644 --- a/src/game/base/weapon.h +++ b/src/game/base/weapon.h @@ -53,7 +53,7 @@ public: } /** - * @brief speed of projectiles generated by this weapon + * @brief speed of projectiles generated by this weapon, in game units per second * */ inline const float projectile_speed() const { @@ -123,7 +123,12 @@ public: { weapon_projectile_modelname.assign(projectile_modelname); } - + + /** + * @brief generate specifications info. + * */ + void generate_info(); + /* --- static registry functions ---------------------------------- */ static Weapon *find(const std::string & label); |