/// <summary> /// 检查指定地块当前是否满足限制。 /// </summary> /// <param name="player">当前操作的玩家</param> /// <param name="place">要检查的地块</param> /// <returns>若不满足限制,返回原因,若满足限制,则返回null</returns> protected virtual string Check(GamePlayer player, Place place) { if (player == null) { throw new ArgumentNullException("player"); } if (place == null) { throw new ArgumentNullException("place"); } if (InTerritory && place.Owner == player.Guid) { return("只能在自己的领土上上开展该活动"); } if (TerrainType != null) { if (place.Terrain == null || TerrainType.IsAssignableFrom(place.Terrain.GetType()) == false) { return("地形不满足活动需求"); } } if (TerrainDescriptors.Any()) { if (place.Terrain == null || TerrainDescriptors.Contains(place.Terrain.Descriptor.Guid) == false) { return("地形不满足活动需求"); } } if (BuildingType != null) { if (place.Terrain == null || BuildingType.IsAssignableFrom(place.Building.GetType()) == false) { return("地形不满足活动需求"); } } if (BuildingDescriptors.Any()) { if (place.Terrain == null || BuildingDescriptors.Contains(place.Building.Descriptor.Guid) == false) { return("地形不满足活动需求"); } } if (UnitType != null) { if (place.GetUnits().All(unit => UnitType.IsAssignableFrom(unit.GetType()) == false)) { return("单位不满足活动需求"); } } if (UnitDescriptors.Any()) { if (place.GetUnits().All(unit => UnitDescriptors.Contains(unit.Descriptor.Guid) == false)) { return("单位不满足活动需求"); } } return(null); }