Skip to content

Commit b733b08

Browse files
committed
Changes are in, runtime still crashing will look at it shortly
1 parent 06aa191 commit b733b08

File tree

16 files changed

+270
-245
lines changed

16 files changed

+270
-245
lines changed

ecsact/runtime/async.h

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,6 @@ typedef void (*ecsact_execute_sys_error_callback)(
101101
void* callback_user_data
102102
);
103103

104-
/**
105-
* When an entity is sucessfully created this callback is
106-
* invoked.
107-
*
108-
* @param entity_id the entity id of the created entity
109-
* @param request_id the request ID returned by the create entity callback
110-
* @param callback_user_data the @ref
111-
* ecsact_async_events_collector::error_callback_user_data
112-
*/
113-
typedef void (*ecsact_async_create_entity_callback)(
114-
//
115-
ecsact_entity_id entity_id,
116-
ecsact_async_request_id request_id,
117-
void* callback_user_data
118-
);
119-
120104
typedef struct ecsact_async_events_collector {
121105
/**
122106
* invoked when an async request failed.
@@ -130,19 +114,6 @@ typedef struct ecsact_async_events_collector {
130114
*/
131115
void* async_error_callback_user_data;
132116

133-
/**
134-
* Invoked when a create entity request succeeds.
135-
* @see ecsact_async_create_entity_callback
136-
* @see ecsact_entity_id
137-
* @see ecsact_async_error
138-
*/
139-
ecsact_async_create_entity_callback async_entity_callback;
140-
141-
/**
142-
* `callback_user_data` passed to `async_entity_callback`
143-
*/
144-
void* async_entity_callback_user_data;
145-
146117
/**
147118
* invoked when a system execution error occurred.
148119
* @see ecsact_execute_sys_error_callback
@@ -203,11 +174,6 @@ ECSACT_ASYNC_API_FN(ecsact_async_request_id, ecsact_async_connect)
203174
*/
204175
ECSACT_ASYNC_API_FN(void, ecsact_async_disconnect)(void);
205176

206-
/**
207-
* Returns an entity
208-
*/
209-
ECSACT_ASYNC_API_FN(ecsact_async_request_id, ecsact_async_create_entity)(void);
210-
211177
/**
212178
* Gets the current tick
213179
*/
@@ -218,7 +184,6 @@ ECSACT_ASYNC_API_FN(int32_t, ecsact_async_get_current_tick)(void);
218184
fn(ecsact_async_flush_events, __VA_ARGS__); \
219185
fn(ecsact_async_connect, __VA_ARGS__); \
220186
fn(ecsact_async_disconnect, __VA_ARGS__); \
221-
fn(ecsact_async_create_entity, __VA_ARGS__); \
222187
fn(ecsact_async_get_current_tick, __VA_ARGS__);
223188

224189
#undef ECSACT_ASYNC_API

reference/async_reference/BUILD.bazel

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ cc_library(
1919
deps = [
2020
"//:async",
2121
"//:core",
22-
"//reference/async_reference/request_id_factory",
2322
"//reference/async_reference/callbacks:async_callbacks",
2423
"//reference/async_reference/callbacks:execution_callbacks",
2524
"//reference/async_reference/detail/c_execution_options",
26-
"//reference/async_reference/entity_manager",
25+
"//reference/async_reference/request_id_factory",
2726
"//reference/async_reference/tick_manager",
2827
"//reference/async_reference/util",
2928
"//reference/async_reference/util:types",
@@ -50,7 +49,6 @@ filegroup(
5049
]) + [
5150
"//reference/async_reference/callbacks:callback_source",
5251
"//reference/async_reference/detail/c_execution_options:c_execution_source",
53-
"//reference/async_reference/entity_manager:entity_source",
5452
"//reference/async_reference/tick_manager:tick_source",
5553
"//reference/async_reference/util:util_source",
5654
"//reference/serialize_reference:serialize_source",

reference/async_reference/async.cc

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,6 @@ void ecsact_async_flush_events(
3838
}
3939
}
4040

41-
ecsact_async_request_id ecsact_async_create_entity() {
42-
auto req_id = request_id_factory.next_id();
43-
if(!reference) {
44-
async_callbacks.add(detail::types::async_error{
45-
.error = ECSACT_ASYNC_ERR_PERMISSION_DENIED,
46-
.request_ids = {req_id},
47-
});
48-
return req_id;
49-
}
50-
51-
reference->create_entity_request(req_id);
52-
return req_id;
53-
}
54-
5541
ecsact_async_request_id ecsact_async_enqueue_execution_options(
5642
const ecsact_execution_options options
5743
) {

reference/async_reference/async_reference.cc

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ void async_reference::execute_systems() {
168168
);
169169
}
170170
auto options = c_exec_options.c();
171-
entity_manager.process_entities(async_callbacks, *registry_id);
172171

173172
auto exec_lk = exec_callbacks.lock();
174173
auto systems_error =
@@ -195,22 +194,6 @@ void async_reference::invoke_execution_events(
195194
}
196195
}
197196

198-
void async_reference::create_entity_request(ecsact_async_request_id req_id) {
199-
if(is_connected == false && is_connected_notified == false) {
200-
types::async_error async_err{
201-
.error = ECSACT_ASYNC_ERR_PERMISSION_DENIED,
202-
.request_ids = {req_id},
203-
};
204-
205-
async_callbacks.add(async_err);
206-
is_connected_notified = true;
207-
208-
return;
209-
}
210-
211-
entity_manager.request_entity(req_id);
212-
}
213-
214197
int32_t async_reference::get_current_tick() {
215198
return tick_manager.get_current_tick();
216199
}

reference/async_reference/async_reference.hh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "reference/async_reference/tick_manager/tick_manager.hh"
1919
#include "reference/async_reference/callbacks/execution_callbacks.hh"
2020
#include "reference/async_reference/callbacks/async_callbacks.hh"
21-
#include "reference/async_reference/entity_manager/entity_manager.hh"
2221
#include "request_id_factory/request_id_factory.hh"
2322

2423
namespace ecsact::async_reference::detail {
@@ -44,7 +43,6 @@ public:
4443

4544
int32_t get_current_tick();
4645

47-
void create_entity_request(ecsact_async_request_id req_id);
4846
void connect(ecsact_async_request_id req_id, const char* connection_string);
4947

5048
void disconnect();
@@ -56,7 +54,6 @@ private:
5654

5755
tick_manager tick_manager;
5856
execution_callbacks exec_callbacks;
59-
entity_manager entity_manager;
6057
detail::async_callbacks& async_callbacks;
6158

6259
std::thread execution_thread;

reference/async_reference/callbacks/async_callbacks.cc

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,6 @@ void async_callbacks::invoke(const ecsact_async_events_collector* async_events
4848
error,
4949
async_events->system_error_callback_user_data
5050
);
51-
} else if constexpr(std::is_same_v<T, types::entity>) {
52-
if(async_events->async_entity_callback == nullptr) {
53-
return;
54-
}
55-
async_events->async_entity_callback(
56-
*error.entity_id,
57-
error.request_id,
58-
async_events->async_entity_callback_user_data
59-
);
6051
}
6152
},
6253
request

reference/async_reference/callbacks/execution_callbacks.cc

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@ execution_callbacks::execution_callbacks() {
66
collector.init_callback = &execution_callbacks::init_callback;
77
collector.update_callback = &execution_callbacks::update_callback;
88
collector.remove_callback = &execution_callbacks::remove_callback;
9+
collector.entity_created_callback =
10+
&execution_callbacks::entity_created_callback;
11+
collector.entity_destroyed_callback =
12+
&execution_callbacks::entity_destroyed_callback;
913
collector.init_callback_user_data = this;
1014
collector.update_callback_user_data = this;
1115
collector.remove_callback_user_data = this;
16+
collector.entity_created_callback_user_data = this;
17+
collector.entity_destroyed_callback_user_data = this;
1218
}
1319

1420
ecsact_execution_events_collector* execution_callbacks::get_collector() {
@@ -29,6 +35,8 @@ void execution_callbacks::invoke(
2935
init_callbacks_info.clear();
3036
update_callbacks_info.clear();
3137
remove_callbacks_info.clear();
38+
create_entity_callbacks_info.clear();
39+
destroy_entity_callbacks_info.clear();
3240
}
3341
return;
3442
}
@@ -37,16 +45,25 @@ void execution_callbacks::invoke(
3745
std::vector<types::callback_info> update_callbacks;
3846
std::vector<types::callback_info> remove_callbacks;
3947

48+
std::vector<types::entity_callback_info> entity_created_callbacks;
49+
std::vector<types::entity_callback_info> entity_destroyed_callbacks;
50+
4051
std::unique_lock lk(execution_m);
4152

4253
init_callbacks = std::move(init_callbacks_info);
4354
update_callbacks = std::move(update_callbacks_info);
4455
remove_callbacks = std::move(remove_callbacks_info);
4556

57+
entity_created_callbacks = std::move(create_entity_callbacks_info);
58+
entity_destroyed_callbacks = std::move(destroy_entity_callbacks_info);
59+
4660
init_callbacks_info.clear();
4761
update_callbacks_info.clear();
4862
remove_callbacks_info.clear();
4963

64+
create_entity_callbacks_info.clear();
65+
destroy_entity_callbacks_info.clear();
66+
5067
lk.unlock();
5168

5269
if(execution_events->init_callback != nullptr) {
@@ -111,6 +128,26 @@ void execution_callbacks::invoke(
111128
}
112129
}
113130
}
131+
132+
if(execution_events->entity_created_callback != nullptr) {
133+
for(auto& info : entity_created_callbacks) {
134+
execution_events->entity_created_callback(
135+
info.event,
136+
info.entity_id,
137+
execution_events->entity_created_callback_user_data
138+
);
139+
}
140+
}
141+
142+
if(execution_events->entity_destroyed_callback != nullptr) {
143+
for(auto& info : entity_destroyed_callbacks) {
144+
execution_events->entity_destroyed_callback(
145+
info.event,
146+
info.entity_id,
147+
execution_events->entity_destroyed_callback_user_data
148+
);
149+
}
150+
}
114151
}
115152

