Staircase climbing added.

origin
Joshua Sigona 3 years ago
parent c0e7b06055
commit 928052fbd0
  1. 2
      src/sig/Block.java
  2. 3
      src/sig/Mesh.java
  3. 41
      src/sig/SigRenderer.java
  4. 14
      src/sig/models/Staircase.java

@ -11,7 +11,7 @@ public class Block {
final static int WEST = 1;
final static int NORTH = 2;
final static int EAST = 3;
Vector pos;
public Vector pos;
public Mesh block;
public FaceList neighbors;
private FacingDirection facingDir;

@ -27,4 +27,7 @@ public class Mesh {
protected List<Triangle> prepareRender(Block b) {
return b.block.triangles;
}
public boolean handleCollision(Block b) {
return false;
}
}

@ -72,6 +72,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
public static float fallSpd = 0;
public static float xSpeed = 0f;
public static float zSpeed = 0f;
public static Staircase currentStaircase = null;
public static int jumpsAvailable = 1;
@ -107,12 +108,20 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
boolean checkCollisionSquare(float x,float y,float z) {
for (int yy=0;yy<cameraHeight;yy++) {
if (blockGrid.containsKey((float)Math.floor(vCamera.x+x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z+cameraCollisionPadding))||
blockGrid.containsKey((float)Math.floor(vCamera.x+x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z+cameraCollisionPadding))||
blockGrid.containsKey((float)Math.floor(vCamera.x+x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z-cameraCollisionPadding))||
blockGrid.containsKey((float)Math.floor(vCamera.x+x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z-cameraCollisionPadding))) {
Block b1 = blockGrid.get((float)Math.floor(vCamera.x+x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z+cameraCollisionPadding));
Block b2 = blockGrid.get((float)Math.floor(vCamera.x+x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z+cameraCollisionPadding));
Block b3 = blockGrid.get((float)Math.floor(vCamera.x+x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z-cameraCollisionPadding));
Block b4 = blockGrid.get((float)Math.floor(vCamera.x+x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y+y+yy)+"_"+(float)Math.floor(vCamera.z+z-cameraCollisionPadding));
if (b1!=null && !(b1.block instanceof Staircase)||
b2!=null && !(b2.block instanceof Staircase)||
b3!=null && !(b3.block instanceof Staircase)||
b4!=null && !(b4.block instanceof Staircase)) {
return false;
}
if (b1!=null) {if (!b1.block.handleCollision(b1)) {return false;}}
if (b2!=null) {if (!b2.block.handleCollision(b2)) {return false;}}
if (b3!=null) {if (!b3.block.handleCollision(b3)) {return false;}}
if (b4!=null) {if (!b4.block.handleCollision(b4)) {return false;}}
}
return true;
}
@ -172,7 +181,26 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
public void runGameLoop() {
if (!FLYING_MODE) {
move();
if (checkCollisionSquare(0,fallSpd-gravity,0)) {
if (SigRenderer.currentStaircase!=null) {
boolean found=false;
for (int yy=0;yy<cameraHeight;yy++) {
Block b1 = blockGrid.get((float)Math.floor(vCamera.x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y-0.5f+yy)+"_"+(float)Math.floor(vCamera.z+cameraCollisionPadding));
Block b2 = blockGrid.get((float)Math.floor(vCamera.x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y-0.5f+yy)+"_"+(float)Math.floor(vCamera.z+cameraCollisionPadding));
Block b3 = blockGrid.get((float)Math.floor(vCamera.x+cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y-0.5f+yy)+"_"+(float)Math.floor(vCamera.z-cameraCollisionPadding));
Block b4 = blockGrid.get((float)Math.floor(vCamera.x-cameraCollisionPadding)+"_"+(float)Math.floor(vCamera.y-0.5f+yy)+"_"+(float)Math.floor(vCamera.z-cameraCollisionPadding));
if (b1!=null && b1.block instanceof Staircase) {found=true;}
if (b2!=null && b2.block instanceof Staircase) {found=true;}
if (b3!=null && b3.block instanceof Staircase) {found=true;}
if (b4!=null && b4.block instanceof Staircase) {found=true;}
}
if (!found) {
System.out.println("Not Found");
SigRenderer.currentStaircase=null;
} else {
System.out.println("Found");
}
}
if (checkCollisionSquare(0,fallSpd-gravity,0)&&SigRenderer.currentStaircase==null) {
fallSpd=Math.max(-maxCameraSpeed.y,fallSpd-gravity);
friction(vCameraSpeed,0.004f); //Air friction.
} else {
@ -327,7 +355,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
Random r = new Random(438107);
for (int x=0;x<64;x++) {
for (int z=0;z<64;z++) {
addBlock(new Vector(x,0,z),Staircase.class,BlockType.PLANKS,FacingDirection.SOUTH);
addBlock(new Vector(x,0,z),Cube.class,BlockType.GRASS,FacingDirection.SOUTH);
//addBlock(new Vector(x,1,z),BlockType.JUNGLE_PLANK,FacingDirection.SOUTH);
//addBlock(new Vector(x,2,z),BlockType.SPRUCE_PLANK,FacingDirection.SOUTH);
/*for (int y=1;y<r.nextInt(5);y++) {
@ -387,7 +415,6 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
GraphicsDevice screen = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
f.setLocation((screen.getDisplayMode().getWidth()-SigRenderer.SCREEN_WIDTH)/2,(screen.getDisplayMode().getHeight()-SigRenderer.SCREEN_HEIGHT)/2);
panel.init();
new Thread() {
public void run(){

@ -6,6 +6,7 @@ import java.util.List;
import sig.Block;
import sig.BlockType;
import sig.Mesh;
import sig.SigRenderer;
import sig.Triangle;
import sig.utils.OBJReader;
@ -55,4 +56,17 @@ public class Staircase extends Mesh{
tris.add(b.block.triangles.get(7));
return tris;
}
public boolean handleCollision(Block b) {
if (SigRenderer.currentStaircase!=null) {
float diffZ=SigRenderer.vCamera.z-b.pos.z;
SigRenderer.vCamera.y=b.pos.y+diffZ+0.7f;
SigRenderer.fallSpd=0;
return true;
}
if (SigRenderer.vCamera.y>=b.pos.y) {
SigRenderer.currentStaircase=this;
return true;
}
return false;
}
}

Loading…
Cancel
Save