diff --git a/tests/jajce_runtime_integration_test.gd b/tests/jajce_runtime_integration_test.gd index a4c17dd..e1bfa29 100644 --- a/tests/jajce_runtime_integration_test.gd +++ b/tests/jajce_runtime_integration_test.gd @@ -53,10 +53,10 @@ func _run() -> void: "Runtime should not retain duplicate flat-world objects" ) var resource_root := main_scene.get_node("JajceWorld/WorldObjects/ResourceNodes") - _check(resource_root.get_child_count() == 12, "Runtime should contain twelve Jajce ResourceNodes") + _check(resource_root.get_child_count() == 18, "Runtime should contain eighteen Jajce ResourceNodes") _check( - simulation_manager.resource_states.size() == 12, - "Simulation authority should bind all twelve Jajce resources" + simulation_manager.resource_states.size() == 18, + "Simulation authority should bind all eighteen Jajce resources" ) var village_root := main_scene.get_node("JajceWorld/VillageRoot") var path_strips := 0 @@ -156,7 +156,7 @@ func _run() -> void: ) if failures.is_empty(): - print("[TEST] Jajce runtime passed: 6 NPCs, 12 resources, typed sites") + print("[TEST] Jajce runtime passed: 6 NPCs, 18 resources, typed sites") quit(0) return diff --git a/tests/jajce_world_scaffold_test.gd b/tests/jajce_world_scaffold_test.gd index 89df0a5..8a84e82 100644 --- a/tests/jajce_world_scaffold_test.gd +++ b/tests/jajce_world_scaffold_test.gd @@ -124,13 +124,19 @@ func _run() -> void: "animal_camp_river_01", "berry_bush_01", "berry_bush_02", + "berry_bush_river_02", + "berry_patch_mill_01", "berry_patch_river_01", "berry_patch_south_01", + "farm_crop_01", "tree_01", "tree_02", + "tree_forest_grove_01", + "tree_forest_grove_02", "tree_north_outskirts_01", "tree_river_resource_01", "tree_south_edge_01", + "wood_pile_mill_01", "wood_pile_village_01" ], "Jajce resources should preserve all stable and discoverable IDs" @@ -142,6 +148,7 @@ func _run() -> void: var berry_context_count := 0 var village_context_count := 0 var outskirt_context_count := 0 + var farming_context_count := 0 for resource in resources: var node := resource as ResourceNode var id := String(node.node_id) @@ -157,6 +164,8 @@ func _run() -> void: village_context_count += 1 if id.contains("_outskirts_") or id.contains("_edge_") or id.contains("_river_"): outskirt_context_count += 1 + if id.begins_with("farm_"): + farming_context_count += 1 metadata_valid = ( metadata_valid and node.comfort_distance > 0.0 @@ -164,12 +173,13 @@ func _run() -> void: and node.safety_risk <= 1.0 ) _check(metadata_valid, "Jajce resources should define discovery metadata") - _check(food_count >= 6, "Jajce should expose at least six finite food resources") - _check(wood_count >= 6, "Jajce should expose at least six finite wood resources") + _check(food_count >= 9, "Jajce should expose at least nine finite food resources") + _check(wood_count >= 9, "Jajce should expose at least nine finite wood resources") _check(animal_context_count >= 2, "Jajce food discovery should include animal-camp contexts") - _check(berry_context_count >= 4, "Jajce food discovery should include berry contexts") + _check(berry_context_count >= 6, "Jajce food discovery should include berry contexts") _check(village_context_count >= 1, "Jajce discovery should include at least one village stockpile") _check(outskirt_context_count >= 4, "Jajce discovery should include outskirts/river contexts") + _check(farming_context_count >= 1, "Jajce food discovery should include farming contexts") _check(world.has_node("WorldObjects/StorageSites"), "JajceWorld should expose StorageSites") var pantry := world.get_node("WorldObjects/StorageSites/VillagePantry") as StorageNode _check(pantry != null, "JajceWorld should include a typed VillagePantry StorageNode") @@ -235,7 +245,7 @@ func _run() -> void: adapter.pantry_storage = pantry root.add_child(adapter) var food_candidates := adapter.get_resource_candidates(SimulationIds.ACTION_GATHER_FOOD) - _check(food_candidates.size() >= 6, "Adapter should expose all authored food candidates") + _check(food_candidates.size() >= 9, "Adapter should expose all authored food candidates") var candidate_metadata_valid := true for candidate in food_candidates: candidate_metadata_valid = ( diff --git a/world/jajce/JajceWorld.tscn b/world/jajce/JajceWorld.tscn index 64c5a1b..797b710 100644 --- a/world/jajce/JajceWorld.tscn +++ b/world/jajce/JajceWorld.tscn @@ -406,6 +406,66 @@ safety_risk = 0.02 comfort_distance = 16.0 discovery_priority = 0.75 +[node name="FarmCrop_01" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(-11, 0, 3) +node_id = &"farm_crop_01" +initial_amount = 8.0 +yield_per_action = 2.0 +safety_risk = 0.02 +comfort_distance = 16.0 +discovery_priority = 0.85 + +[node name="BerryBush_River_02" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(28, 0, -2) +node_id = &"berry_bush_river_02" +initial_amount = 5.0 +yield_per_action = 1.5 +safety_risk = 0.22 +comfort_distance = 28.0 +discovery_priority = 0.2 + +[node name="Tree_Forest_Grove_01" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(-8, 0, -22) +node_id = &"tree_forest_grove_01" +action_id = &"gather_wood" +resource_id = &"wood" +initial_amount = 14.0 +yield_per_action = 3.0 +safety_risk = 0.3 +comfort_distance = 30.0 +discovery_priority = -0.1 + +[node name="Tree_Forest_Grove_02" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(-3, 0, -24) +node_id = &"tree_forest_grove_02" +action_id = &"gather_wood" +resource_id = &"wood" +initial_amount = 11.0 +yield_per_action = 2.5 +safety_risk = 0.32 +comfort_distance = 32.0 +discovery_priority = -0.2 + +[node name="WoodPile_Mill_01" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(21, 0, 1) +node_id = &"wood_pile_mill_01" +action_id = &"gather_wood" +resource_id = &"wood" +initial_amount = 4.0 +yield_per_action = 1.0 +safety_risk = 0.03 +comfort_distance = 14.0 +discovery_priority = 0.8 + +[node name="BerryPatch_Mill_01" parent="WorldObjects/ResourceNodes" instance=ExtResource("2_resource")] +position = Vector3(14, 0, 3) +node_id = &"berry_patch_mill_01" +initial_amount = 5.0 +yield_per_action = 1.5 +safety_risk = 0.1 +comfort_distance = 20.0 +discovery_priority = 0.45 + [node name="StorageSites" type="Node3D" parent="WorldObjects"] [node name="VillagePantry" parent="WorldObjects/StorageSites" instance=ExtResource("14_storage")]