public void loadSet(string filename) { // saveSet(filename + "1"); mFullFileName = filename; if (mFullFileName.Contains(".xml")) { mFullFileName = mFullFileName.Substring(0, mFullFileName.LastIndexOf(".xml")); } foliageSetXML fsXML = new foliageSetXML(); XmlSerializer s = new XmlSerializer(typeof(foliageSetXML), new Type[] { }); Stream st = File.OpenRead(filename); fsXML = (foliageSetXML)s.Deserialize(st); st.Close(); mSetName = fsXML.SetName; mNumVertsPerBlade = Convert.ToInt32(fsXML.numVertsPerType); mNumBlades = Convert.ToInt32(fsXML.typecount); mBBMax = TextVectorHelper.FromString(fsXML.max); mBBMin = TextVectorHelper.FromString(fsXML.min); for (int i = 0; i < mNumBlades; i++) { FoliageBlade fb = new FoliageBlade(); for (int q = 0; q < mNumVertsPerBlade; q++) { Vector3 v = TextVectorHelper.FromString(fsXML.mBlades[i].mVerts[q].pos); Vector3 n = TextVectorHelper.FromString(fsXML.mBlades[i].mVerts[q].norm); Vector3 uv = TextVectorHelper.FromString(fsXML.mBlades[i].mVerts[q].uv); fb.verts.Add(v); fb.norms.Add(n); fb.uvs.Add(uv); } mFoliageBlades.Add(fb); } fsXML = null; denitDeviceData(); //load our albedo texture; string textureName = filename.Substring(0, filename.LastIndexOf(".")) + "_df.tga"; if (File.Exists(textureName)) { mD3DAlbedoTexture = BRenderDevice.getTextureManager().getTexture(textureName); SurfaceDescription sd = mD3DAlbedoTexture.mTexture.GetLevelDescription(0); mAlbedoImageWidth = sd.Width; } textureName = filename.Substring(0, filename.LastIndexOf(".")) + "_op.tga"; if (File.Exists(textureName)) { mD3DOpacityTexture = BRenderDevice.getTextureManager().getTexture(textureName); } //create our positions texture createD3DTexturesFromBlades(); }
void writeTempModelsToZip(ZipArchive zip) { SceneObjectsXML sceneObjects = new SceneObjectsXML(); BBoundingBox objectAABB = new BBoundingBox(); objectAABB.empty(); string baseDir = CoreGlobals.getWorkPaths().mGameDirectory; if (mIncludeObjects) { //searalize an XML file to memorystream holding position and model names List <EditorObject> editObjs = SimGlobals.getSimMain().getEditorObjects(false, SimMain.eFilterTypes.cFilterAll, -1, false); for (int objIdx = 0; objIdx < editObjs.Count; objIdx++) { if (editObjs[objIdx] == null) { continue; } if (editObjs[objIdx].GetType() == typeof(SimObject)) { SimObject obj = editObjs[objIdx] as SimObject; if (obj.IgnoreToAO) { continue; } if (obj != null && obj.ProtoObject != null) { string grannyName = obj.ProtoObject.getGrannyFileName(); if (grannyName == "") { continue; } if (grannyName.Contains(baseDir)) { grannyName = grannyName.Remove(0, baseDir.Length); } //if this GR2 isn't already listed, then list it. if (!sceneObjects.objectGR2Names.Contains(grannyName)) { sceneObjects.objectGR2Names.Add(grannyName); } //add our instance ObjectInstanceXML inst = new ObjectInstanceXML(); inst.GR2Filename = grannyName; inst.setOrientation(obj.getMatrix()); sceneObjects.objectinstances.Add(inst); //add our transformed BB to the global BB list if (obj != null && obj.mVisual != null) { if (!obj.IgnoreToAO) { objectAABB.addPoint(obj.mAABB.max + obj.getPosition()); objectAABB.addPoint(obj.mAABB.min + obj.getPosition()); } } } } } sceneObjects.aabbmin = TextVectorHelper.ToString(objectAABB.min); sceneObjects.aabbmax = TextVectorHelper.ToString(objectAABB.max); } //write it to an XML stream AbstractFile md = zip.CreateFile("modelPositions.xml", true); Stream stream = md.OpenWrite(true); XmlSerializer s = new XmlSerializer(typeof(SceneObjectsXML), new Type[] { }); s.Serialize(stream, sceneObjects); stream.Close(); //Create a folder and copy our GR2s into it //AbstractFolder fold = zip.CreateFolder("models"); //if (mIncludeObjects) //{ // for (int modelIdx = 0; modelIdx < sceneObjects.objectGR2Names.Count; modelIdx++) // { // if (mWorkerThread.CancellationPending) // return; // try // { // if (fullGR2Names[modelIdx] == "") // continue; // DiskFile modelFile = new DiskFile(fullGR2Names[modelIdx]); // modelFile.CopyTo(fold, true); // } // catch (Exception e) // { // continue; // } // } //} }