Subastra
Loading...
Searching...
No Matches
require.h
Go to the documentation of this file.
1#ifndef __H__SYSTEMS_REQUIRE__
2#define __H__SYSTEMS_REQUIRE__
3
4#include "../engine/entity.h"
5#include "../engine/input.h"
6#include "../engine/world.h"
7#include "../names.h"
8#include "../rendering/context.h"
9
20
21static const char *system_phase_to_str(system_phase_t phase) {
22 switch (phase) {
24 return "PRE_UPDATE";
26 return "UPDATE";
28 return "FIXED_UPDATE";
30 return "POST_UPDATE";
32 return "PRE_RENDER";
34 return "RENDER";
36 return "RENDER";
37 default:
38 return 0;
39 }
40}
41
44#define SYSTEM_REQ_PTR_REQUIRED ((void *)1)
47#define SYSTEM_REQ_PTR_UNUSED ((void *)0)
48
49#define SYSTEM_REQ_NO_DEPS 0, 0
50
70
72 system_req_t ret;
73
76
78 ret.world = 0;
79 ret.input = 0;
80 ret.rendering_ctx = 0;
81
82 ret.pin_to_main = false;
83
84 return ret;
85}
86
87static void system_req_fill_in(system_req_t *target,
88 const system_req_t parent) {
89 if (parent._entity_kinds_const || parent._entity_kinds_mut || target->world) {
90 ASSERT_(parent.world, "world_t expected in parent, but not filled in");
91 target->world = parent.world;
92 }
93
94 if (target->rendering_ctx) {
95 ASSERT_(parent.world,
96 "rendering_ctx_t expected in parent, but not filled in");
97 target->rendering_ctx = parent.rendering_ctx;
98 }
99
100 if (target->input) {
101 ASSERT_(parent.input, "input_t expected in parent, but not filled in");
102 target->input = parent.input;
103 }
104
105 ASSERT(isfinite(parent.delta_time), "Finite delta_time expected, got %lf",
106 parent.delta_time);
107 target->delta_time = parent.delta_time;
108
109 ASSERT(isfinite(parent.fixed_delta_time),
110 "Finite fixed_delta_time expected, got %lf", parent.fixed_delta_time);
111 target->fixed_delta_time = parent.fixed_delta_time;
112}
113
115 entity_kind_mask_t entity_kind_mask) {
117 (entity_kind_mask_t)((int)req->_entity_kinds_mut | (int)entity_kind_mask);
118}
119
121 entity_kind_mask_t entity_kind_mask) {
122 req->_entity_kinds_mut =
123 (entity_kind_mask_t)((int)req->_entity_kinds_mut | (int)entity_kind_mask);
124 system_req_entity_kinds_const(req, entity_kind_mask);
125}
126
128 ASSERT_(req->world,
129 "World must be requested to retrieve the entity iterator");
130
133 (u32)req->_entity_kinds_mut));
134
135 return iter;
136}
137
138#endif
#define ASSERT(expr, msg,...)
Definition defs.h:35
#define ASSERT_(expr, msg)
Definition defs.h:29
uint32_t u32
Definition defs.h:45
entity_kind_t
Definition entity.h:34
entity_kind_t entity_kind_mask_t
Definition entity.h:42
u64 name_t
Definition names.h:14
static void system_req_fill_in(system_req_t *target, const system_req_t parent)
Definition require.h:87
static system_req_t system_req_new()
Definition require.h:71
static entity_iter_t system_req_entity_iter(system_req_t *req)
Definition require.h:127
static void system_req_entity_kinds_mut(system_req_t *req, entity_kind_mask_t entity_kind_mask)
Definition require.h:120
static const char * system_phase_to_str(system_phase_t phase)
Definition require.h:21
static void system_req_entity_kinds_const(system_req_t *req, entity_kind_mask_t entity_kind_mask)
Definition require.h:114
system_phase_t
Definition require.h:10
@ SYSTEM_PHASE_UPDATE
Definition require.h:12
@ SYSTEM_PHASE_count
Definition require.h:18
@ SYSTEM_PHASE_POST_UPDATE
Definition require.h:14
@ SYSTEM_PHASE_PRE_RENDER
Definition require.h:15
@ SYSTEM_PHASE_RENDER
Definition require.h:16
@ SYSTEM_PHASE_POST_RENDER
Definition require.h:17
@ SYSTEM_PHASE_FIXED_UPDATE
Definition require.h:13
@ SYSTEM_PHASE_PRE_UPDATE
Definition require.h:11
Definition world.h:111
Definition input.h:10
Definition context.h:11
Definition require.h:51
name_t name
Definition require.h:53
double fixed_delta_time
Definition require.h:66
input_t * input
Definition require.h:62
entity_kind_mask_t _entity_kinds_const
Definition require.h:55
system_phase_t phase
Definition require.h:52
u32 depends_on_count
Definition require.h:58
void * system_specific_data
Definition require.h:60
entity_kind_mask_t _entity_kinds_mut
Definition require.h:54
double delta_time
Definition require.h:65
name_t * depends_on
Definition require.h:57
rendering_ctx_t * rendering_ctx
Definition require.h:63
world_t * world
Definition require.h:61
bool pin_to_main
Definition require.h:68
Definition world.h:12
static entity_iter_t world_entity_iter_masked(world_t *world, entity_kind_mask_t mask)
Definition world.h:127