Polyphase Game Engine
Loading...
Searching...
No Matches
NetFunc.h
Go to the documentation of this file.
1#pragma once
2
3#include "Datum.h"
4#include <unordered_map>
5
6class Node;
7
8#define OCT_NET_FUNC_MAX_PARAMS 8
9
10#define ADD_NET_FUNC(OutFuncs, FuncType, Function) OutFuncs.push_back(NetFunc(NetFuncType::FuncType, #Function, Function));
11#define ADD_NET_FUNC_RELIABLE(OutFuncs, FuncType, Function) OutFuncs.push_back(NetFunc(NetFuncType::FuncType, #Function, Function, true));
12
13typedef void (*NetFunc0FP)(Node* node);
14typedef void (*NetFunc1FP)(Node* node, Datum& param0);
15typedef void (*NetFunc2FP)(Node* node, Datum& param0, Datum& param1);
16typedef void (*NetFunc3FP)(Node* node, Datum& param0, Datum& param1, Datum& param2);
17typedef void (*NetFunc4FP)(Node* node, Datum& param0, Datum& param1, Datum& param2, Datum& param3);
18typedef void (*NetFunc5FP)(Node* node, Datum& param0, Datum& param1, Datum& param2, Datum& param3, Datum& param4);
19typedef void (*NetFunc6FP)(Node* node, Datum& param0, Datum& param1, Datum& param2, Datum& param3, Datum& param4, Datum& param5);
20typedef void (*NetFunc7FP)(Node* node, Datum& param0, Datum& param1, Datum& param2, Datum& param3, Datum& param4, Datum& param5, Datum& param6);
21typedef void (*NetFunc8FP)(Node* node, Datum& param0, Datum& param1, Datum& param2, Datum& param3, Datum& param4, Datum& param5, Datum& param6, Datum& param7);
22
23enum class NetFuncType : uint8_t
24{
25 Server,
26 Client,
28
29 Count
30};
31
32struct NetFunc
33{
35 uint8_t mNumParams = 0;
36 uint16_t mIndex = 0;
37 std::string mName;
38 bool mReliable = false;
39
40 // Do we need to store param types for safety checking?
41 // I don't think so since the user code will naturally assert if you GetVector() on a float datum for instance.
42 //DatumType mParamTypes[OCT_NET_FUNC_MAX_PARAMS] = { DatumType::Count, DatumType::Count, DatumType::Count, DatumType::Count, DatumType::Count, DatumType::Count, DatumType::Count, DatumType::Count};
43
44 union
45 {
56
57 NetFunc();
58 NetFunc(NetFuncType type, const char* name, NetFunc0FP fp, bool reliable = false);
59 NetFunc(NetFuncType type, const char* name, NetFunc1FP fp, bool reliable = false);
60 NetFunc(NetFuncType type, const char* name, NetFunc2FP fp, bool reliable = false);
61 NetFunc(NetFuncType type, const char* name, NetFunc3FP fp, bool reliable = false);
62 NetFunc(NetFuncType type, const char* name, NetFunc4FP fp, bool reliable = false);
63 NetFunc(NetFuncType type, const char* name, NetFunc5FP fp, bool reliable = false);
64 NetFunc(NetFuncType type, const char* name, NetFunc6FP fp, bool reliable = false);
65 NetFunc(NetFuncType type, const char* name, NetFunc7FP fp, bool reliable = false);
66 NetFunc(NetFuncType type, const char* name, NetFunc8FP fp, bool reliable = false);
67};
68
69//struct ScriptNetFunc
70//{
71// uint16_t mIndex = 0;
72// NetFuncType mType = NetFuncType::Count;
73// bool mReliable = false;
74// //uint8_t mNumParams = 0;
75// std::string mName;
76//
77// ScriptNetFunc() {}
78//};
79
81
82bool ShouldExecuteNetFunc(NetFuncType type, Node* node);
83bool ShouldSendNetFunc(NetFuncType type, Node* node);
void(* NetFunc5FP)(Node *node, Datum &param0, Datum &param1, Datum &param2, Datum &param3, Datum &param4)
Definition NetFunc.h:18
bool ShouldSendNetFunc(NetFuncType type, Node *node)
Definition NetFunc.cpp:124
void(* NetFunc7FP)(Node *node, Datum &param0, Datum &param1, Datum &param2, Datum &param3, Datum &param4, Datum &param5, Datum &param6)
Definition NetFunc.h:20
void(* NetFunc3FP)(Node *node, Datum &param0, Datum &param1, Datum &param2)
Definition NetFunc.h:16
void(* NetFunc2FP)(Node *node, Datum &param0, Datum &param1)
Definition NetFunc.h:15
NetFunc ScriptNetFunc
Definition NetFunc.h:80
void(* NetFunc0FP)(Node *node)
Definition NetFunc.h:13
NetFuncType
Definition NetFunc.h:24
void(* NetFunc4FP)(Node *node, Datum &param0, Datum &param1, Datum &param2, Datum &param3)
Definition NetFunc.h:17
void(* NetFunc6FP)(Node *node, Datum &param0, Datum &param1, Datum &param2, Datum &param3, Datum &param4, Datum &param5)
Definition NetFunc.h:19
void(* NetFunc1FP)(Node *node, Datum &param0)
Definition NetFunc.h:14
void(* NetFunc8FP)(Node *node, Datum &param0, Datum &param1, Datum &param2, Datum &param3, Datum &param4, Datum &param5, Datum &param6, Datum &param7)
Definition NetFunc.h:21
bool ShouldExecuteNetFunc(NetFuncType type, Node *node)
Definition NetFunc.cpp:93
Definition Datum.h:164
Definition Node.h:67
Definition NetFunc.h:33
uint16_t mIndex
Definition NetFunc.h:36
NetFunc0FP p0
Definition NetFunc.h:46
NetFunc4FP p4
Definition NetFunc.h:50
NetFunc8FP p8
Definition NetFunc.h:54
NetFunc3FP p3
Definition NetFunc.h:49
NetFunc2FP p2
Definition NetFunc.h:48
NetFunc7FP p7
Definition NetFunc.h:53
NetFuncType mType
Definition NetFunc.h:34
NetFunc()
Definition NetFunc.cpp:6
NetFunc6FP p6
Definition NetFunc.h:52
std::string mName
Definition NetFunc.h:37
uint8_t mNumParams
Definition NetFunc.h:35
union NetFunc::@3 mFuncPointer
NetFunc5FP p5
Definition NetFunc.h:51
NetFunc1FP p1
Definition NetFunc.h:47
bool mReliable
Definition NetFunc.h:38