mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
added the game
This commit is contained in:
55
Scripts/Classes/Blocks/MusicNoteBlock.gd
Normal file
55
Scripts/Classes/Blocks/MusicNoteBlock.gd
Normal file
@@ -0,0 +1,55 @@
|
||||
extends NoteBlock
|
||||
|
||||
const INTRUMENT_SFX := [preload("uid://dia0bsspwrqsn"), preload("uid://d2elbhakm1yfq"), preload("uid://vxox7t6qvyvu"), preload("uid://w44jys81bxjj"), preload("uid://b2lj4akov8ami"), preload("uid://c03nay4r4a2lm"), preload("uid://d0pdbnpfcm80i"), preload("uid://dodww1no4v6qh")]
|
||||
|
||||
var pitch := 0.0
|
||||
var sfx_stream = null
|
||||
|
||||
static var can_play := false
|
||||
|
||||
@export var play_on_load := false
|
||||
|
||||
@export_enum("Bass", "Flute", "Marimba", "Piano", "Rhodes", "Steel", "Trumpet", "Violin") var instrument := 0:
|
||||
set(value):
|
||||
sfx_stream = INTRUMENT_SFX[value]
|
||||
instrument = value
|
||||
play_sfx_preview()
|
||||
|
||||
@export_enum("A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#") var note := 3:
|
||||
set(value):
|
||||
note = value
|
||||
pitch = get_pitch_scale()
|
||||
play_sfx_preview()
|
||||
|
||||
@export_range(1, 5) var octave := 2:
|
||||
set(value):
|
||||
octave = value
|
||||
pitch = get_pitch_scale()
|
||||
play_sfx_preview()
|
||||
|
||||
func _ready() -> void:
|
||||
await get_tree().create_timer(0.1, true).timeout
|
||||
can_play = true
|
||||
|
||||
func _exit_tree() -> void:
|
||||
can_play = false
|
||||
|
||||
func get_pitch_scale() -> float:
|
||||
var semitone_offset = (octave - 2) * 12 + (note - 3) # C4 is the base note (note index 3)
|
||||
return 2.0 ** (semitone_offset / 12.0)
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
%Note.frame = note
|
||||
%Octave.frame = octave + 12
|
||||
|
||||
func play_sfx_preview() -> void:
|
||||
if get_node_or_null("Instrument") != null and can_play:
|
||||
print($Instrument.pitch_scale)
|
||||
$Instrument.stream = sfx_stream
|
||||
$Instrument.pitch_scale = pitch
|
||||
$Instrument.play()
|
||||
|
||||
|
||||
func on_screen_entered() -> void:
|
||||
if play_on_load and LevelEditor.playing_level:
|
||||
play_sfx_preview()
|
Reference in New Issue
Block a user