Exemplo n.º 1
0
        /// <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);
        }