Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

77 рядки
2.5 KiB

  1. using System;
  2. using CIG3.ExtensionMethods;
  3. using SUISS.Core;
  4. using SUISSEngine;
  5. using UnityEngine;
  6. public class CIGSpecialBuildingsManager : MonoBehaviour
  7. {
  8. protected virtual void OnGridDeserialized()
  9. {
  10. foreach (CIGBuilding cigbuilding in SingletonMonobehaviour<GameObjectManager>.Instance.AllBuildings)
  11. {
  12. if (!cigbuilding.island.IsValid() || cigbuilding.island == this.city.island)
  13. {
  14. if (cigbuilding.activatable)
  15. {
  16. GridIndex gridIndex = new GridIndex(cigbuilding.gridPositionU, cigbuilding.gridPositionV);
  17. bool flag = false;
  18. foreach (CIGBuilding cigbuilding2 in UnityEngine.Object.FindObjectsOfType<CIGBuilding>())
  19. {
  20. if (cigbuilding2.name == cigbuilding.name)
  21. {
  22. flag = true;
  23. if (!cigbuilding.movable && !cigbuilding2.tile.index.Equals(gridIndex))
  24. {
  25. string str = string.Empty;
  26. if (!cigbuilding2.tile.size.Equals(cigbuilding.tile.size))
  27. {
  28. str = string.Format("The building {0} has a wrong size ({1}). It should be {2}. ", cigbuilding2.name, cigbuilding2.tile.size, cigbuilding.tile.size);
  29. }
  30. for (int k = 0; k < 10; k++)
  31. {
  32. GridTile gridTile = this.grid.FindTileAt(gridIndex, cigbuilding.tile.size);
  33. if (gridTile != null && gridTile.name == cigbuilding.name)
  34. {
  35. UnityEngine.Debug.LogError(str + string.Format("There is a duplicate of {0} at position {1}.", cigbuilding.name, cigbuilding2.tile.index));
  36. this.island.builder.DestroyTile(cigbuilding2.tile);
  37. break;
  38. }
  39. if (!(gridTile != null))
  40. {
  41. this.grid.MoveTileFrom(cigbuilding2.tile, gridIndex, true);
  42. break;
  43. }
  44. UnityEngine.Debug.LogError(str + string.Format("The building {0} is in a wrong position ({1}), but there is something ({2}) in the way.", cigbuilding2.name, cigbuilding2.tile.index, gridTile.name));
  45. this.island.builder.DestroyTile(gridTile);
  46. }
  47. }
  48. break;
  49. }
  50. }
  51. if (!flag)
  52. {
  53. bool flag2 = this.island.builder.BuildAt(cigbuilding.gameObject, gridIndex, false, true);
  54. if (flag2)
  55. {
  56. SingletonMonobehaviour<CIGGameStats>.Instance.AddBuilding(cigbuilding.name);
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. [ParentReference]
  64. public CIGExpansions expansions;
  65. [ParentReference]
  66. public IsometricIsland island;
  67. [ParentReference]
  68. public CityIsland city;
  69. [SelfReference]
  70. public IsometricGrid grid;
  71. }