reman3/Rayman_X/cpa/tempgrp/TSN/Src/TSNSwInf.cpp

146 lines
4.0 KiB
C++

#include "StdAfx.h"
#include "LST.hpp"
#include "SCR.h"
#include "SIF.h"
#include "SifLoadS.h"
#include "ITF/cpasaveo.hpp" // For TSN_Event&SIF_InfoValue class definition
#include "acp_base.h" // for CPA_Tooldllb class definition
#include "ITF/tooldllb.hpp" // for CPA_Tooldllb class definition
#include "SNinterf.hpp"
class SIF_InfoValue: public CPA_SaveObject
{
public:
// virtual CString fn_csGetReferencedSectionName (void);
SIF_InfoValue::SIF_InfoValue(
CString _csFileName,CString _csTypeName,CString _csValueName);
virtual void* GetData(void) { return (void*)m_lValue; };
virtual long GetDataType(void) { return -1;}
long m_lValue;
static CPA_List<SIF_InfoValue> m_sObjectList;
static void DeleteAllValues(void);
};
CPA_List<SIF_InfoValue> SIF_InfoValue::m_sObjectList;
SIF_InfoValue::SIF_InfoValue(CString _csFileName,CString _csTypeName,CString _csValueName):
CPA_SaveObject( g_poSNDEDITInterface,
"SIF_"+_csTypeName,
E_ss_NoSave,
NULL, // pOwner
TRUE, // bAvailaible
"",// p_szDataPath
NULL) // pSaveCallback
{
tdeMissingCriteria eAns;
CString csSectionName,csTemp;
// Create and set object name:
eAns=fn_eRename("SIF_"+_csValueName);
if (eAns!=E_mc_None)
{
csTemp.Format("Sound Information Value Creation error: Name SIF_%s incorrect(already exists or syntax incorrect)!",_csValueName);
AfxMessageBox(csTemp);
}
// Create and set section name:
csSectionName=_csFileName+"^Sif_Type:"+_csTypeName+"^Sif_Value:"+_csValueName;
SetReferencedSectionName(csSectionName);
m_lValue=-1;
}
void SIF_InfoValue::DeleteAllValues(void)
{
SIF_InfoValue* pValue;
POSITION Pos=NULL;
while (pValue=m_sObjectList.GetNextElement(Pos)) delete pValue;
}
BOOL TSN_fn_bInitSoundInfos(const char* _szFileName)
{
static BOOL bFirstInit=TRUE;
int iInfoType;
char szCompleteName[256],szFileName[256],szActionName[256],szIdName[256];
CString csSectionName,csValueName;
unsigned int uiPos;
SCR_tdst_Link_Value *p_stValue;
unsigned long ulValue;
char* pszSectionName;
SCR_tdst_Link_Table *pTable;
SIF_InfoValue *pInfoValue;
SCR_fnp_st_RdL0_AnalyseSection((char*)_szFileName, SCR_CDF_uw_Anl_Normal);
// Scan each link table:
for (iInfoType=0;iInfoType<SIF_fn_iGetSoundInfosCount();iInfoType++)
{
pTable=&SIF_fn_pstGetSoundInfosDescriptor(iInfoType)->m_Table;
// Get first element of array :
uiPos = 0;
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value,uiPos,p_stValue,
SCR_M_st_Link_GetDynamicArray(pTable));
while(p_stValue) // p_sValue is NULL at the end of the array
{
// Test current retrieved value:
if(SCR_M_e_Link_GetState(p_stValue) != SCR_ELS_Link_Initialized) continue;
// Get section complete name & value:
ulValue=SCR_M_ul_Link_GetValue(p_stValue);
pszSectionName=SCR_M_p_sz_Link_GetKey(p_stValue);
// Transform "ed_main.sif^SIF_Type:Material^SIF_Value:Wood" into:
// File:ed_main.sif / Type: Material /Value: Wood
// Split the section name, first pass:
SCR_fn_v_RdL0_SplitSectionName(pszSectionName,
szFileName,szActionName,szIdName);
// With the example: szFileName="ed_main.sif^SIF_Type:Material",
// szActionName="SIF_Value",szIdName="Wood".
// Save the value name, & second pass:
csValueName=szIdName;
strcpy(szCompleteName,szFileName);
SCR_fn_v_RdL0_SplitSectionName(szCompleteName,
szFileName,szActionName,szIdName);
// With the example: szFileName="ed_main.sif",
// szActionName="SIF_Type",szIdName="Material".
// Create an InfoValue object(Value,Type,File names):
pInfoValue= new SIF_InfoValue(szFileName,szIdName,csValueName);
// Set the handle to the proper value(value init need not call fn_vSetValue()):
pInfoValue->m_lValue=ulValue;
// Get next element :
uiPos++;
SCR_M_DyAr_GetNextElement(SCR_tdst_Link_Value,uiPos,p_stValue,
SCR_M_st_Link_GetDynamicArray(pTable));
}
}
return TRUE;
}
BOOL TSN_fn_bDesInitSoundInfos(void)
{
SIF_InfoValue::DeleteAllValues();
return TRUE;
}