| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- class_name RopeElevatorPlatform
- extends Node2D
- @export var linked_platform: Node2D = null
- @onready var platform: AnimatableBody2D = $Platform
- @onready var player_detection: Area2D = $Platform/PlayerDetection
- @export var rope_top := -160
- var velocity := 0.0
- var dropped := false
- var player_stood_on := false
- var sample_colour: Texture = null
- func _ready() -> void:
- $Platform/ScoreNoteSpawner.owner = $Platform
- func _process(_delta: float) -> void:
- if not dropped:
- $Rope.size.y = platform.global_position.y - rope_top
- $Rope.global_position.y = rope_top
- func _physics_process(delta: float) -> void:
- player_stood_on = player_detection.get_overlapping_areas().any(is_player)
- if dropped:
- velocity += (5 / delta) * delta
- platform.position.y += velocity * delta
- return
- else:
- if platform.global_position.y <= rope_top or linked_platform.dropped:
- dropped = true
- if linked_platform.dropped:
- if Settings.file.audio.extra_sfx == 1:
- AudioManager.play_sfx("lift_fall", global_position)
- $Platform/ScoreNoteSpawner.spawn_note(1000)
- if player_stood_on:
- velocity += (2 / delta) * delta
- else:
- velocity = lerpf(velocity, 0, delta * 2)
- linked_platform.velocity = -velocity
- platform.position.y += velocity * delta
-
- func is_player(area: Area2D) -> bool:
- if area.owner is Player:
- return area.owner.is_on_floor()
- return false
|