entity.cpp 926 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "entity.h"
  2. #include <mutex>
  3. #include <unordered_map>
  4. namespace Engine::Core {
  5. namespace {
  6. std::mutex g_component_type_ids_mutex;
  7. std::unordered_map<std::type_index, std::size_t> g_component_type_ids;
  8. std::size_t g_next_component_type_id = 0;
  9. } // namespace
  10. Entity::Entity(EntityID id) : m_id(id) {}
  11. auto Entity::get_id() const -> EntityID { return m_id; }
  12. void Entity::set_component_change_callback(ComponentChangeCallback callback) {
  13. m_component_change_callback = std::move(callback);
  14. }
  15. auto Entity::resolve_component_type_id(std::type_index type) -> std::size_t {
  16. std::lock_guard<std::mutex> const lock(g_component_type_ids_mutex);
  17. auto const it = g_component_type_ids.find(type);
  18. if (it != g_component_type_ids.end()) {
  19. return it->second;
  20. }
  21. std::size_t const new_id = g_next_component_type_id++;
  22. g_component_type_ids.emplace(type, new_id);
  23. return new_id;
  24. }
  25. } // namespace Engine::Core