Esempio n. 1
0
    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();
    }
Esempio n. 2
0
    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
    }