Example #1
0
void ModelEditor::newColors(ColorHelper help) {
	_Tn("newColors()");
	int newSize = FileSize + sizeof(ModelColorDef) * help.nColors;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	SetStructure();
	header_m->ofsColors = FileSize;
	header_m->nColors = help.nColors;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < help.nColors; i++) {
		writeAnimation(&(color_m[i].color), help.color[i]);
		writeAnimation(&(color_m[i].opacity), help.opacity[i]);
	}
	FillLine();
}
Example #2
0
void ModelEditor::newBones(BoneHelper help) {
	_Tn("newBones");
	int newSize = FileSize + sizeof(ModelBoneDef) * help.nBones;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	SetStructure();
	header_m->ofsBones = FileSize;
	header_m->nBones = help.nBones;
	memcpy(f + FileSize, help.Bones, help.nBones * sizeof(ModelBoneDef));
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < header_m->nBones; i++) {
		printf("Processing Bone %d\n", i);
		writeAnimation(&(bone_m[i].rotation), help.rotation[i]);
		writeAnimation(&(bone_m[i].translation), help.translation[i]);
		writeAnimation(&(bone_m[i].scaling), help.scaling[i]);
	}
}
Example #3
0
void ModelEditor::newTexAnim(TexAnimHelper help) {
	_Tn("newTexAnim");
	int newSize = FileSize + sizeof(ModelTexAnimDef) * help.nTexAnims;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	memcpy(f + FileSize, help.TexAnims, sizeof(ModelTexAnimDef)
			* help.nTexAnims);
	SetStructure();
	header_m->ofsTexAnims = FileSize;
	header_m->nTexAnims = help.nTexAnims;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < header_m->nTexAnims; i++) {
		writeAnimation(&(texanim_m[i].trans), help.trans[i]);
		writeAnimation(&(texanim_m[i].rot), help.rot[i]);
		writeAnimation(&(texanim_m[i].scale), help.scaling[i]);
	}
	FillLine();

}
Example #4
0
void ModelEditor::newCameras(CamHelper help) {
	_Tn("newCameras");
	int newSize = FileSize + sizeof(ModelCameraDef) * help.nCameras;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	memcpy(f + FileSize, help.camera, sizeof(ModelCameraDef) * help.nCameras);
	SetStructure();
	header_m->ofsCameras = FileSize;
	header_m->nCameras = help.nCameras;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < header_m->nCameras; i++) {
		writeAnimation(&(cam_m[i].rot), help.rotation[i]);
		writeAnimation(&(cam_m[i].transTarget), help.translationtar[i]);
		writeAnimation(&(cam_m[i].transPos), help.translationpos[i]);
	}
	FillLine();
	//I only know about two different cameras...
	int nCamLookup = 2;
	newSize = FileSize + sizeof(short) * nCamLookup;
	n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	SetStructure();
	header_m->ofsCameraLookup = FileSize;
	header_m->nCameraLookup = nCamLookup;
	SetStructure();
	for (int i = 0; i < header_m->nCameraLookup; i++) {
		for (int j = 0; j < header_m->nCameras; j++) {
			if (cam_m[j].id == i) {
				camlookup_m[i] = j;
				break;
			} else
				camlookup_m[i] = -1;
		}
	}
	FileSize = newSize;
	FillLine();
}
Example #5
0
void ModelEditor::newTransparency(AnimationHelper<short> *help, int nTrans) {
	_Tn("void ModelEditor::newTransparency(AnimationHelper<short> *help,int nTrans)");
	int newSize = FileSize + sizeof(AnimationBlock) * nTrans;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	SetStructure();
	header_m->ofsTransparency = FileSize;
	header_m->nTransparency = nTrans;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < nTrans; i++) {
		writeAnimation(&(trans_m[i].trans), help[i]);
	}
}
    //---------------------------------------------------------------------
    void SkeletonSerializer::exportSkeleton(const Skeleton* pSkeleton, 
		const String& filename, Endian endianMode)
    {
		// Decide on endian mode
		determineEndianness(endianMode);

        String msg;
        mpfFile = fopen(filename.c_str(), "wb");
		if (!mpfFile)
		{
			OGRE_EXCEPT(Exception::ERR_CANNOT_WRITE_TO_FILE,
				"Unable to open file " + filename + " for writing",
				"SkeletonSerializer::exportSkeleton");
		}

        writeFileHeader();

        // Write main skeleton data
        LogManager::getSingleton().logMessage("Exporting bones..");
        writeSkeleton(pSkeleton);
        LogManager::getSingleton().logMessage("Bones exported.");

        // Write all animations
        unsigned short numAnims = pSkeleton->getNumAnimations();
        LogManager::getSingleton().stream()
			<< "Exporting animations, count=" << numAnims;
        for (unsigned short i = 0; i < numAnims; ++i)
        {
            Animation* pAnim = pSkeleton->getAnimation(i);
			LogManager::getSingleton().stream()
				<< "Exporting animation: " << pAnim->getName();
            writeAnimation(pSkeleton, pAnim);
            LogManager::getSingleton().logMessage("Animation exported.");

        }

		// Write links
		Skeleton::LinkedSkeletonAnimSourceIterator linkIt = 
			pSkeleton->getLinkedSkeletonAnimationSourceIterator();
		while(linkIt.hasMoreElements())
		{
			const LinkedSkeletonAnimationSource& link = linkIt.getNext();
			writeSkeletonAnimationLink(pSkeleton, link);
		}

        fclose(mpfFile);

    }
    //---------------------------------------------------------------------
    void SkeletonSerializer::exportSkeleton(const Skeleton* pSkeleton, 
		DataStreamPtr stream, SkeletonVersion ver, Endian endianMode)
    {
		setWorkingVersion(ver);
		// Decide on endian mode
		determineEndianness(endianMode);

        String msg;
        mStream = stream; 
		if (!stream->isWriteable())
		{
			OGRE_EXCEPT(Exception::ERR_CANNOT_WRITE_TO_FILE,
				"Unable to write to stream " + stream->getName(),
				"SkeletonSerializer::exportSkeleton");
		}


        writeFileHeader();

        // Write main skeleton data
        LogManager::getSingleton().logMessage("Exporting bones..");
        writeSkeleton(pSkeleton, ver);
        LogManager::getSingleton().logMessage("Bones exported.");

        // Write all animations
        unsigned short numAnims = pSkeleton->getNumAnimations();
        LogManager::getSingleton().stream()
			<< "Exporting animations, count=" << numAnims;
        for (unsigned short i = 0; i < numAnims; ++i)
        {
            Animation* pAnim = pSkeleton->getAnimation(i);
			LogManager::getSingleton().stream()
				<< "Exporting animation: " << pAnim->getName();
            writeAnimation(pSkeleton, pAnim, ver);
            LogManager::getSingleton().logMessage("Animation exported.");

        }

		// Write links
		Skeleton::LinkedSkeletonAnimSourceIterator linkIt = 
			pSkeleton->getLinkedSkeletonAnimationSourceIterator();
		while(linkIt.hasMoreElements())
		{
			const LinkedSkeletonAnimationSource& link = linkIt.getNext();
			writeSkeletonAnimationLink(pSkeleton, link);
		}       

    }
