6 .bool(entity to, int sendflags) SendEntity;
8 void Net_LinkEntity(entity e, bool docull, float dt, bool(entity to, int sendflags) sendfunc)
10 if (!e.classname) e.classname = "net_linked";
12 if (!e.model || !self.modelindex) {
19 e.SendEntity = sendfunc;
20 e.SendFlags = 0xFFFFFF;
22 if (!docull) e.effects |= EF_NODEPTHTEST;
25 e.nextthink = time + dt;
30 .void() uncustomizeentityforclient;
31 .float uncustomizeentityforclient_set;
33 void SetCustomizer(entity e, float(void) customizer, void(void) uncustomizer)
35 e.customizeentityforclient = customizer;
36 e.uncustomizeentityforclient = uncustomizer;
37 e.uncustomizeentityforclient_set = !!uncustomizer;
40 void UncustomizeEntitiesRun()
42 for (entity e = NULL; (e = findfloat(e, uncustomizeentityforclient_set, 1)); ) {
43 WITH(entity, self, e, e.uncustomizeentityforclient());
49 #include "registry.qh"
54 .void(entity this, bool isNew) m_read;
57 #define Net_Accept() do { if (!this) this = spawn(); } while (0)
58 #define Net_Reject() do { if (this) remove(this); } while (0)
60 #define WriteHeader(to, id) do { \
61 if (NET_##id##_istemp) WriteByte(to, SVC_TEMPENTITY); \
62 WriteByte(to, NET_##id.m_id); \
67 #define REGISTER_NET_LINKED(id, param) \
68 void Ent_Read##id(entity this, param) { this = self; } \
69 REGISTER(RegisterLinkedEntities, NET, LinkedEntities, LinkedEntities_COUNT, id, m_id, spawn()) { \
71 this.m_read = Ent_Read##id; \
73 [[accumulate]] void Ent_Read##id(entity this, param)
75 #define REGISTER_NET_LINKED(id, param) \
76 const bool NET_##id##_istemp = false; \
77 REGISTER(RegisterLinkedEntities, NET, LinkedEntities, LinkedEntities_COUNT, id, m_id, spawn()) { \
82 REGISTRY(LinkedEntities, 24)
83 REGISTER_REGISTRY(RegisterLinkedEntities)
84 REGISTRY_SORT(LinkedEntities, netname, 0)
85 STATIC_INIT(RegisterLinkedEntities_renumber) {
86 for (int i = 0; i < LinkedEntities_COUNT; ++i) {
87 LinkedEntities[i].m_id = 100 + i;
92 #define REGISTER_NET_TEMP(id, param) \
93 void Net_Read##id(entity this, param); \
94 REGISTER(RegisterTempEntities, NET, TempEntities, TempEntities_COUNT, id, m_id, spawn()) { \
96 this.m_read = Net_Read##id; \
98 void Net_Read##id(entity this, param)
100 #define REGISTER_NET_TEMP(id, param) \
101 const bool NET_##id##_istemp = true; \
102 REGISTER(RegisterTempEntities, NET, TempEntities, TempEntities_COUNT, id, m_id, spawn()) { \
103 this.netname = #id; \
107 REGISTRY(TempEntities, 24)
108 REGISTER_REGISTRY(RegisterTempEntities)
109 REGISTRY_SORT(TempEntities, netname, 0)
110 STATIC_INIT(RegisterTempEntities_renumber) {
111 for (int i = 0; i < TempEntities_COUNT; ++i) {
112 TempEntities[i].m_id = 115 + i;