Exemplo n.º 1
0
        public Picture GetPalace(PalaceStyle style, PalacePart part, int level)
        {
            if (level == 0)
            {
                style = PalaceStyle.None;
            }

            int combine = (level * 100) + ((int)style * 10) + (int)part;

            if (!_palacePart.ContainsKey(combine))
            {
                Picture picture = null;

                int offsetX = 0, offsetY = 0;
                if (style == PalaceStyle.Classical)
                {
                    offsetX = 160;
                }
                if (style == PalaceStyle.Islamic)
                {
                    offsetY = 100;
                }

                switch (part)
                {
                case PalacePart.LeftTower:
                    picture = new Picture(35, 101);
                    if (style == PalaceStyle.Classical)
                    {
                        picture.AddLayer(Instance[$"CASTLE{level}"][160, 1 + offsetY, 35, 99], 0, 2);
                        break;
                    }
                    picture.AddLayer(Instance[$"CASTLE{level}"][104 + offsetX, 1 + offsetY, 27, 99], 8, 2);
                    break;

                case PalacePart.RightTower:
                    picture = new Picture(35, 101);
                    if (style == PalaceStyle.Classical)
                    {
                        picture.AddLayer(Instance[$"CASTLE{level}"][196, 1 + offsetY, 35, 99], 0, 2);
                        break;
                    }
                    picture.AddLayer(Instance[$"CASTLE{level}"][132 + offsetX, 1 + offsetY, 27, 99], 0, 2);
                    break;

                case PalacePart.Wall:
                case PalacePart.WallShadow:
                {
                    picture = new Picture(48, 101);
                    if (level == 0)
                    {
                        picture.AddLayer(Instance["CASTLE0"][53 + offsetX, 1 + offsetY, 24, 99]);
                        break;
                    }
                    for (int i = 0; i < 2; i++)
                    {
                        bool shadow = (part == PalacePart.WallShadow && i == 0);
                        picture.AddLayer(Instance[$"CASTLE{level}"][(shadow ? 53 : 78) + offsetX, 1 + offsetY, 24, 99], (24 * i));
                    }
                    break;
                }

                case PalacePart.LeftTowerWall:
                {
                    picture = new Picture(57, 101);
                    if (level == 0)
                    {
                        picture.AddLayer(Instance["CASTLE0"][78 + offsetX, 1 + offsetY, 24, 99], 33);
                        break;
                    }
                    picture.AddLayer(Instance[$"CASTLE{level}"][53 + offsetX, 1 + offsetY, 24, 99], 33);
                    if (style == PalaceStyle.Classical)
                    {
                        picture.AddLayer(Instance[$"CASTLE{level}"][160, 1 + offsetY, 35, 99], 0, 2);
                        break;
                    }
                    picture.AddLayer(Instance[$"CASTLE{level}"][104 + offsetX, 1 + offsetY, 27, 99], 8, 2);
                    break;
                }

                case PalacePart.RightTowerWall:
                case PalacePart.RightTowerWallShadow:
                {
                    picture = new Picture(57, 101);
                    if (level == 0)
                    {
                        picture.AddLayer(Instance["CASTLE0"][53 + offsetX, 1 + offsetY, 24, 99]);
                        break;
                    }

                    bool shadow = (part == PalacePart.RightTowerWallShadow);
                    picture.AddLayer(Instance[$"CASTLE{level}"][(shadow ? 53 : 78) + offsetX, 1 + offsetY, 24, 99], 0);
                    if (style == PalaceStyle.Classical)
                    {
                        picture.AddLayer(Instance[$"CASTLE{level}"][196, 1 + offsetY, 35, 99], 21, 2);
                        break;
                    }
                    picture.AddLayer(Instance[$"CASTLE{level}"][132 + offsetX, 1 + offsetY, 27, 99], 21, 2);
                    break;
                }

                case PalacePart.Center:
                {
                    picture = Instance[$"CASTLE{level}"][0 + offsetX, 1 + offsetY, 52, 99];
                    break;
                }
                }

                _palacePart[combine] = picture;
            }
            return(_palacePart[combine]);
        }
Exemplo n.º 2
0
        private Picture DrawPalace()
        {
            PalaceData palace  = Human.Palace;
            Picture    picture = new Picture(320, 200);

            picture.AddLayer(_background);
            switch (palace.GetGardenLevel(1))
            {
            case 1: picture.AddLayer(Resources["CBACKS1"], 0, 135); break;

            case 2: picture.AddLayer(Resources["CBACKS2"], 0, 135); break;

            case 3: picture.AddLayer(Resources["CBACKS3"], 0, 135); break;
            }

            for (int i = palace.PalaceLeft; i <= palace.PalaceRight; i++)
            {
                if (i == 3)
                {
                    continue;
                }

                byte        level = palace.GetPalaceLevel(i);
                PalaceStyle style = palace.GetPalaceStyle(i);
                PalacePart  part  = PalacePart.None;

                if (level == 0 && (i < 2 || i > 4))
                {
                    continue;
                }

                int xx = 17;
                switch (i)
                {
                case 1:
                case 2: xx = 17 + (48 * i) - 33; break;

                //case 3: i = 17; break;
                case 4:
                case 5:
                case 6: xx = 185 + ((i - 4) * 48); break;
                }

                switch (i)
                {
                case 0:
                    xx   = 9;
                    part = PalacePart.LeftTower;
                    break;

                case 1:
                case 2:
                    xx = 17 + (48 * i);
                    if (palace.GetPalaceLevel(i - 1) > 0)
                    {
                        part = PalacePart.Wall;
                        xx  -= 24;
                        break;
                    }
                    part = PalacePart.LeftTowerWall;
                    xx  -= 33;
                    break;

                case 4:
                    xx = 185 + ((i - 4) * 48);
                    if (palace.GetPalaceLevel(i + 1) > 0)
                    {
                        part = PalacePart.WallShadow;
                        break;
                    }
                    part = PalacePart.RightTowerWallShadow;
                    break;

                case 5:
                    xx = 185 + ((i - 4) * 48);
                    if (palace.GetPalaceLevel(i + 1) > 0)
                    {
                        part = PalacePart.Wall;
                        break;
                    }
                    part = PalacePart.RightTowerWall;
                    break;

                case 6:
                    xx   = 185 + ((i - 4) * 48) - 3;
                    part = PalacePart.RightTower;
                    break;
                }

                picture.AddLayer(Resources.GetPalace(palace.GetPalaceStyle(i), part, palace.GetPalaceLevel(i)), xx, 37);
            }

            // Draw palace middle
            picture.AddLayer(Resources.GetPalace(palace.GetPalaceStyle(3), PalacePart.Center, palace.GetPalaceLevel(3)), 135, palace.GetPalaceLevel(3) == 0 ? 37 : 38);

            switch (palace.GetGardenLevel(0))
            {
            case 1: picture.AddLayer(Resources["CBRUSH0"], 0, 105); break;

            case 2: picture.AddLayer(Resources["CBRUSH2"], 0, 94); break;

            case 3: picture.AddLayer(Resources["CBRUSH4"], 0, 94); break;
            }
            switch (palace.GetGardenLevel(2))
            {
            case 1: picture.AddLayer(Resources["CBRUSH1"], 184, 105); break;

            case 2: picture.AddLayer(Resources["CBRUSH3"], 184, 94); break;

            case 3: picture.AddLayer(Resources["CBRUSH5"], 184, 94); break;
            }
            return(picture);
        }