From 6ab812b576c848580c215c0bd6e337df5a4fec07 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 14 Aug 2016 18:01:23 +0200 Subject: [PATCH] SDK/Entity: Add constant component getter Former-commit-id: 1c7aa68fbf0c8e0bdfa8152632b2e9cdaa0f748e [formerly 676e34f3738632aa727470213928ad2c91368d9b] [formerly c3f162cad3a9c65da2bcaf037d7b55ea70ee5b53 [formerly 674d9d5ecaa0d561d002e470af4c0cf7dcf7e501]] Former-commit-id: bf5a07802efe57d0f6547a2c4b5ab8344e4515e9 [formerly 843780a0eaba37b46e59f9d81e56c3854a86ebde] Former-commit-id: 6849fc8cfe8d689f67d452d13fe317ea65ba2fec --- SDK/include/NDK/Entity.hpp | 2 ++ SDK/include/NDK/Entity.inl | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/SDK/include/NDK/Entity.hpp b/SDK/include/NDK/Entity.hpp index 33661eb50..5aeeb8226 100644 --- a/SDK/include/NDK/Entity.hpp +++ b/SDK/include/NDK/Entity.hpp @@ -40,6 +40,8 @@ namespace Ndk inline BaseComponent& GetComponent(ComponentIndex index); template ComponentType& GetComponent(); + inline const BaseComponent& GetComponent(ComponentIndex index) const; + template const ComponentType& GetComponent() const; inline const Nz::Bitset<>& GetComponentBits() const; inline EntityId GetId() const; inline const Nz::Bitset<>& GetSystemBits() const; diff --git a/SDK/include/NDK/Entity.inl b/SDK/include/NDK/Entity.inl index c7937b786..a03130b0d 100644 --- a/SDK/include/NDK/Entity.inl +++ b/SDK/include/NDK/Entity.inl @@ -2,6 +2,7 @@ // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequesites.hpp +#include #include #include #include @@ -50,6 +51,27 @@ namespace Ndk return static_cast(GetComponent(index)); } + inline const BaseComponent& Entity::GetComponent(ComponentIndex index) const + { + ///DOC: Le component doit être présent + NazaraAssert(HasComponent(index), "This component is not part of the entity"); + + BaseComponent* component = m_components[index].get(); + NazaraAssert(component, "Invalid component pointer"); + + return *component; + } + + template + const ComponentType& Entity::GetComponent() const + { + ///DOC: Le component doit être présent + static_assert(std::is_base_of::value, "ComponentType is not a component"); + + ComponentIndex index = GetComponentIndex(); + return static_cast(GetComponent(index)); + } + inline const Nz::Bitset<>& Entity::GetComponentBits() const { return m_componentBits;