protected override void ReadFromImpl(object obj) { base.ReadFromImpl(obj); MaterialPalette uo = (MaterialPalette)obj; Materials = ToID(uo.Materials); }
protected override void GetDepsFromImpl(object obj, GetDepsFromContext context) { base.GetDepsFromImpl(obj, context); MaterialPalette uo = (MaterialPalette)obj; AddDep(uo.Materials, context); }
protected override object WriteToImpl(object obj) { obj = base.WriteToImpl(obj); MaterialPalette uo = (MaterialPalette)obj; uo.Materials = FromID(Materials, uo.Materials); return(uo); }
/// <summary> /// Initializes a new instance of the <see cref="UFLT.Utils.IntermediateMaterial"/> class. /// </summary> /// <param name='bank'>Material bank, used for finding materials.</param> /// <param name='mp'>Material palette or null.</param> /// <param name='main'>Main texture or null.</param> /// <param name='detail'>Detail texture or null.</param> /// <param name='transparancy'>Transparancy</param> /// <param name='lm'>Light mode.</param> public IntermediateMaterial(MaterialBank bank, MaterialPalette mp, TexturePalette main, TexturePalette detail, ushort transparancy, LightMode lm) { MaterialBank = bank; Palette = mp; MainTexture = main; DetailTexture = detail; Transparency = transparancy; LightMode = lm; }
/// <summary> /// Finds the or create material. Thread safe. /// </summary> /// <returns> /// The found or created material, never returns null. /// </returns> /// <param name='f'>The face to find a material for.</param> public IntermediateMaterial FindOrCreateMaterial(Face f) { // TODO: A faster lookup data structure, currently using a linear search. // Fetch palettes // Fetch palettes MaterialPalette mp = null; if (f.MaterialIndex != -1) { if (!f.Header.MaterialPalettes.TryGetValue(f.MaterialIndex, out mp)) { f.Log.WriteError("FindOrCreateMaterial:Could not find material palette: " + f.MaterialIndex); } } TexturePalette mainTex = null; if (f.TexturePattern != -1) { if (!f.Header.TexturePalettes.TryGetValue(f.TexturePattern, out mainTex)) { f.Log.WriteError("FindOrCreateMaterial:Could not find texture palette: " + f.TexturePattern); } } TexturePalette detailTex = null; if (f.DetailTexturePattern != -1) { if (!f.Header.TexturePalettes.TryGetValue(f.DetailTexturePattern, out detailTex)) { f.Log.WriteError("FindOrCreateMaterial:Could not find detail texture palette: " + f.DetailTexturePattern); } } lock (this) { foreach (IntermediateMaterial current in Materials) { if (current.Equals(mp, mainTex, detailTex, f.Transparency, f.LightMode)) { // We found a matching material return(current); } } // Create a new material IntermediateMaterial im = new IntermediateMaterial(this, mp, mainTex, detailTex, f.Transparency, f.LightMode); Materials.Add(im); return(im); } }
/// <summary> /// Compares various material attrbiutes to see if this material matches. /// </summary> /// <param name="mp"></param> /// <param name="main"></param> /// <param name="detail"></param> /// <param name="trans"></param> /// <param name="lm"></param> /// <returns></returns> public bool Equals(MaterialPalette mp, TexturePalette main, TexturePalette detail, ushort trans, LightMode lm) { if (!MaterialPalette.Equals(Palette, mp)) { return(false); } if (!TexturePalette.Equals(MainTexture, main)) { return(false); } if (!TexturePalette.Equals(DetailTexture, detail)) { return(false); } if (Transparency != trans) { return(false); } if (LightMode != lm) { return(false); } return(true); }
public bool Equals(MaterialPalette otherMaterialPalette, TexturePalette otherMainTexturePalette, TexturePalette otherDetailTexturePalette, ushort otherTransparency, Face.LightMode otherLightMode) { return(Equals(materialPalette, otherMaterialPalette) && Equals(mainTexturePalette, otherMainTexturePalette) && Equals(detailTexturePalette, otherDetailTexturePalette)); }