mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-10-30 19:29:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
