mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
- added ZDoom's CVAR class.
No CVar transition has been done yet.
This commit is contained in:
parent
7fd395b5d7
commit
5687b4c02e
4 changed files with 2124 additions and 1 deletions
|
@ -806,7 +806,6 @@ set (PCH_SOURCES
|
||||||
build/src/glsurface.cpp
|
build/src/glsurface.cpp
|
||||||
build/src/hash.cpp
|
build/src/hash.cpp
|
||||||
build/src/hightile.cpp
|
build/src/hightile.cpp
|
||||||
build/src/klzw.cpp
|
|
||||||
build/src/kplib.cpp
|
build/src/kplib.cpp
|
||||||
build/src/mdsprite.cpp
|
build/src/mdsprite.cpp
|
||||||
build/src/mhk.cpp
|
build/src/mhk.cpp
|
||||||
|
@ -967,6 +966,8 @@ set (PCH_SOURCES
|
||||||
common/utility/utf8.cpp
|
common/utility/utf8.cpp
|
||||||
common/utility/superfasthash.cpp
|
common/utility/superfasthash.cpp
|
||||||
common/utility/configfile.cpp
|
common/utility/configfile.cpp
|
||||||
|
|
||||||
|
common/console/c_cvars.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if( MSVC )
|
if( MSVC )
|
||||||
|
@ -1021,6 +1022,7 @@ include_directories(
|
||||||
libsmackerdec/include
|
libsmackerdec/include
|
||||||
thirdparty/include
|
thirdparty/include
|
||||||
common/utility
|
common/utility
|
||||||
|
common/console
|
||||||
platform
|
platform
|
||||||
|
|
||||||
${CMAKE_BINARY_DIR}/libraries/gdtoa
|
${CMAKE_BINARY_DIR}/libraries/gdtoa
|
||||||
|
|
101
source/common/console/c_console.h
Normal file
101
source/common/console/c_console.h
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
** c_console.h
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 1998-2006 Randy Heit
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __C_CONSOLE__
|
||||||
|
#define __C_CONSOLE__
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
//#include "basictypes.h"
|
||||||
|
|
||||||
|
// Dummies for missing features to make the code compile.
|
||||||
|
|
||||||
|
inline void C_AddTabCommand (const char *name) {}
|
||||||
|
inline void C_RemoveTabCommand (const char *name) {}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
struct event_t;
|
||||||
|
|
||||||
|
#define C_BLINKRATE (TICRATE/2)
|
||||||
|
|
||||||
|
typedef enum cstate_t
|
||||||
|
{
|
||||||
|
c_up=0, c_down=1, c_falling=2, c_rising=3
|
||||||
|
}
|
||||||
|
constate_e;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PRINTLEVELS = 5
|
||||||
|
};
|
||||||
|
extern int PrintColors[PRINTLEVELS + 2];
|
||||||
|
|
||||||
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
|
// Initialize the console
|
||||||
|
void C_InitConsole (int width, int height, bool ingame);
|
||||||
|
void C_DeinitConsole ();
|
||||||
|
void C_InitConback();
|
||||||
|
|
||||||
|
// Adjust the console for a new screen mode
|
||||||
|
void C_NewModeAdjust (void);
|
||||||
|
|
||||||
|
void C_Ticker (void);
|
||||||
|
|
||||||
|
void AddToConsole (int printlevel, const char *string);
|
||||||
|
int PrintString (int printlevel, const char *string);
|
||||||
|
int PrintStringHigh (const char *string);
|
||||||
|
int VPrintf (int printlevel, const char *format, va_list parms) GCCFORMAT(2);
|
||||||
|
|
||||||
|
void C_DrawConsole ();
|
||||||
|
void C_ToggleConsole (void);
|
||||||
|
void C_FullConsole (void);
|
||||||
|
void C_HideConsole (void);
|
||||||
|
void C_AdjustBottom (void);
|
||||||
|
void C_FlushDisplay (void);
|
||||||
|
|
||||||
|
class FFont;
|
||||||
|
void C_MidPrint (FFont *font, const char *message, bool bold = false);
|
||||||
|
|
||||||
|
bool C_Responder (event_t *ev);
|
||||||
|
|
||||||
|
void C_AddTabCommand (const char *name);
|
||||||
|
void C_RemoveTabCommand (const char *name);
|
||||||
|
void C_ClearTabCommands(); // Removes all tab commands
|
||||||
|
|
||||||
|
extern const char *console_bar;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
1584
source/common/console/c_cvars.cpp
Normal file
1584
source/common/console/c_cvars.cpp
Normal file
File diff suppressed because it is too large
Load diff
436
source/common/console/c_cvars.h
Normal file
436
source/common/console/c_cvars.h
Normal file
|
@ -0,0 +1,436 @@
|
||||||
|
/*
|
||||||
|
** c_cvars.h
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 1998-2006 Randy Heit
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __C_CVARS_H__
|
||||||
|
#define __C_CVARS_H__
|
||||||
|
#include "zstring.h"
|
||||||
|
#include "tarray.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
==========================================================
|
||||||
|
|
||||||
|
CVARS (console variables)
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CVAR_ARCHIVE = 1, // set to cause it to be saved to config
|
||||||
|
//CVAR_USERINFO = 2, // added to userinfo when changed
|
||||||
|
CVAR_SERVERINFO = 4, // added to serverinfo when changed
|
||||||
|
CVAR_NOSET = 8, // don't allow change from console at all,
|
||||||
|
// but can be set from the command line
|
||||||
|
CVAR_LATCH = 16, // save changes until server restart
|
||||||
|
CVAR_UNSETTABLE = 32, // can unset this var from console
|
||||||
|
CVAR_DEMOSAVE = 64, // save the value of this cvar in a demo
|
||||||
|
CVAR_ISDEFAULT = 128, // is cvar unchanged since creation?
|
||||||
|
CVAR_AUTO = 256, // allocated; needs to be freed when destroyed
|
||||||
|
CVAR_NOINITCALL = 512, // don't call callback at game start
|
||||||
|
CVAR_GLOBALCONFIG = 1024, // cvar is saved to global config section
|
||||||
|
CVAR_VIDEOCONFIG = 2048, // cvar is saved to video config section (not implemented)
|
||||||
|
CVAR_NOSAVE = 4096, // when used with CVAR_SERVERINFO, do not save var to savegame
|
||||||
|
//CVAR_MOD = 8192, // cvar was defined by a mod
|
||||||
|
//CVAR_IGNORE = 16384,// do not send cvar across the network/inaccesible from ACS (dummy mod cvar)
|
||||||
|
//CVAR_CHEAT = 32768,// can be set only when sv_cheats is enabled
|
||||||
|
//CVAR_UNSAFECONTEXT = 65536,// cvar value came from unsafe context
|
||||||
|
};
|
||||||
|
|
||||||
|
union UCVarValue
|
||||||
|
{
|
||||||
|
bool Bool;
|
||||||
|
int Int;
|
||||||
|
float Float;
|
||||||
|
const char *String;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ECVarType
|
||||||
|
{
|
||||||
|
CVAR_Bool,
|
||||||
|
CVAR_Int,
|
||||||
|
CVAR_Float,
|
||||||
|
CVAR_String,
|
||||||
|
CVAR_Color, // stored as CVAR_Int
|
||||||
|
CVAR_DummyBool, // just redirects to another cvar
|
||||||
|
CVAR_DummyInt, // just redirects to another cvar
|
||||||
|
CVAR_Dummy // Unknown
|
||||||
|
};
|
||||||
|
|
||||||
|
class FConfigFile;
|
||||||
|
|
||||||
|
class FxCVar;
|
||||||
|
|
||||||
|
class FBaseCVar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FBaseCVar (const char *name, uint32_t flags, void (*callback)(FBaseCVar &), const char *descr);
|
||||||
|
virtual ~FBaseCVar ();
|
||||||
|
|
||||||
|
inline void Callback () { if (m_Callback) m_Callback (*this); }
|
||||||
|
|
||||||
|
inline const char *GetName () const { return VarName.GetChars(); }
|
||||||
|
inline uint32_t GetFlags () const { return Flags; }
|
||||||
|
inline FBaseCVar *GetNext() const { return m_Next; }
|
||||||
|
|
||||||
|
void CmdSet (const char *newval);
|
||||||
|
void ForceSet (UCVarValue value, ECVarType type, bool nouserinfosend=false);
|
||||||
|
void SetGenericRep (UCVarValue value, ECVarType type);
|
||||||
|
void ResetToDefault ();
|
||||||
|
void SetArchiveBit () { Flags |= CVAR_ARCHIVE; }
|
||||||
|
void MarkUnsafe();
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const = 0;
|
||||||
|
|
||||||
|
virtual const char *GetHumanString(int precision=-1) const;
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const = 0;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const = 0;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const = 0;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const = 0;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type) = 0;
|
||||||
|
|
||||||
|
FBaseCVar &operator= (const FBaseCVar &var)
|
||||||
|
{ UCVarValue val; ECVarType type; val = var.GetFavoriteRep (&type); SetGenericRep (val, type); return *this; }
|
||||||
|
|
||||||
|
static void EnableNoSet (); // enable the honoring of CVAR_NOSET
|
||||||
|
static void EnableCallbacks ();
|
||||||
|
static void DisableCallbacks ();
|
||||||
|
static void ResetColors (); // recalc color cvars' indices after screen change
|
||||||
|
|
||||||
|
static void ListVars (const char *filter, bool plain);
|
||||||
|
|
||||||
|
const char *GetDescription() const { return Description; };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type) = 0;
|
||||||
|
|
||||||
|
static bool ToBool (UCVarValue value, ECVarType type);
|
||||||
|
static int ToInt (UCVarValue value, ECVarType type);
|
||||||
|
static float ToFloat (UCVarValue value, ECVarType type);
|
||||||
|
static const char *ToString (UCVarValue value, ECVarType type);
|
||||||
|
static UCVarValue FromBool (bool value, ECVarType type);
|
||||||
|
static UCVarValue FromInt (int value, ECVarType type);
|
||||||
|
static UCVarValue FromFloat (float value, ECVarType type);
|
||||||
|
static UCVarValue FromString (const char *value, ECVarType type);
|
||||||
|
|
||||||
|
FString VarName;
|
||||||
|
FString SafeValue;
|
||||||
|
FString Description;
|
||||||
|
uint32_t Flags;
|
||||||
|
|
||||||
|
private:
|
||||||
|
FBaseCVar (const FBaseCVar &var) = delete;
|
||||||
|
FBaseCVar (const char *name, uint32_t flags);
|
||||||
|
|
||||||
|
void (*m_Callback)(FBaseCVar &);
|
||||||
|
FBaseCVar *m_Next;
|
||||||
|
|
||||||
|
static bool m_UseCallback;
|
||||||
|
static bool m_DoNoSet;
|
||||||
|
|
||||||
|
friend FString C_GetMassCVarString (uint32_t filter, bool compact);
|
||||||
|
friend void C_ReadCVars (uint8_t **demo_p);
|
||||||
|
friend void C_BackupCVars (void);
|
||||||
|
friend FBaseCVar *FindCVar (const char *var_name, FBaseCVar **prev);
|
||||||
|
friend FBaseCVar *FindCVarSub (const char *var_name, int namelen);
|
||||||
|
friend void UnlatchCVars (void);
|
||||||
|
friend void DestroyCVarsFlagged (uint32_t flags);
|
||||||
|
friend void C_ArchiveCVars (FConfigFile *f, uint32_t filter);
|
||||||
|
friend void C_SetCVarsToDefaults (void);
|
||||||
|
friend void FilterCompactCVars (TArray<FBaseCVar *> &cvars, uint32_t filter);
|
||||||
|
friend void C_DeinitConsole();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a string with all cvars whose flags match filter. In compact mode,
|
||||||
|
// the cvar names are omitted to save space.
|
||||||
|
FString C_GetMassCVarString (uint32_t filter, bool compact=false);
|
||||||
|
|
||||||
|
// Writes all cvars that could effect demo sync to *demo_p. These are
|
||||||
|
// cvars that have either CVAR_SERVERINFO or CVAR_DEMOSAVE set.
|
||||||
|
void C_WriteCVars (uint8_t **demo_p, uint32_t filter, bool compact=false);
|
||||||
|
|
||||||
|
// Read all cvars from *demo_p and set them appropriately.
|
||||||
|
void C_ReadCVars (uint8_t **demo_p);
|
||||||
|
|
||||||
|
// Backup demo cvars. Called before a demo starts playing to save all
|
||||||
|
// cvars the demo might change.
|
||||||
|
void C_BackupCVars (void);
|
||||||
|
|
||||||
|
// Finds a named cvar
|
||||||
|
FBaseCVar *FindCVar (const char *var_name, FBaseCVar **prev);
|
||||||
|
FBaseCVar *FindCVarSub (const char *var_name, int namelen);
|
||||||
|
|
||||||
|
// Create a new cvar with the specified name and type
|
||||||
|
FBaseCVar *C_CreateCVar(const char *var_name, ECVarType var_type, uint32_t flags);
|
||||||
|
|
||||||
|
// Called from G_InitNew()
|
||||||
|
void UnlatchCVars (void);
|
||||||
|
|
||||||
|
// Destroy CVars with the matching flags; called from CCMD(restart)
|
||||||
|
void DestroyCVarsFlagged (uint32_t flags);
|
||||||
|
|
||||||
|
// archive cvars to FILE f
|
||||||
|
void C_ArchiveCVars (FConfigFile *f, uint32_t filter);
|
||||||
|
|
||||||
|
// initialize cvars to default values after they are created
|
||||||
|
void C_SetCVarsToDefaults (void);
|
||||||
|
|
||||||
|
void FilterCompactCVars (TArray<FBaseCVar *> &cvars, uint32_t filter);
|
||||||
|
|
||||||
|
void C_DeinitConsole();
|
||||||
|
|
||||||
|
class FBoolCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FBoolCVar (const char *name, bool def, uint32_t flags, void (*callback)(FBoolCVar &)=NULL, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
inline bool operator= (bool boolval)
|
||||||
|
{ UCVarValue val; val.Bool = boolval; SetGenericRep (val, CVAR_Bool); return boolval; }
|
||||||
|
inline operator bool () const { return Value; }
|
||||||
|
inline bool operator *() const { return Value; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
bool Value;
|
||||||
|
bool DefaultValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FIntCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FIntCVar (const char *name, int def, uint32_t flags, void (*callback)(FIntCVar &)=NULL, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
int operator= (int intval)
|
||||||
|
{ UCVarValue val; val.Int = intval; SetGenericRep (val, CVAR_Int); return intval; }
|
||||||
|
inline operator int () const { return Value; }
|
||||||
|
inline int operator *() const { return Value; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
int Value;
|
||||||
|
int DefaultValue;
|
||||||
|
|
||||||
|
friend class FFlagCVar;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FFloatCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FFloatCVar (const char *name, float def, uint32_t flags, void (*callback)(FFloatCVar &)=NULL, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
const char *GetHumanString(int precision) const override;
|
||||||
|
|
||||||
|
float operator= (float floatval)
|
||||||
|
{ UCVarValue val; val.Float = floatval; SetGenericRep (val, CVAR_Float); return floatval; }
|
||||||
|
inline operator float () const { return Value; }
|
||||||
|
inline float operator *() const { return Value; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
float Value;
|
||||||
|
float DefaultValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FStringCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FStringCVar (const char *name, const char *def, uint32_t flags, void (*callback)(FStringCVar &)=NULL, const char* descr = nullptr);
|
||||||
|
~FStringCVar ();
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
const char *operator= (const char *stringrep)
|
||||||
|
{ UCVarValue val; val.String = const_cast<char *>(stringrep); SetGenericRep (val, CVAR_String); return stringrep; }
|
||||||
|
inline operator const char * () const { return mValue; }
|
||||||
|
inline const char *operator *() const { return mValue; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
FString mValue;
|
||||||
|
FString mDefaultValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
class FColorCVar : public FIntCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FColorCVar (const char *name, int def, uint32_t flags, void (*callback)(FColorCVar &)=NULL, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
inline operator uint32_t () const { return Value; }
|
||||||
|
inline uint32_t operator *() const { return Value; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
static UCVarValue FromInt2 (int value, ECVarType type);
|
||||||
|
static int ToInt2 (UCVarValue value, ECVarType type);
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class FFlagCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FFlagCVar (const char *name, FIntCVar &realvar, uint32_t bitval, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
bool operator= (bool boolval)
|
||||||
|
{ UCVarValue val; val.Bool = boolval; SetGenericRep (val, CVAR_Bool); return boolval; }
|
||||||
|
bool operator= (FFlagCVar &flag)
|
||||||
|
{ UCVarValue val; val.Bool = !!flag; SetGenericRep (val, CVAR_Bool); return val.Bool; }
|
||||||
|
inline operator int () const { return (ValueVar & BitVal); }
|
||||||
|
inline int operator *() const { return (ValueVar & BitVal); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
FIntCVar &ValueVar;
|
||||||
|
uint32_t BitVal;
|
||||||
|
int BitNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FMaskCVar : public FBaseCVar
|
||||||
|
{
|
||||||
|
friend class FxCVar;
|
||||||
|
public:
|
||||||
|
FMaskCVar (const char *name, FIntCVar &realvar, uint32_t bitval, const char* descr = nullptr);
|
||||||
|
|
||||||
|
virtual ECVarType GetRealType () const;
|
||||||
|
|
||||||
|
virtual UCVarValue GetGenericRep (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRep (ECVarType *type) const;
|
||||||
|
virtual UCVarValue GetGenericRepDefault (ECVarType type) const;
|
||||||
|
virtual UCVarValue GetFavoriteRepDefault (ECVarType *type) const;
|
||||||
|
virtual void SetGenericRepDefault (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
inline operator int () const { return (ValueVar & BitVal) >> BitNum; }
|
||||||
|
inline int operator *() const { return (ValueVar & BitVal) >> BitNum; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoSet (UCVarValue value, ECVarType type);
|
||||||
|
|
||||||
|
FIntCVar &ValueVar;
|
||||||
|
uint32_t BitVal;
|
||||||
|
int BitNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern int cvar_defflags;
|
||||||
|
|
||||||
|
FBaseCVar *cvar_set (const char *var_name, const char *value);
|
||||||
|
FBaseCVar *cvar_forceset (const char *var_name, const char *value);
|
||||||
|
|
||||||
|
inline FBaseCVar *cvar_set (const char *var_name, const uint8_t *value) { return cvar_set (var_name, (const char *)value); }
|
||||||
|
inline FBaseCVar *cvar_forceset (const char *var_name, const uint8_t *value) { return cvar_forceset (var_name, (const char *)value); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Restore demo cvars. Called after demo playback to restore all cvars
|
||||||
|
// that might possibly have been changed during the course of demo playback.
|
||||||
|
void C_RestoreCVars (void);
|
||||||
|
|
||||||
|
void C_ForgetCVars (void);
|
||||||
|
|
||||||
|
|
||||||
|
#define CUSTOM_CVAR(type,name,def,flags) \
|
||||||
|
static void cvarfunc_##name(F##type##CVar &); \
|
||||||
|
F##type##CVar name (#name, def, flags, cvarfunc_##name); \
|
||||||
|
static void cvarfunc_##name(F##type##CVar &self)
|
||||||
|
|
||||||
|
#define CVAR(type,name,def,flags) \
|
||||||
|
F##type##CVar name (#name, def, flags);
|
||||||
|
|
||||||
|
#define EXTERN_CVAR(type,name) extern F##type##CVar name;
|
||||||
|
|
||||||
|
#define CUSTOM_CVARD(type,name,def,flags,descr) \
|
||||||
|
static void cvarfunc_##name(F##type##CVar &); \
|
||||||
|
F##type##CVar name (#name, def, flags, cvarfunc_##name, descr); \
|
||||||
|
static void cvarfunc_##name(F##type##CVar &self)
|
||||||
|
|
||||||
|
#define CVARD(type,name,def,flags, descr) \
|
||||||
|
F##type##CVar name (#name, def, flags, descr);
|
||||||
|
|
||||||
|
|
||||||
|
extern FBaseCVar *CVars;
|
||||||
|
|
||||||
|
#endif //__C_CVARS_H__
|
Loading…
Reference in a new issue