|
|
|
@ -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();y<startingY+displacement_y;y++) { |
|
|
|
|
if (y==getY()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2()-1,y+getCollisionBox().getY2()-getSprite().getHeight()/2)|| |
|
|
|
|
checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX()+1,y+getCollisionBox().getY2()-getSprite().getHeight()/2)) { |
|
|
|
|
setY(y-0.1); |
|
|
|
|
//System.out.println("Running"+System.currentTimeMillis());
|
|
|
|
|
y_acceleration = 0; |
|
|
|
|
y_velocity = 0; |
|
|
|
|
groundCollision = true; |
|
|
|
|
if (state != State.SLIDE) { |
|
|
|
|
state = State.IDLE; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for (int y=(int)getY();y>startingY+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();y<startingY+displacement_y;y++) { |
|
|
|
|
if (y==getY()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX2()-1,y+getCollisionBox().getY2()-getSprite().getHeight()/2)|| |
|
|
|
|
checkCollision(getX()-getSprite().getWidth()/2+getCollisionBox().getX()+1,y+getCollisionBox().getY2()-getSprite().getHeight()/2)) { |
|
|
|
|
setY(y-0.1); |
|
|
|
|
//System.out.println("Running"+System.currentTimeMillis());
|
|
|
|
|
y_acceleration = 0; |
|
|
|
|
y_velocity = 0; |
|
|
|
|
groundCollision = true; |
|
|
|
|
if (state != State.SLIDE) { |
|
|
|
|
state = State.IDLE; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for (int y=(int)getY();y>startingY+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; |
|
|
|
|