Example #1
0
        public override void ExecuteTactic(ImpAi imp)
        {
            if (_impAi == null)
            {
                _impAi = imp;
            }

            if (_impCombatBehaviour == null)
            {
                _impCombatBehaviour = _impAi.GetComponent <ImpCombatBehaviour>();
            }

            if (_attackInstance == null)
            {
                _attackInstance = data.TacticAttack.GetAttack();
            }

            if (_tacticBehaviourTree == null)
            {
                BtCondition isFacingTarget = new BtCondition(IsFacingTarget);
                BtCondition inAttackRange  = new BtCondition(InAttackRange);

                BtAction attack = new BtAction(Attack);

                BtSequence meleeAttack = new BtSequence(new IBtTask[] { isFacingTarget, inAttackRange, attack });

                _tacticBehaviourTree = new BehaviourTree(meleeAttack);
            }

            _tacticBehaviourTree.Run();
        }
Example #2
0
        public override void ExecuteTactic(ImpAi imp)
        {
            if (_imp == null)
            {
                _imp = imp;
                //_contextGroupFormation = imp.GetComponent<ContextGroupFormation>();
                _impRecruitBehaviour = imp.GetComponent <ImpRecruitBehaviour>();

                BtAction startRecruit = new BtAction(StartRecruit);
                BtAction stopRecruit  = new BtAction(StopRecruit);
                //BtCondition inPositionCondition = new BtCondition(InPosition);
                BtCondition isRecruiting    = new BtCondition(() => _isRecruiting);
                BtCondition isNotRecruiting = new BtCondition(() => !_isRecruiting);

                BtSelector startRecruitSelector = new BtSelector(new IBtTask[] { isRecruiting, startRecruit });
                BtSelector stopRecruitSelector  = new BtSelector(new IBtTask[] { isNotRecruiting, stopRecruit });

                BtSequence startRecruitSequence =
                    new BtSequence(new IBtTask[] { startRecruitSelector });

                BtSelector recruitTree = new BtSelector(new IBtTask[] { startRecruitSequence, stopRecruitSelector });

                _recruitBehaviourTree = new BehaviourTree(recruitTree);
            }

            _recruitBehaviourTree.Run();
        }
Example #3
0
        private void Start()
        {
            foreach(GameObject group in GroupsManager.Instance.Groups.Values)
            {
                _groupAggros.Add(group.GetComponent<GroupAggro>());
            }

            #region Behaviour tree

            #region Target selection

            BtCondition isTargetStillValid = new BtCondition(() => _currentTargetStillValid);

            BtAction tryChooseByAggro = new BtAction(TryChooseByAggro);

            BtSequence byAggroSequence = new BtSequence(new IBtTask[] { tryChooseByAggro });

            BtSelector targetSelection = new BtSelector(new IBtTask[] { isTargetStillValid, byAggroSequence });

            #endregion

            #region Attack

            BtCondition lastAttackDone = new BtCondition(() => _lastAttackDone);
            BtCondition isFacingTarget = new BtCondition(IsFacingTarget);
            BtCondition inAttackRange = new BtCondition(InAttackRange);

            BtAction chooseAttack = new BtAction(ChooseAttack);
            BtAction attack = new BtAction(Attack);

            BtSequence attackSequence = new BtSequence(new IBtTask[]
            {
                lastAttackDone,
                isFacingTarget,
                inAttackRange,
                chooseAttack,
                attack
            });

            #endregion

            BtSequence combatSequence = new BtSequence(new IBtTask[] { targetSelection, attackSequence });

            #endregion

            #region FSM

            FSMState idle = new FSMState();
            FSMState combat = new FSMState();

            combat.enterActions.Add(StartCombat);

            FSMTransition battleEnter = new FSMTransition(() => _inCombat);

            idle.AddTransition(battleEnter, combat);

            #endregion

            _combatBehaviourTree = new BehaviourTree(combatSequence);

            _bossFsm = new FSM(idle);

            _runFsmCoroutine = StartCoroutine(BossFsmUpdate());
        }