summaryrefslogtreecommitdiff
path: root/Character.gd
blob: 54bfdc549e903103530a2d823feef75ce7c78ea4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
extends KinematicBody2D


const SPEED = 130
const JUMPFORCE = -500
const GRAVITY = 20

var velocity = Vector2()
var direction = Enum.DIRECTION.RIGHT

var canDoubleJump = false
var hasPlayedFallStop = false


func _physics_process(_delta):
	if Input.is_action_pressed("ui_left"):
		velocity.x = -SPEED
		direction = Enum.DIRECTION.LEFT
		$Sprite.play("walk")
		$Sprite.flip_h = true
		
		if Input.is_action_pressed("ui_accept"):
			velocity.x *=2
			$Sprite.play("slide")
	elif Input.is_action_pressed("ui_right"):
		velocity.x = SPEED
		direction = Enum.DIRECTION.RIGHT
		$Sprite.play("walk")
		$Sprite.flip_h = false
		
		if Input.is_action_pressed("ui_accept"):
			velocity.x *= 2
			$Sprite.play("slide")
	else:
		$Sprite.play("idle")
	
	# jump and fall animation
	if not is_on_floor():
		$Sprite.play("jump")
		if velocity.y > -JUMPFORCE:
			$CheckFallLanding.set_enabled(true)
			$CheckFallStop.set_enabled(true)
			if $CheckFallLanding.is_colliding():
				$Sprite.play("fall_stop_landing")
			elif $CheckFallStop.is_colliding():
				$Sprite.play("fall_stop")
			else:
				$Sprite.play("fall")
		else:
			$CheckFallLanding.set_enabled(false)
			$CheckFallStop.set_enabled(true)
			
	
	# fall down
	velocity.y += GRAVITY
	
	# jump
	if Input.is_action_just_pressed("ui_up"):
		if is_on_floor():
			canDoubleJump = true
			velocity.y = JUMPFORCE
		elif not is_on_floor() and not is_on_wall() and canDoubleJump:
			canDoubleJump = false
			velocity.y = JUMPFORCE
	
	if is_on_wall():
		velocity.y *= 0.8
		$Sprite.play("wall")
		
		if Input.is_action_just_pressed("ui_up"):
			Input.action_release("ui_left")
			Input.action_release("ui_right")
			velocity.y = JUMPFORCE * 0.75
			if direction == Enum.DIRECTION.LEFT:
				velocity.x = 2000
				$Sprite.flip_h = false
			elif direction == Enum.DIRECTION.RIGHT:
				velocity.x = -2000
				$Sprite.flip_h = true
	
	velocity = move_and_slide(velocity, Vector2.UP)
	
	# stop
	velocity.x = lerp(velocity.x, 0, 0.7)


func check_flag():
	# $Sprite.play("dance anim")
	print("FLAG CHECKED")