diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index b0e9e01feb36fd0bf5cbfb7e46c6c67b5134d917..9112b7f9eb91eb0b6e49942a72038f800961d8d6 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
procedure g_Game_LoadData();
procedure g_Game_FreeData();
procedure g_Game_Update();
procedure g_Game_LoadData();
procedure g_Game_FreeData();
procedure g_Game_Update();
+procedure g_Game_PreUpdate();
procedure g_Game_Draw();
procedure g_Game_Quit();
procedure g_Game_SetupScreenSize();
procedure g_Game_Draw();
procedure g_Game_Quit();
procedure g_Game_SetupScreenSize();
e_input, e_log, g_console, g_items, g_map, g_panel,
g_playermodel, g_gfx, g_options, Math,
g_triggers, g_monsters, e_sound, CONFIG,
e_input, e_log, g_console, g_items, g_map, g_panel,
g_playermodel, g_gfx, g_options, Math,
g_triggers, g_monsters, e_sound, CONFIG,
- g_language, g_net, g_main,
+ g_language, g_net, g_main, g_phys,
ENet, e_msg, g_netmsg, g_netmaster,
sfs, wadreader, g_system;
ENet, e_msg, g_netmsg, g_netmaster,
sfs, wadreader, g_system;
MC_SEND_CheatRequest(NET_CHEAT_READY);
end;
MC_SEND_CheatRequest(NET_CHEAT_READY);
end;
+procedure g_Game_PreUpdate();
+begin
+ // these are in separate PreUpdate functions because they can interact during Update()
+ // and are synced over the net
+ // we don't care that much about corpses and gibs
+ g_Player_PreUpdate();
+ g_Monsters_PreUpdate();
+ g_Items_PreUpdate();
+ g_Weapon_PreUpdate();
+end;
+
procedure g_Game_Update();
var
Msg: g_gui.TMessage;
procedure g_Game_Update();
var
Msg: g_gui.TMessage;
end;
end;
end;
end;
- // these are in separate PreUpdate functions because they can interact during Update()
- // we don't care that much about corpses and gibs
- g_Player_PreUpdate();
- g_Monsters_PreUpdate();
- g_Items_PreUpdate();
- g_Weapon_PreUpdate();
-
// Îáíîâëÿåì âñå îñòàëüíîå:
g_Map_Update();
g_Items_Update();
// Îáíîâëÿåì âñå îñòàëüíîå:
g_Map_Update();
g_Items_Update();
procedure DrawPlayer(p: TPlayer);
var
px, py, a, b, c, d, i, fX, fY: Integer;
procedure DrawPlayer(p: TPlayer);
var
px, py, a, b, c, d, i, fX, fY: Integer;
+ camObj: TObj;
//R: TRect;
begin
if (p = nil) or (p.FDummy) then
//R: TRect;
begin
if (p = nil) or (p.FDummy) then
glPushMatrix();
glPushMatrix();
- p.Obj.lerp(gLerpFactor, fX, fY);
+ camObj := p.getCameraObj();
+ camObj.lerp(gLerpFactor, fX, fY);
px := fX + PLAYER_RECT_CX;
px := fX + PLAYER_RECT_CX;
- py := fY + PLAYER_RECT_CY+p.Obj.slopeUpLeft;
+ py := fY + PLAYER_RECT_CY+nlerp(p.SlopeOld, camObj.slopeUpLeft, gLerpFactor);
if (g_dbg_scale = 1.0) and (not g_dbg_ignore_bounds) then
begin
if (g_dbg_scale = 1.0) and (not g_dbg_ignore_bounds) then
begin
FPSTime := Time;
end;
FPSTime := Time;
end;
+ e_SetRendertarget(True);
+ e_SetViewPort(0, 0, gScreenWidth, gScreenHeight);
+
if gGameOn or (gState = STATE_FOLD) then
begin
if (gPlayer1 <> nil) and (gPlayer2 <> nil) then
if gGameOn or (gState = STATE_FOLD) then
begin
if (gPlayer1 <> nil) and (gPlayer2 <> nil) then
if gGameOn then drawProfilers();
if gGameOn then drawProfilers();
+ // TODO: draw this after the FBO and remap mouse click coordinates
+
{$IFDEF ENABLE_HOLMES}
g_Holmes_DrawUI();
{$ENDIF}
{$IFDEF ENABLE_HOLMES}
g_Holmes_DrawUI();
{$ENDIF}
+ // blit framebuffer to screen
+
+ e_SetRendertarget(False);
+ e_SetViewPort(0, 0, gWinSizeX, gWinSizeY);
+ e_BlitFramebuffer(gWinSizeX, gWinSizeY);
+
+ // draw the overlay stuff on top of it
+
g_Touch_Draw;
end;
g_Touch_Draw;
end;
g_Game_Free();
with gGameSettings do
begin
g_Game_Free();
with gGameSettings do
begin
+ Options := gsGameFlags;
GameMode := g_Game_TextToMode(gsGameMode);
if gSwitchGameMode <> GM_NONE then
GameMode := gSwitchGameMode;
GameMode := g_Game_TextToMode(gsGameMode);
if gSwitchGameMode <> GM_NONE then
GameMode := gSwitchGameMode;
g_Game_Free();
with gGameSettings do
begin
g_Game_Free();
with gGameSettings do
begin
+ Options := gsGameFlags;
GameMode := g_Game_TextToMode(gsGameMode);
if gSwitchGameMode <> GM_NONE then GameMode := gSwitchGameMode;
if GameMode = GM_NONE then GameMode := GM_DM;
GameMode := g_Game_TextToMode(gsGameMode);
if gSwitchGameMode <> GM_NONE then GameMode := gSwitchGameMode;
if GameMode = GM_NONE then GameMode := GM_DM;
e_LogWriteln('resolution not changed');
sys_EnableVSync(gVSync);
end;
e_LogWriteln('resolution not changed');
sys_EnableVSync(gVSync);
end;
+ 'r_maxfps':
+ begin
+ if Length(p) = 2 then
+ begin
+ gMaxFPS := StrToIntDef(p[1], gMaxFPS);
+ if gMaxFPS > 0 then
+ gFrameTime := 1000 div gMaxFPS
+ else
+ gFrameTime := 0;
+ end;
+ e_LogWritefln('r_maxfps %d', [gMaxFPS]);
+ end;
'g_language':
begin
if Length(p) = 2 then
'g_language':
begin
if Length(p) = 2 then
case gAnnouncer of
ANNOUNCE_NONE:
Exit;
case gAnnouncer of
ANNOUNCE_NONE:
Exit;
- ANNOUNCE_ME,
- ANNOUNCE_MEPLUS:
+ ANNOUNCE_ME:
if not g_Game_IsWatchedPlayer(SpawnerUID) then
Exit;
end;
if not g_Game_IsWatchedPlayer(SpawnerUID) then
Exit;
end;
// Options:
s := Find_Param_Value(pars, '-opt');
if (s = '') then
// Options:
s := Find_Param_Value(pars, '-opt');
if (s = '') then
- Opt := GAME_OPTION_ALLOWEXIT or GAME_OPTION_BOTVSPLAYER or
- GAME_OPTION_BOTVSMONSTER or GAME_OPTION_DMKEYS
+ Opt := gsGameFlags
else
Opt := StrToIntDef(s, 0);
else
Opt := StrToIntDef(s, 0);