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>2010-11-13 18:42:15 +0000
committerStijn Buys <ingar@osirion.org>2010-11-13 18:42:15 +0000
commit8506f3a8af135c55fdf9adae2859dfa210a2aa0f (patch)
treed952fcefb529159fde6d49d3b77c0275341b9019 /src/game/base/ship.cc
parenta2c7b459910ca386117cc115a40da77be5224225 (diff)
adds a ship key for world entities which applies ship model settings to a world entity
Diffstat (limited to 'src/game/base/ship.cc')
-rw-r--r--src/game/base/ship.cc43
1 files changed, 11 insertions, 32 deletions
diff --git a/src/game/base/ship.cc b/src/game/base/ship.cc
index f88afd1..b8dc6d0 100644
--- a/src/game/base/ship.cc
+++ b/src/game/base/ship.cc
@@ -27,24 +27,19 @@ const float MIN_DELTA = 0.000001f;
Ship::Ship(core::Player *owner, const ShipModel *shipmodel) : core::EntityControlable()
{
assert(shipmodel);
- ship_shipmodel = shipmodel;
entity_moduletypeid = ship_enttype;
set_radius(0);
- // apply template settings
- if (ship_shipmodel->model_template()) {
- ship_shipmodel->model_template()->apply(this);
- }
+ ship_shipmodel = shipmodel;
+ ship_impulsedrive_timer = 0;
+ ship_jumpdrive_timer = 0;
+ ship_jumpdepart = 0;
+
+ // apply ship type settings
+ ship_shipmodel->apply(this);
- // apply ship model settings
- // shipmodel overrides template model and radius
- if (ship_shipmodel->modelname().size()) {
- set_modelname(ship_shipmodel->modelname());
- }
- if (ship_shipmodel->radius()) {
- set_radius(ship_shipmodel->radius());
- }
+ // radius fallback values
if (!radius()) {
if (model()) {
set_radius(model()->radius());
@@ -53,15 +48,7 @@ Ship::Ship(core::Player *owner, const ShipModel *shipmodel) : core::EntityContro
if (!radius()) {
set_radius(0.5f);
}
-
- set_name(ship_shipmodel->name());
- set_info(ship_shipmodel);
-
- ship_jumpdrive = ship_shipmodel->jumpdrive();
- ship_impulsedrive_timer = 0;
- ship_jumpdrive_timer = 0;
- ship_jumpdepart = 0;
-
+
if (owner) {
// this ship is owned by a player,
// player colors override template colors
@@ -75,10 +62,9 @@ Ship::Ship(core::Player *owner, const ShipModel *shipmodel) : core::EntityContro
// add an inventory
set_inventory(new core::Inventory());
inventory()->set_capacity(ship_shipmodel->maxcargo());
- } else {
- set_label(ship_shipmodel->label());
}
+ // menus for docked players
if (ship_shipmodel->dockable()) {
using core::MenuDescription;
using core::ButtonDescription;
@@ -97,18 +83,11 @@ Ship::Ship(core::Player *owner, const ShipModel *shipmodel) : core::EntityContro
set_flag(core::Entity::Dockable);
}
- set_mass(ship_shipmodel->mass());
- set_impulse_force(ship_shipmodel->impulse_force());
- set_thrust_force(ship_shipmodel->thrust_force());
- set_strafe_force(ship_shipmodel->strafe_force());
- set_turn_force(ship_shipmodel->turn_force());
- set_roll_force(ship_shipmodel->roll_force());
-
+ // initialize physics
reset();
const float linear_damp = 0.8f;
const float angular_damp = 0.8f;
-
body()->setDamping(linear_damp, angular_damp);
}