Ejemplo n.º 1
0
CObject* CEntitySerializer::LoadObject(const std::vector<unsigned char>& data, long mark)
{
	if (!data.size() ) 
	{
		return NULL;
	}
	assert(data.size() ) ;
	// load magic
	long magic;
	assert_input(data, mark, sizeof(long));
	memcpy(&magic , (char*)&data[mark], sizeof(long));
	if (magic == 2 ) 
	{
		return LoadObjectTree(data, mark);
	}
	else
	{
		CMatrix m_Pos;
		std::string name;
		
		
		float globalScale;
		long m =mark + sizeof(long);
		assert_input(data, m, sizeof(CMatrix));
		memcpy(&m_Pos, (char*) &data[m] , sizeof(CMatrix));
		m+= sizeof(CMatrix);

		pop_string(data, name, m);
		m+= name.size() + sizeof(long);

		assert_input(data, m,sizeof(float));
		memcpy(&globalScale , (char*)&data[m], sizeof(float));

		m+=sizeof(float);

		CEntity * ent = LoadEntity(data, m, magic ==1);

		std::vector<CObject*> children;
		CMatrix mat;
		mat = mat.ConstructScaling(CVector(globalScale,globalScale,globalScale));
		CObject* pObject = new CObject("", true, mat,children, ent);
		return pObject;
	}
	return NULL;	
}