Beispiel #1
0
        protected override void ReadFromImpl(object obj)
        {
            base.ReadFromImpl(obj);
            MaterialPalette uo = (MaterialPalette)obj;

            Materials = ToID(uo.Materials);
        }
Beispiel #2
0
        protected override void GetDepsFromImpl(object obj, GetDepsFromContext context)
        {
            base.GetDepsFromImpl(obj, context);
            MaterialPalette uo = (MaterialPalette)obj;

            AddDep(uo.Materials, context);
        }
Beispiel #3
0
        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;
 }
Beispiel #5
0
        /// <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));
 }