From 9965f91a76b78d9b9b9e700cda8d461bf367951a Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sat, 11 Jun 2022 23:45:56 -0500 Subject: [PATCH] Platforming mishaps fixed Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 --- maps/world1.map | Bin 295488 -> 295488 bytes src/sig/objects/Player.java | 107 +++++++++++++++++++----------------- 2 files changed, 56 insertions(+), 51 deletions(-) diff --git a/maps/world1.map b/maps/world1.map index 2512684dd6c98bcb899f376d06584d183dff8cf8..77d26cc7c1583812e321706970b9f7e8cf420617 100644 GIT binary patch delta 61 zcmX@mB6OfdXoI|nATt9RoUYKo(zsC}fO#^%4OcU_L_4tIG4pnA2^P~V0CN}% As{jB1 delta 42 vcmX@mB6OfdXoI}SW@C|a%o7zvCiB~HHFHa}b4xG+F%u9oZ|9a^G0g%19QF$@ 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;