示例#1
0
void				CDBEntry::unserialize(void)
{
	CDataReader *pDataReader = CDataReader::getInstance();

	uint32 uiEntryNameLength = pDataReader->readUint32();
	m_strEntryName = string((char*)pDataReader->readCString(uiEntryNameLength));
	m_uiEntrySize = pDataReader->readUint32();
	m_uiEntryDataCRC = pDataReader->readUint32();
	m_uiEntryCreationDate = pDataReader->readUint32();
	m_bHasIssue = (pDataReader->readUint8() & 1) == 1;
}
示例#2
0
void				CDATPathFormat::unserializeDefault(void)
{
	CDataReader *pDataReader = CDataReader::getInstance();

	m_uiFileIndex = 0;// uiAreaId;
	uint32 uiSeek = 0;
	uint32 uiSize;

	CDATEntry_Paths_Default_Header *pHeader1 = pDataReader->readStruct<CDATEntry_Paths_Default_Header>();
	m_header.m_ePathsFormat = DAT_PATH_DEFAULT;
	m_header.m_uiPathNodeCount = pHeader1->m_uiPathNodeCount;
	m_header.m_uiVehicleNodeCount = pHeader1->m_uiVehicleNodeCount;
	m_header.m_uiPedNodeCount = pHeader1->m_uiPedNodeCount;
	m_header.m_uiNaviNodeCount = pHeader1->m_uiNaviNodeCount;
	m_header.m_uiLinkCount = pHeader1->m_uiLinkCount;
	uiSize = 20;
	uiSeek += uiSize;

	m_vecPathNodes.resize(m_header.m_uiPathNodeCount);
	m_vecNaviNodes.resize(m_header.m_uiNaviNodeCount);
	m_vecLinks.resize(m_header.m_uiLinkCount);

	CDATEntry_Paths_Default_PathNode *pPathNodes = new CDATEntry_Paths_Default_PathNode[m_header.m_uiPathNodeCount];
	CDATEntry_Paths_Default_NaviNode *pNaviNodes = new CDATEntry_Paths_Default_NaviNode[m_header.m_uiNaviNodeCount];
	CDATEntry_Paths_Default_Link *pLinks = new CDATEntry_Paths_Default_Link[m_header.m_uiLinkCount];
	CDATEntry_Paths_Default_NaviLink *pNaviLinks = new CDATEntry_Paths_Default_NaviLink[m_header.m_uiLinkCount];
	CDATEntry_Paths_Default_LinkLength *pLinkLengths = new CDATEntry_Paths_Default_LinkLength[m_header.m_uiLinkCount];

	uiSize = m_header.m_uiPathNodeCount * 28;
	memcpy(pPathNodes, pDataReader->readCString(uiSize), uiSize);
	uiSeek += uiSize;

	uiSize = m_header.m_uiNaviNodeCount * 14;
	memcpy(pNaviNodes, pDataReader->readCString(uiSize), uiSize);
	uiSeek += uiSize;

	uiSize = m_header.m_uiLinkCount * 4;
	memcpy(pLinks, pDataReader->readCString(uiSize), uiSize);
	uiSeek += uiSize;
	uiSeek += 768;

	uiSize = m_header.m_uiLinkCount * 2;
	memcpy(pNaviLinks, pDataReader->readCString(uiSize), uiSize);
	uiSeek += uiSize;

	uiSize = m_header.m_uiLinkCount * 1;
	memcpy(pLinkLengths, pDataReader->readCString(uiSize), uiSize);
	uiSeek += uiSize;

	for (uint32 i = 0, j = m_header.m_uiPathNodeCount; i < j; i++)
	{
		CDATEntry_Paths_Default_PathNode &pPathNode_Default = *(pPathNodes + i);
		CDATEntry_Paths_General_PathNode &pPathNode_General = m_vecPathNodes[i];
		pPathNode_General.m_vecPosition.x = pPathNode_Default.m_iPosition[0];
		pPathNode_General.m_vecPosition.y = pPathNode_Default.m_iPosition[1];
		pPathNode_General.m_vecPosition.z = pPathNode_Default.m_iPosition[2];
		pPathNode_General.m_wLinkId = pPathNode_Default.m_usLinkId;
		pPathNode_General.m_wNodeId = pPathNode_Default.m_usNodeId;
		pPathNode_General.m_wAreaId = pPathNode_Default.m_usAreaId;
		pPathNode_General.m_ucPathWidth = pPathNode_Default.m_ucPathWidth;
		pPathNode_General.m_ucNodeType = pPathNode_Default.m_ucNodeType;
		pPathNode_General.m_uiFlags = pPathNode_Default.m_uiFlags;
	}
	for (uint32 i = 0, j = m_header.m_uiNaviNodeCount; i < j; i++)
	{
		CDATEntry_Paths_Default_NaviNode &pNaviNode_Default = *(pNaviNodes + i);
		CDATEntry_Paths_General_NaviNode &pNaviNode_General = m_vecNaviNodes[i];
		pNaviNode_General.m_iPosition[0] = pNaviNode_Default.m_iPosition[0];
		pNaviNode_General.m_iPosition[1] = pNaviNode_Default.m_iPosition[1];
		pNaviNode_General.m_ucDirection[0] = pNaviNode_Default.m_ucDirection[0];
		pNaviNode_General.m_ucDirection[1] = pNaviNode_Default.m_ucDirection[1];
		pNaviNode_General.m_uiFlags = pNaviNode_Default.m_uiFlags;
		pNaviNode_General.m_usTargetNode_NodeId = pNaviNode_Default.m_usNodeId;
		pNaviNode_General.m_usTargetNode_AreaId = pNaviNode_Default.m_usAreaId;
	}
	for (uint32 i = 0, j = m_header.m_uiLinkCount; i < j; i++)
	{
		CDATEntry_Paths_Default_Link			&pLink_Default = *(pLinks + i);
		CDATEntry_Paths_Default_NaviLink		&pNaviLink_Default = *(pNaviLinks + i);
		CDATEntry_Paths_Default_LinkLength		&pLinkLength_Default = *(pLinkLengths + i);
		CDATEntry_Paths_General_Link			&pLink_General = m_vecLinks[i];

		pLink_General.m_usAreaId = pLink_Default.m_usAreaId;
		pLink_General.m_usNodeId = pLink_Default.m_usNodeId;
		pLink_General.m_usNaviNodeId = pNaviLink_Default.m_usData & 0x3FF; // lower 10 bits
		pLink_General.m_usNaviAreaId = (pNaviLink_Default.m_usData >> 10) & 0x3F; // upper 6 bits
		pLink_General.m_ucLength = pLinkLength_Default.m_ucLength;
	}

	delete[] pHeader1;

	delete[] pPathNodes;
	delete[] pNaviNodes;
	delete[] pLinks;
	delete[] pNaviLinks;
	delete[] pLinkLengths;
}