Experiment with timer-based transition
parent
019f39f84c
commit
e37e89505a
|
@ -1114,14 +1114,28 @@ static void at_level_dead(Scene_t* scene)
|
|||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
Entity_t* p_player = create_player(&scene->ent_manager);
|
||||
p_player->position = data->player_spawn;
|
||||
data->sm.state = LEVEL_STATE_STARTING;
|
||||
CPlayerState_t* p_pstate = get_component(p_player, CPLAYERSTATE_T);
|
||||
if (data->camera.mode == CAMERA_RANGED_MOVEMENT)
|
||||
{
|
||||
p_pstate->locked = true;
|
||||
}
|
||||
change_level_state(data, LEVEL_STATE_STARTING);
|
||||
}
|
||||
|
||||
static void at_level_complete(Scene_t* scene)
|
||||
{
|
||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||
do_action(scene, ACTION_NEXTLEVEL, true);
|
||||
data->sm.state = LEVEL_STATE_STARTING;
|
||||
data->sm.fractional += scene->delta_time;
|
||||
if (data->sm.fractional > 1.0f)
|
||||
{
|
||||
data->sm.fractional -= 1.0f;
|
||||
data->sm.counter++;
|
||||
}
|
||||
if (data->sm.counter >= 3)
|
||||
{
|
||||
do_action(scene, ACTION_NEXTLEVEL, true);
|
||||
at_level_dead(scene);
|
||||
}
|
||||
}
|
||||
|
||||
void init_sandbox_scene(LevelScene_t* scene)
|
||||
|
|
|
@ -244,7 +244,7 @@ void check_player_dead_system(Scene_t* scene)
|
|||
ent->position = p_player->position;
|
||||
}
|
||||
destroy_entity(scene, &data->tilemap, p_player);
|
||||
data->sm.state = LEVEL_STATE_DEAD;
|
||||
change_level_state(data, LEVEL_STATE_DEAD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1467,10 +1467,8 @@ void update_tilemap_system(Scene_t* scene)
|
|||
{
|
||||
Entity_t* p_ent = get_entity(&scene->ent_manager, ent_idx);
|
||||
if (!p_ent->m_alive) continue;
|
||||
CTransform_t* p_ctransform = get_component(p_ent, CTRANSFORM_COMP_T);
|
||||
if (p_ctransform == NULL) continue;
|
||||
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
||||
|
||||
CBBox_t* p_bbox = get_component(p_ent, CBBOX_COMP_T);
|
||||
// Update tilemap position
|
||||
for (size_t i = 0;i < p_tilecoord->n_tiles; ++i)
|
||||
{
|
||||
|
@ -2019,7 +2017,10 @@ void level_end_detection_system(Scene_t* scene)
|
|||
)
|
||||
)
|
||||
{
|
||||
lvl_scene->data.sm.state = LEVEL_STATE_COMPLETE;
|
||||
destroy_entity(scene, &lvl_scene->data.tilemap, p_other_ent);
|
||||
change_level_state(&lvl_scene->data, LEVEL_STATE_COMPLETE);
|
||||
|
||||
|
||||
//do_action(scene, ACTION_NEXTLEVEL, true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,6 +77,13 @@ typedef struct LevelSceneData {
|
|||
LevelSceneStateMachine_t sm;
|
||||
}LevelSceneData_t;
|
||||
|
||||
static inline void change_level_state(LevelSceneData_t* data, LevelSceneState_t state)
|
||||
{
|
||||
data->sm.state = state;
|
||||
data->sm.counter = 0;
|
||||
data->sm.fractional = 0;
|
||||
}
|
||||
|
||||
typedef struct LevelScene {
|
||||
Scene_t scene;
|
||||
LevelSceneData_t data;
|
||||
|
|
Loading…
Reference in New Issue