index fb65ab5fa3d8ac66951c9ce1795015a8627c648b..ec08bf13b4c4b2274e8902855850f8d8a462913c 100644 (file)
);
var
);
var
- menuBG: TGLTexture;
+ BackgroundTexture: THereTexture;
hud, hudbg: TGLTexture;
hudhp: array [Boolean] of TGLTexture;
hud, hudbg: TGLTexture;
hudhp: array [Boolean] of TGLTexture;
i: Integer;
begin
r_Common_Load;
i: Integer;
begin
r_Common_Load;
- menuBG := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/TITLE');
+ BackgroundTexture := DEFAULT(THereTexture);
hud := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/HUD');
hudbg := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/HUDBG');
hudhp[false] := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/MED2');
hud := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/HUD');
hudbg := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/HUDBG');
hudhp[false] := r_Textures_LoadFromFile(GameWAD + ':TEXTURES/MED2');
hudhp[false].Free;
hudbg.Free;
hud.Free;
hudhp[false].Free;
hudbg.Free;
hud.Free;
- menuBG.Free;
+ r_Common_FreeThis(BackgroundTexture);
r_Common_Free;
end;
r_Common_Free;
end;
r_Map_Update;
end;
r_Map_Update;
end;
- procedure SetupMatrix;
- begin
- glViewport(0, 0, gScreenWidth, gScreenHeight);
- glScissor(0, 0, gScreenWidth, gScreenHeight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- glOrtho(0, gScreenWidth, gScreenHeight, 0, 0, 1);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- end;
-
procedure r_Render_GetBasePoint (x, y, w, h: Integer; p: TBasePoint; out xx, yy: Integer);
begin
case p of
procedure r_Render_GetBasePoint (x, y, w, h: Integer; p: TBasePoint; out xx, yy: Integer);
begin
case p of
end;
procedure r_Render_DrawView (x, y, w, h: Integer; p: TPlayer);
end;
procedure r_Render_DrawView (x, y, w, h: Integer; p: TPlayer);
+ var l, t, r, b: Integer;
begin
begin
+ r_Draw_GetRect(l, t, r, b);
+ r_Draw_SetRect(x, y, x + w, y + h);
+
if p <> nil then
r_Map_Draw(x, y, w, h, p.obj.x + PLAYER_RECT_CX, p.obj.y + PLAYER_RECT_CY, p)
else
if p <> nil then
r_Map_Draw(x, y, w, h, p.obj.x + PLAYER_RECT_CX, p.obj.y + PLAYER_RECT_CY, p)
else
if p.Spectator and p.NoRespawn then
r_Render_DrawText(_lc[I_PLAYER_SPECT4], x div 2 + w div 2, y div 2 + h div 2, 255, 255, 255, 255, stdfont, TBasePoint.BP_CENTER);
end;
if p.Spectator and p.NoRespawn then
r_Render_DrawText(_lc[I_PLAYER_SPECT4], x div 2 + w div 2, y div 2 + h div 2, 255, 255, 255, 255, stdfont, TBasePoint.BP_CENTER);
end;
+
+ r_Draw_SetRect(l, t, r, b);
end;
procedure r_Render_DrawPlayerView (x, y, w, h: Integer; p: TPlayer);
end;
procedure r_Render_DrawPlayerView (x, y, w, h: Integer; p: TPlayer);
+ var l, t, r, b: Integer;
begin
begin
+ r_Draw_GetRect(l, t, r, b);
+ r_Draw_SetRect(x, y, x + w, y + h);
r_Render_DrawView(x, y, w - 196, h, p);
r_Render_DrawHUDArea(x + w - 196, y, 196, h, p);
r_Render_DrawView(x, y, w - 196, h, p);
r_Render_DrawHUDArea(x + w - 196, y, 196, h, p);
+ r_Draw_SetRect(l, t, r, b);
+ end;
+
+ procedure r_Render_DrawBackgroundImage (img: TGLTexture);
+ var fw, w, h: LongInt;
+ begin
+ if img <> nil then
+ begin
+ img := BackgroundTexture.id;
+ fw := img.width * 4 div 3; // fix aspect 4:3
+ r_Common_CalcAspect(fw, img.height, gScreenWidth, gScreenHeight, false, w, h);
+ r_Draw_Texture(img, gScreenWidth div 2 - w div 2, 0, w, h, false, 255, 255, 255, 255, false);
+ end
+ end;
+
+ procedure r_Render_DrawBackground (const name: AnsiString);
+ begin
+ if r_Common_LoadThis(name, BackgroundTexture) then
+ r_Render_DrawBackgroundImage(BackgroundTexture.id)
end;
procedure r_Render_Draw;
end;
procedure r_Render_Draw;
if gExit = EXIT_QUIT then
exit;
if gExit = EXIT_QUIT then
exit;
- SetupMatrix;
+ r_Draw_Setup(gScreenWidth, gScreenHeight);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glColor4ub(255, 255, 255, 255);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glColor4ub(255, 255, 255, 255);
+ glEnable(GL_SCISSOR_TEST);
+ r_Draw_SetRect(0, 0, gScreenWidth, gScreenHeight);
//e_LogWritefln('r_render_draw: %sx%s', [gScreenWidth, gScreenHeight]);
//e_LogWritefln('r_render_draw: %sx%s', [gScreenWidth, gScreenHeight]);
- if gGameOn or (gState = STATE_FOLD) then
+ if gGameOn or ((gState in [STATE_FOLD]) and (EndingGameCounter < 255)) then
begin
begin
- // TODO setup player view
// TODO setup sectator mode
// TODO setup player hear point
// TODO setup sectator mode
// TODO setup player hear point
- // TODO setup player view siz
- // TODO draw player view + setup screen coords
- r_Render_DrawPlayerView(0, 0, gScreenWidth, gScreenHeight, gPlayer1);
+ if (gPlayer1 <> nil) and (gPlayer2 <> nil) then
+ begin
+ r_Render_DrawPlayerView(0, 0, gScreenWidth, gScreenHeight div 2 - 2, gPlayer1);
+ r_Render_DrawPlayerView(0, gScreenHeight div 2 + 2, gScreenWidth, gScreenHeight div 2, gPlayer2);
+ end
+ else
+ begin
+ r_Render_DrawPlayerView(0, 0, gScreenWidth, gScreenHeight, gPlayer1);
+ end;
// TODO draw holmes inspector
// TODO draw holmes inspector
if not gGameOn then
begin
case gState of
if not gGameOn then
begin
case gState of
- STATE_MENU: ; // TODO draw menu bg
- STATE_FOLD: ;
- STATE_INTERCUSTOM: ;
- STATE_INTERSINGLE: ;
- STATE_ENDPIC: ;
- STATE_SLIST: ;
+ STATE_NONE: (* do nothing *) ;
+ STATE_MENU: r_Render_DrawBackground(GameWad + ':TEXTURES/TITLE');
+ STATE_FOLD:
+ begin
+ if EndingGameCounter > 0 then
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, MIN(MAX(255 - EndingGameCounter, 0), 255));
+ end;
+ STATE_INTERCUSTOM:
+ begin
+ if gLastMap and (gGameSettings.GameMode = GM_COOP) then
+ if EndPicPath <> '' then
+ r_Render_DrawBackground(EndPicPath)
+ else
+ r_Render_DrawBackground(GameWad + ':TEXTURES/' + _lc[I_TEXTURE_ENDPIC])
+ else
+ r_Render_DrawBackground(GameWad + ':TEXTURES/INTER');
+ // TODO draw custom stata
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, 105);
+ {$ENDIF}
+ end;
+ STATE_INTERSINGLE, STATE_INTERTEXT, STATE_INTERPIC:
+ begin
+ if EndingGameCounter > 0 then
+ begin
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, MIN(MAX(255 - EndingGameCounter, 0), 255));
+ end
+ else
+ begin
+ r_Render_DrawBackground(GameWad + ':TEXTURES/INTER');
+ // TODO darw single stats
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, 105);
+ {$ENDIF}
+ end;
+ end;
+ STATE_ENDPIC:
+ begin
+ if EndPicPath <> '' then
+ r_Render_DrawBackground(EndPicPath)
+ else
+ r_Render_DrawBackground(GameWad + ':TEXTURES/' + _lc[I_TEXTURE_ENDPIC]);
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, 105);
+ {$ENDIF}
+ end;
+ STATE_SLIST:
+ begin
+ r_Render_DrawBackground(GameWad + ':TEXTURES/TITLE');
+ r_Draw_FillRect(0, 0, gScreenWidth - 1, gScreenHeight - 1, 0, 0, 0, 105);
+ // TODO draw serverlist
+ end;
end;
end;
end;
end;
procedure r_Render_DrawLoading (force: Boolean);
begin
procedure r_Render_DrawLoading (force: Boolean);
begin
+ // TODO draw loading screen
end;
end.
end;
end.