0 votes

I am currently playing around with godot 4 and came across this built in CharacterBody3d script template that im trying to understand:

extends CharacterBody3D


const SPEED = 5.0
const JUMP_VELOCITY = 4.5

# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _physics_process(delta):
# Add the gravity.
if not is_on_floor():
    velocity.y -= gravity * delta

# Handle Jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
    velocity.y = JUMP_VELOCITY

# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
    velocity.x = direction.x * SPEED
    velocity.z = direction.z * SPEED
else:
    velocity.x = move_toward(velocity.x, 0, SPEED)
    velocity.z = move_toward(velocity.z, 0, SPEED)

move_and_slide()

The problem: I am not familiar with the expression if direction: what kind of if statement is that and what does it mean/do? Where can I maybe read up on that?
Thanks for reading and have a great day

Godot version Godot 4.0 beta9 win64
in Engine by (17 points)

1 Answer

+2 votes
Best answer

An if statement always analyzes a boolean value (so, true or false).

In the case of the above code, direction is a Vector2. However, if you look at the Vector2 docs, you'll see the following statement:

Note: In a boolean context, a Vector2 will evaluate to false if it's equal to Vector2(0, 0). Otherwise, a Vector2 will always evaluate to true.

So, if direction: will resolve to true in any case where the direction vector IS NOT (0,0). It will resolve to false in any case where the direction vector IS (0,0).

by (19,272 points)
edited by

Thank you so much, that cleared up a lot I didn’t know. Have a good one!

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.