mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-11-04 08:35:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
class_name NoteBlock
 | 
						|
extends Block
 | 
						|
 | 
						|
var bodies: Array[CharacterBody2D] = []
 | 
						|
 | 
						|
signal bounced
 | 
						|
var animating := false
 | 
						|
@export var play_sfx := true
 | 
						|
 | 
						|
func bounce_up() -> void:
 | 
						|
	if bouncing or animating:
 | 
						|
		return
 | 
						|
	bounced.emit()
 | 
						|
	bouncing = true
 | 
						|
	animating = true
 | 
						|
	%Animations.play("BounceUp")
 | 
						|
	dispense_item(-1)
 | 
						|
	await %Animations.animation_finished
 | 
						|
	bouncing = false
 | 
						|
	animating = false
 | 
						|
 | 
						|
func _physics_process(_delta: float) -> void:
 | 
						|
	for i in %Area.get_overlapping_areas():
 | 
						|
		if i.owner is CharacterBody2D:
 | 
						|
			bounce_down(i.owner)
 | 
						|
 | 
						|
func bounce_down(body: PhysicsBody2D) -> void:
 | 
						|
	if bouncing or animating:
 | 
						|
		return
 | 
						|
	animating = true
 | 
						|
	bounced.emit()
 | 
						|
	if play_sfx:
 | 
						|
		AudioManager.play_sfx("note_block", global_position)
 | 
						|
	bodies.append(body)
 | 
						|
	if body is Player:
 | 
						|
		body.normal_state.jump_queued = false
 | 
						|
		body.spring_bouncing = true
 | 
						|
	%Animations.play("BounceDown")
 | 
						|
	dispense_item(1)
 | 
						|
	await %Animations.animation_finished
 | 
						|
	animating = false
 | 
						|
	bouncing = false
 | 
						|
 | 
						|
func bounce_bodies() -> void:
 | 
						|
	for i in bodies:
 | 
						|
		if i is Player:
 | 
						|
			i.spring_bouncing = false
 | 
						|
			if Global.player_action_pressed("jump", i.player_id):
 | 
						|
				i.jump_cancelled = false
 | 
						|
				i.has_jumped = true
 | 
						|
				i.velocity.y = -350
 | 
						|
				i.gravity = i.JUMP_GRAVITY
 | 
						|
			else:
 | 
						|
				i.velocity.y = -300
 | 
						|
				i.gravity = i.FALL_GRAVITY
 | 
						|
		else:
 | 
						|
			i.velocity.y = -200
 | 
						|
		if i is Thwomp:
 | 
						|
			i.velocity = Vector2.ZERO
 | 
						|
	bodies.clear()
 | 
						|
 | 
						|
func dispense_item(direction := -1) -> void:
 | 
						|
	if item == null or item_amount <= 0:
 | 
						|
		return
 | 
						|
	item_amount -= 1
 | 
						|
	var node = item.instantiate()
 | 
						|
	node.global_position = global_position + Vector2(0, 8 * direction)
 | 
						|
	node.set("velocity", Vector2(0, (100 if direction == 1 else -150)))
 | 
						|
	add_sibling(node)
 | 
						|
	AudioManager.play_sfx("item_appear", global_position)
 |