107 lines
3.8 KiB
C++
Executable File
107 lines
3.8 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef _DYNAMIC_CONSOLETYPES_H_
|
|
#define _DYNAMIC_CONSOLETYPES_H_
|
|
|
|
#ifndef _SIMBASE_H_
|
|
#include "console/simBase.h"
|
|
#endif
|
|
|
|
class ConsoleBaseType
|
|
{
|
|
protected:
|
|
/// This is used to generate unique IDs for each type.
|
|
static S32 smConsoleTypeCount;
|
|
|
|
/// We maintain a linked list of all console types; this is its head.
|
|
static ConsoleBaseType *smListHead;
|
|
|
|
/// Next item in the list of all console types.
|
|
ConsoleBaseType *mListNext;
|
|
|
|
/// Destructor is private to avoid people mucking up the list.
|
|
~ConsoleBaseType();
|
|
|
|
S32 mTypeID;
|
|
dsize_t mTypeSize;
|
|
const char *mTypeName;
|
|
const char *mInspectorFieldType;
|
|
|
|
public:
|
|
|
|
/// @name cbt_list List Interface
|
|
///
|
|
/// Interface for accessing/traversing the list of types.
|
|
|
|
/// Get the head of the list.
|
|
static ConsoleBaseType *getListHead();
|
|
|
|
/// Get the item that follows this item in the list.
|
|
ConsoleBaseType *getListNext() const
|
|
{
|
|
return mListNext;
|
|
}
|
|
|
|
/// Called once to initialize the console type system.
|
|
static void initialize();
|
|
|
|
/// Call me to get a pointer to a type's info.
|
|
static ConsoleBaseType *getType(const S32 typeID);
|
|
|
|
/// @}
|
|
|
|
/// The constructor is responsible for linking an element into the
|
|
/// master list, registering the type ID, etc.
|
|
ConsoleBaseType(const S32 size, S32 *idPtr, const char *aTypeName);
|
|
|
|
const S32 getTypeID() const { return mTypeID; }
|
|
const S32 getTypeSize() const { return mTypeSize; }
|
|
const char *getTypeName() const { return mTypeName; }
|
|
|
|
void setInspectorFieldType(const char *type) { mInspectorFieldType = type; }
|
|
const char *getInspectorFieldType() { return mInspectorFieldType; }
|
|
|
|
virtual void setData(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag)=0;
|
|
virtual const char *getData(void *dptr, EnumTable *tbl, BitSet32 flag )=0;
|
|
virtual const char *getTypeClassName()=0;
|
|
virtual const bool isDatablock() { return false; };
|
|
};
|
|
|
|
#define DefineConsoleType( type ) extern S32 type;
|
|
|
|
#define ConsoleType( typeName, type, size ) \
|
|
class ConsoleType##type : public ConsoleBaseType \
|
|
{ \
|
|
public: \
|
|
ConsoleType##type (const S32 aSize, S32 *idPtr, const char *aTypeName) : ConsoleBaseType(aSize, idPtr, aTypeName) { } \
|
|
virtual void setData(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag); \
|
|
virtual const char *getData(void *dptr, EnumTable *tbl, BitSet32 flag ); \
|
|
virtual const char *getTypeClassName() { return #typeName ; } \
|
|
}; \
|
|
S32 type = -1; \
|
|
ConsoleType##type gConsoleType##type##Instance(size,&type,#type); \
|
|
|
|
#define ConsoleSetType( type ) \
|
|
void ConsoleType##type::setData(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag)
|
|
|
|
#define ConsoleGetType( type ) \
|
|
const char *ConsoleType##type::getData(void *dptr, EnumTable *tbl, BitSet32 flag )
|
|
|
|
#define DatablockConsoleType( typeName, type, size, className ) \
|
|
class ConsoleType##type : public ConsoleBaseType \
|
|
{ \
|
|
public: \
|
|
ConsoleType##type (const S32 aSize, S32 *idPtr, const char *aTypeName) : ConsoleBaseType(aSize, idPtr, aTypeName) { } \
|
|
virtual void setData(void *dptr, S32 argc, const char **argv, EnumTable *tbl, BitSet32 flag); \
|
|
virtual const char *getData(void *dptr, EnumTable *tbl, BitSet32 flag ); \
|
|
virtual const char *getTypeClassName() { return #className; }; \
|
|
virtual const bool isDatablock() { return true; }; \
|
|
}; \
|
|
S32 type = -1; \
|
|
ConsoleType##type gConsoleType##type##Instance(size,&type,#type); \
|
|
|
|
|
|
#endif
|