Ejemplo n.º 1
0
        protected override bool TryStartEnter(Actor self, Actor targetActor)
        {
            if (enterActor != targetActor)
            {
                enterActor          = targetActor;
                enterCaptureManager = targetActor.TraitOrDefault <CaptureManager>();
            }

            // Make sure we can still capture the target before entering
            // (but not before, because this may stop the actor in the middle of nowhere)
            if (enterCaptureManager == null || !enterCaptureManager.CanBeTargetedBy(enterActor, self, manager))
            {
                Cancel(self, true);
                return(false);
            }

            // StartCapture returns false when a capture delay is enabled
            // We wait until it returns true before allowing entering the target
            Captures captures;

            if (!manager.StartCapture(self, enterActor, enterCaptureManager, out captures))
            {
                return(false);
            }

            if (!captures.Info.ConsumedByCapture)
            {
                // Immediately capture without entering or disposing the actor
                DoCapture(self, captures);
                Cancel(self, true);
                return(false);
            }

            return(true);
        }
Ejemplo n.º 2
0
        protected override void TickInner(Actor self, Target target, bool targetIsDeadOrHiddenActor)
        {
            if (target.Type == TargetType.Actor && enterActor != target.Actor)
            {
                enterActor          = target.Actor;
                enterCaptureManager = target.Actor.TraitOrDefault <CaptureManager>();
            }

            if (!targetIsDeadOrHiddenActor && target.Type != TargetType.FrozenActor &&
                (enterCaptureManager == null || !enterCaptureManager.CanBeTargetedBy(enterActor, self, manager)))
            {
                Cancel(self, true);
            }
        }
Ejemplo n.º 3
0
 protected override bool CanReserve(Actor self)
 {
     return(!actor.IsDead && !targetManager.BeingCaptured && targetManager.CanBeTargetedBy(actor, self, manager));
 }