RavEngine
Loading...
Searching...
No Matches
NetworkManager.hpp
1#pragma once
2#include "NetworkServer.hpp"
3#include "NetworkClient.hpp"
4#include "DataStructures.hpp"
5#include "CTTI.hpp"
6#include "Ref.hpp"
7#include "Entity.hpp"
8#include <optional>
9
10namespace RavEngine {
11
12 class World;
13 struct NetworkIdentity;
14
16 private:
17 typedef Function<Entity(World*)> func_t;
19
20 template <typename T>
21 class HasClientCreate
22 {
23 private:
24 typedef char YesType[1];
25 typedef char NoType[2];
26
27 template <typename C> static YesType& test(decltype(&C::ClientCreate));
28 template <typename C> static NoType& test(...);
29
30
31 public:
32 enum { value = sizeof(test<T>(0)) == sizeof(YesType) };
33 };
34
35 public:
36
37 bool isNetworkEntity(ctti_t id) const{
38 return NetworkedObjects.contains(id);
39 }
40
41 std::optional<Entity> CreateEntity(ctti_t id, World* world){
42 std::optional<Entity> value;
43 NetworkedObjects.if_contains(id, [&](const auto& fn) {
44 Entity entity = fn(world);
45 value.emplace(entity);
46 });
47 return value;
48 }
49
50
55 template<typename T>
56 constexpr inline void RegisterNetworkedEntity(){
57 NetworkedObjects.insert(std::make_pair(CTTI<T>(),[](World* world) -> Entity{
58 auto e = world->Instantiate<T>();
59 if constexpr (HasClientCreate<T>::value) {
60 e.ClientCreate();
61 }
62 return e;
63 }));
64 }
65
70 template<typename T>
71 constexpr inline void UnregisterNetworkedEntity(){
72 NetworkedObjects.erase(CTTI<T>);
73 }
74
79 template<typename T>
80 constexpr inline bool IsNetworkedIdentityRegistered(){
81 return NetworkedObjects.contains(CTTI<T>);
82 }
83
87 static bool IsServer();
91 static bool IsClient();
92
96 static inline bool IsNetworked(){
97 return IsServer() || IsClient();
98 }
99
100 std::unique_ptr<NetworkServer> server;
101 std::unique_ptr<NetworkClient> client;
102
106 void Spawn(World* source, ctti_t type_id, Entity ent_id, const uuids::uuid& entity_id);
107
111 void Destroy(const uuids::uuid& entity_id);
112 };
113
114}
Definition NetworkManager.hpp:15
static bool IsClient()
Definition NetworkManager.cpp:32
static bool IsNetworked()
Definition NetworkManager.hpp:96
void Destroy(const uuids::uuid &entity_id)
Definition NetworkManager.cpp:22
constexpr void RegisterNetworkedEntity()
Definition NetworkManager.hpp:56
void Spawn(World *source, ctti_t type_id, Entity ent_id, const uuids::uuid &entity_id)
Definition NetworkManager.cpp:9
constexpr void UnregisterNetworkedEntity()
Definition NetworkManager.hpp:71
static bool IsServer()
Definition NetworkManager.cpp:36
constexpr bool IsNetworkedIdentityRegistered()
Definition NetworkManager.hpp:80
Definition World.hpp:181
T Instantiate(A &&... args)
Definition World.hpp:1093
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Entity.hpp:11
Definition Uuid.hpp:7