116153
bool execution_callbacks::has_callbacks() {
@@ -126,6 +163,14 @@ bool execution_callbacks::has_callbacks() {
126163
return true;
127164
}
128165

166+
if(create_entity_callbacks_info.size() > 0) {
167+
return true;
168+
}
169+
170+
if(destroy_entity_callbacks_info.size() > 0) {
171+
return true;
172+
}
173+
129174
return false;
130175
}
131176

@@ -199,7 +244,6 @@ void execution_callbacks::remove_callback(
199244
init_cb_info.entity_id == entity_id;
200245
});
201246

202-
// Maybe I can store data from here?
203247
std::erase_if(self->update_callbacks_info, [&](auto& update_cb_info) {
204248
return update_cb_info.component_id == component_id &&
205249
update_cb_info.entity_id == entity_id;
@@ -226,3 +270,33 @@ void execution_callbacks::remove_callback(
226270
// maybe...?
227271
self->remove_callbacks_info.push_back(info);
228272
}
273+
274+
void execution_callbacks::entity_created_callback(
275+
ecsact_event event,
276+
ecsact_entity_id entity_id,
277+
void* callback_user_data
278+
) {
279+
auto self = static_cast<execution_callbacks*>(callback_user_data);
280+
281+
auto info = types::entity_callback_info{};
282+
283+
info.event = event;
284+
info.entity_id = entity_id;
285+
286+
self->create_entity_callbacks_info.push_back(info);
287+
}
288+
289+
void execution_callbacks::entity_destroyed_callback(
290+
ecsact_event event,
291+
ecsact_entity_id entity_id,
292+
void* callback_user_data
293+
) {
294+
auto self = static_cast<execution_callbacks*>(callback_user_data);
295+
296+
auto info = types::entity_callback_info{};
297+
298+
info.event = event;
299+
info.entity_id = entity_id;
300+
301+
self->destroy_entity_callbacks_info.push_back(info);
302+
}

reference/async_reference/callbacks/execution_callbacks.hh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ private:
3434
std::vector<types::callback_info> update_callbacks_info;
3535
std::vector<types::callback_info> remove_callbacks_info;
3636

37+
std::vector<types::entity_callback_info> create_entity_callbacks_info;
38+
std::vector<types::entity_callback_info> destroy_entity_callbacks_info;
39+
3740
bool has_callbacks();
3841

3942
static void init_callback(
@@ -59,5 +62,17 @@ private:
5962
const void* component_data,
6063
void* callback_user_data
6164
);
65+
66+
static void entity_created_callback(
67+
ecsact_event event,
68+
ecsact_entity_id entity_id,
69+
void* callback_user_data
70+
);
71+
72+
static void entity_destroyed_callback(
73+
ecsact_event event,
74+
ecsact_entity_id entity_id,
75+
void* callback_user_data
76+
);
6277
};
6378
} // namespace ecsact::async_reference::detail

