/* 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) { flags = entity_flags; core_shape = entity::Diamond; core_color = math::Color(1.0f, 1.0f, 1.0f); core_radius = 1.0f; core::entity::add(this); type = 0; direction = 0; } Entity::~Entity() {} // --- EntityDynamic ------------------------------------------ EntityDynamic::EntityDynamic(unsigned int entity_flags) : Entity(entity_flags) { speed = 0.0f; } EntityDynamic::~EntityDynamic() { } // --- EntityControlable ------------------------------------------ EntityControlable::EntityControlable(unsigned int entity_flags) : EntityDynamic(entity_flags) { owner = 0; target_direction = 0.0f; target_thrust = 0.0f; } EntityControlable::~EntityControlable() { } // --- 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(4) << (*it)->id << " type " << std::setw(4) << (*it)->core_type() << ":" << std::setw(4) << (*it)->type << " " << (*it)->label << std::endl; } con_print << registry.size() << " registered entities" << std::endl; } void frame(float seconds) { std::vector::iterator it; for (it=registry.begin(); it != registry.end(); it++) { if ((*it)->core_type() == entity::Controlable) { static_cast(*it)->frame(seconds); } } } } }