extends SceneTree var main_scene: Node var failures: Array[String] = [] func _initialize() -> void: call_deferred("_run") func _run() -> void: main_scene = load("res://main.tscn").instantiate() root.add_child(main_scene) await process_frame await physics_frame var simulation_manager := main_scene.get_node("SimulationManager") var player := main_scene.get_node("Player") var bush := main_scene.get_node( "JajceWorld/WorldObjects/ResourceNodes/BerryBush_01" ) as ResourceNode var tree := main_scene.get_node( "JajceWorld/WorldObjects/ResourceNodes/Tree_01" ) as ResourceNode simulation_manager.set_process(false) var bush_state: ResourceStateRecord = simulation_manager.get_resource_state( bush.node_id ) var tree_state: ResourceStateRecord = simulation_manager.get_resource_state( tree.node_id ) bush_state.set_amount_remaining(1.0) _check( simulation_manager.reserve_resource(bush.node_id, 999), "Player contention setup should reserve the bush" ) player.global_position = bush.interaction_point.global_position var food_before: float = simulation_manager.village.food player.try_interact() _check( is_equal_approx(bush_state.get_amount_remaining(), 0.0), "Player should deplete the nearby bush" ) _check(is_equal_approx(simulation_manager.village.food, food_before + 1.0), "Village should receive exactly the bush's remaining food") _check( bush_state.get_reserved_by() == -1, "Depletion should release the NPC reservation" ) player.global_position = tree.interaction_point.global_position var wood_before: float = simulation_manager.village.wood var tree_before := tree_state.get_amount_remaining() player.try_interact() _check( is_equal_approx( tree_state.get_amount_remaining(), tree_before - tree.yield_per_action ), "Player should extract the tree's configured yield" ) _check(is_equal_approx(simulation_manager.village.wood, wood_before + tree.yield_per_action), "Village should receive exactly the extracted wood") if failures.is_empty(): print("[TEST] ResourceNode player parity passed") quit(0) return for failure in failures: push_error("[TEST] " + failure) quit(1) func _check(condition: bool, message: String) -> void: if not condition: failures.append(message)