summaryrefslogtreecommitdiff
path: root/Characters/Character.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Characters/Character.gd')
-rw-r--r--Characters/Character.gd99
1 files changed, 99 insertions, 0 deletions
diff --git a/Characters/Character.gd b/Characters/Character.gd
new file mode 100644
index 0000000..bf16dbf
--- /dev/null
+++ b/Characters/Character.gd
@@ -0,0 +1,99 @@
+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.flip_h = true
+ if self.is_running():
+ velocity.x *= 2
+ $Sprite.play("run")
+ else:
+ $Sprite.play("walk")
+ elif Input.is_action_pressed("ui_right"):
+ velocity.x = SPEED
+ direction = Enum.DIRECTION.RIGHT
+ $Sprite.flip_h = false
+ if self.is_running():
+ velocity.x *= 2
+ $Sprite.play("run")
+ else:
+ $Sprite.play("walk")
+ else:
+ $Sprite.play("idle")
+
+
+ # jump and fall animation
+ if not is_on_floor():
+ $Sprite.play("jump")
+ if has_node("CheckFallStop"):
+ 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 is_running():
+ return Input.is_action_pressed("ui_accept") and is_on_floor()
+
+
+func check_flag():
+ # $Sprite.play("dance anim")
+ print("FLAG CHECKED")