From 1f5cbd514a186ea3aaf008121fcfc639b15c93ff Mon Sep 17 00:00:00 2001 From: Joshua Sigona Date: Sat, 13 Nov 2021 19:54:58 +0900 Subject: [PATCH] Jumping on staircases. --- src/sig/SigRenderer.java | 17 ++++++- src/sig/models/Staircase.java | 84 ++++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 38 deletions(-) diff --git a/src/sig/SigRenderer.java b/src/sig/SigRenderer.java index 6959185..a781150 100644 --- a/src/sig/SigRenderer.java +++ b/src/sig/SigRenderer.java @@ -124,6 +124,20 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene return true; } + public static boolean checkRawCollision(float x,float y,float z) { + for (int yy=0;yyMOVESPEED) { @@ -221,9 +235,10 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene } } - if (spaceHeld&&jumpsAvailable==1&&fallSpd==0&&!checkCollisionSquare(0,-gravity,0)) { + if (spaceHeld&&jumpsAvailable==1&&fallSpd==0&&(!checkRawCollision(0,-gravity,0))) { jumpsAvailable=0; fallSpd=JUMP_HEIGHT; + currentStaircase=null; } } diff --git a/src/sig/models/Staircase.java b/src/sig/models/Staircase.java index ea34618..c230ad0 100644 --- a/src/sig/models/Staircase.java +++ b/src/sig/models/Staircase.java @@ -95,43 +95,53 @@ public class Staircase extends Mesh{ } public boolean handleCollision(Block b,float x,float z) { if (SigRenderer.currentStaircase!=null&&b.pos.y==SigRenderer.currentStaircase.triangles.get(0).b.pos.y) { - float diffX=Math.min(1,Math.max(0f,SigRenderer.vCamera.x-b.pos.x)); - float diffZ=Math.min(1,Math.max(0f,SigRenderer.vCamera.z-b.pos.z)); - switch (b.getFacingDirection()) { - case EAST: { - if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+diffX+x+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { - SigRenderer.vCamera.y=b.pos.y+diffX+0.3f; - } else { - SigRenderer.fallSpd=0; - return false; - } - }break; - case NORTH: { - if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+(1-diffZ+z)+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { - SigRenderer.vCamera.y=b.pos.y+(1-diffZ)+0.3f; - } else { - SigRenderer.fallSpd=0; - return false; - } - }break; - case SOUTH: { - if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+diffZ+z+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { - SigRenderer.vCamera.y=b.pos.y+diffZ+0.3f; - } else { - SigRenderer.fallSpd=0; - return false; - } - }break; - case WEST: { - if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+(1-diffX+x)+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { - SigRenderer.vCamera.y=b.pos.y+(1-diffX)+0.3f; - } else { - SigRenderer.fallSpd=0; - return false; - } - }break; - } - SigRenderer.fallSpd=0; + float diffX=Math.min(1,Math.max(0.3f,SigRenderer.vCamera.x-b.pos.x)); + float diffZ=Math.min(1,Math.max(0.3f,SigRenderer.vCamera.z-b.pos.z)); + switch (b.getFacingDirection()) { + case EAST: { + if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+diffX+x+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { + if (SigRenderer.fallSpd<=0) { + SigRenderer.vCamera.y=b.pos.y+diffX+0.3f; + } + } else { + //SigRenderer.fallSpd=0; + return false; + } + }break; + case NORTH: { + if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+(1-diffZ+z)+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { + if (SigRenderer.fallSpd<=0) { + SigRenderer.vCamera.y=b.pos.y+(1-diffZ)+0.3f; + } + } else { + //SigRenderer.fallSpd=0; + return false; + } + }break; + case SOUTH: { + if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+diffZ+z+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { + if (SigRenderer.fallSpd<=0) { + SigRenderer.vCamera.y=b.pos.y+diffZ+0.3f; + } + } else { + //SigRenderer.fallSpd=0; + return false; + } + }break; + case WEST: { + if (checkCollision(SigRenderer.vCamera.x+x, b.pos.y+(1-diffX+x)+1.3f, SigRenderer.vCamera.z+z,SigRenderer.currentStaircase)) { + if (SigRenderer.fallSpd<=0) { + SigRenderer.vCamera.y=b.pos.y+(1-diffX)+0.3f; + } + } else { + //SigRenderer.fallSpd=0; + return false; + } + }break; + } + if (SigRenderer.fallSpd<=0) { + SigRenderer.fallSpd=0; + } return true; } if (SigRenderer.vCamera.y>=b.pos.y&&SigRenderer.vCamera.y