optimize IntegratePositions system to avoid comp fetch + update flecs v3.2.3
parent
4a07e4ff4c
commit
00f0a672f8
|
@ -1,4 +1,5 @@
|
||||||
build
|
build
|
||||||
|
build.*
|
||||||
build_*
|
build_*
|
||||||
emsdk
|
emsdk
|
||||||
deploy_web
|
deploy_web
|
||||||
|
@ -19,3 +20,5 @@ GTAGS
|
||||||
pkg
|
pkg
|
||||||
pkg.zip
|
pkg.zip
|
||||||
eco2d.zip
|
eco2d.zip
|
||||||
|
eco2d.sublime-workspace
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
static debug_draw_queue draw_queue = {0};
|
static debug_draw_queue draw_queue = {0};
|
||||||
|
|
||||||
#if !defined(_DEBUG) && 1
|
#if !defined(_DEBUG) || 1
|
||||||
static bool draw_is_enabled = false;
|
static bool draw_is_enabled = false;
|
||||||
#else
|
#else
|
||||||
static bool draw_is_enabled = true;
|
static bool draw_is_enabled = true;
|
||||||
|
|
|
@ -243,13 +243,23 @@ void IntegratePositions(ecs_iter_t *it) {
|
||||||
profile(PROF_INTEGRATE_POS) {
|
profile(PROF_INTEGRATE_POS) {
|
||||||
Position *p = ecs_field(it, Position, 1);
|
Position *p = ecs_field(it, Position, 1);
|
||||||
Velocity *v = ecs_field(it, Velocity, 2);
|
Velocity *v = ecs_field(it, Velocity, 2);
|
||||||
|
StreamInfo *s = ecs_field(it, StreamInfo, 3);
|
||||||
|
|
||||||
for (int i = 0; i < it->count; i++) {
|
for (int i = 0; i < it->count; i++) {
|
||||||
if (ecs_get(it->world, it->entities[i], IsInVehicle)) {
|
if (ecs_get(it->world, it->entities[i], IsInVehicle)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
entity_set_position(it->entities[i], p[i].x+v[i].x*safe_dt(it), p[i].y+v[i].y*safe_dt(it));
|
const float safe_dt_val = safe_dt(it);
|
||||||
|
|
||||||
|
// entity_set_position(it->entities[i], p[i].x+v[i].x*safe_dt(it), p[i].y+v[i].y*safe_dt(it));
|
||||||
|
p[i].x += v[i].x*safe_dt_val;
|
||||||
|
p[i].y += v[i].y*safe_dt_val;
|
||||||
|
|
||||||
|
librg_entity_chunk_set(world_tracker(), it->entities[i], librg_chunk_from_realpos(world_tracker(), p[i].x, p[i].y, 0));
|
||||||
|
|
||||||
|
s[i].tick_delay = 0.0f;
|
||||||
|
s[i].last_update = 0.0f;
|
||||||
|
|
||||||
{
|
{
|
||||||
debug_v2 a = {p[i].x, p[i].y};
|
debug_v2 a = {p[i].x, p[i].y};
|
||||||
|
@ -364,7 +374,7 @@ void SystemsImport(ecs_world_t *ecs) {
|
||||||
ECS_SYSTEM(ecs, VehicleHandling, EcsOnUpdate, components.Vehicle, components.Position, components.Velocity);
|
ECS_SYSTEM(ecs, VehicleHandling, EcsOnUpdate, components.Vehicle, components.Position, components.Velocity);
|
||||||
ECS_SYSTEM(ecs, BodyCollisions, EcsOnUpdate, components.Position, components.Velocity, components.PhysicsBody, !components.TriggerOnly);
|
ECS_SYSTEM(ecs, BodyCollisions, EcsOnUpdate, components.Position, components.Velocity, components.PhysicsBody, !components.TriggerOnly);
|
||||||
ECS_SYSTEM(ecs, BlockCollisions, EcsOnValidate, components.Position, components.Velocity, !components.TriggerOnly);
|
ECS_SYSTEM(ecs, BlockCollisions, EcsOnValidate, components.Position, components.Velocity, !components.TriggerOnly);
|
||||||
ECS_SYSTEM(ecs, IntegratePositions, EcsOnValidate, components.Position, components.Velocity);
|
ECS_SYSTEM(ecs, IntegratePositions, EcsOnValidate, components.Position, components.Velocity, components.StreamInfo);
|
||||||
|
|
||||||
// vehicles
|
// vehicles
|
||||||
ECS_SYSTEM(ecs, EnterVehicle, EcsPostUpdate, components.Input, components.Position, !components.IsInVehicle);
|
ECS_SYSTEM(ecs, EnterVehicle, EcsPostUpdate, components.Input, components.Position, !components.IsInVehicle);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"folders":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"build_systems":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "eco2d",
|
||||||
|
"cmd": ["build.bat"],
|
||||||
|
"working_dir": "$project_path",
|
||||||
|
"file_regex": "^(.*)\\((\\d+),?(\\d+)?\\)\\s?:\\s([^\n]+)",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
Loading…
Reference in New Issue