From 5c623d9bbfbe1133ae8a6cec4b9b1fe76a3c2e00 Mon Sep 17 00:00:00 2001 From: dpethes Date: Mon, 15 Jun 2020 13:34:47 +0200 Subject: [PATCH] terrain viewer: load all levels --- terrain_viewer/terrain_mesh.pas | 1 - terrain_viewer/terrain_viewer.pas | 34 +++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/terrain_viewer/terrain_mesh.pas b/terrain_viewer/terrain_mesh.pas index a476f5a..61cd2a5 100644 --- a/terrain_viewer/terrain_mesh.pas +++ b/terrain_viewer/terrain_mesh.pas @@ -14,7 +14,6 @@ type points: boolean; vcolors: boolean; textures: boolean; - fg_to_draw: integer; end; TTerrainBlock = record diff --git a/terrain_viewer/terrain_viewer.pas b/terrain_viewer/terrain_viewer.pas index 9294a31..6da807a 100644 --- a/terrain_viewer/terrain_viewer.pas +++ b/terrain_viewer/terrain_viewer.pas @@ -116,6 +116,16 @@ begin glLoadIdentity; // Reset The View end; +procedure LoadLevel(); +begin + Assert((0 <= g_selected_level_idx) and (g_selected_level_idx < g_levels.Size), 'broken level select'); + if (terrain <> nil) then + terrain.Free; + terrain := TTerrainMesh.Create; + terrain.Load(g_levels[g_selected_level_idx]); + terrain.InitGL; +end; + procedure DrawGui; const LevelNames: array[0..19] of string = ( @@ -152,15 +162,9 @@ begin Imgui.Begin_('Level list'); for i := 0 to g_levels.Size - 1 do begin item := g_levels[i]; - //some levels are broken atm - if i in [7, 9, 15] then - continue; if Imgui.Selectable(item.name + ' - ' + LevelNames[i], g_selected_level_idx = i) then begin g_selected_level_idx := i; - terrain.Free; - terrain := TTerrainMesh.Create; - terrain.Load(g_levels[i]); - terrain.InitGL; + LoadLevel(); end; end; Imgui.End_; @@ -340,10 +344,18 @@ begin view.render.points := not view.render.points; SDLK_t: view.render.textures := not view.render.textures; - SDLK_LEFT: - view.render.fg_to_draw := max(0, view.render.fg_to_draw - 1); - SDLK_RIGHT: - view.render.fg_to_draw += 1; + SDLK_DOWN: begin + g_selected_level_idx += 1; + if g_selected_level_idx >= g_levels.Size then + g_selected_level_idx := 0; + LoadLevel(); + end; + SDLK_UP: begin + g_selected_level_idx -= 1; + if g_selected_level_idx < 0 then + g_selected_level_idx := g_levels.Size - 1; + LoadLevel(); + end; end; SDL_MOUSEBUTTONDOWN: begin