Cogs.Foundation
Loading...
Searching...
No Matches
ComponentPtr.h
Go to the documentation of this file.
1#pragma once
2
3#include "Entity.h"
4
6namespace Cogs {
7 namespace ComponentModel
8 {
15 template<typename ComponentType>
17 {
18 static_assert(std::is_base_of<Component, ComponentType>::value, "<ComponentType> not derived from Component");
19 public:
20 typedef ComponentType value_type;
21
22 ComponentPtr() = default;
23
25 ComponentPtr(const std::shared_ptr<Entity> & owner)
26 : owner(owner)
27 {
28 }
29
31 ComponentPtr(std::shared_ptr<Entity> && owner) noexcept
32 : owner(std::move(owner))
33 {
34 }
35
38 : owner(source.owner)
39 {
40 }
41
44 : owner(std::move(source.owner))
45 {
46 }
47
49 constexpr ComponentPtr(std::nullptr_t)
50 {
51 }
52
53
55 {
56 owner = rhs.owner;
57 return *this;
58 }
59
61 {
62 owner = std::move(rhs.owner);
63 return *this;
64 }
65
66 ComponentType * get() const
67 {
68 return owner->getComponent<ComponentType>();
69 }
70
71 ComponentType * operator ->() const
72 {
73 return get();
74 }
75
79 operator bool() const { return owner != nullptr && operator->() != nullptr; }
80
82 [[nodiscard]] constexpr bool operator==(const ComponentPtr<ComponentType> & other) const { return owner == other.owner; }
83
85 void reset()
86 {
87 owner.reset();
88 }
89
91 std::shared_ptr<Entity> getEntity() const { return owner; }
92
93 private:
94 std::shared_ptr<Entity> owner;
95 };
96 }
97}
A shared_pointer type pointer to a component in an entity.
Definition: ComponentPtr.h:17
constexpr ComponentPtr(std::nullptr_t)
Construct empty instance.
Definition: ComponentPtr.h:49
std::shared_ptr< Entity > getEntity() const
Get the owning entity.
Definition: ComponentPtr.h:91
ComponentPtr(std::shared_ptr< Entity > &&owner) noexcept
Initializes a component pointer for component in the given entity.
Definition: ComponentPtr.h:31
void reset()
Reset to empty.
Definition: ComponentPtr.h:85
ComponentType * get() const
Definition: ComponentPtr.h:66
ComponentType value_type
Definition: ComponentPtr.h:20
ComponentPtr(const std::shared_ptr< Entity > &owner)
Initializes a component pointer for component in the given entity.
Definition: ComponentPtr.h:25
constexpr bool operator==(const ComponentPtr< ComponentType > &other) const
Comparison operator. If the entity of both objects are equal the objects are considered equal.
Definition: ComponentPtr.h:82
ComponentPtr< ComponentType > & operator=(const ComponentPtr< ComponentType > &rhs)
Definition: ComponentPtr.h:54
ComponentType * operator->() const
Definition: ComponentPtr.h:71
ComponentPtr(const ComponentPtr< ComponentType > &source)
Initializes a component pointer as a copy constructor.
Definition: ComponentPtr.h:37
ComponentPtr(ComponentPtr< ComponentType > &&source) noexcept
Initializes a component pointer using RValue constructor.
Definition: ComponentPtr.h:43
ComponentPtr< ComponentType > & operator=(ComponentPtr< ComponentType > &&rhs) noexcept
Definition: ComponentPtr.h:60
std::shared_ptr< Entity > owner
Definition: ComponentPtr.h:94
Main Cogs namespace.
Definition: MortonCode.h:5