diff options
Diffstat (limited to 'Characters/Character.gd')
-rw-r--r-- | Characters/Character.gd | 99 |
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") |