6 #include <ThirdParty/EASTL-master/include/EASTL/string.h> 17 virtual ~
Entity() =
default;
19 template<
typename ComponentType>
24 eastl::weak_ptr<ComponentType> GetComponent();
26 template<
typename ComponentType>
31 eastl::vector<eastl::weak_ptr<ComponentType>> GetComponents();
37 eastl::vector<eastl::shared_ptr<Component>> GetAllComponents()
const;
39 template <
class ComponentType,
class... Args>
45 eastl::weak_ptr<ComponentType> AddComponent(Args&&... args);
50 template <
class ComponentType,
class... Args>
57 eastl::vector<eastl::weak_ptr<ComponentType>> AddComponents(
size_t count, Args&&... args);
59 template <
typename ComponentType>
64 void RemoveComponent(
size_t amountToRemove = 1);
66 template <
typename ComponentType>
70 void RemoveAllComponents();
76 eastl::shared_ptr<Entity> GetPointer()
const;
81 virtual void Update();
87 size_t ComponentCount()
const;
93 uint64_t
GetID()
const;
104 bool GetIsActive()
const;
110 void SetIsActive(
bool isActive);
117 explicit Entity(eastl::string name =
"");
118 virtual void InitializeEntity();
123 void SetID(uint64_t Id);
124 void OnComponentAdded(eastl::weak_ptr<Component> addedComponent);
125 void OnComponentRemoved(eastl::weak_ptr<Component> removedComponent);
129 void OnBeginContact(eastl::weak_ptr<Entity> entity);
130 void OnEndContact(eastl::weak_ptr<Entity> entity);
133 template <
typename ComponentType>
136 for (
size_t i = 0, size = components.size(); i < size; ++i)
138 if (dynamic_cast<ComponentType*>(components[i].
get()))
140 return eastl::dynamic_pointer_cast<ComponentType>(components[i]);
143 return eastl::weak_ptr<ComponentType>();
146 template <
typename ComponentType>
149 eastl::vector<eastl::weak_ptr<ComponentType>> componentsToReturn;
151 for (
size_t i = 0, size = components.size(); i < size; ++i)
153 if (dynamic_cast<ComponentType*>(components[i].
get()))
154 componentsToReturn.push_back(eastl::dynamic_pointer_cast<ComponentType>(components[i]));
157 return componentsToReturn;
160 template <
class ComponentType,
class... Args>
163 eastl::shared_ptr<ComponentType> componentToAdd = eastl::shared_ptr<ComponentType>(
new ComponentType(eastl::forward<Args>(args)...));
164 components.push_back(eastl::move(componentToAdd));
166 eastl::shared_ptr<Component> componentToReturn = components.back();
167 componentToReturn->SetOwner(GetPointer());
168 componentToReturn->SetPointerReference(componentToReturn);
169 OnComponentAdded(componentToReturn);
171 for (
size_t j = 0, size = components.size(); j < size; ++j)
172 componentToReturn->OnComponentAdded(components[j]);
174 componentToReturn->InitializeComponent();
176 return eastl::static_pointer_cast<ComponentType>(componentToReturn);
179 template <
class ComponentType,
class... Args>
182 eastl::vector<eastl::weak_ptr<ComponentType>> componentsToReturn;
184 for (
size_t i = 0; i < count; ++i)
186 eastl::shared_ptr<ComponentType> componentToAdd = eastl::shared_ptr<ComponentType>(
new ComponentType(eastl::forward<Args>(args)...));
187 components.push_back(eastl::move(componentToAdd));
189 eastl::shared_ptr<Component> componentToReturn = components.back();
190 componentToReturn->SetOwner(GetPointer());
191 componentToReturn->SetPointerReference(componentToReturn);
192 OnComponentAdded(componentToReturn);
194 for (
size_t j = 0, size = components.size(); j < size; ++j)
195 componentToReturn->OnComponentAdded(components[j]);
197 componentToReturn->InitializeComponent();
199 componentsToReturn.push_back(eastl::static_pointer_cast<ComponentType>(componentToReturn));
201 return componentsToReturn;
204 template <
typename ComponentType>
207 if (amountToRemove != 1 && amountToRemove > components.size())
208 amountToRemove = components.size();
210 for (
size_t i = components.size() - 1; i != -1; --i)
212 if (dynamic_cast<ComponentType*>(components[i].
get()))
214 eastl::weak_ptr<Component> componentToRemove = components[i];
215 components.erase(components.begin() + i);
216 OnComponentRemoved(componentToRemove);
219 if (amountToRemove == 0)
224 template <
typename ComponentType>
227 for (
size_t i = components.size() - 1; i != -1; --i)
229 if (dynamic_cast<ComponentType*>(components[i].
get()))
231 eastl::weak_ptr<Component> componentToRemove = components[i];
232 components.erase(components.begin() + i);
233 OnComponentRemoved(componentToRemove);
This object is able a holder object for components. NOTE: only the EntitySystem is allowed to create ...
eastl::vector< eastl::weak_ptr< ComponentType > > AddComponents(size_t count, Args &&...args)
Allows you to create X amount of components of the given type.
void RemoveComponent(size_t amountToRemove=1)
Allows X amount of components of the given type.
eastl::vector< eastl::shared_ptr< Component > > components
eastl::weak_ptr< ComponentType > GetComponent()
This method allows you to get the first component of the given type.
This object keeps track of all available entities. NOTE: only the Engine class is allowed to create t...
eastl::vector< eastl::weak_ptr< ComponentType > > GetComponents()
This method allows you to get all of the components of the given type.
void RemoveAllComponents()
Deletes all the components of the given type.
eastl::string name
The name of this entity.
eastl::weak_ptr< ComponentType > AddComponent(Args &&...args)
Allows you to create a component of the given type.
IMGUI_API ImGuiID GetID(const char *str_id)