Home | History | Annotate | Download | only in grid
      1 /*
      2  * To change this template, choose Tools | Templates
      3  * and open the template in the editor.
      4  */
      5 package com.jme3.terrain.geomipmap.grid;
      6 
      7 import com.jme3.asset.AssetManager;
      8 import com.jme3.export.InputCapsule;
      9 import com.jme3.export.JmeExporter;
     10 import com.jme3.export.JmeImporter;
     11 import com.jme3.export.OutputCapsule;
     12 import com.jme3.math.Vector3f;
     13 import com.jme3.terrain.geomipmap.TerrainGridTileLoader;
     14 import com.jme3.terrain.geomipmap.TerrainQuad;
     15 import java.io.IOException;
     16 import java.util.logging.Level;
     17 import java.util.logging.Logger;
     18 
     19 /**
     20  *
     21  * @author normenhansen
     22  */
     23 public class AssetTileLoader implements TerrainGridTileLoader {
     24 
     25     private AssetManager manager;
     26     private String assetPath;
     27     private String name;
     28     private int size;
     29     private int patchSize;
     30     private int quadSize;
     31 
     32     public AssetTileLoader() {
     33     }
     34 
     35     public AssetTileLoader(AssetManager manager, String name, String assetPath) {
     36         this.manager = manager;
     37         this.name = name;
     38         this.assetPath = assetPath;
     39     }
     40 
     41     public TerrainQuad getTerrainQuadAt(Vector3f location) {
     42         String modelName = assetPath + "/" + name + "_" + Math.round(location.x) + "_" + Math.round(location.y) + "_" + Math.round(location.z) + ".j3o";
     43         Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Load terrain grid tile: {0}", modelName);
     44         TerrainQuad quad = null;
     45         try {
     46             quad = (TerrainQuad) manager.loadModel(modelName);
     47         } catch (Exception e) {
     48 //            e.printStackTrace();
     49         }
     50         if (quad == null) {
     51             Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Could not load terrain grid tile: {0}", modelName);
     52             quad = createNewQuad(location);
     53         } else {
     54             Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Loaded terrain grid tile: {0}", modelName);
     55         }
     56         return quad;
     57     }
     58 
     59     public String getAssetPath() {
     60         return assetPath;
     61     }
     62 
     63     public String getName() {
     64         return name;
     65     }
     66 
     67     public void setPatchSize(int patchSize) {
     68         this.patchSize = patchSize;
     69     }
     70 
     71     public void setQuadSize(int quadSize) {
     72         this.quadSize = quadSize;
     73     }
     74 
     75     private TerrainQuad createNewQuad(Vector3f location) {
     76         TerrainQuad q = new TerrainQuad("Quad" + location, patchSize, quadSize, null);
     77         return q;
     78     }
     79 
     80     public void write(JmeExporter ex) throws IOException {
     81         OutputCapsule c = ex.getCapsule(this);
     82         c.write(assetPath, "assetPath", null);
     83         c.write(name, "name", null);
     84     }
     85 
     86     public void read(JmeImporter im) throws IOException {
     87         InputCapsule c = im.getCapsule(this);
     88         manager = im.getAssetManager();
     89         assetPath = c.readString("assetPath", null);
     90         name = c.readString("name", null);
     91     }
     92 }