Skip to content
Snippets Groups Projects
Commit 54ba8d3d authored by Joseph Walton-Rivers's avatar Joseph Walton-Rivers
Browse files

minor interface cleanup

parent ae7fed04
No related branches found
No related tags found
No related merge requests found
......@@ -36,13 +36,13 @@ static void setupPrefabs(fggl::ecs3::World& world, Prefabs& prefabs) {
{
// player (cube because my sphere function doesn't exist yet
prefabs.player = world.findProtoype("player");
prefabs.player = world.findPrototype("player");
world.add<fggl::phys::Dynamics>(prefabs.player);
}
{
// collectable
prefabs.collectable = world.findProtoype("collectable");
prefabs.collectable = world.findPrototype("collectable");
// we need both of these for callbacks to trigger.
world.add<fggl::phys::CollisionCallbacks>(prefabs.collectable);
......
......@@ -19,7 +19,7 @@
*/
namespace fggl::ecs3::prototype {
using entity_cb = std::function<void(const entity_t)>;
using EntityCallback = std::function<void(const entity_t)>;
class Entity {
public:
......@@ -124,7 +124,7 @@ namespace fggl::ecs3::prototype {
}
inline entity_t createFromPrototype(const std::string& name) {
return copy(findProtoype(name) );
return copy(findPrototype(name) );
}
entity_t copy(entity_t prototype) {
......@@ -150,9 +150,9 @@ namespace fggl::ecs3::prototype {
void createFromSpec(entity_t entity, const YAML::Node& compConfig) {
if ( compConfig ) {
for (const auto& it : compConfig ) {
const auto name = it.first.as<std::string>();
auto& config = it.second;
for (const auto& itr : compConfig ) {
const auto name = itr.first.as<std::string>();
const auto& config = itr.second;
auto compType = m_types.find( name.c_str() );
addFromConfig(entity, compType, config);
......@@ -160,23 +160,19 @@ namespace fggl::ecs3::prototype {
}
}
bool alive(entity_t entity) const {
if (entity == NULL_ENTITY) {
// tis a silly question, but can be asked by accident.
return false;
}
if ( m_killList.find( entity ) != m_killList.end() ) {
// getting reaped
return false;
}
inline auto alive(entity_t entity) const -> bool {
return entity != NULL_ENTITY
&& m_killList.find( entity ) == m_killList.end()
&& m_entities.find( entity ) != m_entities.end();
}
// check liveness
return m_entities.find( entity ) != m_entities.end();
inline auto exists(entity_t entity) const -> bool {
return entity != NULL_ENTITY
&& m_entities.find( entity ) != m_entities.end();
}
void destroy(entity_t entity) {
assert( entity != NULL_ENTITY && "attempted to kill null entity" );
assert( alive(entity) && "attempted to kill null entity" );
// TOOD resolve and clean components
//m_entities.erase(entity);
m_killList.insert(entity);
......@@ -238,7 +234,7 @@ namespace fggl::ecs3::prototype {
template<typename C>
C *add(entity_t entity_id) {
assert( entity_id != NULL_ENTITY && "attempted to add component on null entity" );
assert( alive(entity_id) && "attempted to add component on null entity" );
//spdlog::info("component '{}' added to '{}'", C::name, entity_id);
auto &entity = m_entities.at(entity_id);
......@@ -249,7 +245,7 @@ namespace fggl::ecs3::prototype {
}
void *add(entity_t entity_id, component_type_t component_id) {
assert( entity_id != NULL_ENTITY && "attempted to add component on null entity" );
assert( alive(entity_id) && "attempted to add component on null entity" );
auto meta = m_types.meta(component_id);
auto &entity = m_entities.at(entity_id);
......@@ -261,7 +257,7 @@ namespace fggl::ecs3::prototype {
template<typename C>
C *set(entity_t entity_id, const C *ptr) {
assert( entity_id != NULL_ENTITY && "attempted to set component on null entity" );
assert( alive( entity_id ) && "attempted to set component on null entity" );
//spdlog::info("component '{}' set on '{}'", C::name, entity_id);
auto &entity = m_entities.at(entity_id);
......@@ -272,7 +268,7 @@ namespace fggl::ecs3::prototype {
}
void *set(entity_t entity_id, component_type_t cid, const void *ptr) {
assert( entity_id != NULL_ENTITY && "attempted to set component on null entity" );
assert( alive( entity_id ) && "attempted to set component on null entity" );
auto &entity = m_entities.at(entity_id);
auto cMeta = m_types.meta(cid);
......@@ -301,8 +297,7 @@ namespace fggl::ecs3::prototype {
template<typename C>
C *get(entity_t entity_id) const {
assert( entity_id != NULL_ENTITY && "attempted to get component on null entity" );
assert( exists(entity_id) && "attempted to get component on null entity" );
C* ptr = tryGet<C>(entity_id);
if (ptr == nullptr) {
std::cerr << "entity " << entity_id << " does not have component "<< C::name << std::endl;
......@@ -312,7 +307,7 @@ namespace fggl::ecs3::prototype {
template<typename C>
void remove(entity_t entity_id) {
assert( entity_id != NULL_ENTITY && "attempted to remove component on null entity" );
assert( alive(entity_id) && "attempted to remove component on null entity" );
try {
auto &entity = m_entities.at(entity_id);
......@@ -326,16 +321,17 @@ namespace fggl::ecs3::prototype {
}
}
void *get(entity_t entity_id, component_type_t t) {
void *get(entity_t entity_id, component_type_t componentType) {
assert( exists(entity_id) && "attempted to get component on null entity" );
auto &entity = m_entities.at(entity_id);
return entity.get(t);
return entity.get(componentType);
}
void addDeathListener(const entity_cb& callback) {
void addDeathListener(const EntityCallback& callback) {
m_deathListeners.emplace_back(callback);
}
entity_t findProtoype(const std::string& name) const {
entity_t findPrototype(const std::string& name) const {
for ( const auto& [entity, obj] : m_entities ) {
if ( !obj.m_abstract ){
continue;
......@@ -351,7 +347,7 @@ namespace fggl::ecs3::prototype {
}
private:
std::vector< entity_cb > m_deathListeners;
std::vector<EntityCallback > m_deathListeners;
TypeRegistry &m_types;
entity_t m_next;
std::map<entity_t, Entity> m_entities;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment