// 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)); }
public virtual void UnreserveCarryable(Actor self) { if (Carryable != null && Carryable.IsInWorld && !Carryable.IsDead) { Carryable.Trait <Carryable>().UnReserve(Carryable); } Carryable = null; State = CarryallState.Idle; }
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); }