diff --git a/autoloads/game_state.gd b/autoloads/game_state.gd index 3c0292f..5b8709a 100644 --- a/autoloads/game_state.gd +++ b/autoloads/game_state.gd @@ -2,8 +2,19 @@ extends Node signal inventory_changed +# Pièces requises par PNJ +const REPAIR_REQUIREMENTS := { + "vrac7": { "engrenage": 1}, + "iris3": { "circuit": 1 }, +} + +var repaired := { + "vrac7": false, + "iris3": false, +} var inventory := {} +# Items func add_item(id: String) -> void: if inventory.has(id): inventory[id] += 1 @@ -22,3 +33,23 @@ func remove_item(id: String) -> void: if inventory[id] <= 0: inventory.erase(id) inventory_changed.emit() + +# Robots repairs +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, {}) + for item_id in required: + if inventory.get(item_id, 0) < required[item_id]: + return false + return true + +func complete_repair(npc_id: String) -> void: + if not can_repair(npc_id): + return + # Consomme les pièces + var required = REPAIR_REQUIREMENTS[npc_id] + for item_id in required: + remove_item(item_id) + repaired[npc_id] = true + print("Réparation terminée : ", npc_id) diff --git a/levels/repair_zone.gd b/levels/repair_zone.gd new file mode 100644 index 0000000..6effd07 --- /dev/null +++ b/levels/repair_zone.gd @@ -0,0 +1,16 @@ +class_name RepairZone +extends Area2D + +@export var npc_id : String = "vrac7" + +signal repair_requested(npc_id: String) + +func interact() -> void: + print("interact() appelé sur RepairZone") + print("can_repair : ", GameState.can_repair(npc_id)) + print("inventaire : ", GameState.inventory) + if GameState.can_repair(npc_id): + repair_requested.emit(npc_id) + print("Lancement mini-jeu pour : ", npc_id) + else: + print("Pièces manquantes pour réparer ", npc_id) diff --git a/levels/repair_zone.gd.uid b/levels/repair_zone.gd.uid new file mode 100644 index 0000000..0b2e4eb --- /dev/null +++ b/levels/repair_zone.gd.uid @@ -0,0 +1 @@ +uid://dsolxmebtr85k diff --git a/levels/repair_zone.tscn b/levels/repair_zone.tscn new file mode 100644 index 0000000..38b134a --- /dev/null +++ b/levels/repair_zone.tscn @@ -0,0 +1,15 @@ +[gd_scene format=3 uid="uid://d5r0so1s8rf8"] + +[ext_resource type="Script" uid="uid://dsolxmebtr85k" path="res://levels/repair_zone.gd" id="1_gucjc"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_ro2g2"] + +[node name="RepairZone" type="Node2D" unique_id=2043534964] + +[node name="RepairZone" type="Area2D" parent="." unique_id=2075147296] +collision_layer = 8 +collision_mask = 12 +script = ExtResource("1_gucjc") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RepairZone" unique_id=1933259341] +shape = SubResource("CircleShape2D_ro2g2") diff --git a/tests/main.tscn b/tests/main.tscn index a967e6a..4be37e2 100644 --- a/tests/main.tscn +++ b/tests/main.tscn @@ -5,6 +5,7 @@ [ext_resource type="PackedScene" uid="uid://mh3msmluve7p" path="res://entities/player/player.tscn" id="3_pi5dy"] [ext_resource type="PackedScene" uid="uid://grs5ypwkxv3x" path="res://entities/items/item.tscn" id="4_gn22r"] [ext_resource type="PackedScene" uid="uid://o7qrmpywwhu8" path="res://ui/hud.tscn" id="5_cb43m"] +[ext_resource type="PackedScene" uid="uid://d5r0so1s8rf8" path="res://levels/repair_zone.tscn" id="6_y6b0w"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gn22r"] texture = ExtResource("2_pi5dy") @@ -168,3 +169,6 @@ position = Vector2(186, 210) [node name="Hud" parent="Node2D" unique_id=1774402684 instance=ExtResource("5_cb43m")] position = Vector2(98, 108) + +[node name="RepairZone" parent="Node2D" unique_id=2043534964 groups=["repair_zones"] instance=ExtResource("6_y6b0w")] +position = Vector2(224, 145) diff --git a/tests/main_test.gd b/tests/main_test.gd index e251cf8..3140601 100644 --- a/tests/main_test.gd +++ b/tests/main_test.gd @@ -1 +1,12 @@ extends Node2D + +func _ready() -> void: + await get_tree().process_frame + for zone in get_tree().get_nodes_in_group("repair_zones"): + if zone is RepairZone: + zone.repair_requested.connect(_on_repair_requested) + +func _on_repair_requested(npc_id: String) -> void: + # Test de trigger + GameState.complete_repair(npc_id) + print("Flux réparation OK pour : ", npc_id)