@Override public void applyLimits(PhysicsWorld physicsWorld) { if (Control.ATTACK.isJustDown()) { this.playerAgent.useCurrentAttack(physicsWorld); } if (Control.LEFT.isDown()) { this.playerAgent.setFacingLeft(true); } else if (Control.RIGHT.isDown()) { this.playerAgent.setFacingLeft(false); } if (!(Control.LEFT.isDown() || Control.RIGHT.isDown())) { this.playerAgent.getVelocity().x = this.playerAgent.getVelocity().x * physicsWorld.getAirFriction().x; } float maxX = Math.max( Math.abs(previousVelocity.x * physicsWorld.getAirFriction().x), Math.min( physicsWorld.getAirSpeedMax().x, this.playerAgent.getAgentStats().getMovementProfile().getMaxFallVelocity().x)); float maxY = Math.max( Math.abs(previousVelocity.y), Math.min( physicsWorld.getAirSpeedMax().y, this.playerAgent.getAgentStats().getMovementProfile().getMaxFallVelocity().y)); playerAgent.getVelocity().x = MathUtils.clamp(playerAgent.getVelocity().x, -maxX, maxX); playerAgent.getVelocity().y = MathUtils.clamp(playerAgent.getVelocity().y, -maxY, maxY); if (!(Control.LEFT.isDown() || Control.RIGHT.isDown()) && Math.abs(playerAgent.getVelocity().x) <= Math.min(physicsWorld.getAirSpeedMin().x, minimum.x)) { playerAgent.getVelocity().x = 0; } }
@Override public void applyLogic(PhysicsWorld physicsWorld) { previousVelocity.set(playerAgent.getVelocity()); if (Control.JUMP.isDown() && playerAgent.getVelocity().y > 0) { playerAgent.getAcceleration().y = this.playerAgent.getAgentStats().getMovementProfile().getFallAcceleration().y; } if (!Control.DOWN.isDown()) { playerAgent.setFallThrough(false); } if (Control.LEFT.isDown()) { playerAgent.getAcceleration().x = -this.playerAgent.getAgentStats().getMovementProfile().getFallAcceleration().x; } else if (Control.RIGHT.isDown()) { playerAgent.getAcceleration().x = this.playerAgent.getAgentStats().getMovementProfile().getFallAcceleration().x; } if (!Control.DOWN.isDown()) { playerAgent.setFallThrough(false); } playerAgent.applyDeltaVelocity(playerAgent.getAcceleration()); }