reference/async_reference/detail/c_execution_options/c_execution_options.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,23 @@ ecsact_execution_options c_execution_options::c() {
2929
updates.push_back(component);
3030
}
3131

32+
for(auto& create_info : create_entities_components) {
33+
create_entity_components_length.push_back(create_info.size());
34+
auto& entity_components = create_entity_components.emplace_back();
35+
entity_components.reserve(create_info.size());
36+
for(auto& component_info : create_info) {
37+
auto component = ecsact_component{};
38+
component.component_data = component_info.data.data();
39+
component.component_id = component_info.id;
40+
entity_components.push_back(component);
41+
}
42+
43+
create_entity_components_datas.push_back(entity_components.data());
44+
// Do stuff here
45+
}
46+
3247
options.actions = actions.data();
48+
3349
options.actions_length = actions.size();
3450

3551
options.add_components = adds.data();
@@ -44,5 +60,10 @@ ecsact_execution_options c_execution_options::c() {
4460
options.remove_components_entities = removes_entities.data();
4561
options.remove_components_length = remove_ids.size();
4662

63+
options.create_entities_components = create_entity_components_datas.data();
64+
options.create_entities_length = create_entities_components.size();
65+
options.create_entities_components_length =
66+
create_entity_components_length.data();
67+
4768
return options;
4869
}

reference/async_reference/detail/c_execution_options/c_execution_options.hh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ struct c_execution_options {
2727
std::vector<ecsact_entity_id> updates_entities;
2828
std::vector<ecsact_component_id> remove_ids;
2929
std::vector<ecsact_entity_id> removes_entities;
30+
std::vector<ecsact_entity_id> destroy_entities;
31+
32+
std::vector<std::vector<data_info<ecsact_component_id>>>
33+
create_entities_components;
3034

3135
ecsact_execution_options c();
3236

@@ -36,6 +40,10 @@ private:
3640
std::vector<ecsact_action> actions;
3741
std::vector<ecsact_component> adds;
3842
std::vector<ecsact_component> updates;
43+
44+
std::vector<ecsact_component*> create_entity_components_datas;
45+
std::vector<std::vector<ecsact_component>> create_entity_components;
46+
std::vector<int32_t> create_entity_components_length;
3947
};
4048

4149
} // namespace ecsact::async_reference::detail

0 commit comments

Comments
 (0)