Staircase climbing added.
This commit is contained in:
parent
c0e7b06055
commit
928052fbd0
@ -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++) {
|
||||
@ -388,7 +416,6 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
|
||||
f.setLocation((screen.getDisplayMode().getWidth()-SigRenderer.SCREEN_WIDTH)/2,(screen.getDisplayMode().getHeight()-SigRenderer.SCREEN_HEIGHT)/2);
|
||||
panel.init();
|
||||
|
||||
|
||||
new Thread() {
|
||||
public void run(){
|
||||
while (true) {
|
||||
|
@ -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…
x
Reference in New Issue
Block a user