2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00

terrain viewer: load file by index

This commit is contained in:
dpethes 2015-07-12 18:23:22 +02:00
parent aaedff5e21
commit 8aac8cd05c
3 changed files with 26 additions and 63 deletions

View File

@ -39,7 +39,7 @@ type
procedure InitBlockStaticData; procedure InitBlockStaticData;
public public
destructor Destroy; override; destructor Destroy; override;
procedure Load(const hmp_filename: string); procedure Load(level_idx: integer);
procedure InitGL; procedure InitGL;
procedure DrawGL(opts: TRenderOpts); procedure DrawGL(opts: TRenderOpts);
end; end;
@ -171,13 +171,20 @@ begin
result := a^.texture_index - b^.texture_index; result := a^.texture_index - b^.texture_index;
end; end;
procedure TTerrainMesh.Load(const hmp_filename: string); procedure TTerrainMesh.Load(level_idx: integer);
const
LevelIds = '0123456789abcdefgh';
var var
x, y: integer; x, y: integer;
c: char;
begin begin
terrain := TWorld.Create; terrain := TWorld.Create;
terrain.LoadFromFiles('hmp_0', 'lv_0.text', 'lv_0.tex'); level_idx := level_idx mod length(LevelIds);
//terrain.LoadFromFiles('hmp_1', 'lv_1.text', 'lv_1.tex'); c := LevelIds[1 + level_idx];
terrain.LoadFromFiles(
'data\hmp_' + c,
'data\lv_'+c+'.text',
'data\lv_'+c+'.tex');
TransformTiles; TransformTiles;
InitBlockStaticData; InitBlockStaticData;
WriteLn(Format('terrain size: %dx%d, tris: %d', WriteLn(Format('terrain size: %dx%d, tris: %d',

View File

@ -29,7 +29,7 @@
<RunParams> <RunParams>
<local> <local>
<FormatVersion Value="1"/> <FormatVersion Value="1"/>
<CommandLineParams Value="hmp"/> <CommandLineParams Value="1"/>
</local> </local>
</RunParams> </RunParams>
<RequiredPackages Count="1"> <RequiredPackages Count="1">

View File

@ -51,16 +51,6 @@ var
opts: TRenderOpts; opts: TRenderOpts;
end; end;
key_pressed: record
wireframe: boolean;
vcolors: boolean;
points: boolean;
textures: boolean;
fullscreen: boolean;
autorotate: boolean;
fg: boolean;
end;
mouse: record mouse: record
drag: boolean; drag: boolean;
translate: boolean; translate: boolean;
@ -91,7 +81,7 @@ begin
writeln(ogl_info); writeln(ogl_info);
glShadeModel( GL_SMOOTH ); // Enable smooth shading 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 glClearDepth( 1.0 ); // Depth buffer setup
glEnable( GL_DEPTH_TEST ); // Enables Depth Testing glEnable( GL_DEPTH_TEST ); // Enables Depth Testing
glDepthFunc( GL_LEQUAL ); // The Type Of Depth Test To Do glDepthFunc( GL_LEQUAL ); // The Type Of Depth Test To Do
@ -227,8 +217,7 @@ begin
case event.key.keysym.sym of case event.key.keysym.sym of
SDLK_ESCAPE: SDLK_ESCAPE:
Done := true; Done := true;
SDLK_F1: SDLK_F1: begin
if not key_pressed.fullscreen then begin
if not fullscreen then begin if not fullscreen then begin
SetMode(SCR_W_fscrn, SCR_H_fscrn, true); SetMode(SCR_W_fscrn, SCR_H_fscrn, true);
fullscreen := true; fullscreen := true;
@ -237,8 +226,8 @@ begin
fullscreen := false; fullscreen := false;
end; end;
InitGL; InitGL;
terrain.InitGL;
ResizeWindow( surface^.w, surface^.h ); ResizeWindow( surface^.w, surface^.h );
key_pressed.fullscreen := true;
end; end;
SDLK_s: SDLK_s:
WindowScreenshot( surface^.w, surface^.h ); WindowScreenshot( surface^.w, surface^.h );
@ -247,53 +236,21 @@ begin
SDLK_PAGEDOWN: SDLK_PAGEDOWN:
view.distance -= ZoomIncrement; view.distance -= ZoomIncrement;
SDLK_r: SDLK_r:
if not key_pressed.autorotate then begin view.autorotate := not view.autorotate;
view.autorotate := not view.autorotate;
key_pressed.autorotate := true;
end;
//terrain rendering opts //terrain rendering opts
SDLK_w: SDLK_w:
if not key_pressed.wireframe then begin view.opts.wireframe := not view.opts.wireframe;
view.opts.wireframe := not view.opts.wireframe;
key_pressed.wireframe := true;
end;
SDLK_v: SDLK_v:
if not key_pressed.vcolors then begin view.opts.vcolors := not view.opts.vcolors;
view.opts.vcolors := not view.opts.vcolors;
key_pressed.vcolors := true;
end;
SDLK_p: SDLK_p:
if not key_pressed.points then begin view.opts.points := not view.opts.points;
view.opts.points := not view.opts.points;
key_pressed.points := true;
end;
SDLK_t: SDLK_t:
if not key_pressed.textures then begin view.opts.textures := not view.opts.textures;
view.opts.textures := not view.opts.textures;
key_pressed.textures := true;
end;
SDLK_LEFT: SDLK_LEFT:
view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1); view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1);
SDLK_RIGHT: SDLK_RIGHT:
view.opts.fg_to_draw += 1; 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; end;
SDL_MOUSEBUTTONDOWN: begin SDL_MOUSEBUTTONDOWN: begin
@ -344,16 +301,16 @@ end;
//****************************************************************************** //******************************************************************************
var var
sec, frames: integer; sec, frames: integer;
in_file: string; in_file: integer;
begin begin
if Paramcount < 1 then begin if Paramcount < 1 then begin
writeln('specify HMP file'); writeln('specify HMP file index');
exit; exit;
end; end;
in_file := ParamStr(1); in_file := StrToInt( ParamStr(1) );
terrain := TTerrainMesh.Create; terrain := TTerrainMesh.Create;
terrain.Load(in_file); terrain.Load(14);
writeln('Init SDL...'); writeln('Init SDL...');
SDL_Init( SDL_INIT_VIDEO ); SDL_Init( SDL_INIT_VIDEO );
@ -370,8 +327,6 @@ begin
sec := SDL_GetTicks; sec := SDL_GetTicks;
frames := 0; frames := 0;
Done := False; Done := False;
key_pressed.wireframe := false;
key_pressed.fullscreen := false;
while not Done do begin while not Done do begin
HandleEvent; HandleEvent;
DrawGLScene; DrawGLScene;
@ -380,9 +335,10 @@ begin
write(frames:3, ' dist: ', view.distance:5:1, ' rot: ', view.rotation_angle:5:1, #13); write(frames:3, ' dist: ', view.distance:5:1, ' rot: ', view.rotation_angle:5:1, #13);
frames := 0; frames := 0;
sec := SDL_GetTicks; sec := SDL_GetTicks;
//WindowScreenshot( surface^.w, surface^.h );
end; end;
SDL_Delay(10); SDL_Delay(10);
//WindowScreenshot( surface^.w, surface^.h );
end; end;
terrain.Free; terrain.Free;