1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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]
|