RETURN_LT(lt, NULL);
}
- level->physical_world = PUSH_LT(lt, create_physical_world(), destroy_physical_world);
- if (level->physical_world == NULL) {
- RETURN_LT(lt, NULL);
- }
-
FILE *level_file = PUSH_LT(lt, fopen(file_name, "r"), fclose_lt);
if (level_file == NULL) {
throw_error(ERROR_TYPE_LIBC);
if (level->player == NULL) {
RETURN_LT(lt, NULL);
}
- if (physical_world_add_solid(level->physical_world,
- player_as_solid(level->player)) < 0) {
- RETURN_LT(lt, NULL);
- }
level->platforms = PUSH_LT(lt, create_platforms_from_stream(level_file), destroy_platforms);
if (level->platforms == NULL) {
if (level->boxes == NULL) {
RETURN_LT(lt, NULL);
}
- if (boxes_add_to_physical_world(level->boxes,
- level->physical_world) < 0) {
- RETURN_LT(lt, NULL);
- }
level->background = PUSH_LT(lt, create_background(level->background_color), destroy_background);
if (level->background == NULL) {
RETURN_LT(lt, NULL);
}
+ level->physical_world = PUSH_LT(lt, create_physical_world(), destroy_physical_world);
+ if (level->physical_world == NULL) {
+ RETURN_LT(lt, NULL);
+ }
+ if (physical_world_add_solid(
+ level->physical_world,
+ player_as_solid(level->player)) < 0) { RETURN_LT(lt, NULL); }
+ if (boxes_add_to_physical_world(
+ level->boxes,
+ level->physical_world) < 0) { RETURN_LT(lt, NULL); }
+
level->lt = lt;
fclose(RELEASE_LT(lt, level_file));
return -1;
}
- /* TODO(#157): goals_cue is not supposed to be invoked in level_render
- *
- * But I simply couldn't find a better place for it.
- */
- goals_cue(level->goals, camera);
return 0;
}
player_die_from_lava(level->player, level->lava);
goals_update(level->goals, delta_time);
- goals_checkpoint(level->goals, level->player);
lava_update(level->lava, delta_time);
return 0;
/* TODO(#104): duplicate code in create_level_from_file and level_reload_preserve_player */
- physical_world_clean(level->physical_world);
+
FILE * const level_file = PUSH_LT(lt, fopen(file_name, "r"), fclose_lt);
if (level_file == NULL) {
RETURN_LT(lt, -1);
}
destroy_player(skipped_player);
- if (physical_world_add_solid(level->physical_world,
- player_as_solid(level->player)) < 0) {
- RETURN_LT(lt, -1);
- }
platforms_t * const platforms = create_platforms_from_stream(level_file);
if (platforms == NULL) {
RETURN_LT(lt, -1);
}
level->boxes = RESET_LT(level->lt, level->boxes, boxes);
- if (boxes_add_to_physical_world(level->boxes,
- level->physical_world) < 0) {
- RETURN_LT(lt, -1);
- }
+
+ physical_world_clean(level->physical_world);
+ if (physical_world_add_solid(
+ level->physical_world,
+ player_as_solid(level->player)) < 0) { RETURN_LT(lt, -1); }
+ if (boxes_add_to_physical_world(
+ level->boxes,
+ level->physical_world) < 0) { RETURN_LT(lt, -1); }
RETURN_LT(lt, 0);
}
{
background_toggle_debug_mode(level->background);
}
+
+int level_enter_camera_event(level_t *level,
+ const camera_t *camera)
+{
+ goals_cue(level->goals, camera);
+ goals_checkpoint(level->goals, level->player);
+ return 0;
+}