1
0
mirror of https://github.com/Dejvino/roadtrip synced 2024-11-22 07:52:36 +00:00

Unthemed trees and rocks.

This commit is contained in:
Dejvino 2017-02-01 23:38:37 +01:00
parent d69faa4852
commit 4a7b7f2484

View File

@ -10,6 +10,7 @@ import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight; import com.jme3.light.DirectionalLight;
import com.jme3.material.Material; import com.jme3.material.Material;
import com.jme3.math.ColorRGBA; import com.jme3.math.ColorRGBA;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector2f; import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
import com.jme3.post.FilterPostProcessor; import com.jme3.post.FilterPostProcessor;
@ -19,6 +20,7 @@ import com.jme3.scene.Geometry;
import com.jme3.scene.Node; import com.jme3.scene.Node;
import com.jme3.scene.Spatial; import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Box; import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Sphere;
import com.jme3.terrain.geomipmap.*; import com.jme3.terrain.geomipmap.*;
import com.jme3.terrain.geomipmap.grid.FractalTileLoader; import com.jme3.terrain.geomipmap.grid.FractalTileLoader;
import com.jme3.terrain.geomipmap.lodcalc.DistanceLodCalculator; 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 lodControl.setLodCalculator(new DistanceLodCalculator(patchSize + 1, 3.7f)); // patch size, and a multiplier
terrain.terrainGrid.addControl(lodControl); terrain.terrainGrid.addControl(lodControl);
final Spatial treeModel = assetManager.loadModel("Models/tree.j3o"); final Node treeModel = createTree();
final Spatial houseModel = assetManager.loadModel("Models/house1.j3o"); final Node rockModel = createRock();
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 FineTerrainGrid terrainGrid = terrain.terrainGrid; final FineTerrainGrid terrainGrid = terrain.terrainGrid;
terrainGrid.addListener(new TerrainGridListener() { terrainGrid.addListener(new TerrainGridListener() {
@ -231,27 +225,31 @@ public class GameWorldView {
Vector3f pos = mapObject.getPosition(); Vector3f pos = mapObject.getPosition();
Vector3f scale = Vector3f.UNIT_XYZ; Vector3f scale = Vector3f.UNIT_XYZ;
Vector3f boxHalf = Vector3f.UNIT_XYZ; Vector3f boxHalf = Vector3f.UNIT_XYZ;
float rotation = 0f;
Spatial modelInstance; Spatial modelInstance;
RigidBodyControl modelPhysics; RigidBodyControl modelPhysics;
switch (mapObject.getType()) { switch (mapObject.getType()) {
case "tree": case "tree":
case "house":
modelInstance = treeModel.clone(); modelInstance = treeModel.clone();
float s = 0.2f + rand.nextFloat() * 5f; float s = 0.2f + rand.nextFloat() * 5f;
scale = new Vector3f(s, s, s); scale = new Vector3f(s, s, s);
rotation = rand.nextFloat() * 2f * 3.14f;
boxHalf = new Vector3f(s * 0.2f, s * 3f, s * 0.2f); boxHalf = new Vector3f(s * 0.2f, s * 3f, s * 0.2f);
modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f); modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f);
break; break;
case "house": /*case "house":
modelInstance = houseModel.clone(); modelInstance = houseModel.clone();
boxHalf = new Vector3f(2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f); boxHalf = new Vector3f(2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f, 2f + rand.nextFloat() * 10f);
scale = boxHalf; scale = boxHalf;
modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f); modelPhysics = new RigidBodyControl(new BoxCollisionShape(boxHalf), 0f);
break; break;*/
default: default:
throw new RuntimeException("Unhandled object type: " + mapObject.getType()); throw new RuntimeException("Unhandled object type: " + mapObject.getType());
} }
modelInstance.setLocalTranslation(pos); modelInstance.setLocalTranslation(pos);
modelInstance.setLocalScale(scale); modelInstance.setLocalScale(scale);
modelInstance.setLocalRotation(new Quaternion().fromAngles(0f, rotation, 0f));
// TODO: physics from the model and not hard-coded // TODO: physics from the model and not hard-coded
//RigidBodyControl control = treeInstance.getControl(RigidBodyControl.class); //RigidBodyControl control = treeInstance.getControl(RigidBodyControl.class);
if (modelPhysics != null) { 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()); 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); pos.addLocal(0f, getHeight(quad, pos), 0f);
Vector3f scale = Vector3f.UNIT_XYZ; Vector3f scale = Vector3f.UNIT_XYZ;
float rotation = 0f;
Spatial modelInstance; Spatial modelInstance;
float s = 0.1f; float s = 0.1f;
if (i == 0) { if (i == 0) {
@ -282,12 +281,14 @@ public class GameWorldView {
case "grass": case "grass":
modelInstance = rockModel.clone(); modelInstance = rockModel.clone();
scale = new Vector3f(s, s, s); scale = new Vector3f(s, s, s);
rotation = i * 5.2f;
break; break;
default: default:
throw new RuntimeException("Unhandled object type"); throw new RuntimeException("Unhandled object type");
} }
modelInstance.setLocalTranslation(pos); modelInstance.setLocalTranslation(pos);
modelInstance.setLocalScale(scale); modelInstance.setLocalScale(scale);
modelInstance.setLocalRotation(new Quaternion().fromAngles(0f, rotation, 0f));
modelInstance.addControl(new HideControl(20f + 140f * s, targetProvider)); modelInstance.addControl(new HideControl(20f + 140f * s, targetProvider));
objects.attachChild(modelInstance); 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;
}
} }