mirror of
				https://github.com/Dejvino/roadtrip
				synced 2025-10-30 23:35:22 +00:00 
			
		
		
		
	Unthemed trees and rocks.
This commit is contained in:
		
							parent
							
								
									d69faa4852
								
							
						
					
					
						commit
						4a7b7f2484
					
				| @ -10,6 +10,7 @@ import com.jme3.light.AmbientLight; | ||||
| import com.jme3.light.DirectionalLight; | ||||
| import com.jme3.material.Material; | ||||
| import com.jme3.math.ColorRGBA; | ||||
| import com.jme3.math.Quaternion; | ||||
| import com.jme3.math.Vector2f; | ||||
| import com.jme3.math.Vector3f; | ||||
| import com.jme3.post.FilterPostProcessor; | ||||
| @ -19,6 +20,7 @@ import com.jme3.scene.Geometry; | ||||
| import com.jme3.scene.Node; | ||||
| import com.jme3.scene.Spatial; | ||||
| import com.jme3.scene.shape.Box; | ||||
| import com.jme3.scene.shape.Sphere; | ||||
| import com.jme3.terrain.geomipmap.*; | ||||
| import com.jme3.terrain.geomipmap.grid.FractalTileLoader; | ||||
| import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; | ||||
| @ -179,16 +181,8 @@ public class GameWorldView { | ||||
|         lodControl.setLodCalculator(new DistanceLodCalculator(patchSize + 1, 3.7f)); // patch size, and a multiplier | ||||
|         terrain.terrainGrid.addControl(lodControl); | ||||
|          | ||||
|         final Spatial treeModel = assetManager.loadModel("Models/tree.j3o"); | ||||
|         final Spatial houseModel = assetManager.loadModel("Models/house1.j3o"); | ||||
|         final Spatial grassModel = assetManager.loadModel("Models/grass.j3o"); | ||||
|          | ||||
|         Material rockMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         rockMat.setColor("Color",  ColorRGBA.Gray); | ||||
|         Geometry rockGeom = new Geometry("rock", new Box(1f, 1f, 1f)); | ||||
|         rockGeom.setMaterial(rockMat); | ||||
|         final Node rockModel = new Node("rockNode"); | ||||
|         rockModel.attachChild(rockGeom); | ||||
|         final Node treeModel = createTree(); | ||||
|         final Node rockModel = createRock(); | ||||
|          | ||||
|         final FineTerrainGrid terrainGrid = terrain.terrainGrid; | ||||
|         terrainGrid.addListener(new TerrainGridListener() { | ||||
| @ -231,27 +225,31 @@ public class GameWorldView { | ||||
|                     Vector3f pos = mapObject.getPosition(); | ||||
|                     Vector3f scale = Vector3f.UNIT_XYZ; | ||||
|                     Vector3f boxHalf = Vector3f.UNIT_XYZ; | ||||
|                     float rotation = 0f; | ||||
|                     Spatial modelInstance; | ||||
|                     RigidBodyControl modelPhysics; | ||||
|                     switch (mapObject.getType()) { | ||||
|                         case "tree": | ||||
|                             case "house": | ||||
|                             modelInstance = treeModel.clone(); | ||||
|                             float s = 0.2f + rand.nextFloat() * 5f; | ||||
|                             scale = new Vector3f(s, s, s); | ||||
|                             rotation = rand.nextFloat() * 2f * 3.14f; | ||||
|                             boxHalf = new Vector3f(s * 0.2f, s * 3f, s * 0.2f); | ||||
|                             modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f); | ||||
|                             break; | ||||
|                         case "house": | ||||
|                         /*case "house": | ||||
|                             modelInstance = houseModel.clone(); | ||||
|                             boxHalf = new Vector3f(2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f); | ||||
|                             scale = boxHalf; | ||||
|                             modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f); | ||||
|                             break; | ||||
|                             break;*/ | ||||
|                         default: | ||||
|                             throw new RuntimeException("Unhandled object type: " + mapObject.getType()); | ||||
|                     } | ||||
|                     modelInstance.setLocalTranslation(pos); | ||||
|                     modelInstance.setLocalScale(scale); | ||||
|                     modelInstance.setLocalRotation(new Quaternion().fromAngles(0f, rotation, 0f)); | ||||
|                     // TODO: physics from the model and not hard-coded | ||||
|                     //RigidBodyControl control = treeInstance.getControl(RigidBodyControl.class); | ||||
|                     if (modelPhysics != null) { | ||||
| @ -271,6 +269,7 @@ public class GameWorldView { | ||||
|                     Vector3f pos = new Vector3f(x - w/2f + 0.25f*terrainGrid.getLocalScale().x, 0f, z - w/2f + 0.25f*terrainGrid.getLocalScale().z).addLocal(quad.getWorldTranslation()); | ||||
|                     pos.addLocal(0f, getHeight(quad, pos), 0f); | ||||
|                     Vector3f scale = Vector3f.UNIT_XYZ; | ||||
|                     float rotation = 0f; | ||||
|                     Spatial modelInstance; | ||||
|                     float s = 0.1f; | ||||
|                     if (i == 0) { | ||||
| @ -282,12 +281,14 @@ public class GameWorldView { | ||||
|                         case "grass": | ||||
|                             modelInstance = rockModel.clone(); | ||||
|                             scale = new Vector3f(s, s, s); | ||||
|                             rotation = i * 5.2f; | ||||
|                             break; | ||||
|                         default: | ||||
|                             throw new RuntimeException("Unhandled object type"); | ||||
|                     } | ||||
|                     modelInstance.setLocalTranslation(pos); | ||||
|                     modelInstance.setLocalScale(scale); | ||||
|                     modelInstance.setLocalRotation(new Quaternion().fromAngles(0f, rotation, 0f)); | ||||
|                     modelInstance.addControl(new HideControl(20f + 140f * s, targetProvider)); | ||||
|                     objects.attachChild(modelInstance); | ||||
|                 } | ||||
| @ -325,4 +326,41 @@ public class GameWorldView { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private Node createTree() { | ||||
|         Material trunkMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         trunkMat.setColor("Color",  ColorRGBA.Brown); | ||||
|          | ||||
|         Material branchesMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         branchesMat.setColor("Color", new ColorRGBA(0.3f, 0.7f, 0.3f, 1f)); | ||||
|         branchesMat.getAdditionalRenderState().setWireframe(true); | ||||
|          | ||||
|         Geometry treeTrunk = new Geometry("tree-trunk", new Box(0.1f, 1f, 0.1f)); | ||||
|         treeTrunk.setLocalTranslation(0f, 0.5f, 0f); | ||||
|         treeTrunk.setMaterial(trunkMat); | ||||
|          | ||||
|         Geometry treeBranches = new Geometry("tree-branches", new Sphere(6, 5, 1f)); | ||||
|         treeBranches.setLocalTranslation(0f, 1.5f, 0f); | ||||
|         treeBranches.setMaterial(branchesMat); | ||||
|          | ||||
|         Node treeModel = new Node("tree"); | ||||
|         treeModel.attachChild(treeTrunk); | ||||
|         treeModel.attachChild(treeBranches); | ||||
|          | ||||
|         return treeModel; | ||||
|     } | ||||
| 
 | ||||
|     private Node createRock() { | ||||
|         Material rockMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         rockMat.setColor("Color",  ColorRGBA.Gray); | ||||
|         rockMat.getAdditionalRenderState().setWireframe(true); | ||||
|          | ||||
|         Geometry rockGeom = new Geometry("rock", new Sphere(3, 3, 1f)); | ||||
|         rockGeom.setMaterial(rockMat); | ||||
|          | ||||
|         Node rockModel = new Node("rockNode"); | ||||
|         rockModel.attachChild(rockGeom); | ||||
|          | ||||
|         return rockModel; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user