In my game, pressing shift makes you sprint. When you're sprinting, it subtracts 3 from how much Sprint you have ('Sprint' is essentially the stamina bar). When not sprinting, it adds 1 until it reaches max Sprint. The problem I'm having is when Sprint reaches 0, it should force the player to stop sprinting, but it doesn't. If shift is still being held when it hits 0, you can continue to sprint, even though you shouldn't be able to. Any help would be greatly appreciated.
This is the code I have
public Player() { speed = 2; sprint = 390; sprintLock = false; sprintCap = true; sprintCoolDown = false; } public void act() { Orchard orchard = (Orchard) getWorld(); int dx = 0, dy = 0; if(Greenfoot.isKeyDown("W")) dy = -speed; if(Greenfoot.isKeyDown("A")) dx = -speed; if(Greenfoot.isKeyDown("S")) dy = speed; if(Greenfoot.isKeyDown("D")) dx = speed; setLocation(getX()+dx, getY()+dy); animation(); animationTimers(); movement(); orchard.sprintDisplay.setValue(sprint); } public void movement() { if(sprint == 0) { sprintLock = true; sprintCoolDown = true; sprinting = false; } if(sprint != 390) { sprintCap = false; } else if (sprint == 390) { sprintCap = true; sprintLock = false; sprintCoolDown = false; } if(sprintCoolDown == true) { sprint = sprint +1; } if(Greenfoot.isKeyDown("SHIFT")) sprinting = true; if(!Greenfoot.isKeyDown("SHIFT")) sprinting = false; if(sprinting == false) { speed = 2; if(sprintCoolDown == false) { if(sprintCap == false) { sprint = sprint +1; } } } if(sprintCoolDown == false) { if(sprintLock == false) { if(sprinting == true) { speed = 6; sprint = sprint -3; } } } }