Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
	}
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
	}
}