mirror of
https://github.com/tribes2/engine.git
synced 2026-01-19 19:24:45 +00:00
200 lines
7.4 KiB
C++
200 lines
7.4 KiB
C++
//-----------------------------------------------------------------------------
|
|
// V12 Engine
|
|
//
|
|
// Copyright (c) 2001 GarageGames.Com
|
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _CONSOLE_H_
|
|
#define _CONSOLE_H_
|
|
|
|
#ifndef _PLATFORM_H_
|
|
#include "Platform/platform.h"
|
|
#endif
|
|
#ifndef _BITSET_H_
|
|
#include "Core/bitSet.h"
|
|
#endif
|
|
|
|
class SimObject;
|
|
struct EnumTable;
|
|
class Namespace;
|
|
|
|
enum
|
|
{
|
|
StringTagPrefixByte = 0x01
|
|
};
|
|
|
|
struct ConsoleLogEntry
|
|
{
|
|
enum Level
|
|
{
|
|
Normal = 0,
|
|
Warning,
|
|
Error,
|
|
NUM_CLASS
|
|
} mLevel;
|
|
enum Type
|
|
{
|
|
General = 0,
|
|
Assert,
|
|
Script,
|
|
GUI,
|
|
Network,
|
|
NUM_TYPE
|
|
} mType;
|
|
const char *mString;
|
|
};
|
|
|
|
struct EnumTable
|
|
{
|
|
S32 size;
|
|
|
|
struct Enums
|
|
{
|
|
S32 index;
|
|
const char *label;
|
|
};
|
|
|
|
Enums *table;
|
|
EnumTable(S32 sSize, Enums *sTable)
|
|
{ size = sSize; table = sTable; }
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
typedef const char *StringTableEntry;
|
|
typedef const char *(*StringCallback)(SimObject *obj, S32 argc, const char *argv[]);
|
|
typedef S32 (*IntCallback)(SimObject *obj, S32 argc, const char *argv[]);
|
|
typedef F32 (*FloatCallback)(SimObject *obj, S32 argc, const char *argv[]);
|
|
typedef void (*VoidCallback)(SimObject *obj, S32 argc, const char *argv[]);
|
|
typedef bool (*BoolCallback)(SimObject *obj, S32 argc, const char *argv[]);
|
|
typedef void (*ConsumerCallback)(ConsoleLogEntry::Level level, const char *consoleLine);
|
|
|
|
typedef const char* (*GetDataFunction)(void *dptr, EnumTable *tbl, BitSet32 flag);
|
|
typedef void (*SetDataFunction)(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag);
|
|
|
|
|
|
namespace Con
|
|
{
|
|
enum {
|
|
MaxLineLength = 512
|
|
};
|
|
|
|
void init();
|
|
void shutdown();
|
|
bool isActive();
|
|
|
|
void addConsumer(ConsumerCallback cb);
|
|
void removeConsumer(ConsumerCallback cb);
|
|
|
|
void setVariable(const char *name, const char *value);
|
|
bool addVariable(const char *name, S32, void *);
|
|
bool removeVariable(const char *name);
|
|
const char* getVariable(const char* name);
|
|
const char* getLocalVariable(const char* name);
|
|
void setLocalVariable(const char *name, const char *value);
|
|
|
|
void addCommand(const char *name, StringCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *name, IntCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *name, FloatCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *name, VoidCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *name, BoolCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
|
|
void addCommand(const char *nameSpace, const char *name,StringCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *nameSpace, const char *name,IntCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *nameSpace, const char *name,FloatCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *nameSpace, const char *name,VoidCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
void addCommand(const char *nameSpace, const char *name,BoolCallback, const char *usage, S32 minArgs, S32 maxArgs);
|
|
|
|
bool removeCommand(const char *name);
|
|
void printf(const char *_format, ...);
|
|
void warnf(ConsoleLogEntry::Type type, const char *_format, ...);
|
|
void errorf(ConsoleLogEntry::Type type, const char *_format, ...);
|
|
void warnf(const char *_format, ...);
|
|
void errorf(const char *_format, ...);
|
|
|
|
const char *execute(S32 argc, const char* argv[]);
|
|
const char *executef(S32 argc, ...); // first param is funcName, remaining params are args
|
|
|
|
// first param is func name, second param MUST be empty (gets filled with object ID)
|
|
// also, MUST have at least those two params
|
|
const char *execute(SimObject *, S32 argc, const char *argv[]);
|
|
|
|
const char *executef(SimObject *, S32 argc, ...); // first param is funcName, remaining params are args
|
|
|
|
const char *evaluate(const char* string, bool echo = false, const char *fileName = NULL);
|
|
const char *evaluatef(const char* string, ...);
|
|
|
|
bool isFunction(const char *fn);
|
|
|
|
void setBoolVariable(const char* name,bool var);
|
|
bool getBoolVariable(const char* name,bool def = false);
|
|
void setIntVariable(const char* name,S32 var);
|
|
S32 getIntVariable(const char* name,S32 def = 0);
|
|
void setFloatVariable(const char* name,F32 var);
|
|
F32 getFloatVariable(const char* name,F32 def = .0f);
|
|
|
|
// console function implementation helpers
|
|
char *getReturnBuffer(U32 bufferSize);
|
|
|
|
char *getArgBuffer(U32 bufferSize);
|
|
char *getFloatArg(F64 arg);
|
|
char *getIntArg(S32 arg);
|
|
|
|
|
|
const char *tabComplete(const char *prevText, S32 baseLen, bool);
|
|
void exportVariables(const char *varString, Vector<const char *> &varName, Vector<const char *> &value);
|
|
|
|
Namespace *lookupNamespace(const char *nsName);
|
|
void linkNamespaces(const char *parentName, const char *childName);
|
|
|
|
// this should only be called from consoleObject.h
|
|
void classLinkNamespaces(Namespace *parent, Namespace *child);
|
|
|
|
void getLog(ConsoleLogEntry * &log, U32 &size);
|
|
// dynamic data management functions:
|
|
void setLogMode(S32 mode);
|
|
|
|
void registerType(S32 type, S32 size, GetDataFunction gdf, SetDataFunction sdf);
|
|
void setData(S32 type, void *dptr, S32 index, S32 argc, const char **argv, EnumTable *tbl = NULL, BitSet32 flag = 0);
|
|
const char *getData(S32 type, void *dptr, S32 index, EnumTable *tbl = NULL, BitSet32 flag = 0);
|
|
}
|
|
|
|
extern void expandEscape(char *dest, const char *src);
|
|
extern bool collapseEscape(char *buf);
|
|
extern S32 HashPointer(StringTableEntry ptr);
|
|
|
|
struct ConsoleConstructor
|
|
{
|
|
StringCallback sc;
|
|
IntCallback ic;
|
|
FloatCallback fc;
|
|
VoidCallback vc;
|
|
BoolCallback bc;
|
|
S32 mina, maxa;
|
|
const char *usage;
|
|
const char *funcName;
|
|
const char *className;
|
|
ConsoleConstructor *next;
|
|
static ConsoleConstructor *first;
|
|
|
|
void init(const char *cName, const char *fName, const char *usg, S32 minArgs, S32 maxArgs);
|
|
static void setup();
|
|
ConsoleConstructor(const char *className, const char *funcName, StringCallback sfunc, const char *usage, S32 minArgs, S32 maxArgs);
|
|
ConsoleConstructor(const char *className, const char *funcName, IntCallback ifunc, const char *usage, S32 minArgs, S32 maxArgs);
|
|
ConsoleConstructor(const char *className, const char *funcName, FloatCallback ffunc, const char *usage, S32 minArgs, S32 maxArgs);
|
|
ConsoleConstructor(const char *className, const char *funcName, VoidCallback vfunc, const char *usage, S32 minArgs, S32 maxArgs);
|
|
ConsoleConstructor(const char *className, const char *funcName, BoolCallback bfunc, const char *usage, S32 minArgs, S32 maxArgs);
|
|
};
|
|
|
|
#define ConsoleFunction(name,returnType,minArgs,maxArgs,usage) \
|
|
static returnType c##name(SimObject *, S32, const char **argv); \
|
|
static ConsoleConstructor g##name##obj(NULL,#name,c##name,usage,minArgs,maxArgs);\
|
|
static returnType c##name(SimObject *, S32 argc, const char **argv)
|
|
|
|
#define ConsoleMethod(className,name,returnType,minArgs,maxArgs,usage) \
|
|
static returnType c##className##name(SimObject *, S32, const char **argv); \
|
|
static ConsoleConstructor className##name##obj(#className,#name,c##className##name,usage,minArgs,maxArgs);\
|
|
static returnType c##className##name(SimObject *object, S32 argc, const char **argv)
|
|
|
|
#endif
|