您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字
 
 
 

175 行
3.8 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using CIG.Translation;
  4. namespace CIG3.ExtensionMethods
  5. {
  6. public static class IslandExtensions
  7. {
  8. public static bool IsAvailable(this Island island)
  9. {
  10. return IslandExtensions.AvailableIslands.Contains(island);
  11. }
  12. public static bool IsValid(this Island island)
  13. {
  14. return island > Island.None && island < Island.Count;
  15. }
  16. public static string GetSceneName(this Island island)
  17. {
  18. if (island.IsValid())
  19. {
  20. string text = IslandExtensions._sceneNames[(int)island];
  21. if (text == null)
  22. {
  23. text = (IslandExtensions._sceneNames[(int)island] = island.ToString());
  24. }
  25. return text;
  26. }
  27. return null;
  28. }
  29. public static ILocalizedString GetDisplayName(this Island island)
  30. {
  31. if (island.IsValid())
  32. {
  33. ILocalizedString localizedString = IslandExtensions._displayNames[(int)island];
  34. if (localizedString == null)
  35. {
  36. localizedString = (IslandExtensions._displayNames[(int)island] = Localization.Key("island_name_" + island.ToString().ToLowerInvariant()));
  37. }
  38. return localizedString;
  39. }
  40. return null;
  41. }
  42. public static int GetIndex(this Island island)
  43. {
  44. if (island.IsValid())
  45. {
  46. return (int)island;
  47. }
  48. return -1;
  49. }
  50. public static Island GetIsland(int index)
  51. {
  52. if (((Island)index).IsValid())
  53. {
  54. return (Island)index;
  55. }
  56. return Island.None;
  57. }
  58. public static IList<Island> GetIslands()
  59. {
  60. if (IslandExtensions._islands == null)
  61. {
  62. List<Island> list = new List<Island>();
  63. for (int i = 0; i < 10; i++)
  64. {
  65. list.Add((Island)i);
  66. }
  67. IslandExtensions._islands = list.AsReadOnly();
  68. }
  69. return IslandExtensions._islands;
  70. }
  71. public static Island[] GetIslandsArray()
  72. {
  73. Island[] array = new Island[10];
  74. IslandExtensions.GetIslands().CopyTo(array, 0);
  75. return array;
  76. }
  77. public static List<Island> IslandsWithElementType(int req)
  78. {
  79. if (req >= 0 && req < IslandExtensions._islandsPerType.Count)
  80. {
  81. return IslandExtensions._islandsPerType[req];
  82. }
  83. return new List<Island>();
  84. }
  85. private static readonly HashSet<Island> AvailableIslands = new HashSet<Island>
  86. {
  87. Island.GoneGreenlands,
  88. Island.BountyBreeze,
  89. Island.DesertShore,
  90. Island.JungleSlush,
  91. Island.RoughRocks,
  92. Island.LagoonAtoll,
  93. Island.SwampySlopes,
  94. Island.VolcanoVitus,
  95. Island.ShiveringSnows,
  96. Island.FreakyFloors
  97. };
  98. private static readonly List<List<Island>> _islandsPerType = new List<List<Island>>
  99. {
  100. new List<Island>(),
  101. new List<Island>
  102. {
  103. Island.BountyBreeze,
  104. Island.GoneGreenlands,
  105. Island.JungleSlush,
  106. Island.LagoonAtoll,
  107. Island.RoughRocks,
  108. Island.SwampySlopes,
  109. Island.VolcanoVitus,
  110. Island.ShiveringSnows,
  111. Island.FreakyFloors
  112. },
  113. new List<Island>
  114. {
  115. Island.BountyBreeze,
  116. Island.GoneGreenlands
  117. },
  118. new List<Island>
  119. {
  120. Island.BountyBreeze,
  121. Island.GoneGreenlands,
  122. Island.JungleSlush,
  123. Island.LagoonAtoll,
  124. Island.SwampySlopes,
  125. Island.VolcanoVitus,
  126. Island.FreakyFloors
  127. },
  128. new List<Island>
  129. {
  130. Island.DesertShore,
  131. Island.FreakyFloors
  132. },
  133. new List<Island>
  134. {
  135. Island.JungleSlush
  136. },
  137. new List<Island>
  138. {
  139. Island.RoughRocks
  140. },
  141. new List<Island>
  142. {
  143. Island.SwampySlopes,
  144. Island.FreakyFloors
  145. },
  146. new List<Island>
  147. {
  148. Island.VolcanoVitus
  149. },
  150. new List<Island>
  151. {
  152. Island.ShiveringSnows,
  153. Island.FreakyFloors
  154. }
  155. };
  156. private static IList<Island> _islands = null;
  157. private static string[] _sceneNames = new string[10];
  158. private static ILocalizedString[] _displayNames = new ILocalizedString[10];
  159. }
  160. }