mirror of
https://github.com/Dejvino/roadtrip
synced 2024-12-22 11:48:49 +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.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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user