const char* CLuaClassDefs::GetObjectClass ( void* pObject ) { if ( CElement* pElement = UserDataCast < CElement > ( ( CElement* ) NULL, pObject, NULL ) ) return GetElementClass ( pElement ); else if ( CResource* pResource = UserDataCast < CResource > ( ( CResource* ) NULL, pObject, NULL ) ) return GetResourceClass ( pResource ); else if ( CXMLNode* pNode = UserDataCast < CXMLNode > ( ( CXMLNode* ) NULL, pObject, NULL ) ) return GetXmlNodeClass ( pNode ); else if ( CLuaTimer* pTimer = UserDataCast < CLuaTimer > ( ( CLuaTimer* ) NULL, pObject, NULL ) ) return GetTimerClass ( pTimer ); return NULL; }
const char* CLuaClassDefs::GetObjectClass ( void* pObject ) { if ( CClientEntity* pEntity = UserDataCast < CClientEntity > ( ( CClientEntity* ) NULL, pObject, NULL ) ) return GetEntityClass ( pEntity ); else if ( CResource* pResource = UserDataCast < CResource > ( ( CResource* ) NULL, pObject, NULL ) ) return GetResourceClass ( pResource ); else if ( CXMLNode* pNode = UserDataCast < CXMLNode > ( ( CXMLNode* ) NULL, pObject, NULL ) ) return GetXmlNodeClass ( pNode ); else if ( CLuaTimer* pTimer = UserDataCast < CLuaTimer > ( ( CLuaTimer* ) NULL, pObject, NULL ) ) return GetTimerClass ( pTimer ); return NULL; }
void CDataSourceKey::AddChildren (CTreeViewCtrl &tv, HTREEITEM hParent, DataElement *pElement) { // // Based on the type // switch (pElement ->usType) { case Type_Root: { int nBifCount = m_pKeyFile ->GetBifCount (); for (int i = 0; i < nBifCount; i++) { AddToTV (tv, hParent, &m_pasElements [i + m_nFirstBifElement]); } } break; case Type_Bif: { int n = m_nFirstResClassElement + (pElement ->ulIndex1 * ResClass__Last); for (int i = ResClass__First; i < ResClass__Last; i++) { if (m_pasElements [n + i] .usType == TypeResourceClass) AddToTV (tv, hParent, &m_pasElements [n + i]); } } break; case TypeResourceClass: { int nBifIndex = pElement ->ulIndex1; int nResCount = m_pKeyFile ->GetResCount (); for (int i = 0; i < nResCount; i++) { if (nBifIndex != m_pKeyFile ->GetBifIndexFromRes (&m_pasRes [i])) continue; if (pElement ->usIndex2 != GetResourceClass ( (NwnResType) m_pasRes [i] .usType)) continue; AddToTV (tv, hParent, &m_pasElements [i]); } } break; case TypeResourceource: break; } }
int CDataSourceKey::Export (DataElement *pElement, const char *pszFileName) { // // Based on the type // int nCount = 0; switch (pElement ->usType) { case Type_Root: break; case Type_Bif: { CString strDir (pszFileName); int nBifIndex = pElement ->ulIndex1; int nResCount = m_pKeyFile ->GetResCount (); for (int i = 0; i < nResCount; i++) { if (nBifIndex != m_pKeyFile -> GetBifIndexFromRes (&m_pasRes [i])) continue; CData *pData = LoadRes (&m_pasElements [i]); if (pData) { char szName [_MAX_PATH]; GetResourceText (&m_pasElements [i], szName, _countof (szName)); CString str (strDir + szName); if (pData ->SaveToFile (str)) nCount++; pData ->AddRef (); pData ->Release (); } } } break; case TypeResourceClass: { CString strDir (pszFileName); int nBifIndex = pElement ->ulIndex1; int nResCount = m_pKeyFile ->GetResCount (); for (int i = 0; i < nResCount; i++) { if (nBifIndex != m_pKeyFile -> GetBifIndexFromRes (&m_pasRes [i])) continue; if (pElement ->usIndex2 != GetResourceClass ( (NwnResType) m_pasRes [i] .usType)) continue; CData *pData = LoadRes (&m_pasElements [i]); if (pData) { char szName [_MAX_PATH]; GetResourceText (&m_pasElements [i], szName, _countof (szName)); CString str (strDir + szName); if (pData ->SaveToFile (str)) nCount++; pData ->AddRef (); pData ->Release (); } } } break; case TypeResourceource: { CData *pData = LoadRes (pElement); if (pData) { if (pData ->SaveToFile (pszFileName)) nCount++; pData ->AddRef (); pData ->Release (); } } break; } return nCount; }
void CDataSourceKey::Initialize () { // // Save the list of resources // m_pasRes = m_pKeyFile ->GetRes (0); // // Compute the number of elements and allocate // int nResCount = m_pKeyFile ->GetResCount (); int nBifCount = m_pKeyFile ->GetBifCount (); int nElementCount = 1 + (nBifCount * (ResClass__Last + 1)) + nResCount; m_pasElements = new DataElement [nElementCount]; // // Initialize the resources // for (int i = 0; i < nResCount; i++) { m_pasElements [i] .pDataSource = this; m_pasElements [i] .usType = TypeResourceource; m_pasElements [i] .usIndex2 = 0; m_pasElements [i] .ulIndex1 = (UINT32) i; } // // Initialize the root // m_nRootElement = nResCount; m_pasElements [m_nRootElement] .pDataSource = this; m_pasElements [m_nRootElement] .usType = Type_Root; m_pasElements [m_nRootElement] .usIndex2 = 0; m_pasElements [m_nRootElement] .ulIndex1 = 0; // // Initialize the root bif entries // m_nFirstBifElement = m_nRootElement + 1; for (int i = 0; i < nBifCount; i++) { m_pasElements [m_nFirstBifElement + i] .pDataSource = this; m_pasElements [m_nFirstBifElement + i] .usType = Type_Bif; m_pasElements [m_nFirstBifElement + i] .usIndex2 = 0; m_pasElements [m_nFirstBifElement + i] .ulIndex1 = (UINT32) i; } // // Initialize the bif's resclass entries // m_nFirstResClassElement = m_nFirstBifElement + nBifCount; int n = m_nFirstResClassElement; for (int i = 0; i < nBifCount; i++) { for (int j = 0; j < ResClass__Last; j++) { m_pasElements [n] .pDataSource = this; m_pasElements [n] .usType = Type_Root; //adjusted later m_pasElements [n] .usIndex2 = (UINT16) j; m_pasElements [n] .ulIndex1 = (UINT32) i; n++; } } // // Loop through the resources and determine which res classes // are valid for each bif // for (int i = 0; i < nResCount; i++) { int nBifIndex = m_pKeyFile ->GetBifIndexFromRes (&m_pasRes [i]); ResClass nTI = GetResourceClass ((NwnResType) m_pasRes [i] .usType); n = m_nFirstResClassElement + (nBifIndex * ResClass__Last) + nTI; m_pasElements [n] .usType = TypeResourceClass; } }