protected string AddTxtr(GenericRcol txtr, string unique, GenericRcol txmt, MaterialDefinition md) { string old = Hashes.StripHashFromName(txtr.FileName.Trim().ToLower()); if (old.EndsWith("_txtr")) { old = old.Substring(0, old.Length - 5); } //Console.WriteLine("Adding Texture: "+old); string name = txtr.FileName.Trim(); if (name.ToLower().EndsWith("_txtr")) { name = name.Substring(0, name.Length - 5); } string tname = RenameForm.ReplaceOldUnique(name, unique, true); txtr.FileName = tname + "_txtr"; txtr.FileDescriptor = ScenegraphHelper.BuildPfd(txtr.FileName, Data.MetaData.TXTR, Data.MetaData.CUSTOM_GROUP); for (int i = 0; i < md.Listing.Length; i++) { if (Hashes.StripHashFromName(md.Listing[i].Trim().ToLower()) == old) { md.Listing[i] = "##0x" + Helper.HexString(Data.MetaData.CUSTOM_GROUP) + "!" + tname; } } //update References foreach (string k in txmt.ReferenceChains.Keys) { if (k == "TXTR" || k == "Generic") { continue; } //Console.WriteLine(" Checking Property "+k); string thisname = Hashes.StripHashFromName(md.FindProperty(k).Value.Trim().ToLower()); if (thisname == old) { string nname = "##0x" + Helper.HexString(Data.MetaData.CUSTOM_GROUP) + "!" + tname; //Console.WriteLine(" --> Updating to "+nname); md.FindProperty(k).Value = nname; } } //Load the Lifos into the Texture File ImageData id = (ImageData)txtr.Blocks[0]; id.GetReferencedLifos(); return(name); }
/*public override string ToString() * { * return this.NameResource.FileName; * }*/ #region IScenegraphBlock Member public void ReferencedItems(Hashtable refmap, uint parentgroup) { ArrayList list = new ArrayList(); foreach (MipMapBlock mmp in this.MipMapBlocks) { foreach (MipMap mm in mmp.MipMaps) { if (mm.DataType == MipMapType.LifoReference) { list.Add(ScenegraphHelper.BuildPfd(mm.LifoFile, SimPe.Plugin.ScenegraphHelper.LIFO, parentgroup)); } } } refmap["LIFO"] = list; }
public void ReferencedItems(Hashtable refmap, uint parentgroup) { ArrayList list = new ArrayList(); foreach (string name in Listing) { list.Add(ScenegraphHelper.BuildPfd(name + "_txtr", SimPe.Plugin.ScenegraphHelper.TXTR, parentgroup)); } refmap["TXTR"] = list; string refname = this.GetProperty("stdMatBaseTextureName").Value; if (refname.Trim() != "") { list = new ArrayList(); list.Add(ScenegraphHelper.BuildPfd(refname + "_txtr", SimPe.Plugin.ScenegraphHelper.TXTR, parentgroup)); refmap["stdMatBaseTextureName"] = list; } refname = this.GetProperty("stdMatNormalMapTextureName").Value; if (refname.Trim() != "") { list = new ArrayList(); list.Add(ScenegraphHelper.BuildPfd(refname + "_txtr", SimPe.Plugin.ScenegraphHelper.TXTR, parentgroup)); refmap["stdMatNormalMapTextureName"] = list; } refname = this.GetProperty("stdMatEnvCubeTextureName").Value; if (refname.Trim() != "") { list = new ArrayList(); list.Add(ScenegraphHelper.BuildPfd(refname + "_txtr", SimPe.Plugin.ScenegraphHelper.TXTR, parentgroup)); refmap["stdMatEnvCubeTextureName"] = list; } //for characters int count = 0; try { string s = this.GetProperty("numTexturesToComposite").Value; if (s != "") { count = Convert.ToInt32(this.GetProperty("numTexturesToComposite").Value); } } catch {} list = new ArrayList(); refmap["baseTexture"] = list; for (int i = 0; i < count; i++) { refname = this.GetProperty("baseTexture" + i.ToString()).Value.Trim(); if (refname != "") { if (!refname.EndsWith("_txtr")) { refname += "_txtr"; } list.Add(ScenegraphHelper.BuildPfd(refname, SimPe.Plugin.ScenegraphHelper.TXTR, parentgroup)); } } }
/// <summary> /// Add a small Scenegraph Chain /// </summary> /// <param name="mmat">the MAterial override File for this Subset</param> /// <param name="txmt">The Material Definition File for this Subset</param> /// <param name="txtr">The Txtr File for this Subset (can be null)</param> /// <param name="unique">A unique String for the Filenames</param> /// <param name="slavemap">The Slavemap as generated by Scenegraph.GetSlaveSubsets() (if null, no slave txmts are loaded)</param> void AddTxmt(IPackageFile newpkg, SimPe.Plugin.MmatWrapper mmat, GenericRcol txmt, GenericRcol txtr, string unique, Hashtable slavemap) { //Get/Update Material Definition if (txmt != null) { string name = Hashes.StripHashFromName(txmt.FileName.Trim()); //load Slave TXMTs if (slavemap != null) { LoadSlaveTxmt(newpkg, mmat, name, unique, slavemap); } if (name.ToLower().EndsWith("_txmt")) { name = name.Substring(0, name.Length - 5); } txmt.FileName = FixObject.GetUniqueTxmtName(name, unique, mmat.SubsetName, true); ///*"##0x"+Helper.HexString(Data.MetaData.CUSTOM_GROUP)+"!"+*/name+"_"+unique+"_txmt"; txmt.FileDescriptor = ScenegraphHelper.BuildPfd(txmt.FileName, Data.MetaData.TXMT, Data.MetaData.CUSTOM_GROUP); mmat.Name = "##0x" + Helper.HexString(txmt.FileDescriptor.Group) + "!" + FixObject.GetUniqueTxmtName(name, unique, mmat.SubsetName, false); MaterialDefinition md = (MaterialDefinition)txmt.Blocks[0]; if (txtr == null) { txtr = mmat.GetTxtr(txmt); if (txtr != null) { txtr.FileDescriptor = (Interfaces.Files.IPackedFileDescriptor)txtr.FileDescriptor.Clone(); } } //Get/Update Texture if (txtr != null) { name = AddTxtr(txtr, unique, txmt, md); md.FileDescription = Hashes.StripHashFromName(txmt.FileName).Trim(); if (md.FileDescription.ToLower().EndsWith("_txmt")) { md.FileDescription = md.FileDescription.Substring(0, md.FileDescription.Length - 5); } } if (txtr != null) { txtr.SynchronizeUserData(); if (newpkg.FindFile(txtr.FileDescriptor) == null) { newpkg.Add(txtr.FileDescriptor); } } AddReferencedTxtr(newpkg, txmt, md, unique); if (txmt != null) { txmt.SynchronizeUserData(); if (newpkg.FindFile(txmt.FileDescriptor) == null) { newpkg.Add(txmt.FileDescriptor); } } } }