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;
}