Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2010-11-08 14:34:44 +0000
committerStijn Buys <ingar@osirion.org>2010-11-08 14:34:44 +0000
commitb7dc0938eb7d59f928bbcf2a3a4877a6f60940e5 (patch)
tree5b4b4353f2012fced4180072e0b0def8ba8d22db /src/core
parentb685a594ae43aa30173912c9fb1177d507ec5a08 (diff)
moved clear() from game::Game~ to core::GameServer~ (solves FIXME),
unified bounding box code into math::BoundingBox3f class
Diffstat (limited to 'src/core')
-rw-r--r--src/core/entity.cc4
-rw-r--r--src/core/gameserver.cc15
2 files changed, 15 insertions, 4 deletions
diff --git a/src/core/entity.cc b/src/core/entity.cc
index 4f13efa..af100a9 100644
--- a/src/core/entity.cc
+++ b/src/core/entity.cc
@@ -512,7 +512,7 @@ void Entity::reset()
if (!entity_body) {
// create collision shape
if (model()) {
- entity_collision_shape = new btBoxShape(to_btVector3(model()->maxbbox()));
+ entity_collision_shape = new btBoxShape(to_btVector3(model()->box().max()));
} else {
entity_collision_shape = new btSphereShape(radius());
}
@@ -938,7 +938,7 @@ void EntityControlable::reset()
if (!entity_body) {
// create collision shape
if (model()) {
- entity_collision_shape = new btBoxShape(to_btVector3(model()->maxbbox()));
+ entity_collision_shape = new btBoxShape(to_btVector3(model()->box().max()));
} else {
entity_collision_shape = new btSphereShape(radius());
}
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc
index f84e228..412c554 100644
--- a/src/core/gameserver.cc
+++ b/src/core/gameserver.cc
@@ -209,10 +209,13 @@ GameServer::~GameServer()
delete server_network;
server_network = 0;
}
-
+
if (server_module->interactive())
save_config();
+ // clear game data
+ clear();
+
if (server_module) {
if (!Cvar::sv_dedicated->value())
player_disconnect(localplayer());
@@ -520,9 +523,17 @@ void GameServer::frame(unsigned long timestamp)
math::Vector3f keepalive_minbox;
// run a game frame on all dynamic and controlable entities
- for (Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) {
+ for (Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) {
Entity *entity = (*it);
+
+ // FIXME
+ // if a controlable changes zone during the entity frame (like when using jumpgates)
+ // the zone content iterator will become invalid
+ // possible solutions
+ // 1) move the actual zone change into the entity_destroyed sequence (renamed entity.oldzone to newzone and track changes)
+ // 2) revert to using the entity iterator and add the keep_alive min- and maxbox to the zone class
+
if (entity->type() == Entity::Dynamic) {
entity->frame(elapsed);