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