Пример #1
0
 public void DisplayPopup(string text)
 {
     if (text == "")
     {
         return;
     }
     PopupTextController.CreatePopupText(text, transform);
 }
    /// <summary>
    /// Applies the effects.
    /// </summary>
    /// <param name="targets">Targets.</param>
    /// <param name="effects">Effects.</param>
    private IEnumerator ApplyEffects(List <Unit> targets, List <Effect> effects)
    {
        if (effects.Count <= 0)
        {
            yield break;
        }

        int index = 0;

        do
        {
            Effect effect = effects [index];
            bool   showedEffectPopupText = false;
            foreach (var target in targets)
            {
                if (target != null)
                {
                    effect.ApplyEffect(target);

                    if (effect.GetDisplayString() != "")
                    {
                        showedEffectPopupText = true;
                        PopupTextController.CreatePopupText(effect.GetDisplayString(), target.transform.position, effect.GetColor());
                    }

                    // If unit is killed after application of effect, handle death
                    target.UpdateHealthbar();
                    if (target.IsDead())
                    {
                        HandleDeath(target);
                    }
                }
            }

            // If pop up text was shown, wait x seconds so it doesn't stack with other potential ones
            if (showedEffectPopupText)
            {
                yield return(new WaitForSeconds(0.75f));
            }
            index++;
        } while (index < effects.Count);

        yield return(null);
    }
 /// <summary>
 /// Shows the XP floaty text.
 /// </summary>
 /// <param name="awardedExperience">Awarded experience.</param>
 /// <param name="attacker">Attacker.</param>
 private void ShowXPFloatyText(int awardedExperience, Unit attacker)
 {
     PopupTextController.Initialize(attacker.GetCanvas());
     PopupTextController.CreatePopupText(string.Format("+ {0} XP", awardedExperience), attacker.transform.position, Color.yellow);
 }
Пример #4
0
    private IEnumerator Init()
    {
        _tileMap = controller.TileMap;

        controller.ShowCursorAndTileSelector(false);
        controller.SelectionIndicator.ClearIndicators();
        controller.MissionObjectivesPanel.SetActive(false);

        // Setup turn order
        TurnOrderController turnOrderController = controller.TurnOrderController;
        Unit unit = controller.TurnOrderController.GetNextUp();

        StartCoroutine(controller.CameraController.MoveToPosition(unit.transform.position));
        controller.HighlightCharacter(unit);

        // Determine if music needs to be transitioned higher/lower
        MusicController musicController = controller.MusicController;

        if (IsEnemyNearby(turnOrderController.GetAllUnits()))
        {
            musicController.TransitionMusic(false);
        }
        else
        {
            musicController.TransitionMusic(true);
        }

        // Incremental Effects
        List <Effect> effects = unit.GetEffects();

        if (effects != null && effects.Count > 0)
        {
            // Lower music so you can hear ability SFX
            yield return(StartCoroutine(controller.MusicController.LowerCombatMusic()));

            int index = 0;
            do
            {
                Effect effect = effects [index];

                // Only run this logic with over time effects
                if (effect.GetEffectType() == EffectType.OVER_TIME)
                {
                    bool showedEffectPopupText = false;
                    effect.ApplyIncrementalEffect(unit);

                    List <GameObject> vfxGameObjects = ApplyVFXToTargets(effect.GetVFXPath(), new List <Unit>()
                    {
                        unit
                    });
                    if (effect.GetDisplayString() != "")
                    {
                        showedEffectPopupText = true;
                        PopupTextController.CreatePopupText(effect.GetIncrementalDisplayString(), unit.transform.position, effect.GetColor());
                    }

                    // If unit is killed after application of effect, handle death
                    unit.UpdateHealthbar();

                    // If pop up text was shown, wait x seconds so it doesn't stack with other potential ones
                    if (showedEffectPopupText)
                    {
                        yield return(new WaitForSeconds(2.0f));
                    }

                    if (unit.IsDead())
                    {
                        HandleDeath(unit);
                    }

                    DestroyVFX(vfxGameObjects);
                }

                index++;
            } while (index < effects.Count && unit != null);

            // Bring music back up to normal volume
            yield return(StartCoroutine(controller.MusicController.RaiseCombatMusic()));
        }

        // Decrement Effect Turns
        if (unit != null)
        {
            unit.DecrementEffectTurns();
        }

        yield return(null);

        // If unit is not available at this point, switch state to next unit in the turn order
        if (unit == null)
        {
            controller.ChangeState <TurnOverState> ();
        }
        else
        {
            if (unit.IsPlayerControlled)
            {
                controller.ChangeState <PlayerTurnState> ();
            }
            else
            {
                controller.ChangeState <CPUTurnState> ();
            }
        }
    }