]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/threedee/TerrainCache.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / threedee / TerrainCache.java
diff --git a/src/tim/prune/threedee/TerrainCache.java b/src/tim/prune/threedee/TerrainCache.java
new file mode 100644 (file)
index 0000000..5f5733f
--- /dev/null
@@ -0,0 +1,57 @@
+package tim.prune.threedee;
+
+import tim.prune.DataStatus;
+import tim.prune.data.Track;
+
+/**
+ * This abstract class acts as a singleton to store a single
+ * terrain model (as a Track) for a given data status and terrain definition.
+ * When the data or the definition changes, this track becomes invalid.
+ */
+public abstract class TerrainCache
+{
+       /** The data status at the time this terrain was generated */
+       private static DataStatus _dataStatus = null;
+       /** The definition (grid size) for this terrain */
+       private static TerrainDefinition _terrainDef = null;
+       /** The generated grid of points with altitudes */
+       private static Track _terrainTrack = null;
+
+
+       /**
+        * Get the stored terrain track if it's still valid
+        * @param inCurrStatus current data status
+        * @param inTerrainDef currently selected terrain definition
+        * @return stored terrain track if it's valid, null otherwise
+        */
+       public static Track getTerrainTrack(DataStatus inCurrStatus, TerrainDefinition inTerrainDef)
+       {
+               if (_dataStatus == null || _terrainDef == null || _terrainTrack == null)
+               {
+                       return null; // nothing stored
+               }
+               if (inCurrStatus == null || inTerrainDef == null || !inTerrainDef.getUseTerrain())
+               {
+                       return null; // nonsense requested
+               }
+               if (inCurrStatus.hasDataChanged(_dataStatus) || !inTerrainDef.equals(_terrainDef))
+               {
+                       return null; // stored track is out of date
+               }
+               // we have a match
+               return _terrainTrack;
+       }
+
+       /**
+        * Now that a terrain track has been generated, store it for possible reuse
+        * @param inTrack terrain track to store
+        * @param inCurrStatus current data status
+        * @param inTerrainDef terrain definition
+        */
+       public static void storeTerrainTrack(Track inTrack, DataStatus inCurrStatus, TerrainDefinition inTerrainDef)
+       {
+               _terrainTrack = inTrack;
+               _dataStatus = inCurrStatus;
+               _terrainDef = inTerrainDef;
+       }
+}