From a1c4cac826d90f292e67238c9467183c953d19b5 Mon Sep 17 00:00:00 2001 From: Alex Munoz Date: Fri, 27 Sep 2024 14:40:44 -0400 Subject: [PATCH] music update in progress --- .../saved_state.json | 206 +++++++++--------- assets/audio/20 Axes Arr MSTR LOOP.mp3.import | 19 ++ assets/audio/20 Axes Arr MSTR.mp3.import | 19 ++ assets/audio/Forest Arr MSTR LOOP.mp3.import | 19 ++ assets/audio/Forest Arr MSTR.mp3.import | 19 ++ .../audio/Lacrimosa Arr MSTR LOOP.mp3.import | 19 ++ assets/audio/Lacrimosa Arr MSTR.mp3.import | 19 ++ .../Strong Chill Arr MSTR LOOP.mp3.import | 19 ++ assets/audio/Strong Chill Arr MSTR.mp3.import | 19 ++ global/autoload/audio/audio.gd | 50 ++--- global/autoload/audio/audio.tscn | 26 +-- global/autoload/audio/music/music.gd | 44 ++++ global/autoload/audio/music/music.tscn | 33 +++ global/autoload/audio/music/track_state.gd | 19 ++ resources/songs/axes_to_a_bed.tres | 10 + resources/songs/song.gd | 4 + .../component/state_machine/state_machine.gd | 34 +++ .../state_machine/state_machine_state.gd | 25 +++ 18 files changed, 448 insertions(+), 155 deletions(-) create mode 100644 assets/audio/20 Axes Arr MSTR LOOP.mp3.import create mode 100644 assets/audio/20 Axes Arr MSTR.mp3.import create mode 100644 assets/audio/Forest Arr MSTR LOOP.mp3.import create mode 100644 assets/audio/Forest Arr MSTR.mp3.import create mode 100644 assets/audio/Lacrimosa Arr MSTR LOOP.mp3.import create mode 100644 assets/audio/Lacrimosa Arr MSTR.mp3.import create mode 100644 assets/audio/Strong Chill Arr MSTR LOOP.mp3.import create mode 100644 assets/audio/Strong Chill Arr MSTR.mp3.import create mode 100644 global/autoload/audio/music/music.gd create mode 100644 global/autoload/audio/music/music.tscn create mode 100644 global/autoload/audio/music/track_state.gd create mode 100644 resources/songs/axes_to_a_bed.tres create mode 100644 resources/songs/song.gd create mode 100644 scenes/component/state_machine/state_machine.gd create mode 100644 scenes/component/state_machine/state_machine_state.gd diff --git a/addons/resources_spreadsheet_view/saved_state.json b/addons/resources_spreadsheet_view/saved_state.json index b7c23b2..8721b2e 100644 --- a/addons/resources_spreadsheet_view/saved_state.json +++ b/addons/resources_spreadsheet_view/saved_state.json @@ -1,110 +1,110 @@ { "hidden_columns": { - "res://resources/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/enemy_data/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/event_data/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/event_data/res/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/event_data/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/npc_event/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/resource_generator/": { - "id": true, - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/resource_generator/cost_function/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/resource_generator/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/substance_data/tres/charm/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/tab_data/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/tab_data/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/worker_role/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/game_data/worker_role/tres/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/resource_generator/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/resource_generator/res/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/theme/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/worker_role/": { - "resource_local_to_scene": true, - "resource_name": true - }, - "res://resources/worker_role/res/": { - "resource_local_to_scene": true, - "resource_name": true - } + "res://resources/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/enemy_data/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/event_data/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/event_data/res/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/event_data/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/npc_event/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/resource_generator/": { + "id": true, + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/resource_generator/cost_function/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/resource_generator/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/substance_data/tres/charm/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/tab_data/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/tab_data/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/worker_role/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/game_data/worker_role/tres/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/resource_generator/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/resource_generator/res/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/theme/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/worker_role/": { + "resource_local_to_scene": true, + "resource_name": true + }, + "res://resources/worker_role/res/": { + "resource_local_to_scene": true, + "resource_name": true + } }, "recent_paths": [ - "res://resources/theme/", - "res://resources/worker_role/", - "res://resources/resource_generator/", - "res://resources/", - "res://resources/game_data/resource_generator/cost_function/", - "res://resources/game_data/tab_data/", - "res://resources/game_data/event_data/", - "res://resources/game_data/resource_generator/", - "res://resources/game_data/worker_role/", - "res://resources/game_data/event_data/tres/", - "res://resources/game_data/npc_event/tres/", - "res://resources/resource_generator/res/", - "res://resources/game_data/resource_generator/tres/", - "res://resources/game_data/worker_role/tres/", - "res://resources/worker_role/res/", - "res://resources/game_data/tab_data/tres/", - "res://resources/game_data/enemy_data/tres/", - "res://resources/game_data/event_data/res/", - "res://resources/game_data/substance_data/tres/charm/" + "res://resources/theme/", + "res://resources/worker_role/", + "res://resources/resource_generator/", + "res://resources/", + "res://resources/game_data/resource_generator/cost_function/", + "res://resources/game_data/tab_data/", + "res://resources/game_data/event_data/", + "res://resources/game_data/resource_generator/", + "res://resources/game_data/worker_role/", + "res://resources/game_data/event_data/tres/", + "res://resources/game_data/npc_event/tres/", + "res://resources/resource_generator/res/", + "res://resources/game_data/resource_generator/tres/", + "res://resources/game_data/worker_role/tres/", + "res://resources/worker_role/res/", + "res://resources/game_data/tab_data/tres/", + "res://resources/game_data/enemy_data/tres/", + "res://resources/game_data/event_data/res/", + "res://resources/game_data/substance_data/tres/charm/" ], "table_functions": { - "filter": [ - "return true" - ], - "process": [ - "return value" - ] + "filter": [ + "return true" + ], + "process": [ + "return value" + ] } -} +} \ No newline at end of file diff --git a/assets/audio/20 Axes Arr MSTR LOOP.mp3.import b/assets/audio/20 Axes Arr MSTR LOOP.mp3.import new file mode 100644 index 0000000..2af87fe --- /dev/null +++ b/assets/audio/20 Axes Arr MSTR LOOP.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://boao20b74vwfi" +path="res://.godot/imported/20 Axes Arr MSTR LOOP.mp3-f940619e5d2b0fe2acdf8de18cf8e643.mp3str" + +[deps] + +source_file="res://assets/audio/20 Axes Arr MSTR LOOP.mp3" +dest_files=["res://.godot/imported/20 Axes Arr MSTR LOOP.mp3-f940619e5d2b0fe2acdf8de18cf8e643.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/20 Axes Arr MSTR.mp3.import b/assets/audio/20 Axes Arr MSTR.mp3.import new file mode 100644 index 0000000..34a1883 --- /dev/null +++ b/assets/audio/20 Axes Arr MSTR.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://esxco7hisjn4" +path="res://.godot/imported/20 Axes Arr MSTR.mp3-8052d34821ab7d75e7c36c2068bba6f9.mp3str" + +[deps] + +source_file="res://assets/audio/20 Axes Arr MSTR.mp3" +dest_files=["res://.godot/imported/20 Axes Arr MSTR.mp3-8052d34821ab7d75e7c36c2068bba6f9.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Forest Arr MSTR LOOP.mp3.import b/assets/audio/Forest Arr MSTR LOOP.mp3.import new file mode 100644 index 0000000..7938352 --- /dev/null +++ b/assets/audio/Forest Arr MSTR LOOP.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://tksoficve1me" +path="res://.godot/imported/Forest Arr MSTR LOOP.mp3-d49adb80243c3f8f86bcd42d589cb318.mp3str" + +[deps] + +source_file="res://assets/audio/Forest Arr MSTR LOOP.mp3" +dest_files=["res://.godot/imported/Forest Arr MSTR LOOP.mp3-d49adb80243c3f8f86bcd42d589cb318.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Forest Arr MSTR.mp3.import b/assets/audio/Forest Arr MSTR.mp3.import new file mode 100644 index 0000000..cb78c7c --- /dev/null +++ b/assets/audio/Forest Arr MSTR.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dupl0hftpvc1d" +path="res://.godot/imported/Forest Arr MSTR.mp3-7084a65e9250e30ba686f9dee6d5e8a1.mp3str" + +[deps] + +source_file="res://assets/audio/Forest Arr MSTR.mp3" +dest_files=["res://.godot/imported/Forest Arr MSTR.mp3-7084a65e9250e30ba686f9dee6d5e8a1.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Lacrimosa Arr MSTR LOOP.mp3.import b/assets/audio/Lacrimosa Arr MSTR LOOP.mp3.import new file mode 100644 index 0000000..e9f3b50 --- /dev/null +++ b/assets/audio/Lacrimosa Arr MSTR LOOP.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://ckapo5gkwp0wk" +path="res://.godot/imported/Lacrimosa Arr MSTR LOOP.mp3-0ac175e535c1b60e74a118d3d3a9b73f.mp3str" + +[deps] + +source_file="res://assets/audio/Lacrimosa Arr MSTR LOOP.mp3" +dest_files=["res://.godot/imported/Lacrimosa Arr MSTR LOOP.mp3-0ac175e535c1b60e74a118d3d3a9b73f.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Lacrimosa Arr MSTR.mp3.import b/assets/audio/Lacrimosa Arr MSTR.mp3.import new file mode 100644 index 0000000..a3be7e1 --- /dev/null +++ b/assets/audio/Lacrimosa Arr MSTR.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://d1s187yettg14" +path="res://.godot/imported/Lacrimosa Arr MSTR.mp3-5c3a5bc1e7a6a175233290c9fae8f303.mp3str" + +[deps] + +source_file="res://assets/audio/Lacrimosa Arr MSTR.mp3" +dest_files=["res://.godot/imported/Lacrimosa Arr MSTR.mp3-5c3a5bc1e7a6a175233290c9fae8f303.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Strong Chill Arr MSTR LOOP.mp3.import b/assets/audio/Strong Chill Arr MSTR LOOP.mp3.import new file mode 100644 index 0000000..5b929cc --- /dev/null +++ b/assets/audio/Strong Chill Arr MSTR LOOP.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://b8g4auk7xg3qw" +path="res://.godot/imported/Strong Chill Arr MSTR LOOP.mp3-e0915a30e802db8434e1fc772ee0c88f.mp3str" + +[deps] + +source_file="res://assets/audio/Strong Chill Arr MSTR LOOP.mp3" +dest_files=["res://.godot/imported/Strong Chill Arr MSTR LOOP.mp3-e0915a30e802db8434e1fc772ee0c88f.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/Strong Chill Arr MSTR.mp3.import b/assets/audio/Strong Chill Arr MSTR.mp3.import new file mode 100644 index 0000000..56fadfb --- /dev/null +++ b/assets/audio/Strong Chill Arr MSTR.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://beueo2bfr8fkt" +path="res://.godot/imported/Strong Chill Arr MSTR.mp3-c53599ff540cd575897c08b8775607c2.mp3str" + +[deps] + +source_file="res://assets/audio/Strong Chill Arr MSTR.mp3" +dest_files=["res://.godot/imported/Strong Chill Arr MSTR.mp3-c53599ff540cd575897c08b8775607c2.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/global/autoload/audio/audio.gd b/global/autoload/audio/audio.gd index 8c8d354..170d75e 100644 --- a/global/autoload/audio/audio.gd +++ b/global/autoload/audio/audio.gd @@ -4,11 +4,8 @@ extends Node set(value): default_sfx_pitch_variance = clampf(value, 0.0, 1.0) -var _track: int = 0 - @onready var sfx_queue: AudioQueue = %SfxQueue @onready var sfx_map: Node = %SfxMap -@onready var music_tracks: Node = %MusicTracks @onready var music_track_2_heart: MusicTrack = %MusicTrack2Heart @@ -16,47 +13,40 @@ var _track: int = 0 ## overrides ## ############### - -func _ready() -> void: - _initalize() - _connect_signals() - +# func _ready() -> void: +# _initalize() +# _connect_signals() ############# ## helpers ## ############# - -func _initalize() -> void: - music_tracks.get_child(_track).fade_in() - +# func _initalize() -> void: +# music_tracks.get_child(_track).fade_in() ############# ## methods ## ############# +# func swap_crossfade_music_next() -> void: +# var track: int = (_track + 1) % music_tracks.get_child_count() +# swap_crossfade_music_new(track, null) -func swap_crossfade_music_next() -> void: - var track: int = (_track + 1) % music_tracks.get_child_count() - swap_crossfade_music_new(track, null) - - -func swap_crossfade_music(track: int) -> void: - swap_crossfade_music_new(track, null) - +# func swap_crossfade_music(track: int) -> void: +# swap_crossfade_music_new(track, null) -func swap_crossfade_music_new(track: int, song_stream: AudioStream) -> void: - if _track == track: - return +# func swap_crossfade_music_new(track: int, song_stream: AudioStream) -> void: +# if _track == track: +# return - var music_track_next: MusicTrack = music_tracks.get_child(track) - var music_track_previous: MusicTrack = music_tracks.get_child(_track) - _track = track +# var music_track_next: MusicTrack = music_tracks.get_child(track) +# var music_track_previous: MusicTrack = music_tracks.get_child(_track) +# _track = track - music_track_previous.fade_out() - music_track_next.fade_in() - if song_stream != null: - music_track_next.swap(song_stream) +# music_track_previous.fade_out() +# music_track_next.fade_in() +# if song_stream != null: +# music_track_next.swap(song_stream) func play_sfx( diff --git a/global/autoload/audio/audio.tscn b/global/autoload/audio/audio.tscn index aee20a7..dd71b92 100644 --- a/global/autoload/audio/audio.tscn +++ b/global/autoload/audio/audio.tscn @@ -1,36 +1,18 @@ -[gd_scene load_steps=8 format=3 uid="uid://bp61l7vkkscuw"] +[gd_scene load_steps=5 format=3 uid="uid://bp61l7vkkscuw"] [ext_resource type="Script" path="res://global/autoload/audio/audio.gd" id="1_7i6rq"] [ext_resource type="PackedScene" uid="uid://f1stqtkpi6rl" path="res://global/autoload/audio/audio_queue/audio_queue.tscn" id="2_bb4fe"] +[ext_resource type="PackedScene" uid="uid://cragwwd3j3bqt" path="res://global/autoload/audio/music/music.tscn" id="2_dmcs5"] [ext_resource type="PackedScene" uid="uid://bu2l4l0jhesyw" path="res://global/autoload/audio/sfx_map/sfx_map.tscn" id="3_4nox4"] -[ext_resource type="PackedScene" uid="uid://bg37hs706yk1o" path="res://global/autoload/audio/music_track/music_track.tscn" id="3_kqvc4"] -[ext_resource type="AudioStream" uid="uid://blrw2u3jb1fbm" path="res://assets/audio/freemusicarchive_org/universfield/criminal_district/criminal_district.mp3" id="5_8j73o"] -[ext_resource type="AudioStream" uid="uid://b44xi3ebx4ju3" path="res://assets/audio/freemusicarchive_org/universfield/corpse_rot/corpse_rot.mp3" id="6_jxnmc"] -[ext_resource type="AudioStream" uid="uid://cjg7wv1kxy1ye" path="res://assets/audio/freesound_org/heartbeat_80bpm/loudernoises_heartbeat_80bpm.wav" id="7_uympl"] [node name="Audio" type="Node"] script = ExtResource("1_7i6rq") +[node name="Music" parent="." instance=ExtResource("2_dmcs5")] + [node name="SfxQueue" parent="." instance=ExtResource("2_bb4fe")] unique_name_in_owner = true stream_player_count = 16 [node name="SfxMap" parent="SfxQueue" instance=ExtResource("3_4nox4")] unique_name_in_owner = true - -[node name="MusicTracks" type="Node" parent="."] -unique_name_in_owner = true - -[node name="MusicTrack0Main" parent="MusicTracks" instance=ExtResource("3_kqvc4")] -audio_stream = ExtResource("5_8j73o") -max_volume = 3.0 - -[node name="MusicTrack1Darkness" parent="MusicTracks" instance=ExtResource("3_kqvc4")] -audio_stream = ExtResource("6_jxnmc") - -[node name="MusicTrack2Heart" parent="MusicTracks" instance=ExtResource("3_kqvc4")] -unique_name_in_owner = true -audio_stream = ExtResource("7_uympl") -max_volume = 1.25 - -[node name="MusicTrack3None" parent="MusicTracks" instance=ExtResource("3_kqvc4")] diff --git a/global/autoload/audio/music/music.gd b/global/autoload/audio/music/music.gd new file mode 100644 index 0000000..1c32a8f --- /dev/null +++ b/global/autoload/audio/music/music.gd @@ -0,0 +1,44 @@ +extends Node + +@export var songs: Array[Song] = [] + +@onready var tracks: Node = %Tracks +@onready var states: StateMachine = %States + +@onready var idle_track: AudioStreamPlayer = %Idle +@onready var combat_track: AudioStreamPlayer = %Combat + +var next_song_index: int = 0 + + +func _ready() -> void: + play_next_song() + SignalBus.tab_changed.connect(_on_tab_changed) + idle_track.finished.connect(_on_song_finished) + combat_track.finished.connect(_on_song_finished) + + +func play_next_song() -> void: + play_song(songs[next_song_index]) + next_song_index += 1 + if next_song_index >= len(songs): + next_song_index = 0 + + +func play_song(song: Song) -> void: + print("playing song %s" % str(song.idle_audio_stream)) + idle_track.stream = song.idle_audio_stream + combat_track.stream = song.combat_audio_stream + idle_track.play() + combat_track.play() + + +func _on_tab_changed(tab_data: TabData) -> void: + if tab_data.id == "enemy": + states.transition_to("Combat") + elif states.current_state.name == "Combat": + states.transition_to("Idle") + + +func _on_song_finished() -> void: + play_next_song() diff --git a/global/autoload/audio/music/music.tscn b/global/autoload/audio/music/music.tscn new file mode 100644 index 0000000..c087071 --- /dev/null +++ b/global/autoload/audio/music/music.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=6 format=3 uid="uid://cragwwd3j3bqt"] + +[ext_resource type="Script" path="res://global/autoload/audio/music/music.gd" id="1_c5si3"] +[ext_resource type="Script" path="res://scenes/component/state_machine/state_machine.gd" id="1_mdmqr"] +[ext_resource type="Script" path="res://resources/songs/song.gd" id="2_4kuok"] +[ext_resource type="Script" path="res://global/autoload/audio/music/track_state.gd" id="2_h773k"] +[ext_resource type="Resource" uid="uid://d1yl7vrmvavit" path="res://resources/songs/axes_to_a_bed.tres" id="3_fjjm6"] + +[node name="Music" type="Node"] +script = ExtResource("1_c5si3") +songs = Array[ExtResource("2_4kuok")]([ExtResource("3_fjjm6")]) + +[node name="Tracks" type="Node" parent="."] +unique_name_in_owner = true + +[node name="Idle" type="AudioStreamPlayer" parent="Tracks"] +unique_name_in_owner = true +bus = &"Music" + +[node name="Combat" type="AudioStreamPlayer" parent="Tracks"] +unique_name_in_owner = true +bus = &"Music" + +[node name="States" type="Node" parent="." node_paths=PackedStringArray("default_state")] +unique_name_in_owner = true +script = ExtResource("1_mdmqr") +default_state = NodePath("Idle") + +[node name="Idle" type="Node" parent="States"] +script = ExtResource("2_h773k") + +[node name="Combat" type="Node" parent="States"] +script = ExtResource("2_h773k") diff --git a/global/autoload/audio/music/track_state.gd b/global/autoload/audio/music/track_state.gd new file mode 100644 index 0000000..c421d8d --- /dev/null +++ b/global/autoload/audio/music/track_state.gd @@ -0,0 +1,19 @@ +extends StateMachineState + +@onready var music: Node = owner + +var track: AudioStreamPlayer + + +func _on_ready() -> void: + await music.ready + track = music.tracks.get_node(NodePath(self.name)) + + +func _on_state_enter() -> void: + print("ENTERING %s" % self.name) + track.volume_db = linear_to_db(1.0) + + +func _on_state_exit() -> void: + track.volume_db = linear_to_db(0.0) diff --git a/resources/songs/axes_to_a_bed.tres b/resources/songs/axes_to_a_bed.tres new file mode 100644 index 0000000..d953d01 --- /dev/null +++ b/resources/songs/axes_to_a_bed.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="Song" load_steps=4 format=3 uid="uid://d1yl7vrmvavit"] + +[ext_resource type="Script" path="res://resources/songs/song.gd" id="1_4i0cq"] +[ext_resource type="AudioStream" uid="uid://esxco7hisjn4" path="res://assets/audio/20 Axes Arr MSTR.mp3" id="1_31y33"] +[ext_resource type="AudioStream" uid="uid://cvo3kjga80knk" path="res://assets/audio/joseph_philip_burke/axes_to_a_bed_compressed.mp3" id="2_q13b1"] + +[resource] +script = ExtResource("1_4i0cq") +idle_audio_stream = ExtResource("2_q13b1") +combat_audio_stream = ExtResource("1_31y33") diff --git a/resources/songs/song.gd b/resources/songs/song.gd new file mode 100644 index 0000000..cf72925 --- /dev/null +++ b/resources/songs/song.gd @@ -0,0 +1,4 @@ +class_name Song extends Resource + +@export var idle_audio_stream: AudioStream +@export var combat_audio_stream: AudioStream diff --git a/scenes/component/state_machine/state_machine.gd b/scenes/component/state_machine/state_machine.gd new file mode 100644 index 0000000..4574e45 --- /dev/null +++ b/scenes/component/state_machine/state_machine.gd @@ -0,0 +1,34 @@ +class_name StateMachine extends Node + +@export var default_state: StateMachineState + +var states: Dictionary +var current_state: StateMachineState + + +func _ready() -> void: + for child in get_children(): + states[child.name] = child + child._on_ready() + + await owner.ready + transition_to(default_state.name) + + +func _input(event: InputEvent) -> void: + current_state._on_input(event) + + +func _process(delta: float) -> void: + current_state._on_process(delta) + + +func _physics_process(delta: float) -> void: + current_state._on_physics_process(delta) + + +func transition_to(state_name: StringName) -> void: + if current_state: + current_state._on_state_exit() + current_state = states[state_name] + current_state._on_state_enter() diff --git a/scenes/component/state_machine/state_machine_state.gd b/scenes/component/state_machine/state_machine_state.gd new file mode 100644 index 0000000..e25d210 --- /dev/null +++ b/scenes/component/state_machine/state_machine_state.gd @@ -0,0 +1,25 @@ +class_name StateMachineState extends Node + + +func _on_ready() -> void: + pass + + +func _on_process(_delta: float) -> void: + pass + + +func _on_physics_process(_delta: float) -> void: + pass + + +func _on_input(_event: InputEvent) -> void: + pass + + +func _on_state_enter() -> void: + pass + + +func _on_state_exit() -> void: + pass