Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends KinematicBody2D
- const SPEED = 70
- const DIRS = {
- "left": Vector2(-1, 0),
- "right": Vector2(1, 0),
- "up": Vector2(0, -1),
- "down": Vector2(0, 1)
- }
- var movedir = Vector2(0, 0)
- var spritedir = "down"
- func _physics_process(delta):
- controls_loop()
- movement_loop()
- spritedir_loop()
- if is_on_wall():
- for dir in DIRS:
- var vec = DIRS[dir]
- if spritedir == dir and test_move(transform, vec):
- anim_switch("push")
- elif movedir != Vector2(0,0):
- anim_switch("walk")
- else:
- anim_switch("idle")
- func controls_loop():
- var LEFT = Input.is_action_pressed("ui_left")
- var RIGHT = Input.is_action_pressed("ui_right")
- var UP = Input.is_action_pressed("ui_up")
- var DOWN = Input.is_action_pressed("ui_down")
- movedir.x = -int(LEFT) + int(RIGHT)
- movedir.y = -int(UP) + int(DOWN)
- func movement_loop():
- var motion = movedir.normalized() * SPEED
- move_and_slide(motion, Vector2(0, 0))
- func spritedir_loop():
- for dir in DIRS:
- var vec = DIRS[dir]
- if movedir == vec:
- spritedir = dir
- func anim_switch(animation):
- var newanim = str(animation, spritedir)
- if $anim.current_animation != newanim:
- $anim.play(newanim)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement