コード例 #1
0
 public void DisplayResults(InvasionSolution solution, long numSearchStates, long numSolutionsFound, float difficultyRating)
 {
     DisplaySolution(solution);
     OptimalResultsParent.SetActive(true);
     NumSearchStates.text   = numSearchStates.ToString();
     NumSolutionsFound.text = numSolutionsFound.ToString();
     DifficultyRating.text  = difficultyRating.ToString("0.00");
 }
コード例 #2
0
 private void DisplaySolution(InvasionSolution solution)
 {
     SuccessResult.text     = solution.IsCompleteSolution.ToString();
     NumWavesResult.text    = solution.NumTurnsToSolve.ToString();
     InitialCities.text     = solution.InitialNation.Fortifications.Count.ToString();
     FinalCities.text       = solution.FinalNation.NumCitiesRemaining.ToString();
     InitialArmyHealth.text = solution.InitialArmy.Health.ToString();
     FinalArmyHealth.text   = solution.FinalArmy.Health.ToString();
 }
コード例 #3
0
    IEnumerator AnimateInvasion(InvasionSolution solution)
    {
        yield return(new WaitForFixedUpdate());

        AnimationNavigationParent.SetActive(false);
        SimulationButtonParent.gameObject.SetActive(true);
        ToggleAutoContinue(true);
        ContinueButton.interactable = false;
        mIsWaitingOnContinue        = false;

        float subArmyAnimationDuration = mAnimationDuration * AnimationSpeed;
        float assaultHealthDuration    = mAnimationDuration * AnimationSpeed;
        float reformAnimationDuration  = mAnimationDuration * AnimationSpeed;

        List <InvasionWave> bestSolution = solution.InvasionOrder;

        for (int i = 0; i < bestSolution.Count; ++i)
        {
            WaveText.text = "WAVE " + (i + 1);
            List <AssaultTemplate> attackWave = bestSolution[i].Wave;
            Debug.Assert(DefaultArmyNumber >= attackWave.Count);
            List <ArmyBlueprint> subArmies = new List <ArmyBlueprint>();
            foreach (var wave in attackWave)
            {
                subArmies.Add(wave.Attackers);
            }
            FormSubArmies(subArmies, subArmyAnimationDuration);
            yield return(_WaitForInputAfterAnimation(subArmyAnimationDuration * 1.5f));

            // display "Attack wave #"
            int subArmyIdx = 0;
            foreach (AssaultTemplate attack in attackWave)
            {
                ArmyBlueprint afterAttack = attack.AssaultFortification(false);
                mArmyControllers[subArmyIdx].UpdateHealth(afterAttack, assaultHealthDuration);
                if (!attack.ToAssault.IsPlaceHolderFort)
                {
                    NationController.DestroyFort(attack.ToAssault, assaultHealthDuration);
                    yield return(_WaitForInputAfterAnimation(assaultHealthDuration * 1.5f));
                }

                afterAttack.Heal();
                mArmyControllers[subArmyIdx].UpdateHealth(afterAttack, assaultHealthDuration);
                yield return(_WaitForInputAfterAnimation(assaultHealthDuration * 1.5f));

                subArmyIdx++;
            }

            MergeSubArmies(reformAnimationDuration);
            NationController.UpgradeForts(reformAnimationDuration);
            yield return(_WaitForInputAfterAnimation(reformAnimationDuration * 1.5f));
        }
        WaveText.text = "Invasion Complete!";
        yield return(new WaitForSeconds(reformAnimationDuration * 1.5f));
    }
コード例 #4
0
    private IEnumerator _BeginAnimation(InvasionSolution defaultSolution, InvasionSolution optimizedSolution)
    {
        AnimationText.text = "Sequential Invasion";
        mMainArmy.gameObject.SetActive(true);

        mMainArmy.ResetArmy();
        NationController.ResetNation();
        mMainArmy.Initialize(defaultSolution.InitialArmy);
        NationController.InitializeNation(defaultSolution.InitialNation);
        yield return(AnimateInvasion(defaultSolution));

        AnimationText.text = "Parallel Invasion";
        mMainArmy.ResetArmy();
        mMainArmy.Initialize(optimizedSolution.InitialArmy);
        NationController.ResetNation();
        NationController.InitializeNation(optimizedSolution.InitialNation);
        yield return(AnimateInvasion(optimizedSolution));

        SimulationButtonParent.SetActive(false);
        AnimationNavigationParent.SetActive(true);
    }
コード例 #5
0
 public void BeginAnimation(InvasionSolution defaultSolution, InvasionSolution optimizedSolution)
 {
     mMainArmy.BoundingArea = mMainArmyZoneSize = ArmyZone.GetComponent <RectTransform>().rect.size;
     StartCoroutine(_BeginAnimation(defaultSolution, optimizedSolution));
 }
コード例 #6
0
 public void DisplayResults(InvasionSolution solution)
 {
     DisplaySolution(solution);
     OptimalResultsParent.SetActive(false);
 }