Beispiel #1
0
        private void TryAbility(GroupAbilityFactory groupAbilityFactory)
        {
            if (!_abilitiesLock.CanDoAction())
            {
                return;
            }

            if (GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.None ||
                GroupsInRangeDetector.MostRepresentedGroupInRange == GroupManager.Group.All)
            {
                return;
            }

            GroupAbility ability = groupAbilityFactory.GetAbility();

            if (!_impMana.CheckSegments(ability.GetData().ManaSegmentsCost))
            {
                return;
            }

            //Debug.Log("Segments OK");

            if (!GroupsManager.Instance.Groups[GroupsInRangeDetector.MostRepresentedGroupInRange]
                .GetComponent <ImpGroupAi>().TryAbility(ability))
            {
                return;
            }

            //Debug.Log("Ability OK");

            _impMana.SpendSegments(ability.GetData().ManaSegmentsCost);

            OnAggroActionDone?.Invoke(useAbilityAggro);
        }
Beispiel #2
0
        private void Start()
        {
            BtAction executeTactic = new BtAction(ExecuteTactic);
            BtAction ability       = new BtAction(() => _activeAbility != null);
            BtAction allInPosition = new BtAction(() =>
                                                  !_activeAbility.GetData().InPositionBeforeActivation ||
                                                  _groupManager.Imps.All(pair => pair.Key.GetComponent <ContextGroupFormation>().InPosition()));
            BtAction doAbility = new BtAction(ExecuteAbility);

            BtSequence combatSequence =
                new BtSequence(new IBtTask[] { executeTactic, ability, allInPosition, doAbility });

            FSMState outOfCombat = new FSMState();
            FSMState inCombat    = new FSMState();

            FSMTransition battleEnter = new FSMTransition(() => _inBattle);
            FSMTransition battleExit  = new FSMTransition(() => !_inBattle);

            outOfCombat.AddTransition(battleEnter, inCombat);
            inCombat.AddTransition(battleExit, outOfCombat);

            inCombat.enterActions.Add(() => OnTacticChanged?.Invoke(_activeTactic));
            inCombat.stayActions.Add(() => combatSequence.Run());

            outOfCombat.stayActions.Add(SetPlayer);

            FSM groupFsm = new FSM(outOfCombat);

            StartCoroutine(FsmStayAlive(groupFsm));
        }
Beispiel #3
0
    private void OnStartGroupAbility(GroupAbilities groupAbilities, GroupAbility groupAbility)
    {
        if (groupAbility.GetData().DoCameraShake)
        {
            shakingIntensity = groupAbility.GetData().CameraShakeIntensity;
            //shakingTimerTotal = groupAbility.GetData().CameraShakeDuration;
            //shakingTimer = shakingTimerTotal;
            doubleTargetCinemachineBasicMultiChannelPerlin.m_AmplitudeGain = shakingIntensity;
            lockedCinemachineBasicMultiChannelPerlin.m_AmplitudeGain       = shakingIntensity;
        }

        if (groupAbility.GetData().DoCameraDoubleLookAt)
        {
            lockedCamera.gameObject.SetActive(false);
            doubleTargetCamera.gameObject.SetActive(true);

            doubleTargetTimer = 3f;

            //targetGroup.m_Targets[ 0 ].target = _currentLeader.transform;
            //targetGroup.m_Targets[ 0 ].weight = 1;

            //targetGroup.m_Targets[ 0 ].target = _currentBoss.transform;
            //targetGroup.m_Targets[ 0 ].weight = 1;

            targetGroup.m_Targets[0].target = groupAbilities.transform.root;
            targetGroup.m_Targets[0].weight = 1;
        }

        if (groupAbility.GetData().DoCameraUnzoom)
        {
            lockedCamera.gameObject.SetActive(false);
            doubleTargetCamera.gameObject.SetActive(true);

            doubleTargetTimer = 1.5f;

            targetGroup.m_Targets[0].target = groupAbilities.transform.root;
            targetGroup.m_Targets[0].weight = 1;

            arenaCameraON    = true;
            arenaCameraTimer = 6f;
        }
    }
Beispiel #4
0
        public bool TryAbility(GroupAbility ability)
        {
            if (_activeAbility != null)
            {
                return(false);
            }

            AssignTactic(ability.GetData().AssociatedTactic);

            _activeAbility = ability;

            return(true);
        }
 public void StartAbility(GroupAbility ability) => OnBlockEvent?.Invoke(ability.GetData().ActionBlocks);