tge/engine/console/dynamicTypes.cc
2025-02-17 23:17:30 -06:00

72 lines
2.2 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "console/dynamicTypes.h"
// Init the globals.
ConsoleBaseType *ConsoleBaseType::smListHead = NULL;
S32 ConsoleBaseType::smConsoleTypeCount = 0;
// And, we also privately store the types lookup table.
VectorPtr<ConsoleBaseType*> gConsoleTypeTable;
ConsoleBaseType *ConsoleBaseType::getListHead()
{
return smListHead;
}
void ConsoleBaseType::initialize()
{
// Prep and empty the vector.
gConsoleTypeTable.setSize(smConsoleTypeCount+1);
dMemset(gConsoleTypeTable.address(), 0, sizeof(ConsoleBaseType*) * gConsoleTypeTable.size());
// Walk the list and register each one with the console system.
ConsoleBaseType *walk = getListHead();
while(walk)
{
// Store a pointer to the type in the appropriate slot.
const S32 id = walk->getTypeID();
AssertFatal(gConsoleTypeTable[id]==NULL, "ConsoleBaseType::initialize - encountered a table slot that contained something!");
gConsoleTypeTable[id] = walk;
// Advance down the list...
walk = walk->getListNext();
}
// Alright, we're all done here; we can now achieve fast lookups by ID.
}
ConsoleBaseType *ConsoleBaseType::getType(const S32 typeID)
{
return gConsoleTypeTable[typeID];
}
//-------------------------------------------------------------------------
ConsoleBaseType::ConsoleBaseType(const S32 size, S32 *idPtr, const char *aTypeName)
{
// General initialization.
mInspectorFieldType = NULL;
// Store general info.
mTypeSize = size;
mTypeName = aTypeName;
// Get our type ID and store it.
mTypeID = smConsoleTypeCount++;
*idPtr = mTypeID;
// Link ourselves into the list.
mListNext = smListHead;
smListHead = this;
// Alright, all done for now. Console initialization time code
// takes us from having a list of general info and classes to
// a fully initialized type table.
}
ConsoleBaseType::~ConsoleBaseType()
{
// Nothing to do for now; we could unlink ourselves from the list, but why?
}