From 0165016a7c95e3106580f04324a789096fc678c7 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sat, 4 Feb 2023 16:17:15 +0800 Subject: [PATCH] Refactor collision event to be LevelSceneData --- engine/game_systems.c | 15 +++++++-------- engine/game_systems.h | 4 ++-- engine/scene_impl.c | 4 ++-- engine/scene_impl.h | 1 + 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/engine/game_systems.c b/engine/game_systems.c index ff835fa..2eda818 100644 --- a/engine/game_systems.c +++ b/engine/game_systems.c @@ -361,7 +361,6 @@ static bool check_collision_and_move(EntityManager_t* p_manager, TileGrid_t* til return false; } -static struct sc_map_32 collision_events; void tile_collision_system(Scene_t *scene) { static bool checked_entities[MAX_COMP_POOL_SIZE] = {0}; @@ -419,7 +418,7 @@ void tile_collision_system(Scene_t *scene) if (check_collision_and_move(&scene->ent_manager, &tilemap, p_ctransform, p_bbox->size, p_other_ct->position, p_other_bbox->size, p_other_bbox->solid, &collision_value)) { uint32_t collision_key = ((ent_idx << 16) | other_ent_idx); - sc_map_put_32(&collision_events, collision_key, collision_value); + sc_map_put_32(&data->collision_events, collision_key, collision_value); } } } @@ -428,7 +427,7 @@ void tile_collision_system(Scene_t *scene) // TODO: Resolve all collision events uint32_t collision_key; - sc_map_foreach(&collision_events, collision_key, collision_value) + sc_map_foreach(&data->collision_events, collision_key, collision_value) { ent_idx = (collision_key >> 16); uint other_ent_idx = (collision_key & 0xFFFF); @@ -470,7 +469,7 @@ void tile_collision_system(Scene_t *scene) } } } - sc_map_clear_32(&collision_events); + sc_map_clear_32(&data->collision_events); // Level boundary collision unsigned int level_width = tilemap.width * TILE_SIZE; @@ -722,12 +721,12 @@ void update_tilemap_system(Scene_t *scene) } } -void init_collision_system(void) +void init_level_scene_data(LevelSceneData_t *data) { - sc_map_init_32(&collision_events, 128, 0); + sc_map_init_32(&data->collision_events, 128, 0); } -void term_collision_system(void) +void term_level_scene_data(LevelSceneData_t *data) { - sc_map_term_32(&collision_events); + sc_map_term_32(&data->collision_events); } diff --git a/engine/game_systems.h b/engine/game_systems.h index fda71c4..05975e4 100644 --- a/engine/game_systems.h +++ b/engine/game_systems.h @@ -1,8 +1,8 @@ #ifndef __GAME_SYSTEMS_H #define __GAME_SYSTEMS_H #include "scene_impl.h" -void init_collision_system(void); -void term_collision_system(void); +void init_level_scene_data(LevelSceneData_t *data); +void term_level_scene_data(LevelSceneData_t *data); void player_movement_input_system(Scene_t* scene); void player_bbox_update_system(Scene_t *scene); diff --git a/engine/scene_impl.c b/engine/scene_impl.c index fc387a6..455ab64 100644 --- a/engine/scene_impl.c +++ b/engine/scene_impl.c @@ -250,7 +250,7 @@ void init_level_scene(LevelScene_t *scene) init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action); scene->scene.scene_data = &scene->data; - init_collision_system(); + init_level_scene_data(&scene->data); // insert level scene systems sc_array_add(&scene->scene.systems, &player_movement_input_system); sc_array_add(&scene->scene.systems, &player_bbox_update_system); @@ -300,7 +300,7 @@ void free_level_scene(LevelScene_t *scene) all_tiles[i].solid = 0; sc_map_term_64(&all_tiles[i].entities_set); } - term_collision_system(); + term_level_scene_data(&scene->data); } void reload_level_scene(LevelScene_t *scene) diff --git a/engine/scene_impl.h b/engine/scene_impl.h index 4306a4b..f8a30fa 100644 --- a/engine/scene_impl.h +++ b/engine/scene_impl.h @@ -23,6 +23,7 @@ typedef struct TileGrid typedef struct LevelSceneData { TileGrid_t tilemap; + struct sc_map_32 collision_events; }LevelSceneData_t; typedef struct LevelScene