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:
parent
aaedff5e21
commit
8aac8cd05c
@ -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',
|
||||||
|
@ -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">
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user