Gaia-ECS v0.9.3
A simple and powerful entity component system
Loading...
Searching...
No Matches
component_setter.h
1#pragma once
2#include "gaia/config/config.h"
3
4#include <cstdint>
5
6#include "gaia/ecs/chunk.h"
7#include "gaia/ecs/component.h"
8#include "gaia/ecs/component_getter.h"
9
10namespace gaia {
11 namespace ecs {
15 using ComponentGetter::ComponentGetter;
16
21 template <typename T>
22 decltype(auto) mut() {
23 GAIA_ASSERT(m_pWorld != nullptr);
24 GAIA_ASSERT(m_entity != EntityBad);
25 GAIA_ASSERT(m_pChunk != nullptr);
26 return const_cast<Chunk*>(m_pChunk)->template sset<T>(m_row);
27 }
28
33 template <typename T, typename U = typename actual_type_t<T>::Type>
34 ComponentSetter& set(U&& value) {
35 GAIA_ASSERT(m_pWorld != nullptr);
36 GAIA_ASSERT(m_entity != EntityBad);
37 GAIA_ASSERT(m_pChunk != nullptr);
38 smut<T>() = GAIA_FWD(value);
39 auto& chunk = *const_cast<Chunk*>(m_pChunk);
40 chunk.template modify<T, true>();
41 world_notify_on_set(chunk.world(), chunk.template comp_entity<T>(), chunk, m_row, (uint16_t)(m_row + 1));
42 return *this;
43 }
44
49 template <typename T>
50 decltype(auto) mut(Entity type);
51
57 template <typename T>
58 ComponentSetter& set(Entity type, T&& value);
59
63 template <typename T>
64 decltype(auto) smut() {
65 GAIA_ASSERT(m_pWorld != nullptr);
66 GAIA_ASSERT(m_entity != EntityBad);
67 GAIA_ASSERT(m_pChunk != nullptr);
68 return const_cast<Chunk*>(m_pChunk)->template sset<T>(m_row);
69 }
70
75 template <typename T, typename U = typename actual_type_t<T>::Type>
76 ComponentSetter& sset(U&& value) {
77 GAIA_ASSERT(m_pWorld != nullptr);
78 GAIA_ASSERT(m_entity != EntityBad);
79 GAIA_ASSERT(m_pChunk != nullptr);
80 smut<T>() = GAIA_FWD(value);
81 return *this;
82 }
83
88 template <typename T>
89 decltype(auto) smut(Entity type);
90
96 template <typename T>
97 ComponentSetter& sset(Entity type, T&& value);
98 };
99 } // namespace ecs
100} // namespace gaia
Definition chunk.h:35
Checks if endianess was detected correctly at compile-time.
Definition bitset.h:9
Entity-scoped component accessor bound to a specific world, chunk and row. It is not a standalone chu...
Definition component_getter.h:15
Entity-scoped mutable component accessor bound to a specific world, chunk and row....
Definition component_setter.h:14
decltype(auto) mut()
Returns a mutable reference to component without triggering hooks, observers or world-version updates...
Definition component_setter.h:22
ComponentSetter & set(U &&value)
Sets the value of the component.
Definition component_setter.h:34
decltype(auto) smut()
Returns a mutable reference to component without triggering a world version update.
Definition component_setter.h:64
ComponentSetter & sset(U &&value)
Sets the value of the component without triggering a world version update.
Definition component_setter.h:76
Definition id.h:241