@ -14,7 +14,6 @@ import engine.gameManager.DbManager;
				@@ -14,7 +14,6 @@ import engine.gameManager.DbManager;
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.gameManager.ZoneManager ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.math.Vector2f ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.math.Vector3fImmutable ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.objects.AbstractWorldObject ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.objects.Zone ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.util.MapLoader ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  org.pmw.tinylog.Logger ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -222,27 +221,29 @@ public class HeightMap {
				@@ -222,27 +221,29 @@ public class HeightMap {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  nextZone ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  float  getWorldHeight ( AbstractWorldObject  worldObject )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  float  getWorldHeight ( Zone  currentZone ,  Vector3fImmutable  worldLoc )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  parentLoc  =  new  Vector2f ( - 1 ,  - 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Zone  currentZone  =  ZoneManager . findSmallestZone ( worldObject . getLoc ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( currentZone  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  worldObject . getAltitude ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        currentZone  =  getNextZoneWithTerrain ( currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( currentZone  = =  ZoneManager . getSeaFloor ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  currentZone . getAbsY ( )  +  worldObject . getAltitude ( )  ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  currentZone . getAbsY ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Zone  parentZone  =  getNextZoneWithTerrain ( currentZone . getParent ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        HeightMap  heightMap  =  currentZone . getHeightMap ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  zoneLoc  =  ZoneManager . worldToZoneSpace ( worldObject . getLoc ( ) ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector3fImmutable  localLocFromCenter  =  ZoneManager . worldToLocal ( worldObject . getLoc ( ) ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ( heightMap  = =  null )  | |  ( currentZone  = =  ZoneManager . getSeaFloor ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  currentZone . getAbsY ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  zoneLoc  =  ZoneManager . worldToZoneSpace ( worldLoc ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector3fImmutable  localLocFromCenter  =  ZoneManager . worldToLocal ( worldLoc ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ( parentZone  ! =  null )  & &  ( parentZone . getHeightMap ( )  ! =  null ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            parentLoc  =  ZoneManager . worldToZoneSpace ( worldObject . getLoc ( ) ,  parentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            parentLoc  =  ZoneManager . worldToZoneSpace ( worldLoc ,  parentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  interaltitude  =  currentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( zoneLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -263,18 +264,6 @@ public class HeightMap {
				@@ -263,18 +264,6 @@ public class HeightMap {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  bucketScaleX  =  heightMap . outsetX  /  parentXRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  bucketScaleZ  =  heightMap . outsetZ  /  parentZRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( bucketScaleX  < =  0 . 40000001 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                bucketScaleX  =  heightMap . outsetZ  /  parentXRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( bucketScaleX  >  0 . 40000001 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                bucketScaleX  =  0 . 40000001f ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( bucketScaleZ  < =  0 . 40000001 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                bucketScaleZ  =  heightMap . outsetX  /  parentZRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( bucketScaleZ  >  0 . 40000001 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                bucketScaleZ  =  0 . 40000001f ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  outsideGridSizeX  =  1  -  bucketScaleX ;  //32/256
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  outsideGridSizeZ  =  1  -  bucketScaleZ ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  weight ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -327,100 +316,12 @@ public class HeightMap {
				@@ -327,100 +316,12 @@ public class HeightMap {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  float  getWorldHeight ( Vector3fImmutable  worldLoc )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  parentLoc  =  new  Vector2f ( - 1 ,  - 1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Zone  currentZone  =  ZoneManager . findSmallestZone ( worldLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( currentZone  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  getWorldHeight ( currentZone ,  worldLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        currentZone  =  getNextZoneWithTerrain ( currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( currentZone  = =  ZoneManager . getSeaFloor ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  currentZone . getAbsY ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Zone  parentZone  =  getNextZoneWithTerrain ( currentZone . getParent ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        HeightMap  heightMap  =  currentZone . getHeightMap ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ( heightMap  = =  null )  | |  ( currentZone  = =  ZoneManager . getSeaFloor ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  currentZone . getAbsY ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  zoneLoc  =  ZoneManager . worldToZoneSpace ( worldLoc ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector3fImmutable  localLocFromCenter  =  ZoneManager . worldToLocal ( worldLoc ,  currentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( ( parentZone  ! =  null )  & &  ( parentZone . getHeightMap ( )  ! =  null ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            parentLoc  =  ZoneManager . worldToZoneSpace ( worldLoc ,  parentZone ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  interaltitude  =  currentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( zoneLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  worldAltitude  =  currentZone . getWorldAltitude ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  realWorldAltitude  =  interaltitude  +  worldAltitude ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //OUTSET
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( parentZone  ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //			if (currentZone.getHeightMap() != null && parentZone.getHeightMap() != null && parentZone.getParent() != null && parentZone.getParent().getHeightMap() != null)
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            //				return realWorldAltitude;
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  parentXRadius  =  currentZone . getBounds ( ) . getHalfExtents ( ) . x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  parentZRadius  =  currentZone . getBounds ( ) . getHalfExtents ( ) . y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  offsetX  =  Math . abs ( ( localLocFromCenter . x  /  parentXRadius ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  offsetZ  =  Math . abs ( ( localLocFromCenter . z  /  parentZRadius ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  bucketScaleX  =  heightMap . outsetX  /  parentXRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  bucketScaleZ  =  heightMap . outsetZ  /  parentZRadius ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  outsideGridSizeX  =  1  -  bucketScaleX ;  //32/256
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  outsideGridSizeZ  =  1  -  bucketScaleZ ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            float  weight ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            double  scale ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( offsetX  >  outsideGridSizeX  & &  offsetX  >  offsetZ )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                weight  =  ( offsetX  -  outsideGridSizeX )  /  bucketScaleX ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                scale  =  Math . atan2 ( ( . 5  -  weight )  *  3 . 1415927 ,  1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  scaleChild  =  ( float )  ( ( scale  +  1 )  *  . 5 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  scaleParent  =  1  -  scaleChild ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  parentAltitude  =  parentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( parentLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  parentCenterAltitude  =  parentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( ZoneManager . worldToZoneSpace ( currentZone . getLoc ( ) ,  parentZone ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                parentCenterAltitude  + =  currentZone . getYCoord ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                parentCenterAltitude  + =  interaltitude ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  firstScale  =  parentAltitude  *  scaleParent ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  secondScale  =  parentCenterAltitude  *  scaleChild ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  outsetALt  =  firstScale  +  secondScale ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                outsetALt  + =  currentZone . getParent ( ) . getWorldAltitude ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                realWorldAltitude  =  outsetALt ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }  else  if  ( offsetZ  >  outsideGridSizeZ )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                weight  =  ( offsetZ  -  outsideGridSizeZ )  /  bucketScaleZ ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                scale  =  Math . atan2 ( ( . 5  -  weight )  *  3 . 1415927 ,  1 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  scaleChild  =  ( float )  ( ( scale  +  1 )  *  . 5 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  scaleParent  =  1  -  scaleChild ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  parentAltitude  =  parentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( parentLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  parentCenterAltitude  =  parentZone . getHeightMap ( ) . getInterpolatedTerrainHeight ( ZoneManager . worldToZoneSpace ( currentZone . getLoc ( ) ,  parentZone ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                parentCenterAltitude  + =  currentZone . getYCoord ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                parentCenterAltitude  + =  interaltitude ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  firstScale  =  parentAltitude  *  scaleParent ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  secondScale  =  parentCenterAltitude  *  scaleChild ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  outsetALt  =  firstScale  +  secondScale ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                outsetALt  + =  currentZone . getParent ( ) . getWorldAltitude ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                realWorldAltitude  =  outsetALt ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  realWorldAltitude ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  float  getOutsetHeight ( float  interpolatedAltitude ,  Zone  zone ,  Vector3fImmutable  worldLocation )  {   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -496,15 +397,6 @@ public class HeightMap {
				@@ -496,15 +397,6 @@ public class HeightMap {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  outsetALt ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  Vector2f  getGridOffset ( Vector2f  gridSquare )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  floorX  =  ( int )  gridSquare . x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  floorY  =  ( int )  gridSquare . y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  new  Vector2f ( gridSquare . x  -  floorX ,  gridSquare . y  -  floorY ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  static  void  loadAlHeightMaps ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        // Load the heightmaps into staging hashmap keyed by HashMapID
   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -618,48 +510,6 @@ public class HeightMap {
				@@ -618,48 +510,6 @@ public class HeightMap {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  interpolatedHeight ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    public  float  getInterpolatedTerrainHeight ( Vector3fImmutable  zoneLoc3f )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  zoneLoc  =  new  Vector2f ( zoneLoc3f . x ,  zoneLoc3f . z ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Vector2f  gridSquare ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( zoneLoc . x  <  0  | |  zoneLoc . x  >  this . fullExtentsX )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  - 1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( zoneLoc . y  <  0  | |  zoneLoc . y  >  this . fullExtentsY )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  - 1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //flip the Y so it grabs from the bottom left instead of top left.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //zoneLoc.setY(maxZoneHeight - zoneLoc.y);
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        gridSquare  =  getGridSquare ( zoneLoc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  gridX  =  ( int )  gridSquare . x ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        int  gridY  =  ( int )  ( gridSquare . y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  offsetX  =  ( gridSquare . x  -  gridX ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  offsetY  =  gridSquare . y  -  gridY ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        //get height of the 4 vertices.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  topLeftHeight  =  pixelColorValues [ gridX ] [ gridY ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  topRightHeight  =  pixelColorValues [ gridX  +  1 ] [ gridY ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  bottomLeftHeight  =  pixelColorValues [ gridX ] [ gridY  +  1 ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  bottomRightHeight  =  pixelColorValues [ gridX  +  1 ] [ gridY  +  1 ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        float  interpolatedHeight ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        interpolatedHeight  =  topRightHeight  *  ( 1  -  offsetY )  *  ( offsetX ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        interpolatedHeight  + =  ( bottomRightHeight  *  offsetY  *  offsetX ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        interpolatedHeight  + =  ( bottomLeftHeight  *  ( 1  -  offsetX )  *  offsetY ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        interpolatedHeight  + =  ( topLeftHeight  *  ( 1  -  offsetX )  *  ( 1  -  offsetY ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        interpolatedHeight  * =  ( float )  this . maxHeight  /  256 ;   // Scale height
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  interpolatedHeight ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    private  void  generatePixelData ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Color  color ;