Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-07-13 19:05:18 +0000
committerStijn Buys <ingar@osirion.org>2011-07-13 19:05:18 +0000
commitbb3a44030e4dda94a516102eaf9dd45e536fc94b (patch)
tree188187668970d8bf277f34d3f8d1266076c1f2a9 /src
parent6c758fe1739fe10a1409f959b459ea556ae8164b (diff)
Actually remove ships from the bullet simulation while docked.
Diffstat (limited to 'src')
-rw-r--r--src/game/base/ship.cc38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/game/base/ship.cc b/src/game/base/ship.cc
index d148f19..1aca505 100644
--- a/src/game/base/ship.cc
+++ b/src/game/base/ship.cc
@@ -105,20 +105,6 @@ Ship::~Ship()
{
}
-void Ship::reset()
-{
- current_target_direction = 0.0f;
- current_target_pitch = 0.0f;;
- current_target_roll = 0.0f;
- current_target_strafe = 0.0f;
- current_target_vstrafe = 0.0f;
- current_target_afterburner = 0.0f;
-
- EntityControlable::reset();
-
- body()->setDamping(ship_shipmodel->linear_damping(), ship_shipmodel->angular_damping());
-}
-
void Ship::func_impulse() {
switch (entity_state) {
@@ -286,6 +272,22 @@ void Ship::explode()
}
};
+
+void Ship::reset()
+{
+ current_target_direction = 0.0f;
+ current_target_pitch = 0.0f;;
+ current_target_roll = 0.0f;
+ current_target_strafe = 0.0f;
+ current_target_vstrafe = 0.0f;
+ current_target_afterburner = 0.0f;
+
+ if (state() != core::Entity::Docked) {
+ EntityControlable::reset();
+ body()->setDamping(ship_shipmodel->linear_damping(), ship_shipmodel->angular_damping());
+ }
+}
+
void Ship::set_zone(core::Zone *zone)
{
core::EntityControlable::set_zone(zone);
@@ -299,11 +301,13 @@ void Ship::set_state(int state)
EntityControlable::set_state(state);
if (state != core::Entity::Docked) {
+
ship_dock = 0;
} else if (body()) {
// FIXME this weird hack removes docked ships from the bullet simulation
// this should be moved into core:: together with the set_state() / reset() cycle
// The game module should not be bothered with this
+ // set_state() and reset() should be merged
if (entity_motionstate) {
delete entity_motionstate;
@@ -338,7 +342,7 @@ void Ship::set_state(int state)
if (entity_body_info) {
delete entity_body_info;
entity_body_info = 0;
- }
+ }
}
}
@@ -350,14 +354,14 @@ void Ship::set_dock(core::Entity *dock)
get_location().assign(dock->location());
get_axis().assign(dock->axis());
ship_dock = dock;
- set_state(core::Entity::Docked);
+
// if the dock is not owned by a player. set it as spawn
const core::Player *owner = (dock->type() == core::Entity::Controlable ? static_cast<core::EntityControlable *>(dock)->owner() : 0 );
if (!owner)
set_spawn(dock);
- reset();
+ set_state(core::Entity::Docked);
}
void Ship::launch()