mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-25 05:21:16 +00:00
New feature: poll external file for console commands
The commit adds "-refreshfile" and "-refreshinterval" command-line arguments. Every refreshinterval tics (or once a second if not specified) a refreshfile is read and is evaluated if exists and not empty. Then it is truncated. This feature provides a facility for an external program to control the game.
This commit is contained in:
parent
751f859c7a
commit
315e58f67f
1 changed files with 41 additions and 0 deletions
|
@ -65,6 +65,8 @@
|
||||||
#include "g_input.h"
|
#include "g_input.h"
|
||||||
#include "c_commandbuffer.h"
|
#include "c_commandbuffer.h"
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
#include "m_argv.h"
|
||||||
|
#include "doomdef.h"
|
||||||
|
|
||||||
#define LEFTMARGIN 8
|
#define LEFTMARGIN 8
|
||||||
#define RIGHTMARGIN 8
|
#define RIGHTMARGIN 8
|
||||||
|
@ -110,6 +112,9 @@ static int TopLine, InsertLine;
|
||||||
|
|
||||||
static void ClearConsole ();
|
static void ClearConsole ();
|
||||||
|
|
||||||
|
static FString* RefreshFile;
|
||||||
|
static int RefreshInterval = 0;
|
||||||
|
|
||||||
struct GameAtExit
|
struct GameAtExit
|
||||||
{
|
{
|
||||||
GameAtExit(FString str) : Command(str) {}
|
GameAtExit(FString str) : Command(str) {}
|
||||||
|
@ -235,6 +240,8 @@ void C_InitConback(FTextureID fallback, bool tile, double brightness)
|
||||||
void C_InitConsole (int width, int height, bool ingame)
|
void C_InitConsole (int width, int height, bool ingame)
|
||||||
{
|
{
|
||||||
int cwidth, cheight;
|
int cwidth, cheight;
|
||||||
|
const char *v;
|
||||||
|
int i;
|
||||||
|
|
||||||
vidactive = ingame;
|
vidactive = ingame;
|
||||||
if (CurrentConsoleFont != NULL)
|
if (CurrentConsoleFont != NULL)
|
||||||
|
@ -250,6 +257,18 @@ void C_InitConsole (int width, int height, bool ingame)
|
||||||
CmdLine.ConCols = ConWidth / cwidth;
|
CmdLine.ConCols = ConWidth / cwidth;
|
||||||
|
|
||||||
if (conbuffer == NULL) conbuffer = new FConsoleBuffer;
|
if (conbuffer == NULL) conbuffer = new FConsoleBuffer;
|
||||||
|
|
||||||
|
i = Args->CheckParm ("-refreshfile");
|
||||||
|
if (i > 0 && i < (int)Args->NumArgs() - 1)
|
||||||
|
{
|
||||||
|
RefreshFile = Args->GetArgList(i + 1);
|
||||||
|
RefreshInterval = TICRATE;
|
||||||
|
v = Args->CheckValue ("-refreshinterval");
|
||||||
|
if (v != NULL && (atoi(v) != 0))
|
||||||
|
{
|
||||||
|
RefreshInterval = atoi(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -534,9 +553,31 @@ void C_NewModeAdjust ()
|
||||||
int consoletic = 0;
|
int consoletic = 0;
|
||||||
void C_Ticker()
|
void C_Ticker()
|
||||||
{
|
{
|
||||||
|
FileReader fr;
|
||||||
static int lasttic = 0;
|
static int lasttic = 0;
|
||||||
|
long filesize = 1;
|
||||||
consoletic++;
|
consoletic++;
|
||||||
|
|
||||||
|
if (RefreshInterval > 0 && (consoletic % RefreshInterval) == 0)
|
||||||
|
{
|
||||||
|
if (fr.OpenFile (RefreshFile->GetChars()))
|
||||||
|
{
|
||||||
|
auto length = fr.GetLength();
|
||||||
|
fr.Close();
|
||||||
|
|
||||||
|
if (length > 0)
|
||||||
|
{
|
||||||
|
C_ExecFile (RefreshFile->GetChars());
|
||||||
|
|
||||||
|
// Truncate the file
|
||||||
|
FileWriter fw;
|
||||||
|
if (fw.Open (RefreshFile->GetChars())) {
|
||||||
|
fw.Close ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (lasttic == 0)
|
if (lasttic == 0)
|
||||||
lasttic = consoletic - 1;
|
lasttic = consoletic - 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue