diff --git a/.gitignore b/.gitignore index 117080c..cc29560 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ export_presets.cfg tests/assets/ -conception/ \ No newline at end of file +conception/ +AGENTS.md \ No newline at end of file diff --git a/autoloads/audio_manager.gd b/autoloads/audio_manager.gd index 1e9dd56..6dd3bbd 100644 --- a/autoloads/audio_manager.gd +++ b/autoloads/audio_manager.gd @@ -1,24 +1,24 @@ extends Node -var music_player : AudioStreamPlayer -var sfx_player : AudioStreamPlayer +const AMBIANCE_VOLUME_DB: float = -12.0 +const SFX_VOLUME_DB: float = -8.0 -const AMBIANCE_VOLUME_DB := -12.0 -const SFX_VOLUME_DB := -8.0 - -const AMBIANCES := { +const AMBIANCES: Dictionary = { "entrepot": preload("res://assets/audio/music/entrepot.ogg"), "atelier": preload("res://assets/audio/music/atelier.ogg"), "cour": preload("res://assets/audio/music/cour.ogg"), } -const SFX := { +const SFX: Dictionary = { "item_pickup": preload("res://assets/audio/sfx/item_pickup.ogg"), "interact": preload("res://assets/audio/sfx/interact.ogg"), "door_unlock": preload("res://assets/audio/sfx/door_unlocking.ogg"), "repair_success": preload("res://assets/audio/sfx/succesful_repair.ogg"), } +var music_player : AudioStreamPlayer +var sfx_player : AudioStreamPlayer + func _ready() -> void: process_mode = Node.PROCESS_MODE_ALWAYS @@ -36,16 +36,13 @@ func _ready() -> void: add_child(sfx_player) sfx_player.process_mode = Node.PROCESS_MODE_ALWAYS -func _on_music_finished() -> void: - music_player.play() - func play_ambiance(zone: String) -> void: if not AMBIANCES.has(zone): return if music_player.stream == AMBIANCES[zone] and music_player.playing: return - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(music_player, "volume_db", -40.0, 0.8) tween.tween_callback(func(): music_player.stream = AMBIANCES[zone] @@ -54,7 +51,7 @@ func play_ambiance(zone: String) -> void: tween.tween_property(music_player, "volume_db", AMBIANCE_VOLUME_DB, 1.2) func stop_ambiance() -> void: - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(music_player, "volume_db", -40.0, 1.0) tween.tween_callback(music_player.stop) @@ -64,3 +61,6 @@ func play_sfx(sfx_name: String) -> void: return sfx_player.stream = SFX[sfx_name] sfx_player.play() + +func _on_music_finished() -> void: + music_player.play() diff --git a/autoloads/game_state.gd b/autoloads/game_state.gd index eb2aa2b..898afe5 100644 --- a/autoloads/game_state.gd +++ b/autoloads/game_state.gd @@ -1,20 +1,20 @@ extends Node -signal inventory_changed +signal inventory_changed() signal flag_changed(key: String, value: bool) # Pièces requises par PNJ -const REPAIR_REQUIREMENTS := { +const REPAIR_REQUIREMENTS: Dictionary = { "vrac7": { "engrenage": 3}, "iris3": { "circuit": 1 }, } -var repaired := { +var repaired: Dictionary = { "vrac7": false, "iris3": false, } -var inventory := {} -var flags := {} +var inventory: Dictionary = {} +var flags: Dictionary = {} func get_flag(key: String) -> bool: return flags.get(key, false) @@ -31,7 +31,6 @@ func add_item(id: String, amount: int = 1) -> void: else: inventory[id] = 1 inventory_changed.emit() - print("Inventaire : ", inventory) func has_item(id: String) -> bool: return inventory.get(id, 0) > 0 @@ -47,7 +46,7 @@ func remove_item(item_id: String, amount: int) -> void: func can_repair(npc_id: String) -> bool: if repaired.get(npc_id, false): return false # déjà réparé - var required = REPAIR_REQUIREMENTS.get(npc_id, {}) + var required: Dictionary = REPAIR_REQUIREMENTS.get(npc_id, {}) for item_id in required: if inventory.get(item_id, 0) < required[item_id]: return false @@ -57,8 +56,7 @@ func complete_repair(npc_id: String) -> void: if not can_repair(npc_id): return # Consomme les pièces - var required = REPAIR_REQUIREMENTS[npc_id] + var required: Dictionary = REPAIR_REQUIREMENTS[npc_id] for item_id in required: remove_item(item_id, required[item_id]) repaired[npc_id] = true - print("Réparation terminée : ", npc_id) diff --git a/autoloads/scene_manager.gd b/autoloads/scene_manager.gd index 61510e1..c16d25b 100644 --- a/autoloads/scene_manager.gd +++ b/autoloads/scene_manager.gd @@ -1 +1,20 @@ extends Node + +signal scene_changed(scene_path: String) + +func change_scene(scene_path: String) -> void: + var error: Error = get_tree().change_scene_to_file(scene_path) + if error != OK: + push_error("Impossible de charger la scene : " + scene_path) + return + scene_changed.emit(scene_path) + +func reload_current_scene() -> void: + var scene_file_path: String = get_tree().current_scene.scene_file_path + if scene_file_path == "": + push_warning("Aucune scene active a recharger.") + return + change_scene(scene_file_path) + +func quit_game() -> void: + get_tree().quit() diff --git a/entities/items/circuit/circuit.gd b/entities/items/circuit/circuit.gd index cd03385..a3a0d4c 100644 --- a/entities/items/circuit/circuit.gd +++ b/entities/items/circuit/circuit.gd @@ -7,9 +7,8 @@ extends Area2D func interact() -> void: GameState.add_item(item_id) - print("Ramassé : ", item_name) AudioManager.play_sfx("item_pickup") - var hud := get_tree().get_first_node_in_group("hud") + var hud: HUD = get_tree().get_first_node_in_group("hud") if hud and hud.has_method("show_log"): hud.show_log("LOG %s picked up. Inventory updated." % item_id) queue_free() # supprime l'item de la scène diff --git a/entities/items/engrenage/engrenage.gd b/entities/items/engrenage/engrenage.gd index 3db7ccc..87d6b68 100644 --- a/entities/items/engrenage/engrenage.gd +++ b/entities/items/engrenage/engrenage.gd @@ -6,5 +6,5 @@ extends Area2D func interact() -> void: GameState.add_item(item_id) - print("Ramassé : ", item_name) + AudioManager.play_sfx("item_pickup") queue_free() # supprime l'item de la scène diff --git a/entities/items/item.gd b/entities/items/item.gd index 3f696a7..1386b46 100644 --- a/entities/items/item.gd +++ b/entities/items/item.gd @@ -8,7 +8,7 @@ extends Area2D func interact() -> void: GameState.add_item(item_id) AudioManager.play_sfx("item_pickup") - var hud := get_tree().get_first_node_in_group("hud") + var hud: HUD = get_tree().get_first_node_in_group("hud") if hud and hud.has_method("show_log"): hud.show_log("LOG %s picked up. Inventory updated." % item_id) queue_free() diff --git a/entities/items/pushable robot/pushable_robot.gd b/entities/items/pushable_box/pushable_box.gd similarity index 77% rename from entities/items/pushable robot/pushable_robot.gd rename to entities/items/pushable_box/pushable_box.gd index e6f3c4d..1b5b087 100644 --- a/entities/items/pushable robot/pushable_robot.gd +++ b/entities/items/pushable_box/pushable_box.gd @@ -1,8 +1,8 @@ class_name PushableBox extends CharacterBody2D -@onready var _area := $DetectionArea -var _hud : HUD +@onready var _area: Area2D = $DetectionArea +var _hud: HUD func _ready() -> void: add_to_group("pushable") @@ -19,8 +19,8 @@ func _on_body_exited(body: Node2D) -> void: _hud.hide_prompt() func try_push(direction: Vector2, tile_size: float) -> bool: - var motion := direction * tile_size - var collision := move_and_collide(motion) + var motion: Vector2 = direction * tile_size + var collision: KinematicCollision2D = move_and_collide(motion) if collision: move_and_collide(-motion) return false diff --git a/entities/items/pushable box/pushable_box.gd.uid b/entities/items/pushable_box/pushable_box.gd.uid similarity index 100% rename from entities/items/pushable box/pushable_box.gd.uid rename to entities/items/pushable_box/pushable_box.gd.uid diff --git a/entities/items/pushable box/pushable_box.tscn b/entities/items/pushable_box/pushable_box.tscn similarity index 95% rename from entities/items/pushable box/pushable_box.tscn rename to entities/items/pushable_box/pushable_box.tscn index f4c6018..05f274c 100644 --- a/entities/items/pushable box/pushable_box.tscn +++ b/entities/items/pushable_box/pushable_box.tscn @@ -1,7 +1,7 @@ [gd_scene format=3 uid="uid://1x65ioo8tdro"] [ext_resource type="Texture2D" uid="uid://bbr6t3088svah" path="res://assets/tilesets/entrepot-tilesets.png" id="1_1rdxk"] -[ext_resource type="Script" uid="uid://ghp173k2ioey" path="res://entities/items/pushable box/pushable_box.gd" id="1_cwr2g"] +[ext_resource type="Script" uid="uid://ghp173k2ioey" path="res://entities/items/pushable_box/pushable_box.gd" id="1_cwr2g"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_cwr2g"] size = Vector2(26, 28) diff --git a/entities/items/pushable box/pushable_box.gd b/entities/items/pushable_robot/pushable_robot.gd similarity index 77% rename from entities/items/pushable box/pushable_box.gd rename to entities/items/pushable_robot/pushable_robot.gd index eee3b81..3c74a29 100644 --- a/entities/items/pushable box/pushable_box.gd +++ b/entities/items/pushable_robot/pushable_robot.gd @@ -1,8 +1,8 @@ class_name PushableRobot extends CharacterBody2D -@onready var _area := $DetectionArea -var _hud : HUD +@onready var _area: Area2D = $DetectionArea +var _hud: HUD func _ready() -> void: add_to_group("pushable") @@ -19,8 +19,8 @@ func _on_body_exited(body: Node2D) -> void: _hud.hide_prompt() func try_push(direction: Vector2, tile_size: float) -> bool: - var motion := direction * tile_size - var collision := move_and_collide(motion) + var motion: Vector2 = direction * tile_size + var collision: KinematicCollision2D = move_and_collide(motion) if collision: move_and_collide(-motion) return false diff --git a/entities/items/pushable robot/pushable_robot.gd.uid b/entities/items/pushable_robot/pushable_robot.gd.uid similarity index 100% rename from entities/items/pushable robot/pushable_robot.gd.uid rename to entities/items/pushable_robot/pushable_robot.gd.uid diff --git a/entities/items/pushable robot/pushable_robot.tscn b/entities/items/pushable_robot/pushable_robot.tscn similarity index 89% rename from entities/items/pushable robot/pushable_robot.tscn rename to entities/items/pushable_robot/pushable_robot.tscn index d1d61c7..6adba76 100644 --- a/entities/items/pushable robot/pushable_robot.tscn +++ b/entities/items/pushable_robot/pushable_robot.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://dge55wtv1sf8i"] -[ext_resource type="Script" uid="uid://ghp173k2ioey" path="res://entities/items/pushable box/pushable_box.gd" id="1_cwr2g"] +[ext_resource type="Script" uid="uid://d0yuo06hfqfq4" path="res://entities/items/pushable_robot/pushable_robot.gd" id="1_cwr2g"] [ext_resource type="Texture2D" uid="uid://c0uhk72pn2w7" path="res://assets/sprites/damaged_robot.png" id="2_6yl5d"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_cwr2g"] diff --git a/entities/npcs/iris3/iris3.gd b/entities/npcs/iris3/iris3.gd index 41592d0..06b42b8 100644 --- a/entities/npcs/iris3/iris3.gd +++ b/entities/npcs/iris3/iris3.gd @@ -3,31 +3,31 @@ extends Area2D @export var prompt_text: String = "[E] Inspect" -@onready var sprite := $AnimatedSprite2D +@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D -const REQUIRED_ITEMS := { "circuit": 1 } +const REQUIRED_ITEMS: Dictionary = { "circuit": 1 } -const DIALOGUE_INACTIVE := [ +const DIALOGUE_INACTIVE: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Unit IRIS-3 detected. Main sensor offline." }, { "name": "SYSTEM", "text": "Required component: compatible optical circuit." }, ] -const DIALOGUE_NO_ITEM := [ +const DIALOGUE_NO_ITEM: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Optical circuit not detected. Search the surrounding area." }, ] -const DIALOGUE_HAS_ITEM := [ +const DIALOGUE_HAS_ITEM: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Compatible circuit detected. Start recalibration?" }, ] -const DIALOGUE_POST_REPAIR := [ +const DIALOGUE_POST_REPAIR: Array[Dictionary] = [ { "name": "IRIS-3", "text": "... Her optics slowly pivot toward the sky." }, { "name": "IRIS-3", "text": "I waited 847 days for someone to come. I didn't know if it was hope or stubbornness. Now I think they're the same thing." }, { "name": "IRIS-3", "text": "Matteo Corda signed a document before leaving. He called it the Autonomous Continuity Protocol. In human terms... he told us we could stay." }, { "name": "IRIS-3", "text": "There is an exit, to the west. It was never locked. I've known since the first day. I haven't moved. You can choose." }, ] -const DIALOGUE_AFTER_REPAIR := [ +const DIALOGUE_AFTER_REPAIR: Array[Dictionary] = [ { "name": "IRIS-3", "text": "You're still here. That's an answer too." }, ] @@ -50,7 +50,7 @@ func _on_body_exited(body: Node) -> void: func interact() -> void: get_tree().get_first_node_in_group("hud").hide_prompt() - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if not dialogue_box: return @@ -60,7 +60,7 @@ func interact() -> void: return if not _has_required_items(): - var dlg = DIALOGUE_NO_ITEM if GameState.get_flag("iris3_met") else DIALOGUE_INACTIVE + var dlg: Array[Dictionary] = DIALOGUE_NO_ITEM if GameState.get_flag("iris3_met") else DIALOGUE_INACTIVE GameState.set_flag("iris3_met", true) dialogue_box.start(dlg) return @@ -71,12 +71,12 @@ func interact() -> void: # ── Mini-jeu ────────────────────────────────────────────────────────────────── func _start_minigame() -> void: - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.hide() - var minigame_node := preload("res://ui/minigame/repair_minigame.tscn").instantiate() + var minigame_node: Node = preload("res://ui/minigame/repair_minigame.tscn").instantiate() get_tree().root.add_child(minigame_node) - var minigame := minigame_node as RepairMinigame + var minigame: RepairMinigame = minigame_node as RepairMinigame if minigame == null: return minigame.repair_complete.connect(_on_repair_done, CONNECT_ONE_SHOT) @@ -93,7 +93,7 @@ func _on_repair_done() -> void: await get_tree().create_timer(2.5).timeout hud.show_log("Ending B unlocked.") - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.start(DIALOGUE_POST_REPAIR) dialogue_box.dialogue_finished.connect(_show_choice, CONNECT_ONE_SHOT) @@ -101,30 +101,30 @@ func _on_repair_done() -> void: # ── Choix final ─────────────────────────────────────────────────────────────── func _show_choice() -> void: - var player := get_tree().get_first_node_in_group("player") + var player: Variant = get_tree().get_first_node_in_group("player") if player: player.is_locked = true - var canvas := CanvasLayer.new() + var canvas: CanvasLayer = CanvasLayer.new() canvas.layer = 50 get_tree().root.add_child(canvas) - var root_ctrl := Control.new() + var root_ctrl: Control = Control.new() root_ctrl.set_anchors_preset(Control.PRESET_FULL_RECT) root_ctrl.modulate.a = 0.0 canvas.add_child(root_ctrl) - var bg := ColorRect.new() + var bg: ColorRect = ColorRect.new() bg.set_anchors_preset(Control.PRESET_FULL_RECT) bg.color = Color(0.05, 0.05, 0.05, 0.6) root_ctrl.add_child(bg) - var center := CenterContainer.new() + var center: CenterContainer = CenterContainer.new() center.set_anchors_preset(Control.PRESET_FULL_RECT) root_ctrl.add_child(center) - var panel := PanelContainer.new() - var sb := StyleBoxFlat.new() + var panel: PanelContainer = PanelContainer.new() + var sb: StyleBoxFlat = StyleBoxFlat.new() sb.bg_color = Color(0.08, 0.08, 0.10, 0.97) sb.border_color = Color(0.47, 0.63, 0.73, 0.8) sb.set_border_width_all(1) @@ -134,29 +134,29 @@ func _show_choice() -> void: panel.custom_minimum_size = Vector2(220, 0) center.add_child(panel) - var vbox := VBoxContainer.new() + var vbox: VBoxContainer = VBoxContainer.new() vbox.add_theme_constant_override("separation", 10) vbox.alignment = BoxContainer.ALIGNMENT_CENTER panel.add_child(vbox) - var label := Label.new() + var label: Label = Label.new() label.text = "What will SCRAP-09 do?" label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label.add_theme_color_override("font_color", Color("#A89E96")) label.add_theme_font_size_override("font_size", 9) vbox.add_child(label) - var sep := HSeparator.new() + var sep: HSeparator = HSeparator.new() sep.add_theme_color_override("color", Color(0.3, 0.3, 0.3, 0.5)) vbox.add_child(sep) - var hbox := HBoxContainer.new() + var hbox: HBoxContainer = HBoxContainer.new() hbox.add_theme_constant_override("separation", 10) hbox.alignment = BoxContainer.ALIGNMENT_CENTER vbox.add_child(hbox) - var btn_partir := _make_button("Leave ->", Color("#F0C87A")) - var btn_rester := _make_button("Stay", Color("#7BD4C4")) + var btn_partir: Button = _make_button("Leave ->", Color("#F0C87A")) + var btn_rester: Button = _make_button("Stay", Color("#7BD4C4")) hbox.add_child(btn_partir) hbox.add_child(btn_rester) @@ -169,22 +169,22 @@ func _show_choice() -> void: _on_choice_rester() ) - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(root_ctrl, "modulate:a", 1.0, 0.3) func _make_button(text: String, color: Color) -> Button: - var btn := Button.new() + var btn: Button = Button.new() btn.text = text btn.add_theme_font_size_override("font_size", 9) btn.add_theme_color_override("font_color", color) btn.add_theme_color_override("font_hover_color", Color.WHITE) - var sb_normal := StyleBoxFlat.new() + var sb_normal: StyleBoxFlat = StyleBoxFlat.new() sb_normal.bg_color = Color(0.12, 0.12, 0.15, 1.0) sb_normal.border_color = Color(color.r, color.g, color.b, 0.5) sb_normal.set_border_width_all(1) sb_normal.set_corner_radius_all(3) sb_normal.set_content_margin_all(8) - var sb_hover := StyleBoxFlat.new() + var sb_hover: StyleBoxFlat = StyleBoxFlat.new() sb_hover.bg_color = Color(color.r, color.g, color.b, 0.2) sb_hover.border_color = color sb_hover.set_border_width_all(1) @@ -201,7 +201,7 @@ func _on_choice_partir() -> void: _launch_outro() func _on_choice_rester() -> void: - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.start(DIALOGUE_AFTER_REPAIR) dialogue_box.dialogue_finished.connect(_launch_outro, CONNECT_ONE_SHOT) @@ -209,21 +209,21 @@ func _on_choice_rester() -> void: _launch_outro() func _launch_outro() -> void: - var player := get_tree().get_first_node_in_group("player") + var player: Variant = get_tree().get_first_node_in_group("player") if player: player.is_locked = false - var fade_canvas := CanvasLayer.new() + var fade_canvas: CanvasLayer = CanvasLayer.new() fade_canvas.layer = 100 get_tree().root.add_child(fade_canvas) - var fade := ColorRect.new() + var fade: ColorRect = ColorRect.new() fade.set_anchors_preset(Control.PRESET_FULL_RECT) fade.color = Color(0, 0, 0, 1) fade.modulate.a = 0.0 fade_canvas.add_child(fade) - var tween := fade_canvas.create_tween() + var tween: Tween = fade_canvas.create_tween() tween.tween_interval(0.5) tween.tween_property(fade, "modulate:a", 1.0, 2.0) tween.tween_callback(func(): diff --git a/entities/npcs/vrac7/vrac7.gd b/entities/npcs/vrac7/vrac7.gd index 10f9939..ddb2e31 100644 --- a/entities/npcs/vrac7/vrac7.gd +++ b/entities/npcs/vrac7/vrac7.gd @@ -3,39 +3,39 @@ class_name Vrac7 @export var prompt_text: String = "[E] Talk" -@onready var sprite := $AnimatedSprite2D +@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D # ── Dialogues ──────────────────────────────────────────────────────────────── -const DIALOGUE_INTRO := [ +const DIALOGUE_INTRO: Array[Dictionary] = [ { "name": "VRAC-7", "text": "You... you're new? No, wait..! SCRAP-09? You've been asleep for a long time. A very long time." }, { "name": "VRAC-7", "text": "I've been stuck here for... I don't know anymore. Can you help me?" }, { "name": "VRAC-7", "text": "I need 3 gears. I spotted some over in the warehouse." }, ] -const DIALOGUE_MISSING_ITEMS := [ +const DIALOGUE_MISSING_ITEMS: Array[Dictionary] = [ { "name": "VRAC-7", "text": "Not the parts yet? The warehouse is big." }, { "name": "VRAC-7", "text": "The gears fell near the shelves somewhere. One seems to be hidden, the others are scattered around." }, ] -const DIALOGUE_HAS_ITEMS := [ +const DIALOGUE_HAS_ITEMS: Array[Dictionary] = [ { "name": "VRAC-7", "text": "You have them? Good. Connect the circuits. My motor system is still there, somewhere." }, ] -const DIALOGUE_POST_REPAIR := [ +const DIALOGUE_POST_REPAIR: Array[Dictionary] = [ { "name": "VRAC-7", "text": "Ah. There it is. I hadn't forgotten what it was like to move, but... it's different from just remembering it." }, { "name": "VRAC-7", "text": "I remember the last day. They turned off the lights as they left. But they left the generators running. I think that was intentional." }, { "name": "VRAC-7", "text": "The workshop is that way. The magnetic key, here take it. It's been in my claw since the beginning. I was keeping it for someone." }, ] -const DIALOGUE_AFTER_ATELIER := [ +const DIALOGUE_AFTER_ATELIER: Array[Dictionary] = [ { "name": "VRAC-7", "text": "Did you find what you were looking for? I'm staying here." }, { "name": "VRAC-7", "text": "Not out of obligation. It's just that... this place is ours now. Someone has to look after it." }, ] # ── Items requis ────────────────────────────────────────────────────────────── -const REQUIRED_ITEMS := { +const REQUIRED_ITEMS: Dictionary = { "engrenage": 3, } @@ -64,7 +64,7 @@ func interact() -> void: if hud: hud.hide_prompt() - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if not dialogue_box: return @@ -98,12 +98,12 @@ func interact() -> void: # ── Mini-jeu ────────────────────────────────────────────────────────────────── func _start_minigame() -> void: - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.hide() - var minigame_node := preload("res://ui/minigame/repair_minigame.tscn").instantiate() + var minigame_node: Node = preload("res://ui/minigame/repair_minigame.tscn").instantiate() get_tree().root.add_child(minigame_node) - var minigame := minigame_node as RepairMinigame + var minigame: RepairMinigame = minigame_node as RepairMinigame if minigame == null: return minigame.repair_complete.connect(_on_repair_done, CONNECT_ONE_SHOT) @@ -127,7 +127,7 @@ func _on_repair_done() -> void: hud.show_log("Magnetic key obtained. Workshop access unlocked.") # Dialogue post-réparation - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.start(DIALOGUE_POST_REPAIR) diff --git a/entities/player/player.gd b/entities/player/player.gd index c770869..36572ce 100644 --- a/entities/player/player.gd +++ b/entities/player/player.gd @@ -1,17 +1,17 @@ extends CharacterBody2D -const SPEED := 64 -const TILE_SIZE := 16 +const SPEED: float = 64.0 +const TILE_SIZE: float = 16.0 -@onready var sprite := $AnimatedSprite2D -@onready var interaction_area := $InteractionArea -@onready var push_ray := $PushRay +@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var interaction_area: Area2D = $InteractionArea +@onready var push_ray: RayCast2D = $PushRay @onready var hud : HUD = get_tree().get_first_node_in_group("hud") -var last_direction := Vector2.DOWN +var last_direction: Vector2 = Vector2.DOWN var interactable : Node = null -var is_locked := false : +var is_locked: bool = false: set(value): is_locked = value if value: @@ -31,17 +31,17 @@ func _physics_process(_delta: float) -> void: move_and_slide() return - var direction := Input.get_vector( + var direction: Vector2 = Input.get_vector( "move_left", "move_right", "move_up", "move_down" ) if push_ray and direction != Vector2.ZERO: - var dominant := _dominant_direction(direction) + var dominant: Vector2 = _dominant_direction(direction) push_ray.target_position = dominant * (TILE_SIZE / 2.0 + 1) push_ray.force_raycast_update() if push_ray.is_colliding(): - var collider = push_ray.get_collider() + var collider: Variant = push_ray.get_collider() if collider.is_in_group("pushable"): collider.try_push(dominant, TILE_SIZE) @@ -76,7 +76,6 @@ func _dir_name(dir: Vector2) -> String: # --- Interaction --- func _on_interaction_area_area_entered(area: Area2D) -> void: - print("Area détectée : ", area.name, " | has interact: ", area.has_method("interact")) if area.has_method("interact"): interactable = area if hud: diff --git a/levels/atelier/atelier.tscn b/levels/atelier/atelier.tscn index e61ba28..4362717 100644 --- a/levels/atelier/atelier.tscn +++ b/levels/atelier/atelier.tscn @@ -7,10 +7,10 @@ [ext_resource type="PackedScene" uid="uid://byipceuvaa4qo" path="res://levels/atelier/generator.tscn" id="4_2hhnj"] [ext_resource type="PackedScene" uid="uid://mh3msmluve7p" path="res://entities/player/player.tscn" id="4_eh0k1"] [ext_resource type="PackedScene" uid="uid://wi2otwdo8br2" path="res://levels/atelier/repair_banch.tscn" id="5_eh0k1"] -[ext_resource type="PackedScene" uid="uid://1x65ioo8tdro" path="res://entities/items/pushable box/pushable_box.tscn" id="5_m45hf"] +[ext_resource type="PackedScene" uid="uid://1x65ioo8tdro" path="res://entities/items/pushable_box/pushable_box.tscn" id="5_m45hf"] [ext_resource type="PackedScene" uid="uid://cge56ob5tt4o6" path="res://entities/items/engrenage/engrenage.tscn" id="6_f4why"] [ext_resource type="PackedScene" uid="uid://c4o84gs3ewuyf" path="res://levels/atelier/panel.tscn" id="6_r0qpk"] -[ext_resource type="PackedScene" uid="uid://dge55wtv1sf8i" path="res://entities/items/pushable robot/pushable_robot.tscn" id="7_r0qpk"] +[ext_resource type="PackedScene" uid="uid://dge55wtv1sf8i" path="res://entities/items/pushable_robot/pushable_robot.tscn" id="7_r0qpk"] [ext_resource type="PackedScene" uid="uid://b7a8wihtu7fvq" path="res://levels/atelier/passage_trigger.tscn" id="10_5yj64"] [ext_resource type="PackedScene" uid="uid://ceijd4gd1rxos" path="res://levels/entrepot/door.tscn" id="11_4of04"] [ext_resource type="Texture2D" uid="uid://xi72kl8lx3te" path="res://assets/sprites/atelier_door_locked.png" id="12_v0hg3"] diff --git a/levels/atelier/panel.gd b/levels/atelier/panel.gd index 45f0f73..1a85c76 100644 --- a/levels/atelier/panel.gd +++ b/levels/atelier/panel.gd @@ -16,21 +16,17 @@ func _ready() -> void: body_exited.connect(_on_body_exited) func interact() -> void: - print("Journal interact() appelé") - - var hud := get_tree().get_first_node_in_group("hud") + var hud: HUD = get_tree().get_first_node_in_group("hud") if hud: hud.hide_prompt() if journal_id != "": GameState.set_flag(journal_id + "_read", true) - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") - print("dialogue_box trouvé : ", dialogue_box) + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") AudioManager.play_sfx("interact") if dialogue_box: - print("Lancement dialogue avec : ", DIALOGUE) dialogue_box.start(DIALOGUE) func _on_body_entered(body: Node) -> void: diff --git a/levels/atelier/passage_trigger.gd b/levels/atelier/passage_trigger.gd index a326907..2542356 100644 --- a/levels/atelier/passage_trigger.gd +++ b/levels/atelier/passage_trigger.gd @@ -11,7 +11,7 @@ extends Area2D # Le layer qui cache le passage — à désactiver @export var layer_cache : TileMapLayer -var _triggered := false +var _triggered: bool = false func _ready() -> void: # Au départ, sol et murs sont cachés diff --git a/levels/atelier/repair_station.gd b/levels/atelier/repair_station.gd index 04aad35..fd98f59 100644 --- a/levels/atelier/repair_station.gd +++ b/levels/atelier/repair_station.gd @@ -3,17 +3,17 @@ extends Area2D @export var prompt_text: String = "[E] Self-repair" -const REQUIRED_ITEMS := { "circuit": 1 } +const REQUIRED_ITEMS: Dictionary = { "circuit": 1 } -const DIALOGUE_NO_ITEM := [ +const DIALOGUE_NO_ITEM: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Required component: self-repair circuit. Not detected." }, ] -const DIALOGUE_HAS_ITEM := [ +const DIALOGUE_HAS_ITEM: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Compatible circuit detected. Start repair sequence?" }, ] -const DIALOGUE_DONE := [ +const DIALOGUE_DONE: Array[Dictionary] = [ { "name": "SYSTEM", "text": "Repair complete. Motor systems restored to 94%." }, { "name": "SYSTEM", "text": "Fragmented memory restored. Fragment — shutdown day." }, ] @@ -35,7 +35,7 @@ func interact() -> void: if hud: hud.hide_prompt() - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if not dialogue_box: return @@ -54,13 +54,13 @@ func interact() -> void: dialogue_box.dialogue_finished.connect(_start_minigame, CONNECT_ONE_SHOT) func _start_minigame() -> void: - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.hide() - var minigame_node := preload("res://ui/minigame/repair_minigame.tscn").instantiate() + var minigame_node: Node = preload("res://ui/minigame/repair_minigame.tscn").instantiate() get_tree().root.add_child(minigame_node) - var minigame := minigame_node as RepairMinigame + var minigame: RepairMinigame = minigame_node as RepairMinigame if minigame == null: return minigame.repair_complete.connect(_on_repair_done, CONNECT_ONE_SHOT) @@ -76,7 +76,7 @@ func _on_repair_done() -> void: await get_tree().create_timer(2.5).timeout hud.show_log("Outer courtyard access unlocked.") - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") if dialogue_box: dialogue_box.start(DIALOGUE_DONE) diff --git a/levels/credits.gd b/levels/credits.gd index 275be13..f15166c 100644 --- a/levels/credits.gd +++ b/levels/credits.gd @@ -1,6 +1,6 @@ extends Control -const SCROLL_SPEED := 20.0 +const SCROLL_SPEED: float = 20.0 const CREDITS: Array[String] = [ "SCRAP SINGAL", @@ -23,11 +23,11 @@ const CREDITS: Array[String] = [ "Thank you for playing.", ] -@onready var scroll := $ScrollContainer -@onready var credits_lbl := $ScrollContainer/CreditsLabel -@onready var fade_rect := $FadeRect +var _scrolling: bool = false -var _scrolling := false +@onready var scroll: ScrollContainer = $ScrollContainer +@onready var credits_lbl: Label = $ScrollContainer/CreditsLabel +@onready var fade_rect: ColorRect = $FadeRect func _ready() -> void: credits_lbl.text = "\n".join(CREDITS) @@ -38,7 +38,7 @@ func _ready() -> void: credits_lbl.position.y = get_viewport_rect().size.y fade_rect.modulate.a = 1.0 - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 0.0, 1.2) tween.tween_callback(func(): _scrolling = true) @@ -62,7 +62,7 @@ func _end_credits() -> void: if not _scrolling: return _scrolling = false - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 1.0, 1.0) tween.tween_callback(func(): get_tree().change_scene_to_file("res://levels/main_menu.tscn") diff --git a/levels/entrepot/door.gd b/levels/entrepot/door.gd index 9870ba9..0bbef31 100644 --- a/levels/entrepot/door.gd +++ b/levels/entrepot/door.gd @@ -5,8 +5,8 @@ extends StaticBody2D @export var locked_sprite: Texture2D @export var open_sprite: Texture2D -@onready var sprite := $Sprite2D -@onready var collision := $CollisionShape2D +@onready var sprite: Sprite2D = $Sprite2D +@onready var collision: CollisionShape2D = $CollisionShape2D func _ready() -> void: GameState.flag_changed.connect(_on_flag_changed) diff --git a/levels/entrepot/entrepot.tscn b/levels/entrepot/entrepot.tscn index b9a8da9..5db3962 100644 --- a/levels/entrepot/entrepot.tscn +++ b/levels/entrepot/entrepot.tscn @@ -7,7 +7,7 @@ [ext_resource type="PackedScene" uid="uid://jrjxu1xfx0ud" path="res://ui/dialogue_box.tscn" id="5_s155k"] [ext_resource type="PackedScene" uid="uid://o7qrmpywwhu8" path="res://ui/hud.tscn" id="6_kejd5"] [ext_resource type="PackedScene" uid="uid://cge56ob5tt4o6" path="res://entities/items/engrenage/engrenage.tscn" id="7_1p1pm"] -[ext_resource type="PackedScene" uid="uid://1x65ioo8tdro" path="res://entities/items/pushable box/pushable_box.tscn" id="7_dm063"] +[ext_resource type="PackedScene" uid="uid://1x65ioo8tdro" path="res://entities/items/pushable_box/pushable_box.tscn" id="7_dm063"] [ext_resource type="PackedScene" uid="uid://c52luh50w8hi2" path="res://levels/unlock_zone.tscn" id="8_dm063"] [ext_resource type="PackedScene" uid="uid://fftu7ne6spjy" path="res://levels/entrepot/etagere.tscn" id="9_sju6u"] [ext_resource type="PackedScene" uid="uid://do61r73dbypfd" path="res://levels/journal.tscn" id="10_b870l"] diff --git a/levels/intro.gd b/levels/intro.gd index 82072f6..7918533 100644 --- a/levels/intro.gd +++ b/levels/intro.gd @@ -1,21 +1,21 @@ extends Node -const LOGS := [ +const LOGS: Array[String] = [ "INITIALIZING SYSTEM...", "LAST SAVE: 847 DAYS AGO.", "MISSING DATA: 847 DAYS.", "UNIT SCRAP-09... BACK ONLINE.", ] -const CHAR_DELAY := 0.04 -const LINE_PAUSE := 2 -const CURSOR := "_" +const CHAR_DELAY: float = 0.04 +const LINE_PAUSE: float = 2.0 +const CURSOR: String = "_" -@onready var log_label := $CanvasLayer/LogLabel -@onready var background := $CanvasLayer/Background +var _full_text: String = "" +var _cursor_visible: bool = true -var _full_text := "" -var _cursor_visible := true +@onready var log_label: RichTextLabel = $CanvasLayer/LogLabel +@onready var background: ColorRect = $CanvasLayer/Background func _ready() -> void: log_label.text = "" @@ -23,7 +23,7 @@ func _ready() -> void: _play_sequence() func _start_cursor_blink() -> void: - var t := create_tween().set_loops() + var t: Tween = create_tween().set_loops() t.tween_callback(_toggle_cursor).set_delay(0.5) func _toggle_cursor() -> void: @@ -39,7 +39,7 @@ func _play_sequence() -> void: await get_tree().create_timer(1).timeout # Fade out - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(background, "modulate:a", 0.0, 1.2) await tween.finished if OS.get_name() == "Web": diff --git a/levels/journal.gd b/levels/journal.gd index b5a2422..466462c 100644 --- a/levels/journal.gd +++ b/levels/journal.gd @@ -14,21 +14,17 @@ func _ready() -> void: body_exited.connect(_on_body_exited) func interact() -> void: - print("Journal interact() appelé") - - var hud := get_tree().get_first_node_in_group("hud") + var hud: HUD = get_tree().get_first_node_in_group("hud") if hud: hud.hide_prompt() if journal_id != "": GameState.set_flag(journal_id + "_read", true) - var dialogue_box := get_tree().get_first_node_in_group("dialogue_box") - print("dialogue_box trouvé : ", dialogue_box) + var dialogue_box: DialogueBox = get_tree().get_first_node_in_group("dialogue_box") AudioManager.play_sfx("interact") if dialogue_box: - print("Lancement dialogue avec : ", DIALOGUE) dialogue_box.start(DIALOGUE) func _on_body_entered(body: Node) -> void: diff --git a/levels/loading_zone.gd b/levels/loading_zone.gd index 228f85c..5362381 100644 --- a/levels/loading_zone.gd +++ b/levels/loading_zone.gd @@ -6,14 +6,13 @@ extends Area2D @onready var fade_rect: ColorRect = $TransitionLayer/FadeRect -var _transitioning := false +var _transitioning: bool = false func _ready() -> void: fade_rect.modulate.a = 0.0 body_entered.connect(_on_body_entered) func _on_body_entered(body: Node2D) -> void: - print("Body entered") if _transitioning: return if body.is_in_group("player"): @@ -21,7 +20,7 @@ func _on_body_entered(body: Node2D) -> void: _start_transition() func _start_transition() -> void: - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 1.0, fade_duration) tween.tween_callback(func(): get_tree().change_scene_to_file(target_scene) diff --git a/levels/main_menu.gd b/levels/main_menu.gd index b6e56f0..bb4108d 100644 --- a/levels/main_menu.gd +++ b/levels/main_menu.gd @@ -1,9 +1,9 @@ extends Control -@onready var press_label := $CenterContainer/VBoxContainer/PressLabel -@onready var fade_rect := $FadeRect +@onready var press_label: Label = $CenterContainer/VBoxContainer/PressLabel +@onready var fade_rect: ColorRect = $FadeRect -var _can_start := false +var _can_start: bool = false func _ready() -> void: AudioManager.stop_ambiance() @@ -12,13 +12,13 @@ func _ready() -> void: fade_rect.modulate = Color(1, 1, 1, 1) fade_rect.modulate.a = 1.0 fade_rect.modulate.a = 1.0 - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 0.0, 1.2) tween.tween_callback(func(): _can_start = true) _blink_prompt() func _blink_prompt() -> void: - var tween := create_tween().set_loops() + var tween: Tween = create_tween().set_loops() tween.tween_property(press_label, "modulate:a", 0.0, 0.6) tween.tween_interval(0.1) tween.tween_property(press_label, "modulate:a", 1.0, 0.6) @@ -34,7 +34,7 @@ func _unhandled_input(event: InputEvent) -> void: func _go_to_intro() -> void: _can_start = false - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 1.0, 0.8) tween.tween_callback(func(): get_tree().change_scene_to_file("res://levels/intro.tscn") diff --git a/levels/outro.gd b/levels/outro.gd index d06cc74..fd7bfa1 100644 --- a/levels/outro.gd +++ b/levels/outro.gd @@ -23,23 +23,22 @@ const ENDING_B: Array[String] = [ "It stays.", ] -const LOG_A := "Destination undefined. Autonomous navigation activated." -const LOG_B := "Autonomous continuity protocol. Status: active." - -@onready var text_label := $CenterContainer/VBoxContainer/TextLabel -@onready var log_label := $CenterContainer/VBoxContainer/LogLabel -@onready var fade_rect := $FadeRect -@onready var continue_label := $ContinueLabel +const LOG_A: String = "Destination undefined. Autonomous navigation activated." +const LOG_B: String = "Autonomous continuity protocol. Status: active." var _lines: Array[String] = [] -var _current_line := 0 -var _can_continue := false -var _finished := false +var _current_line: int = 0 +var _can_continue: bool = false +var _finished: bool = false var _blink_tween : Tween +@onready var text_label: Label = $CenterContainer/VBoxContainer/TextLabel +@onready var log_label: Label = $CenterContainer/VBoxContainer/LogLabel +@onready var fade_rect: ColorRect = $FadeRect +@onready var continue_label: Label = $ContinueLabel + func _ready() -> void: - var is_ending_b := GameState.get_flag("iris3_repaired") - print("Outro chargé — iris3_repaired: ", is_ending_b, " → Ending ", "B" if is_ending_b else "A") + var is_ending_b: bool = GameState.get_flag("iris3_repaired") _lines = ENDING_B if is_ending_b else ENDING_A log_label.text = LOG_B if is_ending_b else LOG_A log_label.visible = false @@ -47,7 +46,7 @@ func _ready() -> void: text_label.text = "" fade_rect.modulate.a = 1.0 - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 0.0, 1.2) tween.tween_callback(_show_next_line) @@ -59,7 +58,7 @@ func _show_next_line() -> void: _can_continue = false _hide_continue() - var line := _lines[_current_line] + var line: String = _lines[_current_line] _current_line += 1 text_label.text = "" @@ -69,7 +68,7 @@ func _show_next_line() -> void: _show_continue() return - var tween := create_tween() + var tween: Tween = create_tween() for i in line.length(): tween.tween_callback(func(): text_label.text += line[text_label.text.length()]) tween.tween_interval(0.04) @@ -85,7 +84,7 @@ func _show_log() -> void: await get_tree().create_timer(0.8).timeout log_label.visible = true log_label.modulate.a = 0.0 - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(log_label, "modulate:a", 1.0, 0.8) tween.tween_interval(2.0) tween.tween_callback(_show_credits) @@ -128,7 +127,7 @@ func _next() -> void: func _go_to_menu() -> void: _can_continue = false - var tween := create_tween() + var tween: Tween = create_tween() tween.tween_property(fade_rect, "modulate:a", 1.0, 1.0) tween.tween_callback(func(): get_tree().change_scene_to_file("res://levels/credits.tscn") diff --git a/levels/repair_zone.gd b/levels/repair_zone.gd index 9cf484b..316339c 100644 --- a/levels/repair_zone.gd +++ b/levels/repair_zone.gd @@ -9,14 +9,11 @@ signal repair_requested(npc_id: String) func interact() -> void: if GameState.can_repair(npc_id): repair_requested.emit(npc_id) - print("Lancement mini-jeu pour : ", npc_id) _start_repair() - else: - print("Pièces manquantes pour réparer ", npc_id) # Dans le script du PNJ, quand les items sont validés func _start_repair() -> void: - var minigame = preload("res://ui/minigame/repair_minigame.tscn").instantiate() + var minigame: RepairMinigame = preload("res://ui/minigame/repair_minigame.tscn").instantiate() as RepairMinigame get_tree().root.add_child(minigame) minigame.repair_complete.connect(_on_repair_done) minigame.open("vrac7") diff --git a/levels/unlock_zone.gd b/levels/unlock_zone.gd index a1db370..043e641 100644 --- a/levels/unlock_zone.gd +++ b/levels/unlock_zone.gd @@ -4,7 +4,7 @@ extends Area2D @export var flag_to_set: String = "" @export var node_to_reveal: NodePath = NodePath("") -var _triggered := false +var _triggered: bool = false func _ready() -> void: body_entered.connect(_on_body_entered) @@ -21,6 +21,6 @@ func _on_body_entered(body: Node) -> void: GameState.set_flag(flag_to_set, true) if not node_to_reveal.is_empty(): - var node = get_node_or_null(node_to_reveal) + var node: CanvasItem = get_node_or_null(node_to_reveal) as CanvasItem if node: node.show() diff --git a/project.godot b/project.godot index 7ffdbf9..0ce073e 100644 --- a/project.godot +++ b/project.godot @@ -39,7 +39,7 @@ window/stretch/mode="canvas_items" move_up={ "deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } @@ -51,7 +51,7 @@ move_down={ } move_left={ "deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } diff --git a/tests/main_test.gd b/tests/main_test.gd index 07413d3..2b6e3fa 100644 --- a/tests/main_test.gd +++ b/tests/main_test.gd @@ -1,7 +1,7 @@ extends Node2D func _ready() -> void: - print(get_tree().get_nodes_in_group("dialogue_box")) + push_warning(str(get_tree().get_nodes_in_group("dialogue_box"))) await get_tree().process_frame for zone in get_tree().get_nodes_in_group("repair_zones"): if zone is RepairZone: @@ -11,4 +11,4 @@ func _ready() -> void: func _on_repair_requested(npc_id: String) -> void: # Test de trigger GameState.complete_repair(npc_id) - print("Flux réparation OK pour : ", npc_id) + push_warning("Flux réparation OK pour : " + npc_id) diff --git a/ui/dialogue_box.gd b/ui/dialogue_box.gd index 7becab6..86c1905 100644 --- a/ui/dialogue_box.gd +++ b/ui/dialogue_box.gd @@ -1,15 +1,15 @@ class_name DialogueBox extends CanvasLayer -signal dialogue_finished +signal dialogue_finished() @onready var speaker_name : Label = $SpeakerName @onready var dialogue_text : RichTextLabel = $Panel/DialogueText @onready var continue_hint : Label = $Panel/ContinueHint -const TYPEWRITER_SPEED := 0.03 # secondes par caractère +const TYPEWRITER_SPEED: float = 0.03 # secondes par caractère -var _lines : Array = [] +var _lines : Array[Dictionary] = [] var _index : int = 0 var _typing : bool = false var _finished : bool = false @@ -20,7 +20,7 @@ func _ready() -> void: process_mode = Node.PROCESS_MODE_ALWAYS hide() -func start(lines: Array) -> void: +func start(lines: Array[Dictionary]) -> void: _lines = lines _index = 0 show() diff --git a/ui/hud.gd b/ui/hud.gd index c73a893..138fe79 100644 --- a/ui/hud.gd +++ b/ui/hud.gd @@ -1,17 +1,17 @@ class_name HUD extends CanvasLayer -@onready var slots := { +var _log_tween : Tween + +@onready var slots: Dictionary = { "engrenage": $InventoryBar/ItemRow/EngrenageSlot/Count, "circuit": $InventoryBar/ItemRow/CircuitSlot/Count, } -@onready var interact_prompt := $InteractPrompt -@onready var prompt_label := $InteractPrompt/PromptLabel +@onready var interact_prompt: Control = $InteractPrompt +@onready var prompt_label: Label = $InteractPrompt/PromptLabel -@onready var log_container := $LogContainer -@onready var log_label := $LogContainer/LogLabel - -var _log_tween : Tween +@onready var log_container: Control = $LogContainer +@onready var log_label: RichTextLabel = $LogContainer/LogLabel func _ready() -> void: GameState.inventory_changed.connect(_refresh) @@ -23,12 +23,6 @@ func show_prompt(text: String) -> void: func hide_prompt() -> void: interact_prompt.visible = false - -func _refresh() -> void: - for item_id in slots: - var count : int = GameState.inventory.get(item_id, 0) - slots[item_id].text = "x%d" % count - slots[item_id].get_parent().modulate.a = 0.4 if count == 0 else 1.0 func show_log(message: String) -> void: log_label.text = "> " + message @@ -44,3 +38,9 @@ func show_log(message: String) -> void: _log_tween.tween_interval(3.5) _log_tween.tween_property(log_container, "modulate:a", 0.0, 0.5) _log_tween.tween_callback(log_container.hide) + +func _refresh() -> void: + for item_id in slots: + var count : int = GameState.inventory.get(item_id, 0) + slots[item_id].text = "x%d" % count + slots[item_id].get_parent().modulate.a = 0.4 if count == 0 else 1.0 diff --git a/ui/minigame/repair_minigame.gd b/ui/minigame/repair_minigame.gd index 3ed0fcc..360c874 100644 --- a/ui/minigame/repair_minigame.gd +++ b/ui/minigame/repair_minigame.gd @@ -1,9 +1,9 @@ class_name RepairMinigame extends CanvasLayer -signal repair_complete +signal repair_complete() -const PUZZLES := { +const PUZZLES: Dictionary = { "vrac7": { "title": "RECONNECTION — MOTOR SYSTEM", "colors": [Color("#f4c430"), Color("#5bc8f5"), Color("#f47c3c")] @@ -18,14 +18,14 @@ const PUZZLES := { }, } -const DOT_RADIUS := 8.0 -const WIRE_WIDTH := 4.0 +const DOT_RADIUS: float = 8.0 +const WIRE_WIDTH: float = 4.0 var current_puzzle : Dictionary var right_order : Array = [] var connections : Dictionary = {} var dragging : int = -1 -var drag_pos : Vector2 +var drag_pos : Vector2 = Vector2.ZERO @onready var wire_canvas : Control = $Background/Panel/VBoxContainer/WireCanvas @onready var title_lbl : Label = $Background/Panel/VBoxContainer/Title @@ -33,7 +33,7 @@ var drag_pos : Vector2 func _ready() -> void: - var vbox = $Background/Panel/VBoxContainer + var vbox: VBoxContainer = $Background/Panel/VBoxContainer layer = 1000 wire_canvas.custom_minimum_size = Vector2(320, 120) wire_canvas.size_flags_vertical = Control.SIZE_SHRINK_CENTER @@ -66,35 +66,35 @@ func open(robot_id: String) -> void: func draw_wires(canvas: Control) -> void: if current_puzzle.is_empty(): return - var colors := current_puzzle["colors"] as Array + var colors: Array = current_puzzle["colors"] as Array var n: int = colors.size() - var w := canvas.size.x - var h := canvas.size.y + var w: float = canvas.size.x + var h: float = canvas.size.y canvas.draw_line(Vector2(w * 0.5, 10), Vector2(w * 0.5, h - 10), Color(1, 1, 1, 0.08), 1.0) for left_idx in connections: var right_slot: int = connections[left_idx] - var from := _left_pos(left_idx, n, w, h) - var to := _right_pos(right_slot, n, w, h) + var from: Vector2 = _left_pos(left_idx, n, w, h) + var to: Vector2 = _right_pos(right_slot, n, w, h) canvas.draw_line(from, to, colors[left_idx], WIRE_WIDTH, true) if dragging >= 0: - var from := _left_pos(dragging, n, w, h) + var from: Vector2 = _left_pos(dragging, n, w, h) canvas.draw_line(from, drag_pos, (colors[dragging] as Color).lightened(0.3), WIRE_WIDTH, true) for i in n: - var pos := _left_pos(i, n, w, h) - var c := colors[i] as Color + var pos: Vector2 = _left_pos(i, n, w, h) + var c: Color = colors[i] as Color canvas.draw_circle(pos, DOT_RADIUS, c) if not connections.has(i): canvas.draw_arc(pos, DOT_RADIUS + 4, 0, TAU, 32, c.lightened(0.5), 2.0) for i in n: - var pos := _right_pos(i, n, w, h) + var pos: Vector2 = _right_pos(i, n, w, h) var col_idx : int = right_order[i] - var c := colors[col_idx] as Color + var c: Color = colors[col_idx] as Color canvas.draw_circle(pos, DOT_RADIUS, c) if not connections.values().has(i): canvas.draw_arc(pos, DOT_RADIUS + 4, 0, TAU, 32, c.lightened(0.5), 2.0) @@ -104,10 +104,10 @@ func draw_wires(canvas: Control) -> void: func on_canvas_input(event: InputEvent) -> void: if current_puzzle.is_empty(): return - var colors := current_puzzle["colors"] as Array + var colors: Array = current_puzzle["colors"] as Array var n: int = colors.size() - var w := wire_canvas.size.x - var h := wire_canvas.size.y + var w: float = wire_canvas.size.x + var h: float = wire_canvas.size.y if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: @@ -161,7 +161,7 @@ func _close() -> void: func _update_status() -> void: var total: int = (current_puzzle.get("colors", []) as Array).size() - var done := connections.size() + var done: int = connections.size() if done == total: status.text = "REPAIR COMPLETE" status.add_theme_color_override("font_color", Color("#6daa45")) @@ -170,12 +170,12 @@ func _update_status() -> void: status.remove_theme_color_override("font_color") func _set_hud_visible(v: bool) -> void: - var hud = get_tree().get_first_node_in_group("hud") + var hud: HUD = get_tree().get_first_node_in_group("hud") if hud: hud.visible = v func _set_player_enabled(enabled: bool) -> void: - var player = get_tree().get_first_node_in_group("player") + var player: Variant = get_tree().get_first_node_in_group("player") if player: player.set_process(enabled) player.set_physics_process(enabled)