Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
ComponentConcept.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** R-Type
4** File description:
5** ComponentConcept.hpp
6*/
7
8/*
9** MIT License
10**
11** Copyright (c) 2025 Robin Toillon
12**
13** Permission is hereby granted, free of charge, to any person obtaining
14** a copy of this software and associated documentation files (the
15** "Software"), to deal in the Software without restriction, including
16** without limitation the rights to use, copy, modify, merge, publish,
17** distribute, sublicense, and/or sell copies of the Software, and to
18** permit persons to whom the Software is furnished to do so, subject to
19** the following conditions:
20**
21** The above copyright notice and this permission notice shall be
22** included in all copies or substantial portions of the Software.
23**
24** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31*/
32
41#ifndef RTYPE_COMPONENTCONCEPT_HPP_
42 #define RTYPE_COMPONENTCONCEPT_HPP_
43
44 #include <concepts>
45 #include <type_traits>
46 #include <cstddef>
47
48namespace rtp::ecs
49{
59 template <typename T>
60 concept Component = std::is_class_v<T> &&
61 std::move_constructible<T> &&
62 std::destructible<T>;
63
76 template <typename T>
78 std::is_standard_layout_v<T> &&
79 std::is_trivially_copyable_v<T>;
80
81 inline std::size_t nextComponentID() {
82 static std::size_t counter = 0;
83 return counter++;
84 }
85
86 template <typename T>
87 std::size_t getStaticComponentID() {
88 // Cette variable 'id' est unique pour CHAQUE type T.
89 // Elle n'est initialisée qu'une seule fois au premier appel de getStaticComponentID<T>().
90 static std::size_t id = nextComponentID();
91 return id;
92 }
93}
94
95#endif /* !RTYPE_COMPONENTCONCEPT_HPP_ */
Concept for valid ECS component types.
Concept for network-serializable components.
File : RenderSystem.hpp License: MIT Author : Elias Josué HAJJAR LLAUQUEN elias-josue....
std::size_t nextComponentID()
std::size_t getStaticComponentID()