Godot Version
4.4
Question
So i am making a 2d topdown game for fun ,and I can’t figure out how to make my player look in a specific direction, when transitioning between rooms.
I am using animation tree for directions and animation player for animations.
Here is the code i use for player movement:
extends CharacterBody2D
var direction : Vector2 = Vector2.ZERO
var speed = 80
@onready var anim_player = $AnimationPlayer
@onready var animation_tree : AnimationTree = $AnimationTree
func _ready() -> void:
animation_tree.active = true
#Handle Input and directions
func get_input():
if Global.can_move:
direction = Input.get_vector("Left", "Right", "Up", "Down").normalized()
if direction:
velocity = direction * speed
else:
velocity = Vector2.ZERO
if Input.is_action_pressed("Sprint"):
speed = 100
else:
speed = 80
func _physics_process(_delta):
update_animation_parameters()
get_input()
move_and_slide()
#Update animations
func update_animation_parameters():
if Global.can_move == true:
if (velocity == Vector2.ZERO):
animation_tree["parameters/conditions/idle"] = true
animation_tree["parameters/conditions/is_moving"] = false
animation_tree["parameters/conditions/is_running"] = false
elif Input.is_action_pressed("Sprint"):
animation_tree["parameters/conditions/idle"] = false
animation_tree["parameters/conditions/is_moving"] = false
animation_tree["parameters/conditions/is_running"] = true
else:
animation_tree["parameters/conditions/idle"] = false
animation_tree["parameters/conditions/is_moving"] = true
animation_tree["parameters/conditions/is_running"] = false
if direction != Vector2.ZERO:
animation_tree["parameters/Idle/blend_position"] = direction
animation_tree["parameters/Run/blend_position"] = direction
animation_tree["parameters/Walk/blend_position"] = direction
And here is code i use for transitions (still gonna be adding transition animations):
extends Area2D
var current_scene = Global.current_scene
@export var scene_tp : PackedScene = null
#Player
@export_category("Player")
@export var position_y_tp : float = 0
@export var position_x_tp : float = 0
@export var can_move : bool = true
@export_enum("Up","Down","Left","Right") var facing = 0
#Camera
@export_category("Camera")
@export var camera_max_left : int = -160
@export var camera_max_right : int = 160
@export var camera_max_up : int = -90
@export var camera_max_down : int = 90
@onready var player = preload("res://Scenes/Things/Characters/player.tscn")
func _on_body_entered(body: Node2D) -> void:
get_tree().change_scene_to_packed(scene_tp)
player.instantiate().position = Vector2(position_x_tp, position_y_tp)
**if facing == 0:**
** player.direction = Vector2(-1, 0)**
** player.direction = Vector2.ZERO**
** elif facing == 1:**
** player.direction = Vector2(1,0)**
** player.direction = Vector2.ZERO**
** elif facing == 2:**
** player.direction = Vector2(0,1)**
** player.direction = Vector2.ZERO**
** elif facing == 3:**
** player.direction = Vector2(0,-1)**
** player.direction = Vector2.ZERO**
** else:**
** pass**
Global.m_cam_bottom_max = camera_max_down
Global.m_cam_right_max = camera_max_right
Global.m_cam_left_max = camera_max_left
Global.m_cam_top_max = camera_max_up
(The bold text is what is not working for me)
This is supposed to be reusable transition node.
Sorry for my spaghetti code, I come from game maker and and I am still a newbee in godot and gdscript.
Thanks