public void update(float delta, Camera c) { heal(healthregen * delta); regenerateMana(manaregen * delta); if (!isJumping && input.isJumpPressed()) { characterController.jump(); animations.setAnimation("Jumping"); isJumping = true; } else { isJumping = false; } if (!isPerformingRightAction && input.isRightHandPressed()) { isPerformingRightAction = true; rightweapon.onAttackStart(); rightActionTimer += delta; } else if (isPerformingRightAction) { rightActionTimer += delta; if (rightActionTimer > rightweapon.attacktime) { rightActionTimer = 0; isPerformingRightAction = false; rightweapon.onAttackEnd(); } } if (!isPerformingLeftAction && input.isLeftHandPressed()) { leftweapon.onAttackStart(); isPerformingLeftAction = true; leftActionTimer += delta; } else if (isPerformingLeftAction) { leftActionTimer += delta; if (leftActionTimer > leftweapon.attacktime) { leftActionTimer = 0; isPerformingLeftAction = false; rightweapon.onAttackEnd(); } } Vector3 movement = new Vector3(); Vector3 back = new Vector3(c.direction.x, c.direction.y, 0).nor(); back.nor(); movement.add(back.cpy().scl(input.getForward())); movement.add(back.cpy().crs(0, 0, 1).scl(input.getRight())); movement.nor(); movement.scl(input.isSprintPressed() ? 5 : 1); characterController.setWalkDirection(movement.cpy().scl(delta * runspeed)); if (movement.len() != 0) { face = movement.cpy().scl(-1); if (characterController.canJump()) { animations.setAnimation("Walking", -1, 0.4f * movement.len() * runspeed, null); } } else { if (characterController.canJump()) { animations.setAnimation(null); } } mi.transform.set(ghostObject.getWorldTransform().translate(0, 0, -0.25f)); mi.transform.rotate(0, 0, -1, (float) Math.toDegrees(Math.atan2(face.x, face.y))); updateWeaponInstances(); animations.update(delta); }