public void LoadEffects(BattleGroundSaveData battleSaveData) { #region Load Statuses and Immobilize for (int i = 0; i < HeroParty.Units.Count; i++) { if (HeroParty.Units[i].Character[StatusType.Stun].IsApplied) { HeroParty.Units[i].SetHalo("stunned"); } else if (HeroParty.Units[i].CombatInfo.IsSurprised) { HeroParty.Units[i].SetHalo("surprised"); } if (HeroParty.Units[i].CombatInfo.IsImmobilized) { HeroParty.Units[i].SetDefendAnimation(true); } if (HeroParty.Units[i].Character.IsMonster == false) { var hero = HeroParty.Units[i].Character as Hero; if (hero[StatusType.DeathsDoor].IsApplied) { hero.ApplyDeathDoor(); } else if (hero[StatusType.DeathRecovery].IsApplied) { hero.ApplyMortality(); } } } for (int i = 0; i < MonsterParty.Units.Count; i++) { if (MonsterParty.Units[i].Character[StatusType.Stun].IsApplied) { MonsterParty.Units[i].SetHalo("stunned"); } else if (MonsterParty.Units[i].CombatInfo.IsSurprised) { MonsterParty.Units[i].SetHalo("surprised"); } if (MonsterParty.Units[i].CombatInfo.IsImmobilized) { MonsterParty.Units[i].SetDefendAnimation(true); } if (MonsterParty.Units[i].Character.IsMonster == false) { MonsterParty.Units[i].SetCombatAnimation(true); var hero = MonsterParty.Units[i].Character as Hero; if (hero[StatusType.DeathsDoor].IsApplied) { hero.ApplyDeathDoor(); } else if (hero[StatusType.DeathRecovery].IsApplied) { hero.ApplyMortality(); } } } #endregion #region Load Captures for (int i = 0; i < battleSaveData.Captures.Count; i++) { CaptureRecord newCaptureRecord = new CaptureRecord(); int prisonerId = newCaptureRecord.GetHashPrisonerId(battleSaveData.Captures[i]); int captorId = newCaptureRecord.GetHashCaptorId(battleSaveData.Captures[i]); newCaptureRecord.RemoveFromParty = newCaptureRecord.GetHashRemoveFromParty(battleSaveData.Captures[i]); if (newCaptureRecord.RemoveFromParty == false) { FormationUnit prisoner = FindById(prisonerId); FormationUnit captor = FindById(captorId); newCaptureRecord.PrisonerUnit = prisoner; newCaptureRecord.CaptorUnit = captor; prisoner.SetCaptureEffect(captor); Captures.Add(newCaptureRecord); } else { FormationUnit prisoner = loadedRemovedPrisoners.Find(removedUnit => removedUnit.CombatInfo.CombatId == prisonerId); FormationUnit captor = FindById(captorId); prisoner.RectTransform.position = captor.RectTransform.position; newCaptureRecord.PrisonerUnit = prisoner; newCaptureRecord.CaptorUnit = captor; Captures.Add(newCaptureRecord); } } #endregion #region Load Companions for (int i = 0; i < battleSaveData.Companions.Count; i++) { CompanionRecord newCompanionRecord = new CompanionRecord(); int companionId = newCompanionRecord.GetHashCompanionId(battleSaveData.Companions[i]); int targetId = newCompanionRecord.GetHashTargetId(battleSaveData.Companions[i]); FormationUnit companion = FindById(companionId); FormationUnit target = FindById(targetId); newCompanionRecord.CompanionUnit = companion; newCompanionRecord.TargetUnit = target; Companions.Add(newCompanionRecord); } #endregion #region Load Controls for (int i = 0; i < battleSaveData.Controls.Count; i++) { ControlRecord newControlRecord = new ControlRecord(); int prisonerId = newControlRecord.GetHashPrisonerId(battleSaveData.Controls[i]); int controllerId = newControlRecord.GetHashControlId(battleSaveData.Controls[i]); newControlRecord.DurationLeft = newControlRecord.GetHashDurationLeft(battleSaveData.Controls[i]); FormationUnit prisoner = FindById(prisonerId); FormationUnit controller = FindById(controllerId); newControlRecord.PrisonerUnit = prisoner; newControlRecord.ControllUnit = controller; Controls.Add(newControlRecord); } #endregion loadedRemovedPrisoners.Clear(); RaidSceneManager.Formations.HeroOverlay.UpdateOverlay(); RaidSceneManager.Formations.monsters.overlay.UpdateOverlay(); }
public void LoadBattle(BattleGroundSaveData battleSaveData) { InitiateSavedBattle(); LoadEncounter(battleSaveData.MonsterFormation); #region Load Guard Statuses for (int i = 0; i < HeroParty.Units.Count; i++) { var heroGuardedStatus = HeroParty.Units[i].Character[StatusType.Guarded] as GuardedStatusEffect; if (heroGuardedStatus.GuardDuration > 0) { var guardUnit = FindById(heroGuardedStatus.GuardCombatId); if (guardUnit != null) { heroGuardedStatus.Guard = guardUnit; var guardStatus = guardUnit.Character[StatusType.Guard] as GuardStatusEffect; guardStatus.Targets.Add(HeroParty.Units[i]); } } } for (int i = 0; i < MonsterParty.Units.Count; i++) { var monsterGuardedStatus = MonsterParty.Units[i].Character[StatusType.Guarded] as GuardedStatusEffect; if (monsterGuardedStatus.GuardDuration > 0) { var guardUnit = FindById(monsterGuardedStatus.GuardCombatId); if (guardUnit != null) { monsterGuardedStatus.Guard = guardUnit; var guardStatus = guardUnit.Character[StatusType.Guard] as GuardStatusEffect; guardStatus.Targets.Add(MonsterParty.Units[i]); } } } #endregion #region Load Battle Info Round.RoundNumber = battleSaveData.RoundNumber; Round.RoundStatus = battleSaveData.RoundStatus; Round.TurnType = battleSaveData.TurnType; Round.TurnStatus = battleSaveData.TurnStatus; Round.HeroAction = battleSaveData.HeroAction; BattleStatus = battleSaveData.BattleStatus; SurpriseStatus = battleSaveData.SurpriseStatus; StallingRoundNumber = battleSaveData.StallingRoundNumber; Round.SelectedUnit = FindById(battleSaveData.SelectedUnitId); Round.SelectedTarget = FindById(battleSaveData.SelectedTargetId); LastSkillUsed = battleSaveData.LastSkillUsed; Round.OrderedUnits.Clear(); for (int i = 0; i < battleSaveData.OrderedUnitsCombatIds.Count; i++) { var newOrderedUnit = FindById(battleSaveData.OrderedUnitsCombatIds[i]); if (newOrderedUnit != null) { Round.OrderedUnits.Add(newOrderedUnit); } } CombatIds = battleSaveData.CombatIds; LastDamaged = battleSaveData.LastDamaged; BattleLoot = battleSaveData.BattleLoot; #endregion #region Load Removed Captured Units for (int i = 0; i < battleSaveData.RemovedUnits.Count; i++) { var prisonerSaveData = battleSaveData.RemovedUnits[i]; if (prisonerSaveData.IsHero) { Hero hero = DarkestDungeonManager.Campaign.Heroes.Find(estateHero => estateHero.RosterId == prisonerSaveData.RosterId); FormationUnit unit = Instantiate(Resources.Load <GameObject>("Prefabs/Heroes/" + hero.Class)).GetComponent <FormationUnit>(); unit.transform.SetParent(HeroParty.transform, false); unit.Party = HeroParty; unit.Formation = HeroFormation; unit.Initialize(hero, prisonerSaveData); unit.ResetAnimations(); if (hero.HeroClass.Modes.Count > 0) { var currentMode = hero.HeroClass.Modes.Find(mode => mode.Id == prisonerSaveData.CurrentMode); if (currentMode != null) { hero.CurrentMode = currentMode; } else { hero.CurrentMode = hero.HeroClass.Modes.Find(mode => mode.IsRaidDefault); } } loadedRemovedPrisoners.Add(unit); unit.gameObject.SetActive(false); } else { GameObject unitObject = Resources.Load("Prefabs/Monsters/" + prisonerSaveData.Class) as GameObject; FormationUnit unit = Instantiate(unitObject).GetComponent <FormationUnit>(); unit.transform.SetParent(HeroParty.transform, false); unit.Party = HeroParty; unit.Formation = HeroFormation; var monsterSave = new Monster(prisonerSaveData); unit.Initialize(monsterSave, prisonerSaveData); unit.ResetAnimations(); loadedRemovedPrisoners.Add(unit); unit.gameObject.SetActive(false); } } #endregion }