Ejemplo n.º 1
0
    IEnumerator ShowAttackProcess()
    {
        var move      = battle.GetWave().move;
        var combatant = battle.GetWave().Enemys[0];

        moveCallout.text = move.name;
        //battleCrySource.clip = battle.combatants[0].CurrentPokemon.GetBattleCry();
        //battleCrySource.Play();
        CombatantView view    = GetView(combatant);
        RectTransform avatar  = view.avatarImage.rectTransform;
        Tweener       tweener = avatar.ScaleTo(new Vector3(1.5f, 1.5f, 1.5f), 0.25f, EasingEquations.EaseOutCubic);

        while (tweener != null)
        {
            yield return(null);
        }
        tweener = avatar.ScaleTo(Vector3.one, 0.5f, EasingEquations.EaseOutBounce);
        while (tweener != null)
        {
            yield return(null);
        }
        yield return(new WaitForSeconds(0.5f));

        moveCallout.text = "";
    }
Ejemplo n.º 2
0
        protected void Awake()
        {
            View     = GetComponent <CombatantView>();
            Animator = GetComponent <tk2dSpriteAnimator>();
            _sprite  = GetComponent <tk2dSprite>();

            RunningAnimationClips[MathUtils.CardinalDirection.E] = FindClip("run east");
            RunningAnimationClips[MathUtils.CardinalDirection.W] = FindClip("run east");
            RunningAnimationClips[MathUtils.CardinalDirection.N] = FindClip("run north");
            RunningAnimationClips[MathUtils.CardinalDirection.S] = FindClip("run south");

            CombatAnimationClips[MathUtils.CardinalDirection.N] = FindClip("combat north");
            CombatAnimationClips[MathUtils.CardinalDirection.S] = FindClip("combat south");
            CombatAnimationClips[MathUtils.CardinalDirection.E] = FindClip("combat east");
            CombatAnimationClips[MathUtils.CardinalDirection.W] = FindClip("combat east");

            AttackAnimationClips[MathUtils.CardinalDirection.N] = FindClip("attack north");
            AttackAnimationClips[MathUtils.CardinalDirection.S] = FindClip("attack south");
            AttackAnimationClips[MathUtils.CardinalDirection.E] = FindClip("attack east");
            AttackAnimationClips[MathUtils.CardinalDirection.W] = FindClip("attack east");

            DodgeAnimationClips[MathUtils.CardinalDirection.N] = FindClip("dodge north");
            DodgeAnimationClips[MathUtils.CardinalDirection.E] = FindClip("dodge east");
            DodgeAnimationClips[MathUtils.CardinalDirection.W] = FindClip("dodge east");
            DodgeAnimationClips[MathUtils.CardinalDirection.S] = FindClip("dodge south");

            _idleClip = FindClip("idle");

            Animator.AnimationEventTriggered = HandleHit;
        }
Ejemplo n.º 3
0
        void Update()
        {
            _combatantView = AffectedObject.GetComponent <CombatantView>();
            var start            = _mapView.GetDimensions().GetGridPositionForWorldPosition(AffectedObject.transform.position);
            var distance         = MathUtils.ManhattanDistance(start, Destination);
            var secondsPerSquare = _combatantView.SecondsPerSquare;

            Duration = distance * secondsPerSquare;
        }
Ejemplo n.º 4
0
        public IEnumerator Animate(FightPhase phase, CombatantView initiator, CombatantView receiver, MapDimensions dimensions)
        {
            if (phase.Response == DefenderResponse.Dodge)
            {
                StartCoroutine(receiver.Dodge());
            }

            var severity = phase.Effects.Severity;

            if (_specialSkills.Contains(phase.Skill))
            {
                yield return(StartCoroutine(initiator.SpecialAttack(phase, dimensions, receiver, severity)));
            }
            else
            {
                yield return(StartCoroutine(initiator.Attack(phase.Receiver, severity)));
            }

            if (phase.ReceverDies)
            {
                receiver.Die();
            }
        }
Ejemplo n.º 5
0
        public override IEnumerator SpecialAttack(FightPhase phase, MapDimensions dimensions, CombatantView receiverView, WeaponHitSeverity severity)
        {
            var receiver     = phase.Receiver;
            var shoveEffects = phase.Effects.ReceiverEffects.OfType <Shove>().ToList();

            if (shoveEffects.Any())
            {
                Action <WeaponHitConnection> hitConnectedCallback = null;
                hitConnectedCallback = hit => {
                    var destination      = shoveEffects.First().GetDestination(receiver);
                    var worldDestination = dimensions.GetWorldPositionForGridPosition(destination);
                    var theirTransform   = receiverView.transform;

                    theirTransform
                    .DOMove(worldDestination, 0.3f)
                    .SetEase(Ease.OutCubic)
                    .Play();
                    AttackConnectedSignal.RemoveListener(hitConnectedCallback);
                };

                AttackConnectedSignal.AddListener(hitConnectedCallback);
            }

            yield return(StartCoroutine(Attack(receiver, severity)));
        }
Ejemplo n.º 6
0
        public override IEnumerator SpecialAttack(FightPhase phase, MapDimensions dimensions, CombatantView receiverView, WeaponHitSeverity severity)
        {
            var receiver   = phase.Receiver;
            var didAdvance = phase.Effects.ReceiverEffects.OfType <Advance>().Any();

            if (!didAdvance)
            {
                yield return(StartCoroutine(Attack(receiver, severity)));

                yield break;
            }

            var attacker    = phase.Initiator;
            var distance    = MathUtils.ManhattanDistance(attacker.Position, receiver.Position);
            var windupClip  = distance > 1 ? _farAdvanceAnimationClips[Facing] : _windupAnimationClips[Facing];
            var advanceClip = _advanceAnimationClips[Facing];

            _combatantAnimator.enabled = false;
            yield return(StartCoroutine(PlayClip(windupClip)));

            var advanceClipDuration = ((1000 / advanceClip.fps) * advanceClip.frames.Length / 1000);
            var destination         = receiverView.transform.position;

            transform
            .DOMove(destination, advanceClipDuration)
            .SetEase(Ease.OutCubic)
            .Play();
            yield return(StartCoroutine(PlayClip(advanceClip)));

            _combatantAnimator.enabled = true;
        }
Ejemplo n.º 7
0
 void Awake()
 {
     _view = GetComponent <CombatantView>();
 }