private Vector3 CalculateDirectionBasedOnInput(CubioInput cubioInput) { Vector3 direction = new Vector3(); Spatial camera = GetNode("Target/Camera") as Spatial; Transform cameraTransform = camera.GlobalTransform; if (cubioInput.MoveForward) { direction += -cameraTransform.basis[2]; } if (cubioInput.MoveBackWards) { direction += cameraTransform.basis[2]; } if (cubioInput.MoveLeft) { direction += -cameraTransform.basis[0]; } if (cubioInput.MoveRight) { direction += cameraTransform.basis[0]; } return(direction); }
public override void _PhysicsProcess(float delta) { CubioInput cubioInput = ListenToInput(); if (cubioInput.ResetPosition) { Translation = InitialPosition; } Vector3 direction = CalculateDirectionBasedOnInput(cubioInput); direction.y = 0; direction = direction.Normalized(); Vector3 newVelocity = calculateNewVelocity(direction, delta); _velocity.x = newVelocity.x; _velocity.z = newVelocity.z; _velocity = MoveAndSlide(_velocity, Vector3.Up); if (IsOnFloor() && cubioInput.Jump) { _velocity.y = JumpSpeed; } }