Exemplo n.º 1
0
 void PickActorAction()
 {
     curAction = actor.tactics.PickAction(this);
     if (curAction.actionType == ActionType.Wait)
     {
         // if faster unit can't do more actions
         if (!fasterUnitFinishedTurn)
         {
             fasterUnitFinishedTurn = true;
             // switch actor and target
             var actorRole = actor;
             actor  = target;
             target = actorRole;
             ActorTurnSetUp();
         }
         // Combat turn ended
         else
         {
             NewCombatTurnSetUp();
         }
     }
     else
     {
         phase     = CombatPhase.ApplyPickedAction;
         actor.AP -= TacticAction.APCost;
         ActorActionPicked?.Invoke(curAction);
     }
 }
Exemplo n.º 2
0
    void OnActorActionPicked(TacticAction action)
    {
        var actionName = mis.Combat.curAction.actionType;
        // start units animations
        var actorAnim  = mis.Combat.actor is Hero ? animHero : animEnemy;
        var targetAnim = mis.Combat.actor is Hero ? animEnemy : animHero;

        KeyAnimationsStart($"{actionName}", actorAnim.animator);

        var APBar = mis.Combat.actor is Hero ? heroAPBar : enemyAPBar;

        APBar.SetTargetShiftingValue((float)mis.Combat.actor.AP / mis.Combat.actor.APMax, 0.01f);

        // start picked action ability animation
        switch (action.actionType)
        {
        case ActionType.Attack:
            // run attack swing animation
            var meleeAnimHandler =
                UIManager.i.prefabs.meleeHitEffectPrefab
                .InstantiateAndGetComp <AnimatorHandler>(targetAnim.transform);
            // mark instantiated effect animation to be mirrored
            if (mis.Combat.actor is Enemy)
            {
                // mirror object by rotation once
                meleeAnimHandler.gameObject.transform.localEulerAngles += new Vector3(0, 180, 0);
                mirroredObjects.Add(meleeAnimHandler.gameObject, false);
            }

            busyAnimators.Add(meleeAnimHandler.animator);
            AnimationHandlerEventSubscription(meleeAnimHandler);
            break;

        case ActionType.UseAbility:
            var ability = mis.Combat.actor.abilities.Find(abil => abil.data.name == action.ability);
            if (ability.data.animationPrefab != null)
            {
                // run ability animation
                var abilityAnimHandler =
                    ability.data.animationPrefab.InstantiateAndGetComp <AnimatorHandler>(locationImage.transform
                                                                                         .parent);
                // mark instantiated skill animation to be mirrored
                if (mis.Combat.actor is Enemy)
                {
                    // mirror object by rotation once
                    abilityAnimHandler.gameObject.transform.localEulerAngles += new Vector3(0, 180, 0);
                    mirroredObjects.Add(abilityAnimHandler.gameObject, false);
                }

                busyAnimators.Add(abilityAnimHandler.animator);
                AnimationHandlerEventSubscription(abilityAnimHandler);
            }

            break;
        }
    }