You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
extends KinematicBody2D |
|
|
|
|
|
var moveSpeed : int = 180 |
|
var vel = Vector2() |
|
var facingDir = Vector2() |
|
onready var rayCast = $RayCast2D |
|
onready var anim = $AnimatedSprite |
|
|
|
func _ready(): |
|
pass |
|
|
|
func _physics_process(delta): |
|
handle_interactions() |
|
handle_movements() |
|
|
|
func handle_interactions(): |
|
if Input.is_action_just_pressed("ui_accept"): |
|
for body in $Area2D.get_overlapping_areas(): |
|
if body.has_method("show_dialogue"): |
|
body.show_dialogue() |
|
return |
|
|
|
func handle_movements(): |
|
vel = Vector2() |
|
|
|
# inputs |
|
if Input.is_action_pressed("move_up"): |
|
vel.y = -1 |
|
facingDir = Vector2(0, -1) |
|
if Input.is_action_pressed("move_down"): |
|
vel.y = 1 |
|
facingDir = Vector2(0, 1) |
|
if Input.is_action_pressed("move_left"): |
|
vel.x = -1 |
|
facingDir = Vector2(-1, 0) |
|
if Input.is_action_pressed("move_right"): |
|
vel.x = 1 |
|
facingDir = Vector2(1, 0) |
|
|
|
# normalize the velocity to prevent faster diagonal movement |
|
vel = vel.normalized() |
|
|
|
# move the player |
|
move_and_slide(vel * moveSpeed, Vector2.ZERO) |
|
manage_animations() |
|
|
|
func play_animation (anim_name): |
|
if anim.animation != anim_name: |
|
anim.play(anim_name) |
|
|
|
func manage_animations (): |
|
if vel.x > 0: |
|
play_animation("MoveRight") |
|
elif vel.x < 0: |
|
play_animation("MoveLeft") |
|
elif vel.y < 0: |
|
play_animation("MoveUp") |
|
elif vel.y > 0: |
|
play_animation("MoveDown") |
|
elif facingDir.x == 1: |
|
play_animation("IdleRight") |
|
elif facingDir.x == -1: |
|
play_animation("IdleLeft") |
|
elif facingDir.y == -1: |
|
play_animation("IdleUp") |
|
elif facingDir.y == 1: |
|
play_animation("IdleDown") |
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame. |
|
#func _process(delta): |
|
# pass
|
|
|