diff --git a/maps/world1.map b/maps/world1.map index 2512684..77d26cc 100644 Binary files a/maps/world1.map and b/maps/world1.map differ diff --git a/src/sig/objects/Player.java b/src/sig/objects/Player.java index d929f6e..ee82ff5 100644 --- a/src/sig/objects/Player.java +++ b/src/sig/objects/Player.java @@ -361,6 +361,56 @@ public class Player extends AnimatedObject implements CollisionEntity { double displacement_x = x_velocity*updateMult; boolean sideCollision = false; + boolean hitAbove=false; + if (y_velocity==0) { + if (!(checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2(),getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2)|| + checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX(),getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2))) { + groundCollision=false; + } else { + groundCollision=true; + jumpCount=maxJumpCount; + } + } else { + double startingY=getY(); + groundCollision=false; + if (displacement_y>0) { + for (int y=(int)getY();ystartingY+displacement_y;y--) { + if (y==getY()) { + continue; + } + if (checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2()-1,y+getCollisionBox().getY()-getSprite().getHeight()/2)|| + checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX()+1,y+getCollisionBox().getY()-getSprite().getHeight()/2)) { + setY(y+1); + hitAbove=true; + spacebarPressed=0; + state=State.FALLING; + y_acceleration = 0; + y_velocity = 0; + displacement_y=0; + //groundCollision = true; + break; + } + } + } + } double startingX=getX(); if (displacement_x>0.00001) { @@ -370,8 +420,8 @@ public class Player extends AnimatedObject implements CollisionEntity { } if (checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()))|| checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY()))) { - if (!(checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()-1))&& - checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY()-1)))) { + if (!(checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()-2))|| + checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY()-2)))) { setY(getY()-1); } else { x_acceleration = 0; @@ -381,7 +431,7 @@ public class Player extends AnimatedObject implements CollisionEntity { break; } } else { - if (!checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+1))&& + if (!hitAbove&&!checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+1))&& checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2))) { //System.out.println("Performs check."+System.currentTimeMillis()); setY(getY()+1); @@ -397,8 +447,8 @@ public class Player extends AnimatedObject implements CollisionEntity { } if (checkCollision((x+getCollisionBox().getX()-getSprite().getWidth()/2),getY()-getSprite().getHeight()/2+getCollisionBounds().getY2())|| checkCollision((x+getCollisionBox().getX()-getSprite().getWidth()/2),getY()-getSprite().getHeight()/2+getCollisionBounds().getY())) { - if (!(checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()-1))&& - checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY()-1)))) { + if (!(checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()-2))|| + checkCollision(x+getCollisionBox().getX()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY()-2)))) { setY(getY()-1); } else { x_acceleration = 0; @@ -408,7 +458,7 @@ public class Player extends AnimatedObject implements CollisionEntity { break; } } else { - if (!checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+1))&& + if (!hitAbove&&!checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+1))&& checkCollision(x+getCollisionBox().getX2()-getSprite().getWidth()/2,(getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2))) { //System.out.println("Performs check."+System.currentTimeMillis()); setY(getY()+1); @@ -417,51 +467,6 @@ public class Player extends AnimatedObject implements CollisionEntity { } } } - if (y_velocity==0) { - if (!(checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2(),getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2)|| - checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX(),getY()-getSprite().getHeight()/2+getCollisionBounds().getY2()+2))) { - groundCollision=false; - } else { - groundCollision=true; - jumpCount=maxJumpCount; - } - } else { - double startingY=getY(); - groundCollision=false; - if (displacement_y>0) { - for (int y=(int)getY();ystartingY+displacement_y;y--) { - if (y==getY()) { - continue; - } - if (checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2()-1,y+getCollisionBox().getY()-getSprite().getHeight()/2)|| - checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX()+1,y+getCollisionBox().getY()-getSprite().getHeight()/2)) { - setY(y+1); - y_acceleration = 0; - y_velocity = 0; - groundCollision = true; - break; - } - } - } - } if (!groundCollision){ this.setY(this.getY()+displacement_y); y_acceleration = GRAVITY;