Files
Super-Mario-Bros.-Remastere…/Scripts/Classes/Entities/Objects/RopeElevatorPlatform.gd
2025-09-13 16:30:32 +01:00

51 lines
1.3 KiB
GDScript

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