Add chapter battle replay entries
This commit is contained in:
@@ -204,6 +204,25 @@ func apply_battle_result(battle_state) -> Dictionary:
|
||||
var already_completed := completed_scenarios.has(battle_state.battle_id)
|
||||
var rewards := battle_state.get_rewards()
|
||||
var post_battle_choices := battle_state.get_post_battle_choices()
|
||||
if already_completed:
|
||||
var return_scenario_id := current_scenario_id if not is_campaign_complete() else ""
|
||||
return {
|
||||
"saved": true,
|
||||
"rewards_applied": false,
|
||||
"already_completed": true,
|
||||
"gold": 0,
|
||||
"items": [],
|
||||
"joined_officers": [],
|
||||
"left_officers": [],
|
||||
"progression_events": [],
|
||||
"next_scenario_id": return_scenario_id,
|
||||
"next_scenario_title": get_scenario_title(return_scenario_id),
|
||||
"scenario_id": battle_state.battle_id,
|
||||
"campaign_complete": return_scenario_id.is_empty(),
|
||||
"post_battle_choices": [],
|
||||
"choice_applied": true,
|
||||
"choice_label": ""
|
||||
}
|
||||
var previous_completed := completed_scenarios.duplicate()
|
||||
var previous_gold := gold
|
||||
var previous_inventory := inventory.duplicate(true)
|
||||
@@ -217,22 +236,20 @@ func apply_battle_result(battle_state) -> Dictionary:
|
||||
var reward_gold := 0
|
||||
var next_scenario_id := get_next_scenario_id(battle_state.battle_id)
|
||||
|
||||
if not already_completed:
|
||||
roster = battle_state.get_player_roster_snapshot()
|
||||
inventory = battle_state.get_inventory_snapshot()
|
||||
roster = battle_state.get_player_roster_snapshot()
|
||||
inventory = battle_state.get_inventory_snapshot()
|
||||
|
||||
if not already_completed:
|
||||
completed_scenarios.append(battle_state.battle_id)
|
||||
reward_gold = int(rewards.get("gold", 0))
|
||||
gold += reward_gold
|
||||
completed_scenarios.append(battle_state.battle_id)
|
||||
reward_gold = int(rewards.get("gold", 0))
|
||||
gold += reward_gold
|
||||
|
||||
for item_id in rewards.get("items", []):
|
||||
var key := str(item_id)
|
||||
inventory[key] = int(inventory.get(key, 0)) + 1
|
||||
rewarded_items.append(key)
|
||||
joined_reward_officers = _apply_join_officers(rewards.get("join_officers", []))
|
||||
left_reward_officers = _apply_leave_officers(rewards.get("leave_officers", []))
|
||||
pending_post_battle_choice_scenario_id = battle_state.battle_id if not post_battle_choices.is_empty() else ""
|
||||
for item_id in rewards.get("items", []):
|
||||
var key := str(item_id)
|
||||
inventory[key] = int(inventory.get(key, 0)) + 1
|
||||
rewarded_items.append(key)
|
||||
joined_reward_officers = _apply_join_officers(rewards.get("join_officers", []))
|
||||
left_reward_officers = _apply_leave_officers(rewards.get("leave_officers", []))
|
||||
pending_post_battle_choice_scenario_id = battle_state.battle_id if not post_battle_choices.is_empty() else ""
|
||||
|
||||
if not next_scenario_id.is_empty():
|
||||
current_scenario_id = next_scenario_id
|
||||
@@ -259,19 +276,19 @@ func apply_battle_result(battle_state) -> Dictionary:
|
||||
|
||||
return {
|
||||
"saved": saved,
|
||||
"rewards_applied": not already_completed and saved,
|
||||
"already_completed": already_completed,
|
||||
"rewards_applied": saved,
|
||||
"already_completed": false,
|
||||
"gold": reward_gold,
|
||||
"items": rewarded_items,
|
||||
"joined_officers": joined_reward_officers,
|
||||
"left_officers": left_reward_officers,
|
||||
"progression_events": battle_state.get_progression_events() if saved and not already_completed else [],
|
||||
"progression_events": battle_state.get_progression_events() if saved else [],
|
||||
"next_scenario_id": next_scenario_id,
|
||||
"next_scenario_title": get_scenario_title(next_scenario_id),
|
||||
"scenario_id": battle_state.battle_id,
|
||||
"campaign_complete": next_scenario_id.is_empty(),
|
||||
"post_battle_choices": post_battle_choices if saved and not already_completed else [],
|
||||
"choice_applied": not saved or already_completed or post_battle_choices.is_empty(),
|
||||
"post_battle_choices": post_battle_choices if saved else [],
|
||||
"choice_applied": not saved or post_battle_choices.is_empty(),
|
||||
"choice_label": ""
|
||||
}
|
||||
|
||||
@@ -658,12 +675,24 @@ func get_chapter_progress_entries() -> Array:
|
||||
var completed_count := 0
|
||||
var current_in_chapter := false
|
||||
var current_scenario_title := ""
|
||||
var scenarios := []
|
||||
for scenario_id in scenario_ids:
|
||||
var completed := completed_scenarios.has(scenario_id)
|
||||
var current := scenario_id == current_scenario_id
|
||||
if completed_scenarios.has(scenario_id):
|
||||
completed_count += 1
|
||||
if scenario_id == current_scenario_id:
|
||||
if current:
|
||||
current_in_chapter = true
|
||||
current_scenario_title = get_scenario_title(scenario_id)
|
||||
scenarios.append({
|
||||
"id": scenario_id,
|
||||
"title": get_scenario_title(scenario_id),
|
||||
"position": get_scenario_position_in_chapter(scenario_id),
|
||||
"total": scenario_ids.size(),
|
||||
"completed": completed,
|
||||
"current": current,
|
||||
"available": completed or current
|
||||
})
|
||||
entries.append({
|
||||
"id": chapter_id,
|
||||
"title": str(chapter_titles.get(chapter_id, chapter_id)),
|
||||
@@ -672,7 +701,8 @@ func get_chapter_progress_entries() -> Array:
|
||||
"completed": completed_count,
|
||||
"total": scenario_ids.size(),
|
||||
"current": current_in_chapter,
|
||||
"current_scenario_title": current_scenario_title
|
||||
"current_scenario_title": current_scenario_title,
|
||||
"scenarios": scenarios
|
||||
})
|
||||
return entries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user