From 8039544940b6145dcc8c63bcd4e06073ed61801e Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 10 Nov 2013 22:23:50 +0000 Subject: Renamed entity_destroyed to entity_died to prevent confusion with the Entity::Destroyed state, fixed a potential memory leak. --- src/core/entity.cc | 10 ++++---- src/core/entity.h | 60 +++++++++++++++++++++++++++++++------------- src/core/entityprojectile.cc | 2 +- src/core/gameconnection.cc | 8 +++--- src/core/gameserver.cc | 8 +++--- src/core/netserver.cc | 4 +-- 6 files changed, 59 insertions(+), 33 deletions(-) diff --git a/src/core/entity.cc b/src/core/entity.cc index 7d538a0..efd6248 100644 --- a/src/core/entity.cc +++ b/src/core/entity.cc @@ -152,7 +152,7 @@ Entity::Entity() : entity_shape = Diamond; entity_created = true; - entity_destroyed = false; + entity_died = false; entity_dirty = false; entity_keepalive = 0; @@ -190,7 +190,7 @@ Entity::Entity(std::istream & is) entity_speed = 0.0f; entity_created = true; - entity_destroyed = false; + entity_died = false; entity_inventory = 0; entity_slots = 0; @@ -363,7 +363,7 @@ void Entity::print_inventory() const void Entity::die() { - entity_destroyed = true; + entity_died = true; } void Entity::clear_updates() @@ -884,7 +884,7 @@ void EntityDynamic::reset() } // remove Docked and Destroyed entities from the physics simulation - if (destroyed() || (state() == core::Entity::Docked) || (state() == core::Entity::Destroyed)) { + if (died() || (state() == core::Entity::Docked) || (state() == core::Entity::Destroyed)) { if (entity_body) { @@ -1468,7 +1468,7 @@ void EntityControlable::reset() } // remove Docked and Destroyed entities from the physics simulation - if (destroyed() || (state() == core::Entity::Docked) || (state() == core::Entity::Destroyed)) { + if (died() || (state() == core::Entity::Docked) || (state() == core::Entity::Destroyed)) { if (entity_body) { diff --git a/src/core/entity.h b/src/core/entity.h index f5a6d52..5a028bf 100644 --- a/src/core/entity.h +++ b/src/core/entity.h @@ -36,7 +36,9 @@ class EntityControlable; namespace core { -/// The base world entity. All gameworld entities must derive from this class. +/** + * @brief The base world entity. All gameworld entities must derive from this class. + * */ class Entity : public Label { friend class Extension; @@ -52,28 +54,49 @@ public: * */ enum Flags { NonSolid = 2, Bright = 4, Dockable = 8, ShowOnMap = 16, KeepAlive = 32 }; - /// Entity type constants + /** + * @brief Entity type constants + * @see Entity::type() + * */ enum Type { Default = 0, Dynamic = 1, Controlable = 2, Globe = 3, Projectile = 4 }; - /// Entity shape constants + /** + * @brief Entity shape constants + * @see Entity::shape() + * */ enum Shape { Diamond = 0, Sphere = 1, Cube = 2, Axis = 3 }; - /// EntityDynamic State constants + /** + * @brief EntityDynamic state constants + * @see EntityDynamic::state() + * */ enum State { Normal = 0, NoPower = 1, ImpulseInitiate = 2, Impulse = 3, JumpInitiate = 4, Jump = 5, Docked = 6, Destroyed = 7 }; - /// entity menus collection typedef + /** + * @brief entity menu collection type definition + * */ typedef std::list Menus; - /// type definition for entity bullet shapes collection + /** + * @brief entity bullet shapes collection type definition + * */ typedef std::list CollisionShapes; - /// create a new entity and add it to the registry + /** + * @brief server-side constructor + * create a new entity and add it to the registry + * */ Entity(); - /// create an entity from stream data + /** + * @brief client-side constructor + * create an entity from stream data + * */ Entity(std::istream & is); - /// destroy an entity + /** + * @brief destructor + * */ virtual ~Entity(); /** @@ -241,12 +264,12 @@ public: MenuDescription *find_menu(const std::string &label); /// true if the entity is to be deleted - inline bool destroyed() const { - return entity_destroyed; + inline const bool died() const { + return entity_died; } /// time when the entity was last alive - inline unsigned long keepalive() const { + inline const unsigned long keepalive() const { return entity_keepalive; } @@ -283,10 +306,10 @@ public: } /** - * @brief mark the entity as destroyed + * @brief mark the entity as dead * die() should be called by the game module when it needs to destroy an entity, * the game server will broadcast the delete event to the clients. - * The game module should not delete an entity directly. + * The game module should not delete entities directly. */ virtual void die(); @@ -513,12 +536,15 @@ public: return entity_registry; } - /* entity_ variables can be set by the module */ - + /** + * @brief game module type id + * this id can be assigned by the game module + * */ unsigned int entity_moduletypeid; bool entity_created; - bool entity_destroyed; + + bool entity_died; /// timestamp when entity data was received from the server float entity_servertimestamp; diff --git a/src/core/entityprojectile.cc b/src/core/entityprojectile.cc index 108d347..440c46b 100644 --- a/src/core/entityprojectile.cc +++ b/src/core/entityprojectile.cc @@ -104,7 +104,7 @@ void EntityProjectile::reset() } // remove Docked and Destroyed entities from the physics simulation - if (destroyed() || (state() == Entity::Docked) || (state() == Entity::Destroyed)) { + if (died() || (state() == Entity::Docked) || (state() == Entity::Destroyed)) { if (entity_body) { diff --git a/src/core/gameconnection.cc b/src/core/gameconnection.cc index 7bdadad..1fbcf26 100644 --- a/src/core/gameconnection.cc +++ b/src/core/gameconnection.cc @@ -262,14 +262,14 @@ void GameConnection::frame(unsigned long timestamp) } } - // delete entities were required - if (entity->destroyed()) { + // remove deleted entities + if ((*it).second->died()) { + delete (*it).second; + (*it).second = 0; Entity::registry().erase(it++); } else { ++it; } - - } float f = 0; diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 9e24c64..86f130f 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -652,7 +652,7 @@ void GameServer::frame(const unsigned long timestamp) // run entity game frames for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); ++it) { Entity *entity = (*it).second; - if (!entity->destroyed()) { + if (!entity->died()) { entity->frame(elapsed); } @@ -670,7 +670,7 @@ void GameServer::frame(const unsigned long timestamp) for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end(); ++it) { Entity *entity = (*it).second; Zone *zone = entity->zone(); - if (zone && entity->has_flag(Entity::KeepAlive) && !entity->destroyed()) { + if (zone && entity->has_flag(Entity::KeepAlive) && !entity->died()) { // reset timeout counter if the zone is active if (zone->keepalive_run() && zone->keepalive_box().inside(entity->location())) { entity->set_keepalive(this->timestamp()); @@ -723,7 +723,7 @@ void GameServer::frame(const unsigned long timestamp) } // view is to be deleted - if (view->destroyed()) { + if (view->died()) { if (control) { // player is docked at deleted entity if (control->state() == Entity::Docked) { @@ -750,7 +750,7 @@ void GameServer::frame(const unsigned long timestamp) // remove deleted entities and mark remaining entities as updated for (Entity::Registry::iterator it = Entity::registry().begin(); it != Entity::registry().end();) { // remove deleted entities - if ((*it).second->destroyed()) { + if ((*it).second->died()) { delete (*it).second; (*it).second = 0; Entity::registry().erase(it++); diff --git a/src/core/netserver.cc b/src/core/netserver.cc index 84ed76c..17fef86 100644 --- a/src/core/netserver.cc +++ b/src/core/netserver.cc @@ -356,7 +356,7 @@ void NetServer::client_frame(NetClient *client, unsigned long timestamp) for (Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); ++it) { Entity *entity = (*it); - if (!entity->entity_destroyed) { + if (!entity->died()) { send_entity_create(client, entity); } } @@ -381,7 +381,7 @@ void NetServer::client_frame(NetClient *client, unsigned long timestamp) Entity *entity = (*it).second; if (entity->zone() == zone) { - if (entity->entity_destroyed) { + if (entity->died()) { if (!entity->entity_created) { send_entity_delete(client, entity); } -- cgit v1.2.3