What is if direction: ?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By im-juliecorn

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
	velocity.x = move_toward(velocity.x, 0, SPEED)
	velocity.z = move_toward(velocity.z, 0, SPEED)


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

:bust_in_silhouette: Reply From: jgodfrey

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).

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

im-juliecorn | 2022-12-28 19:00