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]); }
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); }