Renamed some functions and variables to make more sense

This commit is contained in:
Ziver Koc 2020-08-13 23:35:28 +02:00
parent 682c06a5f6
commit 70534bcf2c
5 changed files with 62 additions and 69 deletions

View file

@ -111,6 +111,8 @@ public class CookeryClient extends SimpleApplication {
CollisionResults results = new CollisionResults(); CollisionResults results = new CollisionResults();
rootNode.collideWith(ray, results); rootNode.collideWith(ray, results);
System.out.println("Click registered:");
// (Print the results so we see what is going on:) // (Print the results so we see what is going on:)
for (int i = 0; i < results.size(); i++) { for (int i = 0; i < results.size(); i++) {
System.out.println("Selection #" + i + ": " + System.out.println("Selection #" + i + ": " +
@ -118,7 +120,6 @@ public class CookeryClient extends SimpleApplication {
"Contact: " + results.getCollision(i).getContactPoint() + ", " + "Contact: " + results.getCollision(i).getContactPoint() + ", " +
"Distance: " + results.getCollision(i).getDistance() + " WU"); "Distance: " + results.getCollision(i).getDistance() + " WU");
} }
System.out.println();
// Use the results -- we rotate the selected geometry. // Use the results -- we rotate the selected geometry.
if (results.size() > 0) { if (results.size() > 0) {

View file

@ -13,12 +13,7 @@ public class BlockHeightMap implements TerrainHeightMap {
@Override @Override
public int getSquareCountWidth() { public float getHeight(float x, float z) {
return Block.BLOCK_SIZE; return 0;
}
@Override
public int getSquareCountHeight() {
return Block.BLOCK_SIZE;
} }
} }

View file

@ -2,14 +2,5 @@ package se.cookery.gfx.terrain;
public interface TerrainHeightMap { public interface TerrainHeightMap {
float getHeight(float x, float z);
/**
* @return the number of squares on the width that make a single TerrainMesh instance.
*/
int getSquareCountWidth();
/**
* @return the number of squares on the height that make a single TerrainMesh instance.
*/
int getSquareCountHeight();
} }

View file

@ -1,11 +1,9 @@
package se.cookery.gfx.terrain; package se.cookery.gfx.terrain;
import com.jme3.material.Material; import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry; import com.jme3.scene.Geometry;
import com.jme3.scene.Node; import com.jme3.scene.Node;
import se.cookery.gfx.util.MaterialUtil;
/** /**
* This class represents a infinite terrain object (using multiple buffered TerrainMesh objects) * This class represents a infinite terrain object (using multiple buffered TerrainMesh objects)
@ -13,8 +11,8 @@ import se.cookery.gfx.util.MaterialUtil;
public class TerrainManager { public class TerrainManager {
protected static final int BUFFER_SIZE = 3; protected static final int BUFFER_SIZE = 3;
private float squareWidth; private float squareLength;
private float squareHeight; private int squareCount;
private TerrainHeightMap heightMap; private TerrainHeightMap heightMap;
private Geometry[][] terrainBuffer; private Geometry[][] terrainBuffer;
@ -24,26 +22,27 @@ public class TerrainManager {
/** /**
* Create a new instance of TerrainManager * Create a new instance of TerrainManager
* *
* @param squareWidth is the width of a single square * @param squareLength is the width of a single square
* @param squareHeight is the height of a single square * @param squareCount is the height of a single square
* @param heightMap is the height map for the terrain * @param heightMap is the height map for the terrain
*/ */
public TerrainManager(float squareWidth, float squareHeight, TerrainHeightMap heightMap, Material material) { public TerrainManager(float squareLength, int squareCount, TerrainHeightMap heightMap, Material material) {
this.squareWidth = squareWidth; this.squareLength = squareLength;
this.squareHeight = squareHeight; this.squareCount = squareCount;
this.heightMap = heightMap; this.heightMap = heightMap;
this.terrainBuffer = new Geometry[BUFFER_SIZE][BUFFER_SIZE]; this.terrainBuffer = new Geometry[BUFFER_SIZE][BUFFER_SIZE];
for (int x=0; x<BUFFER_SIZE; x++) { for (int x=0; x<BUFFER_SIZE; x++) {
for (int z=0; z<BUFFER_SIZE; z++) { for (int z=0; z<BUFFER_SIZE; z++) {
TerrainMesh terrainMesh = new TerrainMesh(squareWidth, squareHeight, heightMap.getSquareCountWidth(), heightMap.getSquareCountHeight()); TerrainMesh terrainMesh = new TerrainMesh(squareLength, squareLength, squareCount, squareCount);
terrainBuffer[x][z] = new Geometry("TerrainMesh " + x + "x" + z, terrainMesh); terrainBuffer[x][z] = new Geometry("TerrainMesh " + x + "x" + z, terrainMesh);
terrainBuffer[x][z].setMaterial(material); terrainBuffer[x][z].setMaterial(material);
terrainBuffer[x][z].setLocalTranslation(terrainMesh.getMeshLengthX() * x, 0, terrainMesh.getMeshLengthZ() * z);
node.attachChild(terrainBuffer[x][z]); node.attachChild(terrainBuffer[x][z]);
} }
} }
setTerrainCenter(Vector3f.ZERO); setPlayerPosition(Vector3f.ZERO);
} }
@ -51,11 +50,8 @@ public class TerrainManager {
* Method will move the terrain center by reorganizing the buffer * Method will move the terrain center by reorganizing the buffer
* by deallocating out of scope terrain and allocating new terrain that is in scope. * by deallocating out of scope terrain and allocating new terrain that is in scope.
*/ */
protected void setTerrainCenter(Vector3f newCenter) { protected void setPlayerPosition(Vector3f newCenter) {
Vector3f newTerrainZero = new Vector3f( Vector3f newTerrainZero = getTerrainVector(newCenter);
(squareWidth * heightMap.getSquareCountWidth()) * (int)(newCenter.getX()/(squareWidth * heightMap.getSquareCountWidth())),
0,
(squareHeight * heightMap.getSquareCountHeight()) * (int)(newCenter.getZ()/(squareHeight * heightMap.getSquareCountHeight())));
if (newTerrainZero.equals(terrainZero)) if (newTerrainZero.equals(terrainZero))
return; return;
@ -67,13 +63,23 @@ public class TerrainManager {
for (int z=0; z<BUFFER_SIZE; z++) { for (int z=0; z<BUFFER_SIZE; z++) {
TerrainMesh terrainMesh = (TerrainMesh) terrainBuffer[x][z].getMesh(); TerrainMesh terrainMesh = (TerrainMesh) terrainBuffer[x][z].getMesh();
terrainBuffer[x][z].setLocalTranslation( terrainBuffer[x][z].setLocalTranslation(
terrainZero.getX() + (x - centerIndex) * terrainMesh.getWidth(), terrainZero.getX() + (x - centerIndex) * terrainMesh.getMeshLengthX(),
0 , 0 ,
terrainZero.getZ() + (z - centerIndex) * terrainMesh.getHeight()); terrainZero.getZ() + (z - centerIndex) * terrainMesh.getMeshLengthZ());
} }
} }
} }
/**
* @return a vector to the closest terrain mesh coordinate.
*/
private Vector3f getTerrainVector(Vector3f position) {
return new Vector3f(
(squareLength * squareCount) * (int)(position.getX()/(squareLength * squareCount)),
0,
(squareLength * squareCount) * (int)(position.getZ()/(squareLength * squareCount)));
}
public Node getGfxNode() { public Node getGfxNode() {
return node; return node;

View file

@ -9,25 +9,25 @@ import com.jme3.scene.VertexBuffer;
*/ */
public class TerrainMesh extends Mesh { public class TerrainMesh extends Mesh {
private float squareWidth; private float squareLengthX;
private float squareHeight; private float squareLengthZ;
private int squareCountWidth; private int squareCountX;
private int squareCountHeight; private int squareCountZ;
/** /**
* Created a terrain Mesh with the given sizes. * Created a terrain Mesh with the given sizes.
* *
* @param squareWidth is the width of a single square * @param squareLengthX is the width of a single square
* @param squareHeight is the height of a single square * @param squareLengthZ is the depth of a single square
* @param squareCountWidth the number of squares that make up the whole terrain * @param squareCountX the number of squares that make up the whole terrain on the X axis
* @param squareCountHeight the number of squares that make up the whole terrain * @param squareCountZ the number of squares that make up the whole terrain on the Z axis
*/ */
public TerrainMesh(float squareWidth, float squareHeight, int squareCountWidth, int squareCountHeight){ public TerrainMesh(float squareLengthX, float squareLengthZ, int squareCountX, int squareCountZ){
this.squareWidth = squareWidth; this.squareLengthX = squareLengthX;
this.squareHeight = squareHeight; this.squareLengthZ = squareLengthZ;
this.squareCountWidth = squareCountWidth; this.squareCountX = squareCountX;
this.squareCountHeight = squareCountHeight; this.squareCountZ = squareCountZ;
updateGeometry(); updateGeometry();
} }
@ -46,16 +46,16 @@ public class TerrainMesh extends Mesh {
* Generates a vertex buffer containing vertex xyz coordinates. * Generates a vertex buffer containing vertex xyz coordinates.
*/ */
protected float[] generateVertexBuffer() { protected float[] generateVertexBuffer() {
int vertexCountWidth = squareCountWidth + 1; int vertexCountWidth = squareCountX + 1;
int vertexCountHeight = squareCountHeight + 1; int vertexCountDepth = squareCountZ + 1;
float[] vertexBuf = new float[3 * vertexCountWidth * vertexCountHeight]; float[] vertexBuf = new float[3 * vertexCountWidth * vertexCountDepth];
for (int row=0; row<vertexCountHeight; row++) { for (int row=0; row<vertexCountDepth; row++) {
for (int col=0; col<vertexCountWidth; col++) { for (int col=0; col<vertexCountWidth; col++) {
int vertexIndex = (3 * vertexCountWidth * row) + (3 * col); int vertexIndex = (3 * vertexCountWidth * row) + (3 * col);
vertexBuf[vertexIndex + 0] = squareWidth * col; // X vertexBuf[vertexIndex + 0] = squareLengthX * col; // X
vertexBuf[vertexIndex + 1] = 0; // Y vertexBuf[vertexIndex + 1] = 0; // Y
vertexBuf[vertexIndex + 2] = squareHeight * row; // Z vertexBuf[vertexIndex + 2] = squareLengthZ * row; // Z
} }
} }
@ -66,17 +66,17 @@ public class TerrainMesh extends Mesh {
* Generates a index buffer containing planes for the mesh. * Generates a index buffer containing planes for the mesh.
*/ */
protected short[] generateIndexBuffer() { protected short[] generateIndexBuffer() {
int vertexCountWidth = squareCountWidth + 1; int vertexCountWidth = squareCountX + 1;
int triangleCount = squareCountWidth * squareCountHeight * 2; int triangleCount = squareCountX * squareCountZ * 2;
short[] indexBuf = new short[3 * triangleCount]; short[] indexBuf = new short[3 * triangleCount];
for (int row = 0; row< squareCountHeight; row++) { for (int row = 0; row< squareCountZ; row++) {
for (int col = 0; col< squareCountWidth; col++) { for (int col = 0; col< squareCountX; col++) {
int vertexTopLeft = (row * vertexCountWidth) + col; int vertexTopLeft = (row * vertexCountWidth) + col;
int vertexTopRight = vertexTopLeft + 1; int vertexTopRight = vertexTopLeft + 1;
int vertexBottomLeft = ((row + 1) * vertexCountWidth) + col; int vertexBottomLeft = ((row + 1) * vertexCountWidth) + col;
int vertexBottomRight = vertexBottomLeft + 1; int vertexBottomRight = vertexBottomLeft + 1;
int indexOffset = 3 * 2 * ((row * squareCountWidth) + col); int indexOffset = 3 * 2 * ((row * squareCountX) + col);
indexBuf[indexOffset + 0] = (short) vertexTopLeft; indexBuf[indexOffset + 0] = (short) vertexTopLeft;
indexBuf[indexOffset + 1] = (short) vertexBottomLeft; indexBuf[indexOffset + 1] = (short) vertexBottomLeft;
@ -117,19 +117,19 @@ public class TerrainMesh extends Mesh {
} }
public float getWidth() { public float getMeshLengthX() {
return squareWidth * squareCountWidth; return squareLengthX * squareCountX;
} }
public float getHeight() { public float getMeshLengthZ() {
return squareHeight * squareCountHeight; return squareLengthZ * squareCountZ;
} }
public float getSquareWidth() { public float getSquareLengthX() {
return squareWidth; return squareLengthX;
} }
public float getSquareHeight() { public float getSquareLengthZ() {
return squareHeight; return squareLengthZ;
} }
} }