public bool CanMoveTo(PawnModel unitMoved, MyHexPosition target, MyHexPosition magicSelector, MyPlayer player)
        {
            if (!unitMoved.PossibleMoveTargets.Contains(target))
            {
                return(false);
            }
            else if (IsTileMovable(target))  //empty!
            {
                if (magicSelector == null)
                {
                    return(true);
                }
                if (GetPlayerMagicType(player) != MagicType.Wind)
                {
                    return(!magicSelector.Equals(target));
                }

                return(true);
            }
            else
            {
                if (Units.IsPawnAt(target))
                {
                    var tempUnitsContainer       = Units.Clone();
                    var tempProjectilesContainer = Projectiles.Clone();
                    var tempMapModel             = MapModel.Clone();

                    var newOrientation = unitMoved.Position.NeighboursWithDirections.Where(c => c.NeighbourPosition.Equals(target))
                                         .Select(c => c.NeighbourDirection).First();

                    var tempUnitModel = tempUnitsContainer.GetPawnAt(unitMoved.Position);
                    tempUnitsContainer.OrientPawn(tempUnitModel.Position, newOrientation);

                    var arbiter       = new BattleArbiter(tempUnitsContainer, tempProjectilesContainer, tempMapModel);
                    var battleResults = arbiter.PerformBattleAtPlace(unitMoved.Position, BattleCircumstances.Director);
                    return(battleResults.PositionWasFreed(target));
                }
            }
            return(false);
        }