feat: let villagers witness and trust the player restock

This commit is contained in:
Rijad Zuzo
2026-08-10 23:36:47 +02:00
parent 9ed985d6a3
commit f72aa659d2
8 changed files with 296 additions and 26 deletions
+26
View File
@@ -34,6 +34,7 @@ func _ready() -> void:
simulation_manager.event_knowledge_changed.connect(_on_helper_facts_changed)
simulation_manager.event_knowledge_forgotten.connect(_on_helper_fact_forgotten)
simulation_manager.relationship_changed.connect(_on_helper_relationship_changed)
simulation_manager.relationship_changed.connect(_on_player_trust_changed)
simulation_manager.npc_inventory_changed.connect(_on_helper_inventory_changed)
simulation_manager.village_changed.connect(_on_village_changed)
simulation_manager.state_restored.connect(_on_state_restored)
@@ -112,6 +113,31 @@ func _on_helper_relationship_changed(
_refresh_player_response()
func _on_player_trust_changed(
relationship: RelationshipStateRecord, cause_event: EconomicEventRecord
) -> void:
if relationship == null or cause_event == null:
return
if relationship.get_subject_id() != SimulationIds.PLAYER_ACTOR_ID:
return
if _is_active_need_supply(cause_event):
return
var observer_name := _get_npc_name(relationship.get_observer_id())
_show_feedback(
"Trust grows", "%s trusts you — you stocked the pantry." % observer_name, &"player_trust"
)
func _is_active_need_supply(cause_event: EconomicEventRecord) -> bool:
var opportunity: OpportunityStateRecord = simulation_manager.get_active_opportunity()
if opportunity == null:
return false
return (
opportunity.get_target_id() == StringName(cause_event.data["destination_id"])
and opportunity.get_resource_id() == StringName(cause_event.data["item_id"])
)
func _on_helper_inventory_changed(_npc: SimNPC, _item_id: StringName, _amount: float) -> void:
_refresh_player_response()