Files
Travel_Run/Assets/Scripts/Maps/MapDatabase.cs
T
2026-07-09 02:50:48 +09:00

93 lines
2.6 KiB
C#

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