Exemple #1
0
        // Check if we can drop the unit at our current location.
        public bool CanUnload()
        {
            var localOffset = CarryableOffset.Rotate(body.QuantizeOrientation(self, self.Orientation));
            var targetCell  = self.World.Map.CellContaining(self.CenterPosition + body.LocalToWorld(localOffset));

            return(Carryable != null && Carryable.Trait <IPositionable>().CanEnterCell(targetCell, self));
        }
Exemple #2
0
        public virtual void UnreserveCarryable(Actor self)
        {
            if (Carryable != null && Carryable.IsInWorld && !Carryable.IsDead)
            {
                Carryable.Trait <Carryable>().UnReserve(Carryable);
            }

            Carryable = null;
            State     = CarryallState.Idle;
        }
Exemple #3
0
        void INotifyKilled.Killed(Actor self, AttackInfo e)
        {
            if (State == CarryallState.Carrying)
            {
                if (!Carryable.IsDead)
                {
                    var positionable = Carryable.Trait <IPositionable>();
                    positionable.SetPosition(Carryable, self.Location);
                    Carryable.Kill(e.Attacker);
                }

                Carryable = null;
            }

            UnreserveCarryable(self);
        }