📄 consoletypes.cc
字号:
//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "console/console.h"
#include "console/consoleTypes.h"
#include "core/stringTable.h"
#include "core/color.h"
#include "console/simBase.h"
//////////////////////////////////////////////////////////////////////////
// TypeString
//////////////////////////////////////////////////////////////////////////
ConsoleType( string, TypeString, sizeof(const char*) )
ConsoleGetType( TypeString )
{
return *((const char **)(dptr));
}
ConsoleSetType( TypeString )
{
if(argc == 1)
*((const char **) dptr) = StringTable->insert(argv[0]);
else
Con::printf("(TypeString) Cannot set multiple args to a single string.");
}
//////////////////////////////////////////////////////////////////////////
// TypeCaseString
//////////////////////////////////////////////////////////////////////////
ConsoleType( caseString, TypeCaseString, sizeof(const char*) )
ConsoleSetType( TypeCaseString )
{
if(argc == 1)
*((const char **) dptr) = StringTable->insert(argv[0], true);
else
Con::printf("(TypeCaseString) Cannot set multiple args to a single string.");
}
ConsoleGetType( TypeCaseString )
{
return *((const char **)(dptr));
}
#ifdef TGE_RPG
//////////////////////////////////////////////////////////////////////////
// TypeStringVector
//////////////////////////////////////////////////////////////////////////
static void setTypeStringData(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag,bool bCase)
{
Vector<StringTableEntry> *vec = (Vector<StringTableEntry> *)dptr;
// we assume the vector should be cleared first (not just appending)
vec->clear();
if(argc == 1)
{
const char *values = argv[0];
//const char *endValues = values + dStrlen(values);
CSTR value;
CSTR pSep;
StringTableEntry pBlank = StringTable->insert("");
while(1)
{
pSep = dStrchr(values,';');
if(pSep == NULL)
value = StringTable->insert(values,bCase);
else if(pSep == values)
value = pBlank;
else
value = StringTable->insertn(values,pSep - values,bCase);
vec->push_back(value);
if(pSep == NULL)
break;
values = pSep+1;
}
}
else if (argc > 1)
{
for (S32 i = 0; i < argc; i++)
vec->push_back(argv[i]);
}
else
Con::printf("Vector<StringTableEntry> must be set as { a, b, c, ... } or \"a b c ...\"");
}
static const char *getTypeStringData(void *dptr, EnumTable *tbl, BitSet32 flag ,bool bCase )
{
Vector<StringTableEntry> *vec = (Vector<StringTableEntry> *)dptr;
char* returnBuffer = Con::getReturnBuffer(1024);
S32 maxReturn = 1024;
returnBuffer[0] = '\0';
S32 returnLeng = 0;
for (Vector<StringTableEntry>::iterator itr = vec->begin(); itr != vec->end(); itr++)
{
// concatenate the next value onto the return string
dSprintf(returnBuffer + returnLeng, maxReturn - returnLeng, "%s;", *itr);
// update the length of the return string (so far)
returnLeng = dStrlen(returnBuffer);
}
// trim off that last extra ';'
if (returnLeng > 0 && returnBuffer[returnLeng - 1] == ';')
returnBuffer[returnLeng - 1] = '\0';
return returnBuffer;
}
ConsoleType( strList, TypeStringVector, sizeof(Vector<StringTableEntry>) )
ConsoleGetType( TypeStringVector )
{
return getTypeStringData(dptr, tbl, flag ,false );
}
ConsoleSetType( TypeStringVector )
{
setTypeStringData(dptr, argc, argv, tbl, flag,false);
}
//////////////////////////////////////////////////////////////////////////
// TypeCaseStringVector
//////////////////////////////////////////////////////////////////////////
ConsoleType( strCaseList, TypeCaseStringVector, sizeof(Vector<StringTableEntry>) )
ConsoleGetType( TypeCaseStringVector )
{
return getTypeStringData(dptr, tbl, flag ,true );
}
ConsoleSetType( TypeCaseStringVector )
{
setTypeStringData(dptr, argc, argv, tbl, flag,true);
}
#endif
//////////////////////////////////////////////////////////////////////////
// TypeFileName
//////////////////////////////////////////////////////////////////////////
ConsoleType( filename, TypeFilename, sizeof( const char* ) )
ConsoleSetType( TypeFilename )
{
if(argc == 1)
{
char buffer[1024];
if (Con::expandScriptFilename(buffer, 1024, argv[0]))
*((const char **) dptr) = StringTable->insert(buffer);
else
Con::warnf("(TypeFilename) illegal filename detected: %s", argv[0]);
}
else
Con::printf("(TypeFilename) Cannot set multiple args to a single filename.");
}
ConsoleGetType( TypeFilename )
{
return *((const char **)(dptr));
}
//////////////////////////////////////////////////////////////////////////
// TypeS8
//////////////////////////////////////////////////////////////////////////
ConsoleType( char, TypeS8, sizeof(U8) )
ConsoleGetType( TypeS8 )
{
char* returnBuffer = Con::getReturnBuffer(256);
dSprintf(returnBuffer, 256, "%d", *((U8 *) dptr) );
return returnBuffer;
}
ConsoleSetType( TypeS8 )
{
if(argc == 1)
*((U8 *) dptr) = dAtoi(argv[0]);
else
Con::printf("(TypeU8) Cannot set multiple args to a single S32.");
}
//////////////////////////////////////////////////////////////////////////
// TypeS32
//////////////////////////////////////////////////////////////////////////
ConsoleType( int, TypeS32, sizeof(S32) )
ConsoleGetType( TypeS32 )
{
char* returnBuffer = Con::getReturnBuffer(256);
dSprintf(returnBuffer, 256, "%d", *((S32 *) dptr) );
return returnBuffer;
}
ConsoleSetType( TypeS32 )
{
if(argc == 1)
*((S32 *) dptr) = dAtoi(argv[0]);
else
Con::printf("(TypeS32) Cannot set multiple args to a single S32.");
}
//////////////////////////////////////////////////////////////////////////
// TypeS32Vector
//////////////////////////////////////////////////////////////////////////
ConsoleType( intList, TypeS32Vector, sizeof(Vector<S32>) )
ConsoleGetType( TypeS32Vector )
{
Vector<S32> *vec = (Vector<S32> *)dptr;
char* returnBuffer = Con::getReturnBuffer(1024);
S32 maxReturn = 1024;
returnBuffer[0] = '\0';
S32 returnLeng = 0;
for (Vector<S32>::iterator itr = vec->begin(); itr != vec->end(); itr++)
{
// concatenate the next value onto the return string
dSprintf(returnBuffer + returnLeng, maxReturn - returnLeng, "%d ", *itr);
// update the length of the return string (so far)
returnLeng = dStrlen(returnBuffer);
}
// trim off that last extra space
if (returnLeng > 0 && returnBuffer[returnLeng - 1] == ' ')
returnBuffer[returnLeng - 1] = '\0';
return returnBuffer;
}
ConsoleSetType( TypeS32Vector )
{
Vector<S32> *vec = (Vector<S32> *)dptr;
// we assume the vector should be cleared first (not just appending)
vec->clear();
if(argc == 1)
{
const char *values = argv[0];
const char *endValues = values + dStrlen(values);
S32 value;
// advance through the string, pulling off S32's and advancing the pointer
while (values < endValues && dSscanf(values, "%d", &value) != 0)
{
vec->push_back(value);
const char *nextValues = dStrchr(values, ' ');
if (nextValues != 0 && nextValues < endValues)
values = nextValues + 1;
else
break;
}
}
else if (argc > 1)
{
for (S32 i = 0; i < argc; i++)
vec->push_back(dAtoi(argv[i]));
}
else
Con::printf("Vector<S32> must be set as { a, b, c, ... } or \"a b c ...\"");
}
//////////////////////////////////////////////////////////////////////////
// TypeF32
//////////////////////////////////////////////////////////////////////////
ConsoleType( float, TypeF32, sizeof(F32) )
ConsoleGetType( TypeF32 )
{
char* returnBuffer = Con::getReturnBuffer(256);
dSprintf(returnBuffer, 256, "%g", *((F32 *) dptr) );
return returnBuffer;
}
ConsoleSetType( TypeF32 )
{
if(argc == 1)
*((F32 *) dptr) = dAtof(argv[0]);
else
Con::printf("(TypeF32) Cannot set multiple args to a single F32.");
}
//////////////////////////////////////////////////////////////////////////
// TypeF32Vector
//////////////////////////////////////////////////////////////////////////
ConsoleType( floatList, TypeF32Vector, sizeof(Vector<F32>) )
ConsoleGetType( TypeF32Vector )
{
Vector<F32> *vec = (Vector<F32> *)dptr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -