From 1505735adadcdadb0966f9ec1ba8aafc46602e47 Mon Sep 17 00:00:00 2001 From: arngo <27396817+arngo@users.noreply.github.com> Date: Fri, 26 May 2023 12:07:51 -0400 Subject: make id a struct with numberical id and world ptr --- include/rodeo/collision.h | 9 ++++++--- include/rodeo/collision_t.h | 9 +++++++++ src/collision/rodeo_collision.c | 31 ++++++++++++++++++++----------- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/include/rodeo/collision.h b/include/rodeo/collision.h index a8ec07f..277b780 100644 --- a/include/rodeo/collision.h +++ b/include/rodeo/collision.h @@ -19,14 +19,17 @@ rodeo_collision_2d_world_item_create( void rodeo_collision_2d_world_item_destroy( - rodeo_collision_2d_world_t *world, cvec_collision_2d_world_item_value* cvec_value ); +void +rodeo_collision_2d_world_item_destroy_by_id( + world_id id +); + rodeo_collision_2d_world_item_t* rodeo_collision_2d_world_item_get_by_id( - rodeo_collision_2d_world_t *world, - uint32_t id + world_id id ); void diff --git a/include/rodeo/collision_t.h b/include/rodeo/collision_t.h index 19f5dbe..e75d243 100644 --- a/include/rodeo/collision_t.h +++ b/include/rodeo/collision_t.h @@ -4,10 +4,19 @@ #include #include +struct cvec_collision_2d_world_item; + typedef struct { uint32_t id; + struct cvec_collision_2d_world_item *world; +} world_id; + +typedef +struct +{ + world_id id; float x; float y; float dx; diff --git a/src/collision/rodeo_collision.c b/src/collision/rodeo_collision.c index 8119fb9..e4791bf 100644 --- a/src/collision/rodeo_collision.c +++ b/src/collision/rodeo_collision.c @@ -34,7 +34,8 @@ rodeo_collision_2d_world_item_create( ) { static uint32_t next_id = 0; - item_params.id = next_id++; + item_params.id.id = next_id++; + item_params.id.world = world; cvec_collision_2d_world_item_value* new_item = cvec_collision_2d_world_item_push(world, item_params); return new_item; @@ -42,24 +43,32 @@ rodeo_collision_2d_world_item_create( void rodeo_collision_2d_world_item_destroy( - rodeo_collision_2d_world_t *world, cvec_collision_2d_world_item_value* cvec_value ) { - cvec_collision_2d_world_item_value temp = *cvec_collision_2d_world_item_back(world); - *cvec_collision_2d_world_item_back(world) = *cvec_value; + + cvec_collision_2d_world_item_value temp = *cvec_collision_2d_world_item_back(cvec_value->id.world); + *cvec_collision_2d_world_item_back(cvec_value->id.world) = *cvec_value; *cvec_value = temp; - cvec_collision_2d_world_item_pop(world); + cvec_collision_2d_world_item_pop(cvec_value->id.world); +} + +void +rodeo_collision_2d_world_item_destroy_by_id( + world_id id +) +{ + rodeo_collision_2d_world_item_t* item = rodeo_collision_2d_world_item_get_by_id(id); + rodeo_collision_2d_world_item_destroy(item); } rodeo_collision_2d_world_item_t* rodeo_collision_2d_world_item_get_by_id( - rodeo_collision_2d_world_t *world, - uint32_t id + world_id id ) { - c_foreach(i, cvec_collision_2d_world_item, *world) { - if (i.ref->id == id) { + c_foreach(i, cvec_collision_2d_world_item, *id.world) { + if (i.ref->id.id == id.id) { return i.ref; } } @@ -109,9 +118,9 @@ int rodeo_collision_2d_item_cmp( const rodeo_collision_2d_world_item_t* b ) { - if (a->id == b->id) { + if (a->id.id == b->id.id) { return 0; } else { - return a->id > b->id ? 1 : -1; + return a->id.id > b->id.id ? 1 : -1; } } -- cgit v1.2.3