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;
}
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);
}

View File

@ -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);

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);
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)

View File

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