Пример #1
0
        protected override INode CreateTree()
        {
            var doNothing           = new DoNothingNode();
            var isMagicShieldActive = new IsAbilityActiveNode(AbilityType.MAGIC_SHIELD);

            var changeDestination = new ChangeDestinationNode();

            var isPlayerClose       = new IsPlayerCloseNode();
            var run                 = new FleeNode();
            var wait                = new Wait(2.0f);
            var activateMagicShield = new ActivateAbilityNode(AbilityType.MAGIC_SHIELD);
            var seqMagicShield      = new Sequence("MagicShieldSequence", wait, activateMagicShield);
            var seqRun              = new Sequence("RunSequence", isPlayerClose, run, new Succeeder(seqMagicShield), changeDestination);

            var checkArrived         = new IsArrivedToDestinationNode();
            var seqChangeDestination = new Sequence("ChangeDestinationSequence", checkArrived, changeDestination);
            var move    = new WalkNode();
            var seqMove = new Sequence("MoveSequence", new Succeeder(seqChangeDestination), move);

            var selector = new Selector("RunMoveSelector", doNothing, isMagicShieldActive, seqRun, seqMove);

            var repeater = new Repeater(selector);

            return(repeater);
        }
Пример #2
0
        protected override INode CreateTree()
        {
            var context = (EnemyBehaviourTreeContext)_context;
            var ability = context.Self.GetAbilityManager().Get(AbilityType.JUMP_ATTACK);

            var hold = new HoldNode();

            var isJumpAttackOnCooldown = new IsAbilityOnCooldownNode(AbilityType.JUMP_ATTACK);
            var seqCooldownHold        = new Sequence("CooldownHoldSequence", isJumpAttackOnCooldown, hold);

            var isTargetInRangeForAttack = new IsTargetInRangeNode(ability.Range);
            var activateJumpAttack       = new ActivateAbilityNode(AbilityType.JUMP_ATTACK);
            var seqJumpAttack            = new Sequence("JumpAttackSequence", isTargetInRangeForAttack, activateJumpAttack);

            var isTargetInRangeForChase = new IsTargetInRangeNode(context.Self.GetAttributeManager().ValueOf(AttributeType.Vision));
            var lockOnTarget            = new LockOnTargetNode();
            var run      = new RunNode();
            var seqChase = new Sequence("ChaseSequence", isTargetInRangeForChase, lockOnTarget, run);

            var selector = new Selector("JumpAttackSelector",
                                        new Inverter(new HasTarget()),
                                        seqCooldownHold,
                                        seqJumpAttack,
                                        seqChase,
                                        hold);

            var repeater = new Repeater(selector);

            return(repeater);
        }
Пример #3
0
        protected override INode CreateTree()
        {
            var doNothing         = new DoNothingNode();
            var isWhirlwindActive = new IsAbilityActiveNode(AbilityType.WHIRLWIND);
            var activateWhirlwind = new ActivateAbilityNode(AbilityType.WHIRLWIND);

            var selector = new Selector("WhirlwindSelector", doNothing, isWhirlwindActive, activateWhirlwind);

            var repeater = new Repeater(selector);

            return(repeater);
        }