95 lines
2.7 KiB
C++
95 lines
2.7 KiB
C++
![]() |
|
||
|
#include "script_save_stack.h"
|
||
|
|
||
|
|
||
|
// Game headers
|
||
|
#include "SaveLoad/savegame_channel.h"
|
||
|
|
||
|
// **************************************** SaveGameDataBlock - Script - CScriptSaveStack ************************************
|
||
|
|
||
|
CScriptSaveStack::CScriptSaveStack()
|
||
|
{
|
||
|
m_nCurrentStackLevel = -1;
|
||
|
}
|
||
|
|
||
|
void CScriptSaveStack::Shutdown()
|
||
|
{
|
||
|
for (int loop = 0; loop < MAX_DEPTH_OF_STACK_OF_STRUCTS; loop++)
|
||
|
{
|
||
|
m_StackOfStructs[loop].m_StartAddressOfStruct = 0;
|
||
|
m_StackOfStructs[loop].m_EndAddressOfStruct = 0;
|
||
|
m_StackOfStructs[loop].m_NameOfInstanceOfStruct.Clear();
|
||
|
m_StackOfStructs[loop].m_ArrayIndexOfStruct = -1;
|
||
|
}
|
||
|
|
||
|
m_nCurrentStackLevel = -1;
|
||
|
}
|
||
|
|
||
|
void CScriptSaveStack::Push(u8* StartAddress, u8* EndAddress, const char *pNameOfInstance, int ArrayIndex)
|
||
|
{
|
||
|
if (savegameVerifyf(m_nCurrentStackLevel < (MAX_DEPTH_OF_STACK_OF_STRUCTS-1), "CScriptSaveStack::Push - no space left on the stack for %s", pNameOfInstance))
|
||
|
{
|
||
|
m_nCurrentStackLevel++;
|
||
|
|
||
|
m_StackOfStructs[m_nCurrentStackLevel].m_StartAddressOfStruct = StartAddress;
|
||
|
m_StackOfStructs[m_nCurrentStackLevel].m_EndAddressOfStruct = EndAddress;
|
||
|
m_StackOfStructs[m_nCurrentStackLevel].m_NameOfInstanceOfStruct = pNameOfInstance;
|
||
|
m_StackOfStructs[m_nCurrentStackLevel].m_ArrayIndexOfStruct = ArrayIndex;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CScriptSaveStack::Pop()
|
||
|
{
|
||
|
if (savegameVerifyf(m_nCurrentStackLevel >= 0, "CScriptSaveStack::Pop - stack is already empty"))
|
||
|
{
|
||
|
m_StackOfStructs[m_nCurrentStackLevel].m_NameOfInstanceOfStruct.Clear();
|
||
|
m_nCurrentStackLevel--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int CScriptSaveStack::GetArrayIndex(int StackLevel) const
|
||
|
{
|
||
|
if (savegameVerifyf( (StackLevel >= 0) && (StackLevel <= m_nCurrentStackLevel), "CScriptSaveStack::GetArrayIndex - stack level is invalid"))
|
||
|
{
|
||
|
return m_StackOfStructs[StackLevel].m_ArrayIndexOfStruct;
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
u8* CScriptSaveStack::GetStartAddress(int StackLevel) const
|
||
|
{
|
||
|
if (savegameVerifyf( (StackLevel >= 0) && (StackLevel <= m_nCurrentStackLevel), "CScriptSaveStack::GetStartAddress - stack level is invalid"))
|
||
|
{
|
||
|
return m_StackOfStructs[StackLevel].m_StartAddressOfStruct;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
u8* CScriptSaveStack::GetEndAddress(int StackLevel) const
|
||
|
{
|
||
|
if (savegameVerifyf( (StackLevel >= 0) && (StackLevel <= m_nCurrentStackLevel), "CScriptSaveStack::GetEndAddress - stack level is invalid"))
|
||
|
{
|
||
|
return m_StackOfStructs[StackLevel].m_EndAddressOfStruct;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
const atString &CScriptSaveStack::GetNameOfInstance(int StackLevel) const
|
||
|
{
|
||
|
static atString ErrorString;
|
||
|
if (savegameVerifyf( (StackLevel >= 0) && (StackLevel <= m_nCurrentStackLevel), "CScriptSaveStack::GetNameOfInstance - stack level is invalid"))
|
||
|
{
|
||
|
return m_StackOfStructs[StackLevel].m_NameOfInstanceOfStruct;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ErrorString = "Unknown";
|
||
|
return ErrorString;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|