CNCMaps.Engine.Game.Theater.GetPalette C# (CSharp) Метод

GetPalette() приватный Метод

private GetPalette ( CNCMaps.Engine.Drawables.Drawable drawable ) : CNCMaps.Engine.Rendering.Palette
drawable CNCMaps.Engine.Drawables.Drawable
Результат CNCMaps.Engine.Rendering.Palette
        internal Palette GetPalette(Drawable drawable)
        {
            // Starkku: Altered as a part of a fix for crash that happened if custom palette was declared but file wasn't there.
            Palette pal = null;
            if (drawable.Props.PaletteType == PaletteType.Custom)
            {
                pal = _palettes.GetCustomPalette(drawable.Props.CustomPaletteName);
                if (pal == null)
                {
                    if (drawable is BuildingDrawable || drawable is UnitDrawable) return _palettes.UnitPalette;
                    else if (drawable is AnimDrawable) return _palettes.AnimPalette;
                    else return _palettes.IsoPalette;
                }
            }
            else
            {
                pal = _palettes.GetPalette(drawable.Props.PaletteType);
            }
            return pal;
        }

Usage Example

Пример #1
0
        private void LoadPalettes()
        {
            int before = _palettesToBeRecalculated.Count;

            // get the default palettes
            var pc = _theater.GetPalettes();

            foreach (var p in pc)
            {
                _palettesToBeRecalculated.Add(p);
            }

            foreach (var tile in _tiles)
            {
                if (tile == null)
                {
                    continue;
                }

                // TODO: move this to a more sensible place

                /*var tse = _theater.GetTileCollection().GetTileSetEntry(tile);
                 * if (tse != null && tse.AnimationSubtile == tile.SubTile) {
                 *      var anim = new AnimationObject(tse.AnimationDrawable.Name, tse.AnimationDrawable);
                 *      tile.AddObject(anim);
                 *      _animationObjects.Add(anim);
                 * }*/

                foreach (var obj in tile.AllObjects.Union(new[] { tile }).ToList())
                {
                    if (obj == null)
                    {
                        continue;
                    }

                    Palette      p;
                    LightingType lt;
                    PaletteType  pt;

                    if (obj is MapTile)
                    {
                        lt = LightingType.Full;
                        pt = PaletteType.Iso;
                    }
                    else
                    {
                        obj.Collection = _theater.GetObjectCollection(obj);
                        pt             = obj.Drawable.Props.PaletteType;
                        lt             = obj.Drawable.Props.LightingType;
                    }

                    // level, ambient and full benefit from sharing
                    if (lt == LightingType.Full && pt == PaletteType.Iso)
                    {
                        // bridges are attached to a low tile, but their height-offset should be taken into account
                        int z = obj.Tile.Z + (obj.Drawable != null ? obj.Drawable.TileElevation : 0);
                        p = _palettePerLevel[z];
                    }
                    else if (lt >= LightingType.Level)
                    {
                        // when applying lighting to its palette
                        p = _theater.GetPalette(obj.Drawable).Clone();
                        int z = obj.Tile.Z + (obj.Drawable != null ? obj.Drawable.TileElevation : 0);
                        p.ApplyLighting(_lighting, z, lt == LightingType.Full);
                    }
                    else
                    {
                        p = _theater.GetPalette(obj.Drawable).Clone();
                    }
                    _palettesToBeRecalculated.Add(p);
                    obj.Palette = p;
                }
            }
            Logger.Debug("Loaded {0} different palettes", _palettesToBeRecalculated.Count - before);
        }