/* core/entity.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2. */ #include "sys/sys.h" #include "core/entity.h" #include namespace core { // --- Entity ----------------------------------------------------- Entity::Entity(unsigned int entity_flags, unsigned int entity_type) { flags = entity_flags; type = entity_type; base_shape = entity::Diamond; base_color = math::Color(1.0f, 1.0f, 1.0f); base_radius = 1.0f; core::entity::add(this); } Entity::~Entity() {} // --- EntityDynamic ------------------------------------------ EntityDynamic::EntityDynamic(unsigned int entity_flags, unsigned int entity_type) : Entity(entity_type, entity_flags), speed(0,0,0) { } // --- EntityControlable ------------------------------------------ EntityControlable::EntityControlable(unsigned int entity_flags, unsigned int entity_type) : EntityDynamic(entity_type, entity_flags) { owner = 0; } // --- namespace entity ------------------------------------------- namespace entity { std::vector registry; void add(Entity *ent) { std::vector::iterator it; unsigned int entity_id = 1; for (it=registry.begin(); it != registry.end() && entity_id == (*it)->id; it++) { entity_id++; } ent->id = entity_id; registry.push_back(ent); } void remove(unsigned int entity_id) { std::vector::iterator it; for (it=registry.begin(); it != registry.end(); it++) { if (entity_id == (*it)->id) { delete((*it)); registry.erase(it); return; } } } void clear() { std::vector::iterator it; for (it=registry.begin(); it != registry.end(); it++) { delete(*it); (*it) = 0; } registry.clear(); } void list() { std::vector::iterator it; for (it=registry.begin(); it != registry.end(); it++) { con_print << " id " << std::setw(3) << (*it)->id << " type " << std::setw(3) << (*it)->type << " " << (*it)->label << std::endl; } con_print << registry.size() << " registered entities" << std::endl; } } }