feat: give the player a real carried inventory and deposit transactions
This commit is contained in:
@@ -30,6 +30,7 @@ signal player_quest_expired(quest: PlayerQuestRecord)
|
||||
signal player_standing_changed(standing: PlayerStandingRecord)
|
||||
signal player_tier_advanced(tier: int, tier_name: String)
|
||||
signal player_needs_changed(state: PlayerStateRecord)
|
||||
signal player_inventory_changed(state: PlayerStateRecord)
|
||||
signal player_died(state: PlayerStateRecord)
|
||||
|
||||
var village := SimVillage.new()
|
||||
@@ -85,6 +86,8 @@ func _ready() -> void:
|
||||
event_log.event_recorded.connect(_on_economic_event_recorded)
|
||||
event_recorder.configure(event_log, Callable(self, "get_tick_count_for_recording"))
|
||||
event_recorder.set_npcs(npcs)
|
||||
player_needs.configure(economy, event_recorder)
|
||||
player_needs.set_resource_states(resource_states)
|
||||
economy.inventory_changed.connect(_on_economy_inventory_changed)
|
||||
economy.economic_event_requested.connect(event_recorder.record_economic)
|
||||
economy.narrative_event_requested.connect(event_recorder.record_narrative)
|
||||
@@ -578,30 +581,28 @@ func _on_economic_event_recorded(event: EconomicEventRecord) -> void:
|
||||
for learned_record in learned_records:
|
||||
_apply_new_event_knowledge(learned_record, event)
|
||||
if StringName(event.data["event_type"]) == SimulationIds.EVENT_ANIMAL_FED:
|
||||
_resolve_animal_care_quest(event)
|
||||
_finish_quest_resolution(
|
||||
player_quest_system.on_animal_fed(
|
||||
animal_care.get_state(StringName(event.data["destination_id"])), event, tick_count
|
||||
)
|
||||
)
|
||||
_update_opportunity_from_event(event)
|
||||
economic_event_recorded.emit(event)
|
||||
|
||||
|
||||
func _resolve_animal_care_quest(event: EconomicEventRecord) -> void:
|
||||
var animal_state := animal_care.get_state(StringName(event.data["destination_id"]))
|
||||
var resolution := player_quest_system.on_animal_fed(animal_state, event, tick_count)
|
||||
_finish_quest_resolution(resolution)
|
||||
|
||||
|
||||
func _finish_quest_resolution(resolution: Dictionary) -> void:
|
||||
if not resolution.has("quest"):
|
||||
return
|
||||
var quest: PlayerQuestRecord = resolution["quest"]
|
||||
if resolution["completed"]:
|
||||
player_quest_completed.emit(quest)
|
||||
var standing := player_quest_system.standing
|
||||
player_standing_changed.emit(standing)
|
||||
if standing.get_tier() > _last_player_tier:
|
||||
_last_player_tier = standing.get_tier()
|
||||
player_tier_advanced.emit(standing.get_tier(), standing.get_tier_name())
|
||||
else:
|
||||
if not resolution["completed"]:
|
||||
player_quest_expired.emit(quest)
|
||||
return
|
||||
player_quest_completed.emit(quest)
|
||||
var standing := player_quest_system.standing
|
||||
player_standing_changed.emit(standing)
|
||||
if standing.get_tier() > _last_player_tier:
|
||||
_last_player_tier = standing.get_tier()
|
||||
player_tier_advanced.emit(standing.get_tier(), standing.get_tier_name())
|
||||
|
||||
|
||||
func try_communicate_at_shared_activity(speaker_id: int, listener_id: int) -> bool:
|
||||
@@ -609,12 +610,11 @@ func try_communicate_at_shared_activity(speaker_id: int, listener_id: int) -> bo
|
||||
var listener := _find_npc_by_id(listener_id)
|
||||
if not _can_communicate_at_shared_activity(speaker, listener):
|
||||
return false
|
||||
var known_event_ids := event_knowledge_system.get_communicable_event_ids(
|
||||
for event_id in event_knowledge_system.get_communicable_event_ids(
|
||||
speaker.id,
|
||||
_get_lasting_event_ids(speaker.id),
|
||||
opportunity_system.get_open_trigger_event_id()
|
||||
)
|
||||
for event_id in known_event_ids:
|
||||
):
|
||||
var event := event_log.get_by_id(event_id)
|
||||
if event == null:
|
||||
continue
|
||||
@@ -742,22 +742,21 @@ func get_active_player_quest() -> PlayerQuestRecord:
|
||||
|
||||
|
||||
func _advance_player_needs() -> void:
|
||||
if not player_needs.advance(village):
|
||||
player_needs_changed.emit(player_needs.state)
|
||||
if player_needs.advance(village):
|
||||
player_died.emit(player_needs.state)
|
||||
player_needs.apply_death_consequence(player_quest_system.standing)
|
||||
_last_player_tier = player_quest_system.standing.get_tier()
|
||||
player_standing_changed.emit(player_quest_system.standing)
|
||||
return
|
||||
player_died.emit(player_needs.state)
|
||||
player_needs.apply_death_consequence(player_quest_system.standing)
|
||||
_last_player_tier = player_quest_system.standing.get_tier()
|
||||
player_standing_changed.emit(player_quest_system.standing)
|
||||
player_needs_changed.emit(player_needs.state)
|
||||
|
||||
|
||||
func respawn_player() -> bool:
|
||||
var was_dead := player_needs.state.is_dead()
|
||||
if not player_needs.state.is_dead():
|
||||
return false
|
||||
player_needs.respawn()
|
||||
if was_dead and not player_needs.state.is_dead():
|
||||
player_needs_changed.emit(player_needs.state)
|
||||
return true
|
||||
return false
|
||||
player_needs_changed.emit(player_needs.state)
|
||||
return true
|
||||
|
||||
|
||||
func get_player_state() -> PlayerStateRecord:
|
||||
@@ -771,6 +770,21 @@ func player_eat(amount: float) -> float:
|
||||
return eaten
|
||||
|
||||
|
||||
func player_gather(node: ResourceNode) -> float:
|
||||
var gathered := player_needs.gather_node(node)
|
||||
if gathered > 0.0:
|
||||
player_inventory_changed.emit(player_needs.state)
|
||||
return gathered
|
||||
|
||||
|
||||
func player_deposit(resource_id: StringName) -> float:
|
||||
var deposited := player_needs.deposit_resource(resource_id)
|
||||
if deposited > 0.0:
|
||||
village_changed.emit(village)
|
||||
player_inventory_changed.emit(player_needs.state)
|
||||
return deposited
|
||||
|
||||
|
||||
func _consider_animal_care_quests() -> void:
|
||||
var pantry: StorageStateRecord = get_pantry()
|
||||
for animal_state in animal_care.get_all_states():
|
||||
|
||||
Reference in New Issue
Block a user