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); } }
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; } }