documentation and cleanup

This commit is contained in:
jadebenn 2024-12-17 00:25:29 -06:00
parent 179f0cf32d
commit eab57e4022
3 changed files with 17 additions and 11 deletions

View File

@ -1,7 +1,13 @@
set(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>")
set(msvc_cxx "$<COMPILE_LANG_AND_ID:CXX,MSVC>")
add_library(dECS STATIC add_library(dECS STATIC
"Core.h" "Core.h"
"Core.cpp" "Core.cpp"
) )
target_include_directories(dECS PUBLIC .) target_include_directories(dECS PUBLIC .)
target_link_libraries(dECS PRIVATE dCommon magic_enum::magic_enum) target_link_libraries(dECS PRIVATE dCommon magic_enum::magic_enum)
target_compile_options(dECS PRIVATE "-Wall") target_compile_options(dECS PRIVATE
"$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra>>"
"$<${msvc_cxx}:$<BUILD_INTERFACE:/W3>>"
)

View File

@ -23,10 +23,10 @@ namespace dECS {
void* Entity::AddComponent(const eReplicaComponentType kind, const StorageConstructor storageConstructor) { void* Entity::AddComponent(const eReplicaComponentType kind, const StorageConstructor storageConstructor) {
if (auto w = m_World.lock()) { if (auto w = m_World.lock()) {
// add to kind signature // Add to kind signature
w->map[m_Id].set(kind, true); w->map[m_Id].set(kind, true);
// get or add storage // Get or add storage
auto storageIt = w->data.find(kind); auto storageIt = w->data.find(kind);
if (storageIt == w->data.cend()) { if (storageIt == w->data.cend()) {
bool inserted = false; bool inserted = false;
@ -35,7 +35,7 @@ namespace dECS {
} }
auto& storage = *storageIt->second; auto& storage = *storageIt->second;
// return reference if already mapped, otherwise add component // Return reference if already mapped, otherwise add component
auto compIt = storage.rowMap.find(m_Id); auto compIt = storage.rowMap.find(m_Id);
if (compIt == storage.rowMap.cend()) { if (compIt == storage.rowMap.cend()) {
const auto curSize = storage.rowMap.size(); const auto curSize = storage.rowMap.size();
@ -50,13 +50,13 @@ namespace dECS {
const void* Entity::GetComponent(const eReplicaComponentType kind) const { const void* Entity::GetComponent(const eReplicaComponentType kind) const {
if (auto const w = m_World.lock()) { if (auto const w = m_World.lock()) {
const auto& compSig = w->map.at(m_Id); // Check that the entity has this component
if (!compSig.test(kind)) return nullptr; if (!w->map[m_Id].test(kind)) return nullptr;
// Get the location where it's stored
const auto& storage = *w->data.at(kind); const auto& storage = *w->data.at(kind);
const auto it = storage.rowMap.find(m_Id); const auto it = storage.rowMap.find(m_Id);
if (it == storage.rowMap.cend()) return nullptr; if (it == storage.rowMap.cend()) return nullptr;
const auto row = it->second; const auto row = it->second;
return storage.at(row); return storage.at(row);
} }

View File

@ -61,7 +61,7 @@ TEST(ECSTest, WorldScope) {
ASSERT_NE(cPtr, nullptr); ASSERT_NE(cPtr, nullptr);
} }
// Attempting to access this component now that the world has gone // Attempting to access this component should return nullptr
// out of scope should return nullptr // now that the world has gone out of scope
ASSERT_EQ(e->GetComponent<TestComponent>(), nullptr); ASSERT_EQ(e->GetComponent<TestComponent>(), nullptr);
} }