mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-11 05:01:09 +00:00
- reduce backend's dependency on game state by using callbacks.
This commit is contained in:
parent
721b857e5e
commit
56f2b2ac56
29 changed files with 289 additions and 276 deletions
|
@ -1147,6 +1147,7 @@ set (PCH_SOURCES
|
||||||
common/engine/sc_man.cpp
|
common/engine/sc_man.cpp
|
||||||
common/engine/palettecontainer.cpp
|
common/engine/palettecontainer.cpp
|
||||||
common/engine/stringtable.cpp
|
common/engine/stringtable.cpp
|
||||||
|
common/engine/i_interface.cpp
|
||||||
|
|
||||||
utility/m_random.cpp
|
utility/m_random.cpp
|
||||||
utility/nodebuilder/nodebuild.cpp
|
utility/nodebuilder/nodebuild.cpp
|
||||||
|
|
3
src/common/engine/i_interface.cpp
Normal file
3
src/common/engine/i_interface.cpp
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#include "i_interface.h"
|
||||||
|
|
||||||
|
SystemCallbacks *sysCallbacks;
|
13
src/common/engine/i_interface.h
Normal file
13
src/common/engine/i_interface.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
struct SystemCallbacks
|
||||||
|
{
|
||||||
|
bool (*WantGuiCapture)();
|
||||||
|
bool (*WantLeftButton)();
|
||||||
|
bool (*NetGame)();
|
||||||
|
bool (*WantNativeMouse)();
|
||||||
|
bool (*CaptureModeInGame)();
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SystemCallbacks *sysCallbacks;
|
|
@ -71,6 +71,7 @@ void PaletteContainer::SetPalette(const uint8_t* colors, int transparent_index)
|
||||||
Remap[i] = i;
|
Remap[i] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uniqueRemaps[0]->MakeIdentity(); // update the identity remap.
|
uniqueRemaps[0]->MakeIdentity(); // update the identity remap.
|
||||||
|
|
||||||
if (transparent_index >= 0 && transparent_index <= 255)
|
if (transparent_index >= 0 && transparent_index <= 255)
|
||||||
|
|
|
@ -57,3 +57,10 @@ typedef uint32_t angle_t;
|
||||||
using INTBOOL = int;
|
using INTBOOL = int;
|
||||||
using BITFIELD = uint32_t;
|
using BITFIELD = uint32_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#define NOVTABLE __declspec(novtable)
|
||||||
|
#else
|
||||||
|
#define NOVTABLE
|
||||||
|
#endif
|
|
@ -106,6 +106,7 @@
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
#include "c_buttons.h"
|
#include "c_buttons.h"
|
||||||
#include "d_buttons.h"
|
#include "d_buttons.h"
|
||||||
|
#include "i_interface.h"
|
||||||
|
|
||||||
EXTERN_CVAR(Bool, hud_althud)
|
EXTERN_CVAR(Bool, hud_althud)
|
||||||
EXTERN_CVAR(Int, vr_mode)
|
EXTERN_CVAR(Int, vr_mode)
|
||||||
|
@ -2541,6 +2542,19 @@ static const char *DoomButtons[] =
|
||||||
CVAR(Bool, lookspring, true, CVAR_ARCHIVE); // Generate centerview when -mlook encountered?
|
CVAR(Bool, lookspring, true, CVAR_ARCHIVE); // Generate centerview when -mlook encountered?
|
||||||
EXTERN_CVAR(String, language)
|
EXTERN_CVAR(String, language)
|
||||||
|
|
||||||
|
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE)
|
||||||
|
{
|
||||||
|
if (self < 0)
|
||||||
|
{
|
||||||
|
self = 0;
|
||||||
|
}
|
||||||
|
else if (self > 2)
|
||||||
|
{
|
||||||
|
self = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Mlook_ReleaseHandler()
|
void Mlook_ReleaseHandler()
|
||||||
{
|
{
|
||||||
if (lookspring)
|
if (lookspring)
|
||||||
|
@ -2560,6 +2574,56 @@ bool StrTable_ValidFilter(const char* str)
|
||||||
return stricmp(str, GameNames[gameinfo.gametype]) == 0;
|
return stricmp(str, GameNames[gameinfo.gametype]) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool System_WantGuiCapture()
|
||||||
|
{
|
||||||
|
bool wantCapt;
|
||||||
|
|
||||||
|
if (menuactive == MENU_Off)
|
||||||
|
{
|
||||||
|
wantCapt = ConsoleState == c_down || ConsoleState == c_falling || chatmodeon;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wantCapt = (menuactive == MENU_On || menuactive == MENU_OnNoPause);
|
||||||
|
}
|
||||||
|
|
||||||
|
// [ZZ] check active event handlers that want the UI processing
|
||||||
|
if (!wantCapt && primaryLevel->localEventManager->CheckUiProcessors())
|
||||||
|
wantCapt = true;
|
||||||
|
|
||||||
|
return wantCapt;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool System_WantLeftButton()
|
||||||
|
{
|
||||||
|
return (gamestate == GS_DEMOSCREEN || gamestate == GS_TITLELEVEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool System_NetGame()
|
||||||
|
{
|
||||||
|
return netgame;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool System_WantNativeMouse()
|
||||||
|
{
|
||||||
|
return primaryLevel->localEventManager->CheckRequireMouse();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool System_CaptureModeInGame()
|
||||||
|
{
|
||||||
|
switch (mouse_capturemode)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 0:
|
||||||
|
return gamestate == GS_LEVEL;
|
||||||
|
case 1:
|
||||||
|
return gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_FINALE;
|
||||||
|
case 2:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// D_DoomMain
|
// D_DoomMain
|
||||||
|
@ -2589,6 +2653,16 @@ static int D_DoomMain_Internal (void)
|
||||||
};
|
};
|
||||||
GStrings.SetCallbacks(&stblcb);
|
GStrings.SetCallbacks(&stblcb);
|
||||||
|
|
||||||
|
static SystemCallbacks syscb =
|
||||||
|
{
|
||||||
|
System_WantGuiCapture,
|
||||||
|
System_WantLeftButton,
|
||||||
|
System_NetGame,
|
||||||
|
System_WantNativeMouse,
|
||||||
|
System_CaptureModeInGame,
|
||||||
|
};
|
||||||
|
sysCallbacks = &syscb;
|
||||||
|
|
||||||
std::set_new_handler(NewFailure);
|
std::set_new_handler(NewFailure);
|
||||||
const char *batchout = Args->CheckValue("-errorlog");
|
const char *batchout = Args->CheckValue("-errorlog");
|
||||||
|
|
||||||
|
@ -2872,7 +2946,6 @@ static int D_DoomMain_Internal (void)
|
||||||
C_InitConback();
|
C_InitConback();
|
||||||
|
|
||||||
StartScreen->Progress();
|
StartScreen->Progress();
|
||||||
GPalette.Init(NUM_TRANSLATION_TABLES);
|
|
||||||
V_InitFonts();
|
V_InitFonts();
|
||||||
|
|
||||||
// [CW] Parse any TEAMINFO lumps.
|
// [CW] Parse any TEAMINFO lumps.
|
||||||
|
|
|
@ -33,13 +33,6 @@
|
||||||
class PClassActor;
|
class PClassActor;
|
||||||
typedef TMap<int, PClassActor *> FClassMap;
|
typedef TMap<int, PClassActor *> FClassMap;
|
||||||
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#define NOVTABLE __declspec(novtable)
|
|
||||||
#else
|
|
||||||
#define NOVTABLE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "basics.h"
|
#include "basics.h"
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
|
|
||||||
|
|
|
@ -557,6 +557,13 @@ FBaseCVar* G_GetUserCVar(int playernum, const char* cvarname)
|
||||||
return cvar;
|
return cvar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ticcmd_t emptycmd;
|
||||||
|
|
||||||
|
ticcmd_t* G_BaseTiccmd()
|
||||||
|
{
|
||||||
|
return &emptycmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// G_BuildTiccmd
|
// G_BuildTiccmd
|
||||||
|
@ -574,7 +581,7 @@ void G_BuildTiccmd (ticcmd_t *cmd)
|
||||||
|
|
||||||
ticcmd_t *base;
|
ticcmd_t *base;
|
||||||
|
|
||||||
base = I_BaseTiccmd (); // empty, or external driver
|
base = G_BaseTiccmd ();
|
||||||
*cmd = *base;
|
*cmd = *base;
|
||||||
|
|
||||||
cmd->consistancy = consistancy[consoleplayer][(maketic/ticdup)%BACKUPTICS];
|
cmd->consistancy = consistancy[consoleplayer][(maketic/ticdup)%BACKUPTICS];
|
||||||
|
|
|
@ -470,6 +470,43 @@ void FCajunMaster::ForgetBots ()
|
||||||
botinfo = NULL;
|
botinfo = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __APPLE__
|
||||||
|
|
||||||
|
FString M_GetCajunPath(const char* botfilename)
|
||||||
|
{
|
||||||
|
FString path;
|
||||||
|
|
||||||
|
path << progdir << "zcajun/" << botfilename;
|
||||||
|
if (!FileExists(path))
|
||||||
|
{
|
||||||
|
path = "";
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
FString M_GetCajunPath(const char* botfilename)
|
||||||
|
{
|
||||||
|
FString path;
|
||||||
|
|
||||||
|
// Check first in $HOME/.config/zdoom/botfilename.
|
||||||
|
path = GetUserFile(botfilename);
|
||||||
|
if (!FileExists(path))
|
||||||
|
{
|
||||||
|
// Then check in SHARE_DIR/botfilename.
|
||||||
|
path = SHARE_DIR;
|
||||||
|
path << botfilename;
|
||||||
|
if (!FileExists(path))
|
||||||
|
{
|
||||||
|
path = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
bool FCajunMaster::LoadBots ()
|
bool FCajunMaster::LoadBots ()
|
||||||
{
|
{
|
||||||
FScanner sc;
|
FScanner sc;
|
||||||
|
|
|
@ -1362,7 +1362,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da
|
||||||
temp = damage < 100 ? damage : 100;
|
temp = damage < 100 ? damage : 100;
|
||||||
if (player == target->Level->GetConsolePlayer() )
|
if (player == target->Level->GetConsolePlayer() )
|
||||||
{
|
{
|
||||||
I_Tactile (40,10,40+temp*2);
|
//I_Tactile (40,10,40+temp*2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "events.h"
|
#include "events.h"
|
||||||
#include "g_game.h"
|
#include "g_game.h"
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
|
#include "i_interface.h"
|
||||||
|
|
||||||
|
|
||||||
EXTERN_CVAR(Int, m_use_mouse)
|
EXTERN_CVAR(Int, m_use_mouse)
|
||||||
|
@ -57,19 +58,6 @@ CVAR(Bool, m_filter, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
CVAR(Bool, k_allowfullscreentoggle, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
CVAR(Bool, k_allowfullscreentoggle, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE)
|
|
||||||
{
|
|
||||||
if (self < 0)
|
|
||||||
{
|
|
||||||
self = 0;
|
|
||||||
}
|
|
||||||
else if (self > 2)
|
|
||||||
{
|
|
||||||
self = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int paused, chatmodeon;
|
extern int paused, chatmodeon;
|
||||||
extern constate_e ConsoleState;
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
|
@ -152,24 +140,6 @@ void CenterCursor()
|
||||||
SetCursorPosition(centerPoint);
|
SetCursorPosition(centerPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsInGame()
|
|
||||||
{
|
|
||||||
switch (mouse_capturemode)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case 0:
|
|
||||||
return gamestate == GS_LEVEL;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
return gamestate == GS_LEVEL
|
|
||||||
|| gamestate == GS_INTERMISSION
|
|
||||||
|| gamestate == GS_FINALE;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckNativeMouse()
|
void CheckNativeMouse()
|
||||||
{
|
{
|
||||||
const bool windowed = (NULL == screen) || !screen->IsFullscreen();
|
const bool windowed = (NULL == screen) || !screen->IsFullscreen();
|
||||||
|
@ -187,8 +157,9 @@ void CheckNativeMouse()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
bool captureModeInGame = sysCallbacks && sysCallbacks->CaptureModeInGame && sysCallbacks->CaptureModeInGame();
|
||||||
wantNative = (!m_use_mouse || MENU_WaitKey != menuactive)
|
wantNative = (!m_use_mouse || MENU_WaitKey != menuactive)
|
||||||
&& (!IsInGame() || GUICapture || paused || demoplayback);
|
&& (!captureModeInGame || GUICapture || paused || demoplayback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -79,8 +79,6 @@ void I_StartTic (void);
|
||||||
// for normal input.
|
// for normal input.
|
||||||
ticcmd_t *I_BaseTiccmd (void);
|
ticcmd_t *I_BaseTiccmd (void);
|
||||||
|
|
||||||
void I_Tactile (int on, int off, int total);
|
|
||||||
|
|
||||||
// Print a console string
|
// Print a console string
|
||||||
void I_PrintStr (const char *str);
|
void I_PrintStr (const char *str);
|
||||||
|
|
||||||
|
|
|
@ -32,17 +32,6 @@
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
|
|
||||||
|
|
||||||
void I_Tactile(int /*on*/, int /*off*/, int /*total*/)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static ticcmd_t emptycmd;
|
|
||||||
|
|
||||||
ticcmd_t *I_BaseTiccmd()
|
|
||||||
{
|
|
||||||
return &emptycmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool I_WriteIniFailed()
|
bool I_WriteIniFailed()
|
||||||
{
|
{
|
||||||
printf("The config file %s could not be saved:\n%s\n", GameConfig->GetPathName(), strerror(errno));
|
printf("The config file %s could not be saved:\n%s\n", GameConfig->GetPathName(), strerror(errno));
|
||||||
|
|
|
@ -150,27 +150,6 @@ FString M_GetAutoexecPath()
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// M_GetCajunPath macOS
|
|
||||||
//
|
|
||||||
// Returns the location of the Cajun Bot definitions.
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
FString M_GetCajunPath(const char *botfilename)
|
|
||||||
{
|
|
||||||
FString path;
|
|
||||||
|
|
||||||
// Just copies the Windows code. Should this be more Mac-specific?
|
|
||||||
path << progdir << "zcajun/" << botfilename;
|
|
||||||
if (!FileExists(path))
|
|
||||||
{
|
|
||||||
path = "";
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// M_GetConfigPath macOS
|
// M_GetConfigPath macOS
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
|
#include "i_interface.h"
|
||||||
|
|
||||||
|
|
||||||
static void I_CheckGUICapture ();
|
static void I_CheckGUICapture ();
|
||||||
|
@ -251,32 +252,13 @@ static void MouseRead ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG|CVAR_ARCHIVE)
|
|
||||||
{
|
|
||||||
if (self < 0) self = 0;
|
|
||||||
else if (self > 2) self = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool inGame()
|
|
||||||
{
|
|
||||||
switch (mouse_capturemode)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case 0:
|
|
||||||
return gamestate == GS_LEVEL;
|
|
||||||
case 1:
|
|
||||||
return gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_FINALE;
|
|
||||||
case 2:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void I_CheckNativeMouse ()
|
static void I_CheckNativeMouse ()
|
||||||
{
|
{
|
||||||
bool focus = SDL_GetKeyboardFocus() != NULL;
|
bool focus = SDL_GetKeyboardFocus() != NULL;
|
||||||
bool fs = screen->IsFullscreen();
|
bool fs = screen->IsFullscreen();
|
||||||
|
|
||||||
bool wantNative = !focus || (!use_mouse || GUICapture || paused || demoplayback || !inGame());
|
bool captureModeInGame = sysCallbacks && sysCallbacks->CaptureModeInGame && sysCallbacks->CaptureModeInGame();
|
||||||
|
bool wantNative = !focus || (!use_mouse || GUICapture || paused || demoplayback || !captureModeInGame);
|
||||||
|
|
||||||
if (wantNative != NativeMouse)
|
if (wantNative != NativeMouse)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,9 +32,10 @@
|
||||||
*/
|
*/
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
#include "doomdef.h"
|
#include "basics.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
#include "m_joy.h"
|
#include "m_joy.h"
|
||||||
|
#include "keydef.h"
|
||||||
|
|
||||||
// Very small deadzone so that floating point magic doesn't happen
|
// Very small deadzone so that floating point magic doesn't happen
|
||||||
#define MIN_DEADZONE 0.000001f
|
#define MIN_DEADZONE 0.000001f
|
||||||
|
@ -155,7 +156,7 @@ public:
|
||||||
FString GetIdentifier()
|
FString GetIdentifier()
|
||||||
{
|
{
|
||||||
char id[16];
|
char id[16];
|
||||||
mysnprintf(id, countof(id), "JS:%d", DeviceIndex);
|
snprintf(id, countof(id), "JS:%d", DeviceIndex);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
|
#include "printf.h"
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
|
|
||||||
#include "version.h" // for GAMENAME
|
#include "version.h" // for GAMENAME
|
||||||
|
@ -152,33 +153,6 @@ FString M_GetAutoexecPath()
|
||||||
return GetUserFile("autoexec.cfg");
|
return GetUserFile("autoexec.cfg");
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// M_GetCajunPath Unix
|
|
||||||
//
|
|
||||||
// Returns the location of the Cajun Bot definitions.
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
FString M_GetCajunPath(const char *botfilename)
|
|
||||||
{
|
|
||||||
FString path;
|
|
||||||
|
|
||||||
// Check first in $HOME/.config/zdoom/botfilename.
|
|
||||||
path = GetUserFile(botfilename);
|
|
||||||
if (!FileExists(path))
|
|
||||||
{
|
|
||||||
// Then check in SHARE_DIR/botfilename.
|
|
||||||
path = SHARE_DIR;
|
|
||||||
path << botfilename;
|
|
||||||
if (!FileExists(path))
|
|
||||||
{
|
|
||||||
path = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// M_GetConfigPath Unix
|
// M_GetConfigPath Unix
|
||||||
|
@ -217,7 +191,7 @@ FString M_GetScreenshotsPath()
|
||||||
|
|
||||||
FString M_GetSavegamesPath()
|
FString M_GetSavegamesPath()
|
||||||
{
|
{
|
||||||
return NicePath("$HOME/" GAME_DIR);
|
return NicePath("$HOME/" GAME_DIR "/");
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -230,5 +204,37 @@ FString M_GetSavegamesPath()
|
||||||
|
|
||||||
FString M_GetDocumentsPath()
|
FString M_GetDocumentsPath()
|
||||||
{
|
{
|
||||||
return NicePath("$HOME/" GAME_DIR);
|
return NicePath("$HOME/" GAME_DIR "/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// M_GetDemoPath Unix
|
||||||
|
//
|
||||||
|
// Returns the path to the default demo directory.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
FString M_GetDemoPath()
|
||||||
|
{
|
||||||
|
return M_GetDocumentsPath() + "demo/";
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// M_NormalizedPath
|
||||||
|
//
|
||||||
|
// Normalizes the given path and returns the result.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
FString M_GetNormalizedPath(const char* path)
|
||||||
|
{
|
||||||
|
char *actualpath;
|
||||||
|
actualpath = realpath(path, NULL);
|
||||||
|
if (!actualpath) // error ?
|
||||||
|
return nullptr;
|
||||||
|
FString fullpath = actualpath;
|
||||||
|
return fullpath;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,7 +156,8 @@ void InitPalette ()
|
||||||
|
|
||||||
ReadPalette(fileSystem.GetNumForName("PLAYPAL"), pal);
|
ReadPalette(fileSystem.GetNumForName("PLAYPAL"), pal);
|
||||||
|
|
||||||
GPalette.SetPalette (pal);
|
GPalette.Init(NUM_TRANSLATION_TABLES);
|
||||||
|
GPalette.SetPalette (pal, 0);
|
||||||
MakeGoodRemap ((uint32_t*)GPalette.BaseColors, GPalette.Remap);
|
MakeGoodRemap ((uint32_t*)GPalette.BaseColors, GPalette.Remap);
|
||||||
ColorMatcher.SetPalette ((uint32_t *)GPalette.BaseColors);
|
ColorMatcher.SetPalette ((uint32_t *)GPalette.BaseColors);
|
||||||
|
|
||||||
|
|
|
@ -39,9 +39,10 @@
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "doomstat.h"
|
#include "basics.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
#include "printf.h"
|
||||||
#include "win32glvideo.h"
|
#include "win32glvideo.h"
|
||||||
#include "win32polyvideo.h"
|
#include "win32polyvideo.h"
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
|
@ -49,7 +50,6 @@
|
||||||
#endif
|
#endif
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "swrenderer/r_swrenderer.h"
|
|
||||||
|
|
||||||
EXTERN_CVAR(Int, vid_preferbackend)
|
EXTERN_CVAR(Int, vid_preferbackend)
|
||||||
|
|
||||||
|
|
|
@ -68,14 +68,10 @@
|
||||||
|
|
||||||
|
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "doomdef.h"
|
|
||||||
#include "doomstat.h"
|
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "i_input.h"
|
#include "i_input.h"
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "i_sound.h"
|
#include "i_sound.h"
|
||||||
#include "g_game.h"
|
|
||||||
#include "d_main.h"
|
|
||||||
#include "d_gui.h"
|
#include "d_gui.h"
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
|
@ -84,11 +80,12 @@
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "events.h"
|
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "g_levellocals.h"
|
#include "i_interface.h"
|
||||||
|
#include "printf.h"
|
||||||
#include "c_buttons.h"
|
#include "c_buttons.h"
|
||||||
|
#include "cmdlib.h"
|
||||||
|
|
||||||
int32_t refreshfreq = -1;
|
int32_t refreshfreq = -1;
|
||||||
|
|
||||||
|
@ -116,6 +113,7 @@ static HMODULE DInputDLL;
|
||||||
bool GUICapture;
|
bool GUICapture;
|
||||||
extern FMouse *Mouse;
|
extern FMouse *Mouse;
|
||||||
extern FKeyboard *Keyboard;
|
extern FKeyboard *Keyboard;
|
||||||
|
extern bool ToggleFullscreen;
|
||||||
|
|
||||||
bool VidResizing;
|
bool VidResizing;
|
||||||
|
|
||||||
|
@ -136,8 +134,8 @@ static bool noidle = false;
|
||||||
LPDIRECTINPUT8 g_pdi;
|
LPDIRECTINPUT8 g_pdi;
|
||||||
LPDIRECTINPUT g_pdi3;
|
LPDIRECTINPUT g_pdi3;
|
||||||
|
|
||||||
|
|
||||||
extern bool AppActive;
|
extern bool AppActive;
|
||||||
|
|
||||||
int SessionState = 0;
|
int SessionState = 0;
|
||||||
int BlockMouseMove;
|
int BlockMouseMove;
|
||||||
|
|
||||||
|
@ -151,20 +149,7 @@ extern int chatmodeon;
|
||||||
|
|
||||||
static void I_CheckGUICapture ()
|
static void I_CheckGUICapture ()
|
||||||
{
|
{
|
||||||
bool wantCapt;
|
bool wantCapt = sysCallbacks && sysCallbacks->WantGuiCapture && sysCallbacks->WantGuiCapture();
|
||||||
|
|
||||||
if (menuactive == MENU_Off)
|
|
||||||
{
|
|
||||||
wantCapt = ConsoleState == c_down || ConsoleState == c_falling || chatmodeon;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wantCapt = (menuactive == MENU_On || menuactive == MENU_OnNoPause);
|
|
||||||
}
|
|
||||||
|
|
||||||
// [ZZ] check active event handlers that want the UI processing
|
|
||||||
if (!wantCapt && primaryLevel->localEventManager->CheckUiProcessors())
|
|
||||||
wantCapt = true;
|
|
||||||
|
|
||||||
if (wantCapt != GUICapture)
|
if (wantCapt != GUICapture)
|
||||||
{
|
{
|
||||||
|
@ -427,7 +412,7 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((gamestate == GS_DEMOSCREEN || gamestate == GS_TITLELEVEL) && message == WM_LBUTTONDOWN)
|
if (message == WM_LBUTTONDOWN && sysCallbacks && sysCallbacks->WantLeftButton() && sysCallbacks->WantLeftButton())
|
||||||
{
|
{
|
||||||
if (GUIWndProcHook(hWnd, message, wParam, lParam, &result))
|
if (GUIWndProcHook(hWnd, message, wParam, lParam, &result))
|
||||||
{
|
{
|
||||||
|
@ -462,6 +447,7 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
|
GetRefreshRate(hWnd);
|
||||||
I_CheckNativeMouse (false, EventHandlerResultForNativeMouse); // This cannot call the event handler. Doing it from here is unsafe.
|
I_CheckNativeMouse (false, EventHandlerResultForNativeMouse); // This cannot call the event handler. Doing it from here is unsafe.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -539,7 +525,7 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS);
|
SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS);
|
||||||
}
|
}
|
||||||
else if (!noidle && !netgame)
|
else if (!noidle && !(sysCallbacks && sysCallbacks->NetGame && sysCallbacks->NetGame()))
|
||||||
{
|
{
|
||||||
SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS);
|
SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS);
|
||||||
}
|
}
|
||||||
|
@ -784,7 +770,7 @@ void I_StartTic ()
|
||||||
BlockMouseMove--;
|
BlockMouseMove--;
|
||||||
buttonMap.ResetButtonTriggers ();
|
buttonMap.ResetButtonTriggers ();
|
||||||
I_CheckGUICapture ();
|
I_CheckGUICapture ();
|
||||||
EventHandlerResultForNativeMouse = primaryLevel->localEventManager->CheckRequireMouse();
|
EventHandlerResultForNativeMouse = sysCallbacks && sysCallbacks->WantNativeMouse && sysCallbacks->WantNativeMouse();
|
||||||
I_CheckNativeMouse (false, EventHandlerResultForNativeMouse);
|
I_CheckNativeMouse (false, EventHandlerResultForNativeMouse);
|
||||||
I_GetEvent ();
|
I_GetEvent ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,7 @@
|
||||||
#ifndef __I_INPUT_H__
|
#ifndef __I_INPUT_H__
|
||||||
#define __I_INPUT_H__
|
#define __I_INPUT_H__
|
||||||
|
|
||||||
#include "doomtype.h"
|
#include "basics.h"
|
||||||
#include "doomdef.h"
|
|
||||||
|
|
||||||
bool I_InitInput (void *hwnd);
|
bool I_InitInput (void *hwnd);
|
||||||
void I_ShutdownInput ();
|
void I_ShutdownInput ();
|
||||||
|
|
|
@ -41,10 +41,9 @@
|
||||||
#include "i_input.h"
|
#include "i_input.h"
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
#include "d_gui.h"
|
#include "d_gui.h"
|
||||||
#include "g_game.h"
|
|
||||||
#include "hardware.h"
|
#include "hardware.h"
|
||||||
#include "menu/menu.h"
|
#include "menu/menu.h"
|
||||||
#include "events.h"
|
#include "i_interface.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -181,19 +180,6 @@ CUSTOM_CVAR (Int, in_mouse, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG|CVAR_ARCHIVE)
|
|
||||||
{
|
|
||||||
if (self < 0)
|
|
||||||
{
|
|
||||||
self = 0;
|
|
||||||
}
|
|
||||||
else if (self > 2)
|
|
||||||
{
|
|
||||||
self = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -251,28 +237,6 @@ static void CenterMouse(int curx, int cury, LONG *centxp, LONG *centyp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// CaptureMode_InGame
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
static bool CaptureMode_InGame()
|
|
||||||
{
|
|
||||||
if (mouse_capturemode == 2)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (mouse_capturemode == 1)
|
|
||||||
{
|
|
||||||
return gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_FINALE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return gamestate == GS_LEVEL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// I_CheckNativeMouse
|
// I_CheckNativeMouse
|
||||||
|
@ -304,8 +268,9 @@ void I_CheckNativeMouse(bool preferNative, bool eventhandlerresult)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
bool captureModeInGame = sysCallbacks && sysCallbacks->CaptureModeInGame && sysCallbacks->CaptureModeInGame();
|
||||||
want_native = ((!m_use_mouse || menuactive != MENU_WaitKey) &&
|
want_native = ((!m_use_mouse || menuactive != MENU_WaitKey) &&
|
||||||
(!CaptureMode_InGame() || GUICapture || paused || demoplayback));
|
(!captureModeInGame || GUICapture ||paused || demoplayback));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include "gameconfigfile.h"
|
#include "gameconfigfile.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
|
#include "keydef.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,11 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <lmcons.h>
|
#include <lmcons.h>
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
|
#include <Shlwapi.h>
|
||||||
|
|
||||||
|
#include "printf.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
#include "doomtype.h"
|
#include "findfile.h"
|
||||||
#include "m_misc.h"
|
|
||||||
#include "version.h" // for GAMENAME
|
#include "version.h" // for GAMENAME
|
||||||
|
|
||||||
// Vanilla MinGW does not have folder ids
|
// Vanilla MinGW does not have folder ids
|
||||||
|
@ -65,7 +66,7 @@ bool UseKnownFolders()
|
||||||
// Cache this value so the semantics don't change during a single run
|
// Cache this value so the semantics don't change during a single run
|
||||||
// of the program. (e.g. Somebody could add write access while the
|
// of the program. (e.g. Somebody could add write access while the
|
||||||
// program is running.)
|
// program is running.)
|
||||||
static INTBOOL iswritable = -1;
|
static int iswritable = -1;
|
||||||
HANDLE file;
|
HANDLE file;
|
||||||
|
|
||||||
if (iswritable >= 0)
|
if (iswritable >= 0)
|
||||||
|
@ -125,8 +126,6 @@ FString M_GetAppDataPath(bool create)
|
||||||
{ // Failed (e.g. On Win9x): use program directory
|
{ // Failed (e.g. On Win9x): use program directory
|
||||||
path = progdir;
|
path = progdir;
|
||||||
}
|
}
|
||||||
// Don't use GAME_DIR and such so that ZDoom and its child ports can
|
|
||||||
// share the node cache.
|
|
||||||
path += "/" GAMENAMELOWERCASE;
|
path += "/" GAMENAMELOWERCASE;
|
||||||
path.Substitute("//", "/"); // needed because progdir ends with a slash.
|
path.Substitute("//", "/"); // needed because progdir ends with a slash.
|
||||||
if (create)
|
if (create)
|
||||||
|
@ -176,33 +175,13 @@ FString M_GetAutoexecPath()
|
||||||
return "$PROGDIR/autoexec.cfg";
|
return "$PROGDIR/autoexec.cfg";
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
//
|
|
||||||
// M_GetCajunPath Windows
|
|
||||||
//
|
|
||||||
// Returns the location of the Cajun Bot definitions.
|
|
||||||
//
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
FString M_GetCajunPath(const char *botfilename)
|
|
||||||
{
|
|
||||||
FString path;
|
|
||||||
|
|
||||||
path << progdir << "zcajun/" << botfilename;
|
|
||||||
if (!FileExists(path))
|
|
||||||
{
|
|
||||||
path = "";
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// M_GetConfigPath Windows
|
// M_GetConfigPath Windows
|
||||||
//
|
//
|
||||||
// Returns the path to the config file. On Windows, this can vary for reading
|
// Returns the path to the config file. On Windows, this can vary for reading
|
||||||
// vs writing. i.e. If $PROGDIR/zdoom-<user>.ini does not exist, it will try
|
// vs writing. i.e. If the user specific ini does not exist, it will try
|
||||||
// to read from $PROGDIR/zdoom.ini, but it will never write to zdoom.ini.
|
// to read from a neutral version, but never write to it.
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
|
@ -211,7 +190,7 @@ FString M_GetConfigPath(bool for_reading)
|
||||||
FString path;
|
FString path;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
path.Format("%s" GAMENAME "_portable.ini", progdir.GetChars());
|
path.Format("%s" GAMENAMELOWERCASE "_portable.ini", progdir.GetChars());
|
||||||
if (FileExists(path))
|
if (FileExists(path))
|
||||||
{
|
{
|
||||||
return path;
|
return path;
|
||||||
|
@ -226,12 +205,12 @@ FString M_GetConfigPath(bool for_reading)
|
||||||
path += "/" GAMENAMELOWERCASE ".ini";
|
path += "/" GAMENAMELOWERCASE ".ini";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // construct "$PROGDIR/zdoom-$USER.ini"
|
{ // construct "$PROGDIR/-$USER.ini"
|
||||||
TCHAR uname[UNLEN+1];
|
WCHAR uname[UNLEN+1];
|
||||||
DWORD unamelen = countof(uname);
|
DWORD unamelen = UNLEN;
|
||||||
|
|
||||||
path = progdir;
|
path = progdir;
|
||||||
hr = GetUserName(uname, &unamelen);
|
hr = GetUserNameW(uname, &unamelen);
|
||||||
if (SUCCEEDED(hr) && uname[0] != 0)
|
if (SUCCEEDED(hr) && uname[0] != 0)
|
||||||
{
|
{
|
||||||
// Is it valid for a user name to have slashes?
|
// Is it valid for a user name to have slashes?
|
||||||
|
@ -246,13 +225,13 @@ FString M_GetConfigPath(bool for_reading)
|
||||||
path << GAMENAMELOWERCASE "-" << FString(uname) << ".ini";
|
path << GAMENAMELOWERCASE "-" << FString(uname) << ".ini";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // Couldn't get user name, so just use zdoom.ini
|
{ // Couldn't get user name, so just use base version.
|
||||||
path += GAMENAMELOWERCASE ".ini";
|
path += GAMENAMELOWERCASE ".ini";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are reading the config file, check if it exists. If not, fallback
|
// If we are reading the config file, check if it exists. If not, fallback
|
||||||
// to $PROGDIR/zdoom.ini
|
// to base version.
|
||||||
if (for_reading)
|
if (for_reading)
|
||||||
{
|
{
|
||||||
if (!FileExists(path))
|
if (!FileExists(path))
|
||||||
|
@ -283,19 +262,19 @@ FString M_GetScreenshotsPath()
|
||||||
|
|
||||||
if (!UseKnownFolders())
|
if (!UseKnownFolders())
|
||||||
{
|
{
|
||||||
return progdir;
|
path << progdir << "/Screenshots/";
|
||||||
}
|
}
|
||||||
else if (GetKnownFolder(-1, MyFOLDERID_Screenshots, true, path))
|
else if (GetKnownFolder(-1, MyFOLDERID_Screenshots, true, path))
|
||||||
{
|
{
|
||||||
path << "/" GAMENAME;
|
path << "/" GAMENAME "/";
|
||||||
}
|
}
|
||||||
else if (GetKnownFolder(CSIDL_MYPICTURES, FOLDERID_Pictures, true, path))
|
else if (GetKnownFolder(CSIDL_MYPICTURES, FOLDERID_Pictures, true, path))
|
||||||
{
|
{
|
||||||
path << "/Screenshots/" GAMENAME;
|
path << "/Screenshots/" GAMENAME "/";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return progdir;
|
path << progdir << "/Screenshots/";
|
||||||
}
|
}
|
||||||
CreatePath(path);
|
CreatePath(path);
|
||||||
return path;
|
return path;
|
||||||
|
@ -315,25 +294,25 @@ FString M_GetSavegamesPath()
|
||||||
|
|
||||||
if (!UseKnownFolders())
|
if (!UseKnownFolders())
|
||||||
{
|
{
|
||||||
return progdir;
|
path << progdir << "Save/";
|
||||||
}
|
}
|
||||||
// Try standard Saved Games folder
|
// Try standard Saved Games folder
|
||||||
else if (GetKnownFolder(-1, FOLDERID_SavedGames, true, path))
|
else if (GetKnownFolder(-1, FOLDERID_SavedGames, true, path))
|
||||||
{
|
{
|
||||||
path << "/" GAMENAME;
|
path << "/" GAMENAME "/";
|
||||||
}
|
}
|
||||||
// Try defacto My Documents/My Games folder
|
// Try defacto My Documents/My Games folder
|
||||||
else if (GetKnownFolder(CSIDL_PERSONAL, FOLDERID_Documents, true, path))
|
else if (GetKnownFolder(CSIDL_PERSONAL, FOLDERID_Documents, true, path))
|
||||||
{
|
{
|
||||||
// I assume since this isn't a standard folder, it doesn't have
|
// I assume since this isn't a standard folder, it doesn't have
|
||||||
// a localized name either.
|
// a localized name either.
|
||||||
path << "/My Games/" GAMENAME;
|
path << "/My Games/" GAMENAME "/";
|
||||||
CreatePath(path);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
path = progdir;
|
path << progdir << "Save/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,7 +344,7 @@ FString M_GetDocumentsPath()
|
||||||
{
|
{
|
||||||
// I assume since this isn't a standard folder, it doesn't have
|
// I assume since this isn't a standard folder, it doesn't have
|
||||||
// a localized name either.
|
// a localized name either.
|
||||||
path << "/My Games/" GAMENAME;
|
path << "/My Games/" GAMENAME "/";
|
||||||
CreatePath(path);
|
CreatePath(path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -374,3 +353,55 @@ FString M_GetDocumentsPath()
|
||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// M_GetDemoPath Windows
|
||||||
|
//
|
||||||
|
// Returns the path to the default demp directory.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
FString M_GetDemoPath()
|
||||||
|
{
|
||||||
|
FString path;
|
||||||
|
|
||||||
|
// A portable INI means that this storage location should also be portable.
|
||||||
|
FStringf inipath("%s" GAMENAME "_portable.ini", progdir.GetChars());
|
||||||
|
if (FileExists(inipath) || !UseKnownFolders())
|
||||||
|
{
|
||||||
|
path << progdir << "Demos/";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// Try defacto My Documents/My Games folder
|
||||||
|
if (GetKnownFolder(CSIDL_PERSONAL, FOLDERID_Documents, true, path))
|
||||||
|
{
|
||||||
|
// I assume since this isn't a standard folder, it doesn't have
|
||||||
|
// a localized name either.
|
||||||
|
path << "/My Games/" GAMENAME "/";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
path << progdir << "Demos/";
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
//
|
||||||
|
// M_NormalizedPath
|
||||||
|
//
|
||||||
|
// Normalizes the given path and returns the result.
|
||||||
|
//
|
||||||
|
//===========================================================================
|
||||||
|
|
||||||
|
FString M_GetNormalizedPath(const char* path)
|
||||||
|
{
|
||||||
|
std::wstring wpath = WideString(path);
|
||||||
|
wchar_t buffer[MAX_PATH];
|
||||||
|
GetFullPathNameW(wpath.c_str(), MAX_PATH, buffer, nullptr);
|
||||||
|
FString result(buffer);
|
||||||
|
FixPathSeperator(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
|
@ -141,43 +141,12 @@ int sys_ostype = 0;
|
||||||
|
|
||||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
|
||||||
static ticcmd_t emptycmd;
|
|
||||||
|
|
||||||
static WadStuff *WadList;
|
static WadStuff *WadList;
|
||||||
static int NumWads;
|
static int NumWads;
|
||||||
static int DefaultWad;
|
static int DefaultWad;
|
||||||
|
|
||||||
static HCURSOR CustomCursor;
|
static HCURSOR CustomCursor;
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// I_Tactile
|
|
||||||
//
|
|
||||||
// Doom calls it when you take damage, so presumably it could be converted
|
|
||||||
// to something compatible with force feedback.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void I_Tactile(int on, int off, int total)
|
|
||||||
{
|
|
||||||
// UNUSED.
|
|
||||||
on = off = total = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// I_BaseTiccmd
|
|
||||||
//
|
|
||||||
// Returns an empty ticcmd. I have no idea why this should be system-
|
|
||||||
// specific.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
ticcmd_t *I_BaseTiccmd()
|
|
||||||
{
|
|
||||||
return &emptycmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// I_DetectOS
|
// I_DetectOS
|
||||||
|
|
|
@ -78,8 +78,6 @@ ticcmd_t *I_BaseTiccmd (void);
|
||||||
void I_Quit (void);
|
void I_Quit (void);
|
||||||
|
|
||||||
|
|
||||||
void I_Tactile (int on, int off, int total);
|
|
||||||
|
|
||||||
// Set the mouse cursor. The texture must be 32x32.
|
// Set the mouse cursor. The texture must be 32x32.
|
||||||
class FTexture;
|
class FTexture;
|
||||||
bool I_SetCursor(FTexture *cursor);
|
bool I_SetCursor(FTexture *cursor);
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "gameconfigfile.h"
|
#include "gameconfigfile.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
|
#include "keydef.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,10 @@
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "i_input.h"
|
#include "i_input.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "doomstat.h"
|
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
|
#include "printf.h"
|
||||||
#include "win32basevideo.h"
|
#include "win32basevideo.h"
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
|
#include <vector>
|
||||||
#include "wglext.h"
|
#include "wglext.h"
|
||||||
|
|
||||||
#include "gl_sysfb.h"
|
#include "gl_sysfb.h"
|
||||||
|
@ -45,9 +46,9 @@
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "i_input.h"
|
#include "i_input.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "doomstat.h"
|
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
|
#include "printf.h"
|
||||||
#include "engineerrors.h"
|
#include "engineerrors.h"
|
||||||
#include "win32glvideo.h"
|
#include "win32glvideo.h"
|
||||||
|
|
||||||
|
@ -415,8 +416,8 @@ bool Win32GLVideo::InitHardware(HWND Window, int multisample)
|
||||||
if (myWglCreateContextAttribsARB != NULL)
|
if (myWglCreateContextAttribsARB != NULL)
|
||||||
{
|
{
|
||||||
// let's try to get the best version possible. Some drivers only give us the version we request
|
// let's try to get the best version possible. Some drivers only give us the version we request
|
||||||
// which breaks all version checks for feature support. The highest used features we use are from version 4.4, and 3.0 is a requirement.
|
// which breaks all version checks for feature support. The highest used features we use are from version 4.4, and 3.3 is a requirement.
|
||||||
static int versions[] = { 46, 45, 44, 43, 42, 41, 40, 33, 32, 31, 30, -1 };
|
static int versions[] = { 46, 45, 44, 43, 42, 41, 40, 33, -1 };
|
||||||
|
|
||||||
for (int i = 0; versions[i] > 0; i++)
|
for (int i = 0; versions[i] > 0; i++)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue