private TargetAndJumpOffTile DetermineSeaAttackJumpOffTile(SeaCombatUnit seaCombatUnit, Tile currentTile)
        {
            List<Tile> adjacentTiles = null;
            List<TargetAndJumpOffTile> targetAndJumpOffTiles = new List<TargetAndJumpOffTile>();
            TargetAndJumpOffTile targetAndJumpOffTile = null;

            foreach (Tile tile in seaCombatUnit.MoveableTiles)
            {
                Game.TileFactory.SetAttackableTiles(seaCombatUnit, tile);
                adjacentTiles = seaCombatUnit.AttackableTiles;
                adjacentTiles = adjacentTiles.Where(t => t.GroundUnit != null).ToList();
                adjacentTiles = adjacentTiles.Where(t => t.GroundUnit.SideEnum == SideEnum.Axis).ToList();
                foreach (Tile potentialTargetTile in adjacentTiles)
                {
                    targetAndJumpOffTile = new TargetAndJumpOffTile();
                    targetAndJumpOffTile.TargetTile = potentialTargetTile;
                    targetAndJumpOffTile.JumpOffTile = tile;
                    targetAndJumpOffTiles.Add(targetAndJumpOffTile);
                }
            }

            return DetermineTarget(targetAndJumpOffTiles, TargetTypeEnum.SoftGround);
        }
        private static TargetAndJumpOffTile DetermineAirAttackJumpOffTile(AirCombatUnit airCombatUnit, Tile currentTile)
        {
            List<Tile> adjacentTiles = null;
            List<TargetAndJumpOffTile> targetAndJumpOffTiles = new List<TargetAndJumpOffTile>();
            TargetAndJumpOffTile targetAndJumpOffTile = null;

            if (airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.Fighter)
            {
                foreach (Tile tile in airCombatUnit.MoveableTiles)
                {
                    adjacentTiles = Game.TileFactory.GetAdjacentTiles(tile, 1, false);
                    adjacentTiles = adjacentTiles.Where(t => t.AirUnit != null).ToList();
                    adjacentTiles = adjacentTiles.Where(t => t.AirUnit.SideEnum == SideEnum.Axis).ToList();
                    foreach (Tile potentialTargetTile in adjacentTiles)
                    {
                        targetAndJumpOffTile = new TargetAndJumpOffTile();
                        targetAndJumpOffTile.TargetTile = potentialTargetTile;
                        targetAndJumpOffTile.JumpOffTile = tile;
                        targetAndJumpOffTiles.Add(targetAndJumpOffTile);
                    }
                }
                return DetermineTarget(targetAndJumpOffTiles, TargetTypeEnum.Air);
            }
            else if(airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.TacticalBomber)
            {
                foreach (Tile tile in airCombatUnit.MoveableTiles)
                {
                    if (tile.GroundUnit != null)
                    {
                        if (tile.GroundUnit.SideEnum == SideEnum.Axis)
                        {
                            targetAndJumpOffTile = new TargetAndJumpOffTile();
                            targetAndJumpOffTile.TargetTile = tile;
                            targetAndJumpOffTile.JumpOffTile = tile;
                            targetAndJumpOffTiles.Add(targetAndJumpOffTile);
                        }
                    }
                }

            }
            else if (airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.StrategicBomber)
            {
                foreach (Tile tile in airCombatUnit.MoveableTiles)
                {
                    if (tile.Nation.SideEnum == SideEnum.Axis && tile.VictoryIndicator == true)
                    {
                        targetAndJumpOffTile = new TargetAndJumpOffTile();
                        targetAndJumpOffTile.TargetTile = tile;
                        targetAndJumpOffTile.JumpOffTile = tile;
                        targetAndJumpOffTiles.Add(targetAndJumpOffTile);
                    }
                }
            }

            return null;
        }
        private static TargetAndJumpOffTile DetermineLandAttackJumpOffTile(LandCombatUnit landCombatUnit, Tile currentTile)
        {
            List<Tile> adjacentTiles = null;
            List<TargetAndJumpOffTile> targetAndJumpOffTiles = new List<TargetAndJumpOffTile>();
            TargetAndJumpOffTile targetAndJumpOffTile = null;

            foreach (Tile tile in landCombatUnit.MoveableTiles)
            {
                adjacentTiles = Game.TileFactory.GetAdjacentTiles(tile, 1, false);
                adjacentTiles = adjacentTiles.Where(t => t.GroundUnit != null).ToList();
                adjacentTiles = adjacentTiles.Where(t => t.GroundUnit.SideEnum == SideEnum.Axis).ToList();
                foreach (Tile potentialTargetTile in adjacentTiles)
                {
                    targetAndJumpOffTile = new TargetAndJumpOffTile();
                    targetAndJumpOffTile.TargetTile = potentialTargetTile;
                    targetAndJumpOffTile.JumpOffTile = tile;
                    targetAndJumpOffTiles.Add(targetAndJumpOffTile);
                }
            }

            return DetermineTarget(targetAndJumpOffTiles, TargetTypeEnum.SoftGround);
        }