コード例 #1
0
ファイル: MMeshTools.cpp プロジェクト: UPO33/Maratis-4
void animateTextures(MMesh * mesh, MTexturesAnim * texturesAnim, float t)
{
	MTextureAnim * texAnim = texturesAnim->getTexturesAnim();

	float rotation;
	MVector2 translate;
	MVector2 scale;

	unsigned int tex;
	unsigned int texSize = texturesAnim->getTexturesAnimNumber();
	for (tex = 0; tex < texSize; tex++)
	{
		MTexture * texture = mesh->getTexture(tex);
		
		// rotation
		if(animateFloat(texAnim->getRotationKeys(), texAnim->getRotationKeysNumber(), t, &rotation))
			texture->setTexRotate(rotation);

		// translate
		if(animateVector2(texAnim->getTranslateKeys(), texAnim->getTranslateKeysNumber(), t, &translate))
			texture->setTexTranslate(translate);

		// scale
		if(animateVector2(texAnim->getScaleKeys(), texAnim->getScaleKeysNumber(), t, &scale))
			texture->setTexScale(scale);

		texAnim++;
	}
}
コード例 #2
0
ファイル: MMeshBin.cpp プロジェクト: Keedu/maratis
// Textures anim bin export
bool exportTexturesAnimBin(const char * filename, MTexturesAnim * anim)
{
	int version = 1;
	
	
	// create file
	MFile * file = M_fopen(filename, "wb");
	if(! file)
	{
		printf("Error : can't create file %s\n", filename);
		return false;
	}
	
	
	// header
	M_fwrite(M_TA_HEADER, sizeof(char), 8, file);
	
	// version
	M_fwrite(&version, sizeof(int), 1, file);
	
	
	// textures
	unsigned int t, texturesAnimNumber = anim->getTexturesAnimNumber();
	MTextureAnim * texturesAnim = anim->getTexturesAnim();
	
	M_fwrite(&texturesAnimNumber, sizeof(int), 1, file);
	for(t=0; t<texturesAnimNumber; t++)
	{
		MTextureAnim * texAnim = &(texturesAnim[t]);
		
		unsigned int translateKeysNumber = texAnim->getTranslateKeysNumber();
		unsigned int scaleKeysNumber = texAnim->getScaleKeysNumber();
		unsigned int rotationKeysNumber = texAnim->getRotationKeysNumber();
		
		MKey * translateKeys = texAnim->getTranslateKeys();
		MKey * scaleKeys = texAnim->getScaleKeys();
		MKey * rotationKeys = texAnim->getRotationKeys();
		
		writeKeys(file, translateKeys, M_VARIABLE_VEC2, translateKeysNumber);
		writeKeys(file, scaleKeys, M_VARIABLE_VEC2, scaleKeysNumber);
		writeKeys(file, rotationKeys, M_VARIABLE_FLOAT, rotationKeysNumber);
	}
	
	
	M_fclose(file);
	return true;	
}
コード例 #3
0
ファイル: MMeshLoad.cpp プロジェクト: Keedu/maratis
bool xmlTextureAnimLoad(const char * filename, void * data)
{
	TiXmlDocument doc(filename);
	if(! doc.LoadFile())
		return false;

	TiXmlHandle hDoc(&doc);
	TiXmlElement * pRootNode;
	TiXmlHandle hRoot(0);

	// Maratis
	pRootNode = hDoc.FirstChildElement().Element();
	if(! pRootNode)
		return false;

	if(strcmp(pRootNode->Value(), "Maratis") != 0)
		return false;

	hRoot = TiXmlHandle(pRootNode);

	// TextureAnim
	TiXmlElement * textureAnimNode = pRootNode->FirstChildElement("TextureAnim");
	if(! textureAnimNode)
		return false;

	unsigned int texturesAnimNumber = 0;
	textureAnimNode->QueryUIntAttribute("num", &texturesAnimNumber);
	if(texturesAnimNumber == 0)
		return false;

	// create textures anim
	MTexturesAnim * texturesAnim = (MTexturesAnim *)data;
	MTextureAnim * texAnims = texturesAnim->allocTexturesAnim(texturesAnimNumber);

	// Texture
	TiXmlElement * textureNode = textureAnimNode->FirstChildElement("Texture");
	for(textureNode; textureNode; textureNode=textureNode->NextSiblingElement("Texture"))
	{
		// translate
		TiXmlElement * translateNode = textureNode->FirstChildElement("translate");
		if(translateNode)
		{
			unsigned int kSize = 0;
			translateNode->QueryUIntAttribute("num", &kSize);
			MKey * keys = texAnims->allocTranslateKeys(kSize);
			readVector2Keys(translateNode, keys);
		}

		// scale
		TiXmlElement * scaleNode = textureNode->FirstChildElement("scale");
		if(scaleNode)
		{
			unsigned int kSize = 0;
			scaleNode->QueryUIntAttribute("num", &kSize);
			MKey * keys = texAnims->allocScaleKeys(kSize);
			readVector2Keys(scaleNode, keys);
		}

		// rotate
		TiXmlElement * rotateNode = textureNode->FirstChildElement("rotate");
		if(rotateNode)
		{
			unsigned int kSize = 0;
			rotateNode->QueryUIntAttribute("num", &kSize);
			MKey * keys = texAnims->allocRotationKeys(kSize);
			readFloatKeys(rotateNode, keys);
		}

		texAnims++;
	}

	return true;
}