using UnityEngine; public static class MapDatabase { private static MapDefinition[] maps; public static MapDefinition[] AllMaps { get { EnsureMaps(); return maps; } } public static MapDefinition GetMap(MapId mapId) { EnsureMaps(); for(int i = 0; i < maps.Length; i++) { if(maps[i].mapId == mapId) { return CloneMap(maps[i]); } } return CloneMap(maps[0]); } public static MapDefinition GetMapByIndex(int mapIndex) { EnsureMaps(); int clampedIndex = Mathf.Clamp(mapIndex, 0, maps.Length - 1); return CloneMap(maps[clampedIndex]); } public static int GetIndex(MapId mapId) { EnsureMaps(); for(int i = 0; i < maps.Length; i++) { if(maps[i].mapId == mapId) { return i; } } return 0; } public static int LastMapIndex { get { EnsureMaps(); return maps.Length - 1; } } private static void EnsureMaps() { if(maps != null && maps.Length > 0) { return; } maps = new MapDefinition[] { TutorialIncheonMap.Create(), JapanMap.Create(), ChinaMap.Create(), AmericaMap.Create() }; } private static MapDefinition CloneMap(MapDefinition source) { return new MapDefinition { mapId = source.mapId, displayName = source.displayName, routeName = source.routeName, isTutorial = source.isTutorial, platformSkin = source.platformSkin, backgroundResourcePath = source.backgroundResourcePath, backgroundResourcePaths = source.backgroundResourcePaths != null ? (string[]) source.backgroundResourcePaths.Clone() : null, backgroundFitScaleMultiplier = source.backgroundFitScaleMultiplier, backgroundVerticalOffset = source.backgroundVerticalOffset, finishGateStyle = source.finishGateStyle, targetDistance = source.targetDistance, timeLimit = source.timeLimit, clearMileageReward = source.clearMileageReward, hasNextMap = source.hasNextMap, nextMapId = source.nextMapId, courseProfile = CourseProfile.Create(source.GetOpeningSteps(), source.GetLoopSteps()), openingSteps = source.GetOpeningSteps(), loopSteps = source.GetLoopSteps() }; } }