/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.petah.spring.bai.cache; import com.springrts.ai.oo.clb.Map; import java.io.File; import java.io.Serializable; import java.util.List; import java.util.logging.Logger; import org.petah.common.option.Option; import org.petah.common.option.OptionsManager; import org.petah.common.util.profiler.Profiler; import org.petah.spring.bai.InformationLogger; import org.petah.spring.bai.util.ArrayUtil; import org.petah.spring.bai.util.IOUtil; import org.petah.spring.bai.util.MapUtil; /** * * @author Petah */ public class CachedSlopeMap implements Serializable { public static final long serialVersionUID = 1L; // Options private static final Option<Boolean> cacheToDisk = OptionsManager.getOption( new Option<Boolean>("CachedSlopeMap.cacheToDisk", false)); // Class properties private List<Float> slopeMap; private int width; private int height; public CachedSlopeMap(Map map) { Profiler.start(CachedSlopeMap.class, "CachedSlopeMap()"); File file = new File(InformationLogger.getCacheDirectory().getAbsolutePath() + File.separator + map.getName() + "." + map.getChecksum() + "." + serialVersionUID + ".slope.bin"); CachedSlopeMap loadedObject = (CachedSlopeMap) IOUtil.loadCacheFile(cacheToDisk, file); if (loadedObject != null) { slopeMap = loadedObject.slopeMap; width = loadedObject.width; height = loadedObject.height; Logger.getLogger(CachedSlopeMap.class.getName()).info("Loaded slope map from cache."); } else { slopeMap = map.getSlopeMap(); width = MapUtil.mapToSlope(map.getWidth()); height = MapUtil.mapToSlope(map.getHeight()); Logger.getLogger(CachedSlopeMap.class.getName()).info("Processed slope map."); } IOUtil.saveCacheFile(cacheToDisk, file, this); Profiler.stop(CachedSlopeMap.class, "CachedSlopeMap()"); } public Float getValue(int x, int y) { return slopeMap.get(ArrayUtil.get1DIndex(x, y, width)); } public List<Float> getSlopeMap() { return slopeMap; } public int getHeight() { return height; } public int getWidth() { return width; } }