pandemonium_demo_projects/2d/layered_tile_maps/isometric/player/goblin.gd

57 lines
1.4 KiB
GDScript

extends CharacterBody2D
const MOTION_SPEED = 160 # Pixels/second.
var last_direction = Vector2(1, 0)
var anim_directions = {
"idle": [ # list of [animation name, horizontal flip]
["side_right_idle", false],
["45front_right_idle", false],
["front_idle", false],
["45front_left_idle", false],
["side_left_idle", false],
["45back_left_idle", false],
["back_idle", false],
["45back_right_idle", false],
],
"walk": [
["side_right_walk", false],
["45front_right_walk", false],
["front_walk", false],
["45front_left_walk", false],
["side_left_walk", false],
["45back_left_walk", false],
["back_walk", false],
["45back_right_walk", false],
],
}
func _physics_process(_delta):
var motion = Vector2()
motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
motion.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
motion.y /= 2
motion = motion.normalized() * MOTION_SPEED
#warning-ignore:return_value_discarded
set_velocity(motion)
move_and_slide()
var dir = velocity
if dir.length() > 0:
last_direction = dir
update_animation("walk")
else:
update_animation("idle")
func update_animation(anim_set):
var angle = rad_to_deg(last_direction.angle()) + 22.5
var slice_dir = floor(angle / 45)
$Sprite2D.play(anim_directions[anim_set][slice_dir][0])
$Sprite2D.flip_h = anim_directions[anim_set][slice_dir][1]