From b460b3193e54b7364bb75ff26ce6f999887e454b Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Fri, 12 Nov 2010 16:24:17 +0000 Subject: moved global entity info type to core::Entity::infotype(), automatic generation of jumppoint and jumpgate names and descriptions, prepared game code for the seperation of Entity::radius() and Model::radius() --- src/core/entity.cc | 12 ++++++++++-- src/core/entity.h | 13 +++++++++++++ src/core/gameserver.cc | 5 +++-- src/core/parser.cc | 14 +------------- src/core/parser.h | 11 ----------- 5 files changed, 27 insertions(+), 28 deletions(-) (limited to 'src/core') diff --git a/src/core/entity.cc b/src/core/entity.cc index 7f48c08..9e467fe 100644 --- a/src/core/entity.cc +++ b/src/core/entity.cc @@ -29,6 +29,8 @@ using math::Vector3f; /* ---- Static functions for the Entity registry ------------------- */ +const InfoType *Entity::entity_infotype = 0; + Entity::Registry Entity::entity_registry; size_t Entity::entity_nextid = 0; @@ -314,7 +316,9 @@ void Entity::set_model(model::Model *model) // server-side property should not clear modelname entity_model = model; if (entity_model) { - entity_radius = entity_model->radius(); + + //entity_radius = entity_model->radius(); + entity_modelname.assign(entity_model->name()); } @@ -502,6 +506,10 @@ void Entity::remove_menu(std::string const &label) void Entity::reset() { + if (!radius()) { + return; + } + // location and orientation btTransform t; t.setIdentity(); @@ -918,7 +926,7 @@ void EntityControlable::set_zone(Zone *zone) if (entity_zone) { entity_zone->add(this); - if (body() && entity_zone->physics()) { + if (body() && entity_zone->physics()) { entity_zone->physics()->addRigidBody(body()); entity_zone->physics()->addAction(entity_actioninterface); reset(); diff --git a/src/core/entity.h b/src/core/entity.h index 48dd949..1996e10 100644 --- a/src/core/entity.h +++ b/src/core/entity.h @@ -402,6 +402,16 @@ public: virtual void serialize_server_update(std::ostream & os) const; /* ---- static --------------------------------------------- */ + + /// default infotype for entities + static inline const InfoType *infotype() { + return entity_infotype; + } + + /// set the default infotype for entities + static inline void set_infotype(const InfoType *infotype) { + entity_infotype = infotype; + } /// type definition for the entity registry typedef std::map Registry; @@ -492,6 +502,9 @@ private: static size_t entity_nextid; static void add(Entity *ent); + + static const InfoType *entity_infotype; + }; diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 5ea6206..7d6fc96 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -130,7 +130,8 @@ GameServer::GameServer() : GameInterface() server_maxplayerid = 1; server_startup = application()->timestamp(); - Parser::init(); + // create the default infotype for entities + Entity::set_infotype(new InfoType("entity")); Physics::init(); @@ -237,7 +238,7 @@ GameServer::~GameServer() Physics::done(); - Parser::done(); + Entity::set_infotype(0); server_instance = 0; } diff --git a/src/core/parser.cc b/src/core/parser.cc index 3806b99..953cd50 100644 --- a/src/core/parser.cc +++ b/src/core/parser.cc @@ -11,18 +11,6 @@ namespace core { -InfoType *Parser::entity_infotype = 0; - -void Parser::init() -{ - entity_infotype = new InfoType("entity"); -} - -void Parser::done() -{ - entity_infotype = 0; -} - bool Parser::got_entity_key(filesystem::IniFile &inifile, core::Entity *entity) { math::Vector3f v; @@ -60,7 +48,7 @@ bool Parser::got_entity_key(filesystem::IniFile &inifile, core::Entity *entity) } else if (inifile.got_key_string("info", strval)) { if (!entity->info()) { - entity->set_info(new Info(entity_infotype, entity->label().c_str())); + entity->set_info(new Info(Entity::infotype(), entity->label().c_str())); } entity->info()->add_text(strval); return true; diff --git a/src/core/parser.h b/src/core/parser.h index 993c307..06ddc27 100644 --- a/src/core/parser.h +++ b/src/core/parser.h @@ -18,19 +18,8 @@ namespace core class Parser { public: - /// initialize parser infotypes - static void init(); - - /// clean up parser internals - static void done(); - /// read default entity keys from an ini file static bool got_entity_key(filesystem::IniFile &inifile, core::Entity *entity); - -private: - /// default infotype for entities - static InfoType *entity_infotype; - }; } -- cgit v1.2.3