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