Example #8
0
std::string SkeletonData::writeAnimations(Joint * j, unsigned int indent){
	std::stringstream json;
	indent++;

	json << writeAnimation(j->translateX, "translateX", indent) << "," << std::endl;
	json << writeAnimation(j->translateY, "translateY", indent) << "," << std::endl;
	json << writeAnimation(j->translateZ, "translateZ", indent) << "," << std::endl;
	json << writeAnimation(j->rotate, "rotate", indent) << "," << std::endl;
	json << writeAnimation(j->scaleX, "scaleX", indent) << "," << std::endl;
	json << writeAnimation(j->scaleY, "scaleY", indent) << "," << std::endl;
	json << writeAnimation(j->scaleZ, "scaleZ", indent) << std::endl;

	return json.str();
}
Example #9
0
void ModelEditor::newLights(LightHelper help){
	_Tn("void ModelEditor::newLights(LightHelper help)");
	int newSize = FileSize + sizeof(ModelLightDef) * help.nLights;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	memcpy(f+FileSize,help.lights,sizeof(ModelLightDef) * help.nLights);
	SetStructure();
	header_m->ofsLights = FileSize;
	header_m->nLights = help.nLights;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < help.nLights; i++) {
		writeAnimation(&(light_m[i].ambColor), help.AmbientColor[i]);
		writeAnimation(&(light_m[i].ambIntensity), help.AmbientIntensity[i]);
		writeAnimation(&(light_m[i].diffcolor), help.DiffuseColor[i]);
		writeAnimation(&(light_m[i].diffintensity), help.DiffuseIntensity[i]);
		writeAnimation(&(light_m[i].attEnd), help.AttenuationEnd[i]);
		writeAnimation(&(light_m[i].attStart), help.AttenuationStart[i]);
		writeAnimation(&(light_m[i].Enabled), help.Enabled[i]);
	}
	FillLine();
}
Example #10
0
void ModelEditor::newRibbons(RibbonHelper help){
	_Tn("void ModelEditor::newRibbons(RibbonHelper help)");
	int newSize = FileSize + sizeof(ModelRibbonEmitterDef) * help.nRibbons;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	memcpy(f+FileSize,help.ribbons,sizeof(ModelRibbonEmitterDef) * help.nRibbons);
	SetStructure();
	header_m->ofsRibbonEmitters = FileSize;
	header_m->nRibbonEmitters = help.nRibbons;
	FileSize = newSize;
	FillLine();
	for (int i = 0; i < help.nRibbons; i++) {
		writeAnimation(&(ribbon_m[i].color), help.Color[i]);
		writeAnimation(&(ribbon_m[i].opacity), help.Opacity[i]);
		writeAnimation(&(ribbon_m[i].above), help.Above[i]);
		writeAnimation(&(ribbon_m[i].below), help.Below[i]);
		writeAnimation(&(ribbon_m[i].enabled), help.Enabled[i]);
		writeAnimation(&(ribbon_m[i].unk1), help.Unk1[i]);
	}
	FillLine();
}
Example #11
0
void ModelEditor::newParticles(ParticleHelper help) {
	_Tn("void ModelEditor::newParticles(ParticleHelper help) ");
	int newSize = FileSize + sizeof(ModelParticleEmitterDef) * help.nParticles;
	char *n = f;
	f = SMemNew(newSize);
	memcpy(f, n, FileSize);
	SetStructure();
	header_m->ofsParticleEmitters = FileSize;
	header_m->nParticleEmitters = help.nParticles;
	memcpy(f + FileSize, help.particles, help.nParticles
			* sizeof(ModelParticleEmitterDef));
	FileSize = newSize;
	FillLine();

	for (int i = 0; i < header_m->nParticleEmitters; i++) {
		writeAnimation(&(part_m[i].Emissionspeed), help.Emissionspeed[i]);
		writeAnimation(&(part_m[i].SpeedVariation), help.SpeedVariation[i]);
		writeAnimation(&(part_m[i].VerticalRange), help.VerticalRange[i]);
		writeAnimation(&(part_m[i].HorizontalRange), help.HorizontalRange[i]);
		writeAnimation(&(part_m[i].Gravity), help.Gravity[i]);
		writeAnimation(&(part_m[i].Lifespan), help.Lifespan[i]);
		writeAnimation(&(part_m[i].EmissionRate), help.EmissionRate[i]);
		writeAnimation(&(part_m[i].EmissionAreaLength),
				help.EmissionAreaLength[i]);
		writeAnimation(&(part_m[i].EmissionAreaWidth),
				help.EmissionAreaWidth[i]);
		writeAnimation(&(part_m[i].Gravity2), help.Gravity2[i]);
		writeAnimation(&(part_m[i].Enabled), help.Enabled[i]);
	}

	//start fake color
	{
		for (int i = 0; i < header_m->nParticleEmitters; i++) {
			part_m[i].colors.nTimes = help.info[i].nColor;
			part_m[i].colors.ofsTimes = FileSize;
			short *time = new short[help.info[i].nColor];
			for (int k = 0; k < help.info[i].nColor; k++) {
				time[k] = help.info[i].Color[k].timestamp;
			}
			writeAnimblockData(time, help.info[i].nColor);
			part_m[i].colors.nKeys = help.info[i].nColor;
			part_m[i].colors.ofsKeys = FileSize;
			Vec3D *val = new Vec3D[help.info[i].nColor];
			for (int k = 0; k < help.info[i].nColor; k++) {
				val[k] = help.info[i].Color[k].value;
			}
			writeAnimblockData(val, help.info[i].nColor);
		}
		FillLine();
	}
	//end fake color

	//start fake opacity
	{
		for (int i = 0; i < header_m->nParticleEmitters; i++) {
			part_m[i].opacity.nTimes = help.info[i].nOpacity;
			part_m[i].opacity.ofsTimes = FileSize;
			short *time = new short[help.info[i].nOpacity];
			for (int k = 0; k < help.info[i].nOpacity; k++) {
				time[k] = help.info[i].Opacity[k].timestamp;
			}
			writeAnimblockData(time, help.info[i].nOpacity);
			part_m[i].opacity.nKeys = help.info[i].nOpacity;
			part_m[i].opacity.ofsKeys = FileSize;
			short *val = new short[help.info[i].nOpacity];
			for (int k = 0; k < help.info[i].nOpacity; k++) {
				val[k] = help.info[i].Opacity[k].value;
			}
			writeAnimblockData(val, help.info[i].nOpacity);
		}
		FillLine();
	}
	//end fake opacity

	//start fake sizes
	{
		for (int i = 0; i < header_m->nParticleEmitters; i++) {
			part_m[i].sizes.nTimes = help.info[i].nSize;
			part_m[i].sizes.ofsTimes = FileSize;
			short *time = new short[help.info[i].nSize];
			for (int k = 0; k < help.info[i].nSize; k++) {
				time[k] = help.info[i].Size[k].timestamp;
			}
			writeAnimblockData(time, help.info[i].nSize);
			part_m[i].sizes.nKeys = help.info[i].nSize;
			part_m[i].sizes.ofsKeys = FileSize;
			Vec2D *val = new Vec2D[help.info[i].nSize];
			for (int k = 0; k < help.info[i].nSize; k++) {
				val[k] = help.info[i].Size[k].value;
			}
			writeAnimblockData(val, help.info[i].nSize);
		}
		FillLine();
	}
	//end fake sizes

	//start fake Intensity
	{
		for (int i = 0; i < header_m->nParticleEmitters; i++) {
			part_m[i].intensity.nTimes = help.info[i].nIntensity;
			part_m[i].intensity.ofsTimes = FileSize;
			short *time = new short[help.info[i].nIntensity];
			for (int k = 0; k < help.info[i].nIntensity; k++) {
				time[k] = help.info[i].Intensity[k].timestamp;
			}
			writeAnimblockData(time, help.info[i].nIntensity);
			part_m[i].intensity.nKeys = help.info[i].nIntensity;
			part_m[i].intensity.ofsKeys = FileSize;
			short *val = new short[help.info[i].nIntensity];
			for (int k = 0; k < help.info[i].nIntensity; k++) {
				val[k] = help.info[i].Intensity[k].value;
			}
			writeAnimblockData(val, help.info[i].nIntensity);
		}
		FillLine();
	}
	//end fake Intensity

	//start fake unk
	{
		for (int i = 0; i < header_m->nParticleEmitters; i++) {
			part_m[i].unknownblock.nTimes = help.info[i].nUnk;
			part_m[i].unknownblock.ofsTimes = FileSize;
			short *time = new short[help.info[i].nUnk];
			for (int k = 0; k < help.info[i].nUnk; k++) {
				time[k] = help.info[i].Unk[k].timestamp;
			}
			writeAnimblockData(time, help.info[i].nUnk);
			part_m[i].unknownblock.nKeys = help.info[i].nUnk;
			part_m[i].unknownblock.ofsKeys = FileSize;
			short *val = new short[help.info[i].nUnk];
			for (int k = 0; k < help.info[i].nUnk; k++) {
				val[k] = help.info[i].Unk[k].value;
			}
			writeAnimblockData(val, help.info[i].nUnk);
		}
		FillLine();
	}
	//end fake unk


	//now the referenced files:
	//models
	for (int i = 0; i < help.nParticles; i++) {
		int newSize = FileSize + help.info[i].lengthModelName;
		char *n = f;
		f = SMemNew(newSize);
		memcpy(f, n, FileSize);
		SetStructure();
		part_m[i].ofsModelName = FileSize;
		memcpy(f + FileSize, help.info[i].ModelName,
				help.info[i].lengthModelName);
		FileSize = newSize;
		FillLine();
	}
	//particles
	for (int i = 0; i < help.nParticles; i++) {
		int newSize = FileSize + help.info[i].lengthParticleName;
		char *n = f;
		f = SMemNew(newSize);
		memcpy(f, n, FileSize);
		SetStructure();
		part_m[i].ofsParticleName = FileSize;
		memcpy(f + FileSize, help.info[i].ParticleName,
				help.info[i].lengthParticleName);
		FileSize = newSize;
		FillLine();
	}
}
    //---------------------------------------------------------------------
    void XMLSkeletonSerializer::exportSkeleton(const Skeleton* pSkeleton, 
        const String& filename)
    {
		
        LogManager::getSingleton().logMessage("XMLSkeletonSerializer writing "
            " skeleton data to " + filename + "...");

        mXMLDoc = new TiXmlDocument();
        mXMLDoc->InsertEndChild(TiXmlElement("skeleton"));
        TiXmlElement* rootNode = mXMLDoc->RootElement();

        LogManager::getSingleton().logMessage("Populating DOM...");

        // Write main skeleton data
        LogManager::getSingleton().logMessage("Exporting bones..");
        writeSkeleton(pSkeleton);
        LogManager::getSingleton().logMessage("Bones exported.");
		
        // Write all animations
        unsigned short numAnims = pSkeleton->getNumAnimations();
		String msg = "Exporting animations, count=" + StringConverter::toString(numAnims);
        LogManager::getSingleton().logMessage(msg);

        TiXmlElement* animsNode = 
            rootNode->InsertEndChild(TiXmlElement("animations"))->ToElement();
        
        for (unsigned short i = 0; i < numAnims; ++i)
        {
            Animation* pAnim = pSkeleton->getAnimation(i);
            msg = "Exporting animation: " + pAnim->getName();
            LogManager::getSingleton().logMessage(msg);
            writeAnimation(animsNode, pAnim);
            LogManager::getSingleton().logMessage("Animation exported.");

        }

		// Write links
		Skeleton::LinkedSkeletonAnimSourceIterator linkIt = 
			pSkeleton->getLinkedSkeletonAnimationSourceIterator();
		if (linkIt.hasMoreElements())
		{
			LogManager::getSingleton().logMessage("Exporting animation links.");
			TiXmlElement* linksNode = 
				rootNode->InsertEndChild(TiXmlElement("animationlinks"))->ToElement();
			while(linkIt.hasMoreElements())
			{
				const LinkedSkeletonAnimationSource& link = linkIt.getNext();
				writeSkeletonAnimationLink(linksNode, link);
			}
		}

        LogManager::getSingleton().logMessage("DOM populated, writing XML file..");

        // Write out to a file
        if(! mXMLDoc->SaveFile(filename.c_str()) )
        {
            LogManager::getSingleton().logMessage("XMLSkeletonSerializer failed writing the XML file.", LML_CRITICAL);
        }
        else
        {
            LogManager::getSingleton().logMessage("XMLSkeletonSerializer export successful.");
        }

        delete mXMLDoc;

    }