package javastory.game.data;
import java.util.concurrent.TimeUnit;
import javastory.wz.WzData;
import javastory.wz.WzDataProviderFactory;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
public final class MapNameInfoProvider {
private final class MapNameLoader extends CacheLoader<Integer, MapNameInfo> {
@Override
public MapNameInfo load(final Integer mapId) throws Exception {
final String path = MapNameInfoProvider.this.getMapAreaDataPath(mapId.intValue());
final WzData data = nameData.getChildByPath(path);
final MapNameInfo info = new MapNameInfo(data);
return info;
}
}
private static final WzData nameData = WzDataProviderFactory.getDataProvider("String.wz").getData("Map.img");
private static final MapNameInfoProvider instance = new MapNameInfoProvider();
public final Cache<Integer, MapNameInfo> cache;
private MapNameInfoProvider() {
this.cache = CacheBuilder.newBuilder()
.expireAfterAccess(10, TimeUnit.MINUTES)
.build(new MapNameLoader());
}
public static MapNameInfoProvider getInstance() {
return instance;
}
private String getMapAreaDataPath(final int mapId) {
final StringBuilder builder = new StringBuilder();
if (mapId < 100_000_000) {
builder.append("maple");
} else if (mapId >= 100_000_000 && mapId < 200_000_000) {
builder.append("victoria");
} else if (mapId >= 200_000_000 && mapId < 300_000_000) {
builder.append("ossyria");
} else if (mapId >= 540_000_000 && mapId < 541_010_110) {
builder.append("singapore");
} else if (mapId >= 600_000_000 && mapId < 620_000_000) {
builder.append("MasteriaGL");
} else if (mapId >= 670_000_000 && mapId < 682_000_000) {
builder.append("weddingGL");
} else if (mapId >= 682_000_000 && mapId < 683_000_000) {
builder.append("HalloweenGL");
} else if (mapId >= 800_000_000 && mapId < 900_000_000) {
builder.append("jp");
} else {
builder.append("etc");
}
builder.append("/");
builder.append(mapId);
return builder.toString();
}
}