Ejemplo n.º 1
0
        public KillEntityAct(Body entity, CreatureAI creature, KillEntityTask.KillType mode) :
            base(creature)
        {
            Mode   = mode;
            Entity = entity;
            Name   = "Kill Entity";
            PlanAct.PlanType planType = PlanAct.PlanType.Adjacent;
            float            radius   = 0.0f;

            if (creature.Creature.Attacks[0].Mode == Attack.AttackMode.Melee)
            {
                planType = PlanAct.PlanType.Radius;
                radius   = creature.Creature.Attacks[0].Range;
            }
            Tree =
                new Parallel(
                    new Sequence
                    (
                        new GoToEntityAct(entity, creature)
            {
                MovingTarget = mode != KillEntityTask.KillType.Chop,
                PlanType     = planType,
                Radius       = radius
            },
                        new MeleeAct(Agent, entity)
                    ),
                    new Wrap(Verify)
                    );
        }
Ejemplo n.º 2
0
 public KillEntityAct(Body entity, CreatureAI creature, KillEntityTask.KillType mode) :
     base(creature)
 {
     Mode   = mode;
     Entity = entity;
     Name   = "Kill Entity";
     Tree   = new ForLoop(new Parallel(new Sequence(new GoToEntityAct(entity, creature),
                                                    new MeleeAct(Agent, entity)), new Wrap(Verify)), 5, true);
 }
Ejemplo n.º 3
0
        public KillEntityAct(Body entity, CreatureAI creature, KillEntityTask.KillType mode) :
            base(creature)
        {
            Mode   = mode;
            Entity = entity;
            Name   = "Kill Entity";
            PlanAct.PlanType planType = PlanAct.PlanType.Adjacent;
            float            radius   = 0.0f;

            if (creature.Creature.Attacks[0].Mode == Attack.AttackMode.Ranged)
            {
                planType = PlanAct.PlanType.Radius;
                radius   = creature.Creature.Attacks[0].Range;
            }
            if (creature.Movement.IsSessile)
            {
                Tree =
                    new Domain(Verify,
                               new Sequence
                               (
                                   new MeleeAct(Agent, entity)
                               ) | new Wrap(() => OnAttackEnd(creature))
                               );
            }
            else
            {
                Tree =
                    new Domain(Verify, new Sequence
                               (
                                   new GoToEntityAct(entity, creature)
                {
                    MovingTarget = mode != KillEntityTask.KillType.Chop,
                    PlanType     = planType,
                    Radius       = radius
                } | new Wrap(() => OnAttackEnd(creature)),
                                   new MeleeAct(Agent, entity)
                               ));
            }
        }