/// <summary>
        /// Given an Id, position and isFemale flag, will return a randomly chosen name that meets those criteria.
        /// </summary>
        /// <param name="position"></param>
        /// <param name="isFemale">Defaults to false, not needed when position == LastName</param>
        /// <returns></returns>
        public string GetName(NamePosition position, bool isFemale = false)
        {
            var randomInt = rnd.Next(1, 101);

            foreach (var option in Distributions)
            {
                if (randomInt <= option.Item1)
                {
                    var theme = CommanderNameThemes.Instance.NameThemes.FirstOrDefault(x => x.Id == option.Item2);
                    if (theme == null) throw new Exception(string.Format("Commander Name Theme not found. Id: {0}", option.Item2));

                    var query = theme.NameEntries.Where(x => x.NamePosition == position &&
                                               (position != NamePosition.FirstName || x.IsFemale == isFemale)).ToList();
                    var entryCount = query.Count();
                    if (entryCount < 1)
                        throw new ArgumentOutOfRangeException(theme.Name, "No valid entries found in Commander Name Theme");

                    var randomIndex = rnd.Next(0, entryCount);
                    return query[randomIndex].Name;

                }
            }

            throw new Exception("No entry found in Commander Name Theme selections.");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Given an Id, position and isFemale flag, will return a randomly chosen name that meets those criteria.
        /// </summary>
        /// <param name="position"></param>
        /// <param name="isFemale">Defaults to false, not needed when position == LastName</param>
        /// <returns></returns>
        public string GetName(NamePosition position, bool isFemale = false)
        {
            var randomInt = rnd.Next(1, 101);

            foreach (var option in Distributions)
            {
                if (randomInt <= option.Item1)
                {
                    var theme = CommanderNameThemes.Instance.NameThemes.FirstOrDefault(x => x.Id == option.Item2);
                    if (theme == null)
                    {
                        throw new Exception(string.Format("Commander Name Theme not found. Id: {0}", option.Item2));
                    }

                    var query = theme.NameEntries.Where(x => x.NamePosition == position &&
                                                        (position != NamePosition.FirstName || x.IsFemale == isFemale)).ToList();
                    var entryCount = query.Count();
                    if (entryCount < 1)
                    {
                        throw new ArgumentOutOfRangeException(theme.Name, "No valid entries found in Commander Name Theme");
                    }

                    var randomIndex = rnd.Next(0, entryCount);
                    return(query[randomIndex].Name);
                }
            }

            throw new Exception("No entry found in Commander Name Theme selections.");
        }
        /// <summary>
        ///     初始化名称标签
        /// </summary>
        private void InitTag()
        {
            var nameInfo = NamePosition.Split('|');

            var tb = Template.FindName("tbTag", this) as TextBlock;

            if (tb == null)
            {
                return;
            }

            tb.Visibility = NameVisible ? Visibility.Visible : Visibility.Hidden;
            if (nameInfo.Length < 3)
            {
                return;
            }
            try
            {
                tb.HorizontalAlignment = String.IsNullOrWhiteSpace(nameInfo[0])
                    ? tb.HorizontalAlignment
                    : (HorizontalAlignment)Enum.Parse(typeof(HorizontalAlignment), nameInfo[0]);
                tb.VerticalAlignment = String.IsNullOrWhiteSpace(nameInfo[1])
                    ? tb.VerticalAlignment
                    : (VerticalAlignment)Enum.Parse(typeof(VerticalAlignment), nameInfo[1]);
                var tc = new ThicknessConverter();
                var convertFromString = tc.ConvertFromString(nameInfo[2]);
                if (convertFromString != null)
                {
                    tb.Margin = String.IsNullOrWhiteSpace(nameInfo[2]) ? tb.Margin : (Thickness)convertFromString;
                }
            }
            catch (Exception)
            {
                // LogManager.Instance.AddLog(LogEventType.Warning, e, "异常日志");
            }
        }
Exemplo n.º 4
0
 public InvalidNameException(NamePosition position, string name) :
     base($"{position.ToString()} name {name} contains invalid characters")
 {
 }