From 8aac8cd05cc30cc7e16b7f3cca0b6730de67c78a Mon Sep 17 00:00:00 2001 From: dpethes Date: Sun, 12 Jul 2015 18:23:22 +0200 Subject: [PATCH] terrain viewer: load file by index --- terrain_viewer/terrain_mesh.pas | 15 +++++-- terrain_viewer/terrain_viewer.lpi | 2 +- terrain_viewer/terrain_viewer.pas | 72 ++++++------------------------- 3 files changed, 26 insertions(+), 63 deletions(-) diff --git a/terrain_viewer/terrain_mesh.pas b/terrain_viewer/terrain_mesh.pas index a0086dc..676ebb0 100644 --- a/terrain_viewer/terrain_mesh.pas +++ b/terrain_viewer/terrain_mesh.pas @@ -39,7 +39,7 @@ type procedure InitBlockStaticData; public destructor Destroy; override; - procedure Load(const hmp_filename: string); + procedure Load(level_idx: integer); procedure InitGL; procedure DrawGL(opts: TRenderOpts); end; @@ -171,13 +171,20 @@ begin result := a^.texture_index - b^.texture_index; end; -procedure TTerrainMesh.Load(const hmp_filename: string); +procedure TTerrainMesh.Load(level_idx: integer); +const + LevelIds = '0123456789abcdefgh'; var x, y: integer; + c: char; begin terrain := TWorld.Create; - terrain.LoadFromFiles('hmp_0', 'lv_0.text', 'lv_0.tex'); - //terrain.LoadFromFiles('hmp_1', 'lv_1.text', 'lv_1.tex'); + level_idx := level_idx mod length(LevelIds); + c := LevelIds[1 + level_idx]; + terrain.LoadFromFiles( + 'data\hmp_' + c, + 'data\lv_'+c+'.text', + 'data\lv_'+c+'.tex'); TransformTiles; InitBlockStaticData; WriteLn(Format('terrain size: %dx%d, tris: %d', diff --git a/terrain_viewer/terrain_viewer.lpi b/terrain_viewer/terrain_viewer.lpi index f3e2adb..95af3f0 100644 --- a/terrain_viewer/terrain_viewer.lpi +++ b/terrain_viewer/terrain_viewer.lpi @@ -29,7 +29,7 @@ - + diff --git a/terrain_viewer/terrain_viewer.pas b/terrain_viewer/terrain_viewer.pas index 49fcd43..f99833a 100644 --- a/terrain_viewer/terrain_viewer.pas +++ b/terrain_viewer/terrain_viewer.pas @@ -51,16 +51,6 @@ var opts: TRenderOpts; end; - key_pressed: record - wireframe: boolean; - vcolors: boolean; - points: boolean; - textures: boolean; - fullscreen: boolean; - autorotate: boolean; - fg: boolean; - end; - mouse: record drag: boolean; translate: boolean; @@ -91,7 +81,7 @@ begin writeln(ogl_info); glShadeModel( GL_SMOOTH ); // Enable smooth shading - glClearColor( 0.0, 0.0, 0.0, 0.0 ); + glClearColor( 0.0, 0.3, 0.6, 0.0 ); glClearDepth( 1.0 ); // Depth buffer setup glEnable( GL_DEPTH_TEST ); // Enables Depth Testing glDepthFunc( GL_LEQUAL ); // The Type Of Depth Test To Do @@ -227,8 +217,7 @@ begin case event.key.keysym.sym of SDLK_ESCAPE: Done := true; - SDLK_F1: - if not key_pressed.fullscreen then begin + SDLK_F1: begin if not fullscreen then begin SetMode(SCR_W_fscrn, SCR_H_fscrn, true); fullscreen := true; @@ -237,8 +226,8 @@ begin fullscreen := false; end; InitGL; + terrain.InitGL; ResizeWindow( surface^.w, surface^.h ); - key_pressed.fullscreen := true; end; SDLK_s: WindowScreenshot( surface^.w, surface^.h ); @@ -247,53 +236,21 @@ begin SDLK_PAGEDOWN: view.distance -= ZoomIncrement; SDLK_r: - if not key_pressed.autorotate then begin - view.autorotate := not view.autorotate; - key_pressed.autorotate := true; - end; + view.autorotate := not view.autorotate; //terrain rendering opts SDLK_w: - if not key_pressed.wireframe then begin - view.opts.wireframe := not view.opts.wireframe; - key_pressed.wireframe := true; - end; + view.opts.wireframe := not view.opts.wireframe; SDLK_v: - if not key_pressed.vcolors then begin - view.opts.vcolors := not view.opts.vcolors; - key_pressed.vcolors := true; - end; + view.opts.vcolors := not view.opts.vcolors; SDLK_p: - if not key_pressed.points then begin - view.opts.points := not view.opts.points; - key_pressed.points := true; - end; + view.opts.points := not view.opts.points; SDLK_t: - if not key_pressed.textures then begin - view.opts.textures := not view.opts.textures; - key_pressed.textures := true; - end; + view.opts.textures := not view.opts.textures; SDLK_LEFT: view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1); SDLK_RIGHT: view.opts.fg_to_draw += 1; - - end; - - SDL_KEYUP: - case event.key.keysym.sym of - SDLK_F1: - key_pressed.fullscreen := false; - SDLK_w: - key_pressed.wireframe := false; - SDLK_v: - key_pressed.vcolors := false; - SDLK_p: - key_pressed.points := false; - SDLK_t: - key_pressed.textures := false; - SDLK_r: - key_pressed.autorotate := false; end; SDL_MOUSEBUTTONDOWN: begin @@ -344,16 +301,16 @@ end; //****************************************************************************** var sec, frames: integer; - in_file: string; + in_file: integer; begin if Paramcount < 1 then begin - writeln('specify HMP file'); + writeln('specify HMP file index'); exit; end; - in_file := ParamStr(1); + in_file := StrToInt( ParamStr(1) ); terrain := TTerrainMesh.Create; - terrain.Load(in_file); + terrain.Load(14); writeln('Init SDL...'); SDL_Init( SDL_INIT_VIDEO ); @@ -370,8 +327,6 @@ begin sec := SDL_GetTicks; frames := 0; Done := False; - key_pressed.wireframe := false; - key_pressed.fullscreen := false; while not Done do begin HandleEvent; DrawGLScene; @@ -380,9 +335,10 @@ begin write(frames:3, ' dist: ', view.distance:5:1, ' rot: ', view.rotation_angle:5:1, #13); frames := 0; sec := SDL_GetTicks; + + //WindowScreenshot( surface^.w, surface^.h ); end; SDL_Delay(10); - //WindowScreenshot( surface^.w, surface^.h ); end; terrain.Free;