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;
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',

View File

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

View File

@ -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;