Refactor collision event to be LevelSceneData

scene_man
En Yi 2023-02-04 16:17:15 +08:00
parent c2bf930059
commit 0165016a7c
4 changed files with 12 additions and 12 deletions

View File

@ -361,7 +361,6 @@ static bool check_collision_and_move(EntityManager_t* p_manager, TileGrid_t* til
return false; return false;
} }
static struct sc_map_32 collision_events;
void tile_collision_system(Scene_t *scene) void tile_collision_system(Scene_t *scene)
{ {
static bool checked_entities[MAX_COMP_POOL_SIZE] = {0}; 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)) 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); 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 // TODO: Resolve all collision events
uint32_t collision_key; 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); ent_idx = (collision_key >> 16);
uint other_ent_idx = (collision_key & 0xFFFF); 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 // Level boundary collision
unsigned int level_width = tilemap.width * TILE_SIZE; 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);
} }

View File

@ -1,8 +1,8 @@
#ifndef __GAME_SYSTEMS_H #ifndef __GAME_SYSTEMS_H
#define __GAME_SYSTEMS_H #define __GAME_SYSTEMS_H
#include "scene_impl.h" #include "scene_impl.h"
void init_collision_system(void); void init_level_scene_data(LevelSceneData_t *data);
void term_collision_system(void); void term_level_scene_data(LevelSceneData_t *data);
void player_movement_input_system(Scene_t* scene); void player_movement_input_system(Scene_t* scene);
void player_bbox_update_system(Scene_t *scene); void player_bbox_update_system(Scene_t *scene);

View File

@ -250,7 +250,7 @@ void init_level_scene(LevelScene_t *scene)
init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action); init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action);
scene->scene.scene_data = &scene->data; scene->scene.scene_data = &scene->data;
init_collision_system(); init_level_scene_data(&scene->data);
// insert level scene systems // insert level scene systems
sc_array_add(&scene->scene.systems, &player_movement_input_system); sc_array_add(&scene->scene.systems, &player_movement_input_system);
sc_array_add(&scene->scene.systems, &player_bbox_update_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; all_tiles[i].solid = 0;
sc_map_term_64(&all_tiles[i].entities_set); 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) void reload_level_scene(LevelScene_t *scene)

View File

@ -23,6 +23,7 @@ typedef struct TileGrid
typedef struct LevelSceneData typedef struct LevelSceneData
{ {
TileGrid_t tilemap; TileGrid_t tilemap;
struct sc_map_32 collision_events;
}LevelSceneData_t; }LevelSceneData_t;
typedef struct LevelScene typedef struct LevelScene