X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel.c;h=eeb5b65478b93c2a4145b50a22b23eddec18bd23;hb=c1021a9d6a49eae97ad17755414279530ca9e21c;hp=87dec2bef9d93e5bf9d174a52adcb6982e63f771;hpb=a5bfbfb416d1aa8385114f5ab82bc78dd1b20148;p=nothing.git diff --git a/src/game/level.c b/src/game/level.c index 87dec2be..eeb5b654 100644 --- a/src/game/level.c +++ b/src/game/level.c @@ -1,10 +1,7 @@ #include #include "system/stacktrace.h" -#include "broadcast.h" #include "color.h" -#include "ebisp/builtins.h" -#include "ebisp/interpreter.h" #include "game/camera.h" #include "game/level.h" #include "game/level/background.h" @@ -16,19 +13,16 @@ #include "game/level/player.h" #include "game/level/regions.h" #include "game/level/rigid_bodies.h" -#include "game/level_metadata.h" #include "game/level/level_editor/rect_layer.h" #include "game/level/level_editor/point_layer.h" #include "game/level/level_editor/player_layer.h" #include "game/level/level_editor/label_layer.h" #include "game/level/level_editor/background_layer.h" -#include "system/line_stream.h" #include "system/log.h" #include "system/lt.h" #include "system/nth_alloc.h" #include "system/str.h" #include "game/level/level_editor.h" -#include "game/level/script.h" #include "ui/console.h" #define LEVEL_GRAVITY 1500.0f @@ -44,8 +38,7 @@ struct Level Lt *lt; LevelState state; - LevelMetadata *metadata; - Background *background; + Background background; RigidBodies *rigid_bodies; Player *player; Platforms *platforms; @@ -55,16 +48,11 @@ struct Level Boxes *boxes; Labels *labels; Regions *regions; - Script *supa_script; - Console *console; - int console_enabled; }; -Level *create_level_from_level_editor(const LevelEditor *level_editor, - Broadcast *broadcast) +Level *create_level_from_level_editor(const LevelEditor *level_editor) { trace_assert(level_editor); - trace_assert(broadcast); Lt *lt = create_lt(); @@ -77,15 +65,9 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor, } level->lt = lt; - level->background = PUSH_LT( - lt, - create_background( - color_picker_rgba( - &level_editor->background_layer.color_picker)), - destroy_background); - if (level->background == NULL) { - RETURN_LT(lt, NULL); - } + level->background = create_background( + color_picker_rgba( + &level_editor->background_layer.color_picker)); level->rigid_bodies = PUSH_LT(lt, create_rigid_bodies(1024), destroy_rigid_bodies); if (level->rigid_bodies == NULL) { @@ -96,8 +78,7 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor, lt, create_player_from_player_layer( &level_editor->player_layer, - level->rigid_bodies, - broadcast), + level->rigid_bodies), destroy_player); if (level->player == NULL) { RETURN_LT(lt, NULL); @@ -153,31 +134,15 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor, level->regions = PUSH_LT( lt, - create_regions_from_rect_layer(level_editor->regions_layer), + create_regions_from_rect_layer( + level_editor->regions_layer, + level->labels, + level->goals), destroy_regions); if (level->regions == NULL) { RETURN_LT(lt, NULL); } - level->supa_script = PUSH_LT( - lt, - create_script_from_string( - broadcast, - level_editor->supa_script_source), - destroy_script); - if (level->supa_script == NULL) { - log_fail("Could not construct Supa Script for the level\n"); - RETURN_LT(lt, NULL); - } - - level->console = PUSH_LT( - lt, - create_console(broadcast), - destroy_console); - if (level->console == NULL) { - RETURN_LT(lt, NULL); - } - return level; } @@ -191,7 +156,7 @@ int level_render(const Level *level, const Camera *camera) { trace_assert(level); - if (background_render(level->background, camera) < 0) { + if (background_render(&level->background, camera) < 0) { return -1; } @@ -227,12 +192,6 @@ int level_render(const Level *level, const Camera *camera) return -1; } - if (level->console_enabled) { - if (console_render(level->console, camera) < 0) { - return -1; - } - } - return 0; } @@ -241,12 +200,6 @@ int level_update(Level *level, float delta_time) trace_assert(level); trace_assert(delta_time > 0); - if (level->console_enabled) { - if (console_update(level->console, delta_time) < 0) { - return -1; - } - } - if (level->state == LEVEL_STATE_PAUSE) { return 0; } @@ -259,10 +212,9 @@ int level_update(Level *level, float delta_time) rigid_bodies_collide(level->rigid_bodies, level->platforms); - player_hide_goals(level->player, level->goals); player_die_from_lava(level->player, level->lava); - regions_player_enter(level->regions, level->player, level->supa_script); - regions_player_leave(level->regions, level->player, level->supa_script); + regions_player_enter(level->regions, level->player); + regions_player_leave(level->regions, level->player); goals_update(level->goals, delta_time); lava_update(level->lava, delta_time); @@ -283,7 +235,7 @@ int level_event_idle(Level *level, const SDL_Event *event, case SDLK_w: case SDLK_UP: case SDLK_SPACE: { - player_jump(level->player, level->supa_script); + player_jump(level->player); } break; case SDLK_p: { @@ -294,14 +246,13 @@ int level_event_idle(Level *level, const SDL_Event *event, case SDLK_l: { camera_toggle_debug_mode(camera); - background_toggle_debug_mode(level->background); } break; } break; case SDL_JOYBUTTONDOWN: if (event->jbutton.button == 1) { - player_jump(level->player, level->supa_script); + player_jump(level->player); } break; } @@ -330,56 +281,12 @@ int level_event_pause(Level *level, const SDL_Event *event, return 0; } -static -int level_event_console(Level *level, const SDL_Event *event) -{ - trace_assert(level); - trace_assert(event); - - if (level->console_enabled) { - switch (event->type) { - case SDL_KEYDOWN: - switch (event->key.keysym.sym) { - case SDLK_ESCAPE: - SDL_StopTextInput(); - level->console_enabled = 0; - return 0; - - default: {} - } - - default: {} - } - } else { - switch (event->type) { - case SDL_KEYUP: { - switch (event->key.keysym.sym) { - case SDLK_BACKQUOTE: - case SDLK_c: { - SDL_StartTextInput(); - level->console_enabled = 1; - console_slide_down(level->console); - } break; - } - } break; - } - } - - return console_handle_event(level->console, event); -} - int level_event(Level *level, const SDL_Event *event, Camera *camera, Sound_samples *sound_samples) { trace_assert(level); trace_assert(event); - level_event_console(level, event); - - if (level->console_enabled) { - return 0; - } - switch (level->state) { case LEVEL_STATE_IDLE: { return level_event_idle(level, event, camera, sound_samples); @@ -400,10 +307,6 @@ int level_input(Level *level, trace_assert(level); trace_assert(keyboard_state); - if (level->console_enabled) { - return 0; - } - if (level->state == LEVEL_STATE_PAUSE) { return 0; } @@ -455,38 +358,13 @@ int level_enter_camera_event(Level *level, Camera *camera) return 0; } -struct EvalResult level_send(Level *level, Gc *gc, struct Scope *scope, struct Expr path) +void level_disable_pause_mode(Level *level, Camera *camera, + Sound_samples *sound_samples) { trace_assert(level); - trace_assert(gc); - trace_assert(scope); - - const char *target = NULL; - struct Expr rest = void_expr(); - struct EvalResult res = match_list(gc, "q*", path, &target, &rest); - if (res.is_error) { - return res; - } - - if (strcmp(target, "goal") == 0) { - return goals_send(level->goals, gc, scope, rest); - } else if (strcmp(target, "label") == 0) { - return labels_send(level->labels, gc, scope, rest); - } else if (strcmp(target, "box") == 0) { - return boxes_send(level->boxes, gc, scope, rest); - } else if (strcmp(target, "body-push") == 0) { - long int id = 0, x = 0, y = 0; - res = match_list(gc, "ddd", rest, &id, &x, &y); - if (res.is_error) { - return res; - } - - rigid_bodies_apply_force(level->rigid_bodies, (size_t) id, vec((float) x, (float) y)); - - return eval_success(NIL(gc)); - } else if (strcmp(target, "edit") == 0) { - return eval_success(NIL(gc)); - } - - return unknown_target(gc, "level", target); + trace_assert(camera); + trace_assert(sound_samples); + level->state = LEVEL_STATE_IDLE; + camera->blackwhite_mode = false; + sound_samples_toggle_pause(sound_samples); }