From c7eae929a6f2c7468072764c0575b257b18f9ffd Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Fri, 19 Sep 2025 14:43:32 +0200 Subject: [PATCH] ajout du comportement d'activation de la musique --- common/game_data/scripts/game_data.gd | 7 ++- common/game_data/scripts/planet_data.gd | 10 ++- common/game_info/game_info.gd | 9 ++- common/music/assets/forest_phase_1.ogg.import | 2 +- common/music/assets/forest_phase_2.ogg.import | 2 +- common/music/music.tscn | 26 ++++---- common/music/scripts/music.gd | 63 +++++++++++++++++++ common/music/scripts/music.gd.uid | 1 + 8 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 common/music/scripts/music.gd create mode 100644 common/music/scripts/music.gd.uid diff --git a/common/game_data/scripts/game_data.gd b/common/game_data/scripts/game_data.gd index 1ad89d9..579fc71 100644 --- a/common/game_data/scripts/game_data.gd +++ b/common/game_data/scripts/game_data.gd @@ -1,7 +1,12 @@ extends Resource class_name GameData -@export var current_planet_data : PlanetData +signal current_planet_data_updated(p : PlanetData) + +@export var current_planet_data : PlanetData : + set(v): + current_planet_data = v + current_planet_data_updated.emit(v) @export var unlocked_plant_types_path : Array[PlantType] = [ preload("res://entities/plants/resources/plant_types/champ.tres"), diff --git a/common/game_data/scripts/planet_data.gd b/common/game_data/scripts/planet_data.gd index 2960df0..3ae2e04 100644 --- a/common/game_data/scripts/planet_data.gd +++ b/common/game_data/scripts/planet_data.gd @@ -1,13 +1,19 @@ extends Resource class_name PlanetData +signal quota_number_updated(quota : int) +signal contamination_updated(decontamination_surface : float) + const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MAX_SIZE = 400. const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE = 100. const DEFAULT_BASE_SIZE = Vector2(2000,2000) @export var base_size : Vector2 = Vector2(2000,2000) @export var contamination : TerrainData -@export var quota_number : int = 0 +@export var quota_number : int = 0 : + set(v): + quota_number = v + quota_number_updated.emit(v) func _init(_base_size : Vector2 = DEFAULT_BASE_SIZE): base_size = _base_size @@ -17,6 +23,7 @@ func _init(_base_size : Vector2 = DEFAULT_BASE_SIZE): DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE, base_size/2 ) + contamination_updated.emit(get_decontamination_surface()) func impact_contamination(position : Vector2, impact_radius : float, to_value : float = 1.): @@ -25,6 +32,7 @@ func impact_contamination(position : Vector2, impact_radius : float, to_value : impact_radius, to_value ) + contamination_updated.emit(get_decontamination_surface()) func is_in_base(point): return ( diff --git a/common/game_info/game_info.gd b/common/game_info/game_info.gd index 8126840..de22ada 100644 --- a/common/game_info/game_info.gd +++ b/common/game_info/game_info.gd @@ -1,7 +1,12 @@ extends Node -var game_data : GameData +signal game_data_updated(g : GameData) + +var game_data : GameData : + set(v): + game_data = v + game_data_updated.emit(v) func _init(): if not game_data: - game_data = GameData.new() + game_data = GameData.new() \ No newline at end of file diff --git a/common/music/assets/forest_phase_1.ogg.import b/common/music/assets/forest_phase_1.ogg.import index 864366b..445d4af 100644 --- a/common/music/assets/forest_phase_1.ogg.import +++ b/common/music/assets/forest_phase_1.ogg.import @@ -12,7 +12,7 @@ dest_files=["res://.godot/imported/forest_phase_1.ogg-08213a81a42ba2cf4c67c1bfac [params] -loop=false +loop=true loop_offset=0 bpm=0 beat_count=0 diff --git a/common/music/assets/forest_phase_2.ogg.import b/common/music/assets/forest_phase_2.ogg.import index 3bcf30e..e3a3599 100644 --- a/common/music/assets/forest_phase_2.ogg.import +++ b/common/music/assets/forest_phase_2.ogg.import @@ -12,7 +12,7 @@ dest_files=["res://.godot/imported/forest_phase_2.ogg-b312ca5fea9e7b3157a9ab7a4c [params] -loop=false +loop=true loop_offset=0 bpm=0 beat_count=0 diff --git a/common/music/music.tscn b/common/music/music.tscn index e0303a4..d0ded5b 100644 --- a/common/music/music.tscn +++ b/common/music/music.tscn @@ -1,25 +1,25 @@ [gd_scene load_steps=5 format=3 uid="uid://b6hscxcrj065q"] +[ext_resource type="Script" uid="uid://2p5d6vogtn82" path="res://common/music/scripts/music.gd" id="1_ji160"] [ext_resource type="AudioStream" uid="uid://diyefcv8tqa3r" path="res://common/music/assets/forest_phase_1.ogg" id="1_stre8"] [ext_resource type="AudioStream" uid="uid://bqwiaek5b5q00" path="res://common/music/assets/forest_phase_2.ogg" id="2_ji160"] [ext_resource type="AudioStream" uid="uid://d1fyd5o331360" path="res://common/music/assets/vent.ogg" id="2_n52pk"] -[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_ei6w7"] -loop = false -stream_count = 2 -stream_0 = ExtResource("1_stre8") -stream_1 = ExtResource("2_ji160") - -[node name="Music" type="Node"] +[node name="Music" type="Node" node_paths=PackedStringArray("decontamination_musics")] process_mode = 3 +script = ExtResource("1_ji160") +decontamination_musics = [NodePath("ForestPhase1"), NodePath("ForestPhase2")] +decontamination_musics_levels = Array[float]([0.0, 30.0]) -[node name="AudioStreamPlayer_music" type="AudioStreamPlayer" parent="."] -stream = SubResource("AudioStreamPlaylist_ei6w7") -volume_db = -5.0 -autoplay = true -parameters/looping = false +[node name="ForestPhase1" type="AudioStreamPlayer" parent="."] +stream = ExtResource("1_stre8") +volume_db = -10.0 -[node name="AudioStreamPlayer2_ambient" type="AudioStreamPlayer" parent="."] +[node name="ForestPhase2" type="AudioStreamPlayer" parent="."] +stream = ExtResource("2_ji160") +volume_db = -10.0 + +[node name="Wind" type="AudioStreamPlayer" parent="."] stream = ExtResource("2_n52pk") autoplay = true parameters/looping = false diff --git a/common/music/scripts/music.gd b/common/music/scripts/music.gd new file mode 100644 index 0000000..d8b8850 --- /dev/null +++ b/common/music/scripts/music.gd @@ -0,0 +1,63 @@ +extends Node + +@export var default_fade_time = 1.0 + +@export var decontamination_musics : Array[AudioStreamPlayer] +@export var decontamination_musics_levels : Array[float] + +@onready var playing_music = null : set = play_music + +func _ready(): + GameInfo.game_data.current_planet_data_updated.connect(_on_current_planet_data_updated) + +func _on_current_planet_data_updated(planet_data : PlanetData): + if planet_data: + planet_data.contamination_updated.connect(_on_contamination_updated) + if len(decontamination_musics): + play_music(decontamination_musics[0]) + +func _on_contamination_updated(decontamination_surface : float): + var actual_level = 0 + if len(decontamination_musics_levels) and len(decontamination_musics): + for level in range(1, len(decontamination_musics_levels)): + if decontamination_surface > decontamination_musics_levels[level]: + actual_level = level + + print(actual_level) + + if len(decontamination_musics) > actual_level: + play_music(decontamination_musics[actual_level]) + +func stop_music(): + play_music(null) + +func play_music(music : AudioStreamPlayer): + if playing_music != null: + if playing_music != music: + if playing_music: + await audio_fade(playing_music, false).finished + + if music: + music.play() + elif music != null and music != playing_music: + music.play() + playing_music = music + +func audio_fade(music : AudioStreamPlayer, fade_in = true, fade_time = default_fade_time) -> Tween: + var fade_tween : Tween = get_tree().create_tween() + var music_default_volume = music.volume_db + var target_volume = music_default_volume if fade_in else -80. + + if fade_in: + music.volume_db = -80. + music.play() + + fade_tween.tween_property(music, "volume_db", target_volume, fade_time) + + if not fade_in: + fade_tween.finished.connect( + func(): + music.stop() + music.volume_db = music_default_volume + ) + return fade_tween diff --git a/common/music/scripts/music.gd.uid b/common/music/scripts/music.gd.uid new file mode 100644 index 0000000..c8fd0d6 --- /dev/null +++ b/common/music/scripts/music.gd.uid @@ -0,0 +1 @@ +uid://2p5d6vogtn82