From 8506f3a8af135c55fdf9adae2859dfa210a2aa0f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 13 Nov 2010 18:42:15 +0000 Subject: adds a ship key for world entities which applies ship model settings to a world entity --- src/game/base/ship.cc | 43 +++++++++++-------------------------------- 1 file changed, 11 insertions(+), 32 deletions(-) (limited to 'src/game/base/ship.cc') 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); } -- cgit v1.2.3