Refactor collision event to be LevelSceneData
parent
c2bf930059
commit
0165016a7c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -23,6 +23,7 @@ typedef struct TileGrid
|
|||
typedef struct LevelSceneData
|
||||
{
|
||||
TileGrid_t tilemap;
|
||||
struct sc_map_32 collision_events;
|
||||
}LevelSceneData_t;
|
||||
|
||||
typedef struct LevelScene
|
||||
|
|
Loading…
Reference in New Issue