Beispiel #1
0
        public GenderMatchQuality GetGenderMatchQuality(CharacterDetail characterDetail)
        {
            switch (Gender)
            {
            case ActorGender.Male:
                switch (characterDetail.Gender)
                {
                case CharacterGender.Male:
                case CharacterGender.PreferMale:
                case CharacterGender.Either:
                case CharacterGender.Neuter:
                    return(GenderMatchQuality.Perfect);

                default:
                    return(GenderMatchQuality.Mismatch);
                }

            default:
                switch (characterDetail.Gender)
                {
                case CharacterGender.Female:
                case CharacterGender.PreferFemale:
                case CharacterGender.Neuter:
                    return(GenderMatchQuality.Perfect);

                case CharacterGender.Either:
                    return(GenderMatchQuality.Acceptable);

                default:
                    return(GenderMatchQuality.Mismatch);
                }
            }
        }
        public static Character LoadCharacter(this Armory armory, string realmName, string characterName, CharacterDetail loadDetail)
        {
            XmlNode characterDetails = LoadDetailNode(armory, CharacterDetail.Basic, realmName, characterName);

            if (characterDetails != null)
            {
                XmlNode characterNode = characterDetails.SelectSingleNode("character");

                // <character battleGroup="Vindication" charUrl="r=Sporeggar&amp;n=Zoing" class="Rogue" classId="4" faction="Horde" factionId="1" gender="Female" genderId="1" guildName="The Dominion" guildUrl="r=Sporeggar&amp;n=The+Dominion&amp;p=1" lastModified="31 August 2008" level="70" name="Zoing" prefix="" race="Blood Elf" raceId="10" realm="Sporeggar" suffix="">
                G guild = new G(
                            GuildDetail.Basic,
                            armory.Region,
                            (Faction)Enum.Parse(typeof(Faction), characterNode.Attributes["factionId"].Value),
                            characterNode.Attributes["guildName"].Value,
                            characterNode.Attributes["realm"].Value,
                            characterNode.Attributes["battleGroup"].Value,
                            characterNode.Attributes["guildUrl"].Value);

                Character character = new Character(
                                                    armory,
                                                    CharacterDetail.Basic,
                                                    armory.Region,
                                                    (Faction)Enum.Parse(typeof(Faction), characterNode.Attributes["factionId"].Value),
                                                    characterNode.Attributes["name"].Value,
                                                    characterNode.Attributes["realm"].Value,
                                                    characterNode.Attributes["battleGroup"].Value,
                                                    (Gender)Enum.Parse(typeof(Gender), characterNode.Attributes["genderId"].Value),
                                                    (Race)Enum.Parse(typeof(Race), characterNode.Attributes["raceId"].Value),
                                                    (Class)Enum.Parse(typeof(Class), characterNode.Attributes["classId"].Value),
                                                    Convert.ToInt32(characterNode.Attributes["level"].Value),
                                                    characterNode.Attributes["charUrl"].Value,
                                                    guild);

                if (loadDetail.ContainsDetail(CharacterDetail.CharacterSheet))
                {
                    character.LoadDetail(CharacterDetail.CharacterSheet);
                }

                if (loadDetail.ContainsDetail(CharacterDetail.Reputation))
                {
                    character.LoadDetail(CharacterDetail.Reputation);
                }

                if (loadDetail.ContainsDetail(CharacterDetail.Skills))
                {
                    character.LoadDetail(CharacterDetail.Skills);
                }

                if (loadDetail.ContainsDetail(CharacterDetail.Talents))
                {
                    character.LoadDetail(CharacterDetail.Talents);
                }

                return character;
            }
            else
            {
                return null;
            }
        }
        public async Task <IActionResult> Details(string id)
        {
            int             number          = 0;
            CharacterDetail characterDetail = null;

            //List<Picture> picturesCharacter = null;
            //CharacterDetailVM model = null;
            //
            if (string.IsNullOrEmpty(id))
            {
                return(RedirectToAction("Index", "Home"));
            }

            bool success = Int32.TryParse(id, out number);

            //
            if (success)
            {
                characterDetail = await characterDetailRepository.GetCharacterDetailById(number);

                //picturesCharacter = await characterDetailRepository.GetAllPicturesCharactersById(number);
                // http://api.jikan.moe/v3/person/6730 object person with details
                // https://api.jikan.moe/v3/character/2009 get object data Character
                //model = new CharacterDetailVM();
                //model.characterDetail = characterDetail;
                //model.pictures = picturesCharacter;
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }
            //
            return(View(characterDetail));
        }
Beispiel #4
0
        public MatchLevel GetAgeMatchQuality(CharacterDetail character)
        {
            switch (character.Age)
            {
            case CharacterAge.Child:
                switch (Age)
                {
                case ActorAge.Child: return(MatchLevel.Perfect);

                case ActorAge.YoungAdult: return(Gender == ActorGender.Female ? MatchLevel.Acceptable : MatchLevel.Mismatch);

                case ActorAge.Adult: return(Gender == ActorGender.Female ? MatchLevel.Poor : MatchLevel.Mismatch);

                default: return(MatchLevel.Mismatch);
                }

            default:
                switch (Math.Abs((int)Age - (int)character.Age))
                {
                case 0: return(MatchLevel.Perfect);

                case 1: return(MatchLevel.Acceptable);

                case 2: return(MatchLevel.Poor);

                default: return(MatchLevel.Mismatch);
                }
            }
        }
Beispiel #5
0
    // Use this for initialization

    void Start()
    {
        player          = GetComponent <CharacterController>();
        characterDetail = new CharacterDetail();
        ani             = GetComponent <Animator>();
        currentTime     = maxNormalCoundown;
        currentTimeE    = maxNormalCoundownE;
    }
        public void AddCharacterDetailToProject(string characterId, CharacterGender gender, CharacterAge age)
        {
            var detail = new CharacterDetail {
                CharacterId = characterId, Gender = gender, Age = age, MaxSpeakers = 1
            };

            m_project.AddProjectCharacterDetail(detail);
            m_project.SaveProjectCharacterDetailData();
        }
        public void StoreCharacterDetail(string characterId, CharacterGender gender, CharacterAge age)
        {
            if (m_project.AllCharacterDetailDictionary.ContainsKey(characterId))
            {
                throw new ArgumentException("Project already contains a character with ID " + characterId);
            }
            var detail = new CharacterDetail {
                CharacterId = characterId, Gender = gender, Age = age, MaxSpeakers = 1
            };

            m_pendingCharacterDetails[characterId] = detail;
        }
Beispiel #8
0
        public MatchLevel GetGenderMatchQuality(CharacterDetail characterDetail)
        {
            switch (Gender)
            {
            case ActorGender.Male:
                switch (characterDetail.Gender)
                {
                case CharacterGender.Male:
                case CharacterGender.PreferMale:
                case CharacterGender.Either:
                case CharacterGender.Neuter:
                    return(MatchLevel.Perfect);

                case CharacterGender.PreferFemale:
                    // This might seem odd at first glance, but the only "prefer female" characters in the data
                    // could easily be performed by a male actor.
                    return(MatchLevel.Acceptable);

                default:
                    return(MatchLevel.Mismatch);
                }

            default:
                switch (characterDetail.Gender)
                {
                case CharacterGender.Female:
                case CharacterGender.PreferFemale:
                case CharacterGender.Neuter:
                    return(MatchLevel.Perfect);

//PG-1055						case CharacterGender.Either:
//									return GenderMatchQuality.Acceptable;
                default:
                    if (characterDetail.Age == CharacterAge.Child)
                    {
                        switch (Age)
                        {
                        case ActorAge.Adult: return(MatchLevel.Poor);

                        case ActorAge.Child:
                        case ActorAge.YoungAdult:
                            return(MatchLevel.Acceptable);

                        default: return(MatchLevel.Mismatch);
                        }
                    }
                    return(MatchLevel.Mismatch);
                }
            }
        }
Beispiel #9
0
        //GET: Character/Delete/{id}
        public ActionResult Delete(int?id)
        {
            var service = GetCharacterService();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CharacterDetail character = service.GetSingleCharacter(id);

            if (character == null)
            {
                return(HttpNotFound());
            }
            return(View(character));
        }
Beispiel #10
0
        public bool Matches(CharacterDetail character, bool strictAgeMatching = false)
        {
            if (GetGenderMatchQuality(character) != GenderMatchQuality.Perfect)
            {
                return(false);
            }

            var ageMatchQuality = GetAgeMatchQuality(character);

            if (ageMatchQuality == AgeMatchQuality.Mismatch)
            {
                return(false);
            }

            return(!strictAgeMatching || ageMatchQuality == AgeMatchQuality.Perfect);
        }
        private void CalculateProximityForGroups(CharacterDetail characterDetail, IEnumerable <CharacterGroup> characterGroups, Dictionary <CharacterGroup, WeightedMinimumProximity> groupToProximityDict, double weightingFactor = 1.0)
        {
            if (!weightingFactor.Equals(1d))
            {
                foreach (var weightedMinimumProximity in groupToProximityDict)
                {
                    weightedMinimumProximity.Value.WeightingPower = weightingFactor;
                }
            }

            foreach (var group in characterGroups)
            {
                HashSet <string> testSet = new HashSet <string>(group.CharacterIds);
                testSet.Add(characterDetail.CharacterId);
                groupToProximityDict.Add(group, new WeightedMinimumProximity(m_proximity.CalculateMinimumProximity(testSet)));
            }
        }
Beispiel #12
0
        public AgeMatchQuality GetAgeMatchQuality(CharacterDetail character)
        {
            switch (character.Age)
            {
            case CharacterAge.Child:
                return(Age == ActorAge.Child ? AgeMatchQuality.Perfect : AgeMatchQuality.Mismatch);

            default:
                switch (Math.Abs((int)Age - (int)character.Age))
                {
                case 0: return(AgeMatchQuality.Perfect);

                case 1: return(AgeMatchQuality.CloseAdult);

                case 2: return(AgeMatchQuality.AdultVsChild);

                default: return(AgeMatchQuality.Mismatch);
                }
            }
        }
Beispiel #13
0
        // GET: Character/Details/{id}
        public ActionResult Details(int?id)
        {
            var service = GetCharacterService();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            CharacterDetail character = service.GetSingleCharacter(id);


            if (character == null)
            {
                return(HttpNotFound());
            }

            var CurrentUserId = User.Identity.GetUserId();

            ViewBag.CurrentUser = CurrentUserId;

            return(View(character));
        }
Beispiel #14
0
        private static XmlNode LoadDetailNode(Armory armory, CharacterDetail detail, string realmName, string characterName)
        {
            string searchString = string.Empty;
            switch (detail)
            {
                case CharacterDetail.Basic:
                case CharacterDetail.CharacterSheet:
                    // http://eu.wowarmory.com/character-sheet.xml?r=Sporeggar&n=Zoing
                    searchString = string.Format("character-sheet.xml?r={0}&n={1}",
                                                 HttpUtility.UrlEncode(realmName),
                                                 HttpUtility.UrlEncode(characterName));
                    break;
                case CharacterDetail.Reputation:
                    // http://eu.wowarmory.com/character-reputation.xml?r=Sporeggar&n=Zoing
                    searchString = string.Format("character-reputation.xml?r={0}&n={1}",
                                                 HttpUtility.UrlEncode(realmName),
                                                 HttpUtility.UrlEncode(characterName));
                    break;
                case CharacterDetail.Skills:
                    // http://eu.wowarmory.com/character-skills.xml?r=Sporeggar&n=Zoing
                    searchString = string.Format("character-skills.xml?r={0}&n={1}",
                                                 HttpUtility.UrlEncode(realmName),
                                                 HttpUtility.UrlEncode(characterName));
                    break;
                case CharacterDetail.Talents:
                    // http://eu.wowarmory.com/character-talents.xml?r=Sporeggar&n=Zoing
                    searchString = string.Format("character-talents.xml?r={0}&n={1}",
                                                 HttpUtility.UrlEncode(realmName),
                                                 HttpUtility.UrlEncode(characterName));
                    break;
                case CharacterDetail.Arena:
                    // http://eu.wowarmory.com/character-arenateams.xml?r=Sporeggar&n=Zoing
                    searchString = string.Format("character-arenateams.xml?r={0}&n={1}",
                                                 HttpUtility.UrlEncode(realmName),
                                                 HttpUtility.UrlEncode(characterName));
                    break;
            }

            if (searchString != string.Empty)
            {
                XmlDocument searchResults = armory.Request(searchString);
                XmlNode characterDetails = searchResults.SelectSingleNode("/page/characterInfo");
                return characterDetails;
            }
            else
            {
                return null;
            }
        }
Beispiel #15
0
        public static void LoadDetail(this Character character, CharacterDetail extraDetail)
        {
            if (!character.DetailLoaded.ContainsDetail(extraDetail))
            {
                XmlNode searchResults;

                switch (extraDetail) {
                    case CharacterDetail.CharacterSheet:
                        searchResults = LoadDetailNode(character.UsedArmory, CharacterDetail.CharacterSheet, character.Realm, character.Name);

                        LoadTalentSpec(character, searchResults);
                        LoadPvpInfo(character, searchResults);
                        Stats stats = LoadStats(character, searchResults);
                        LoadResistances(stats, searchResults);
                        LoadMelee(character, stats, searchResults);
                        LoadRanged(character, stats, searchResults);
                        LoadDefense(stats, searchResults);
                        LoadBuffs(character, searchResults);
                        LoadSpell(character, stats, searchResults);
                        LoadProfessions(character, searchResults);
                        LoadBars(stats, searchResults);
                        LoadTitles(character, searchResults);
                        break;
                    case CharacterDetail.Reputation:
                        searchResults = LoadDetailNode(character.UsedArmory, CharacterDetail.Reputation, character.Realm, character.Name);

                        LoadReputation(character, searchResults);
                        break;
                    case CharacterDetail.Skills:
                        searchResults = LoadDetailNode(character.UsedArmory, CharacterDetail.Skills, character.Realm, character.Name);

                        LoadSkills(character, searchResults);
                        break;
                    case CharacterDetail.Talents:
                        searchResults = LoadDetailNode(character.UsedArmory, CharacterDetail.Talents, character.Realm, character.Name);

                        LoadTalents(character, searchResults);
                        break;
                    case CharacterDetail.Arena:
                        searchResults = LoadDetailNode(character.UsedArmory, CharacterDetail.Arena, character.Realm, character.Name);

                        LoadArena(character, searchResults);
                        break;
                }

                // Indicate we finished loading extra detail
                character.LoadedDetail(extraDetail);
            }
        }
Beispiel #16
0
        private static void ParseFile(string filename)
        {
            SaveFile fileItem;

            fileItem = new SaveFile()
            {
                FileName  = filename,
                FileTime  = long.TryParse(filename.Split("_")[0], out long timeInTick) ? new DateTime(timeInTick) : DateTime.Now,
                Processed = (int)SaveFileProcessedEnum.NotProcessed
            };

            string jsonex = File.ReadAllText(filename).Replace(" NULL", " \"NULL\"");

            dynamic jsonFile = JObject.Parse(jsonex);

            var elementStacks = jsonFile["elementStacks"];

            foreach (JProperty property in elementStacks.Properties())
            {
                ElementStack element = new ElementStack
                {
                    ElementStackIdentification = property.Name,
                    SaveFile = fileItem
                };

                fileItem.ElementStacks.Add(element);

                //var elementStackItems = JObject.Parse(property.Values);
                foreach (JProperty subprop in property.Values())
                {
                    ElementStackItem item = new ElementStackItem
                    {
                        Value        = subprop.Value.ToString(),
                        Key          = subprop.Name,
                        ElementStack = element
                    };

                    element.ElementStackItems.Add(item);
                }
            }

            var decks = jsonFile["decks"];

            foreach (JProperty property in decks.Properties())
            {
                Deck deck = new Deck()
                {
                    Name     = property.Name,
                    SaveFile = fileItem
                };

                fileItem.Decks.Add(deck);
                //How to identify eliminated cards?

                foreach (JProperty subprop in property.Values())
                {
                    if (subprop.Name == "eliminatedCards")
                    {
                        //Aqui eu tenho uma sub parte
                        foreach (JToken subsubprop in subprop.Values())
                        {
                            DeckItem decksubItem = new DeckItem()
                            {
                                Eliminated = true,
                                Value      = subsubprop.Value <string>(),
                                Key        = "0",
                                Deck       = deck
                            };
                            deck.DeckItems.Add(decksubItem);
                        }
                        continue;
                    }

                    DeckItem deckItem = new DeckItem()
                    {
                        Eliminated = false,
                        Key        = subprop.Name,
                        Value      = subprop.Value.ToString(),
                        Deck       = deck
                    };
                    deck.DeckItems.Add(deckItem);
                }
            }

            var metainfo = jsonFile["metainfo"];

            MetaInfo meta = new MetaInfo();

            foreach (JProperty property in metainfo.Properties())
            {
                if (property.Name.ToUpper() == "BirdWormSlider".ToUpper())
                {
                    meta.BirdWormSlider = int.Parse(property.Value.ToString());
                }
                if (property.Name.ToUpper() == "VERSIONNUMBER".ToUpper())
                {
                    meta.Version = property.Value.ToString();
                }
                if (property.Name.ToUpper() == "WeAwaitSTE".ToUpper())
                {
                    meta.WeAwaitSTE = property.Value.ToString();
                }
            }

            fileItem.MetaInfo = meta;

            var             characterDetails = jsonFile["characterDetails"];
            CharacterDetail characterDetail  = new CharacterDetail()
            {
                SaveFile = fileItem,
                Levers   = new List <Lever>()
            };

            fileItem.CharacterDetail = characterDetail;

            foreach (JProperty property in characterDetails.Properties())
            {
                if (property.Name.ToUpper() == "activeLegacy".ToUpper())
                {
                    characterDetail.ActiveLegacy = property.Value.HasValues ? property.Value.ToString() : string.Empty;
                    continue;
                }
                if (property.Name.ToUpper() == "name".ToUpper())
                {
                    characterDetail.Name = property.Value.ToString();
                    continue;
                }
                if (property.Name.ToUpper() == "profession".ToUpper())
                {
                    characterDetail.Profession = property.Value.ToString();
                    continue;
                }
                LeverPartEnum leverPart = LeverPartEnum.Error;

                if (property.Name.ToUpper() == "pastLevers".ToUpper())
                {
                    leverPart = LeverPartEnum.PastLevers;
                }

                if (property.Name.ToUpper() == "futureLevers".ToUpper())
                {
                    leverPart = LeverPartEnum.FutureLevers;
                }

                if (property.Name.ToUpper() == "executions".ToUpper())
                {
                    leverPart = LeverPartEnum.Executions;
                }

                foreach (JProperty subprop in property.Values())
                {
                    Lever lever = new Lever()
                    {
                        CharacterDetail = characterDetail,
                        Part            = (int)leverPart,
                        Key             = subprop.Name,
                        Value           = subprop.Value.ToString()
                    };
                    characterDetail.Levers.Add(lever);
                }
            }

            var situations = jsonFile["situations"];

            foreach (JProperty property in situations.Properties())
            {
                Situation situation = new Situation()
                {
                    SaveFile = fileItem,
                    SituationIdentification = property.Name
                };

                fileItem.Situations.Add(situation);

                foreach (JProperty sitItem in property.Values())
                {
                    //ongoingSlotElements
                    if (sitItem.Name.ToUpper() == "ongoingSlotElements".ToUpper())
                    {
                        foreach (JProperty subprop in sitItem.Values())
                        {
                            OngoingSlotElement ongoingSlotElement = new OngoingSlotElement()
                            {
                                Situation = situation,
                                OngoingSlotElementIdentification = subprop.Name
                            };

                            situation.OngoingSlotElements.Add(ongoingSlotElement);

                            foreach (JProperty subpropitem in subprop.Values())
                            {
                                OngoingSlotElementItem ongoingSlotElementItem = new OngoingSlotElementItem()
                                {
                                    OngoingSlotElement = ongoingSlotElement,
                                    Key   = subpropitem.Name,
                                    Value = subpropitem.Value.ToString(),
                                };

                                ongoingSlotElement.OngoingSlotElementItems.Add(ongoingSlotElementItem);
                            }
                        }
                        continue;
                    }

                    //situationOutputNotes
                    if (sitItem.Name.ToUpper() == "situationOutputNotes".ToUpper())
                    {
                        foreach (JProperty subprop in sitItem.Values())
                        {
                            string indexValue = subprop.Name;
                            foreach (JProperty subpropitem in subprop.Values())
                            {
                                SituationOutputNote situationOutputNote = new SituationOutputNote()
                                {
                                    Situation = situation,
                                    Index     = indexValue,
                                    Key       = subpropitem.Name,
                                    Value     = subpropitem.Value.ToString(),
                                };

                                situation.SituationOutputNotes.Add(situationOutputNote);
                            }
                        }
                        continue;
                    }

                    //situationStoredElements
                    if (sitItem.Name.ToUpper() == "situationStoredElements".ToUpper())
                    {
                        foreach (JProperty subprop in sitItem.Values())
                        {
                            SituationStoredElement situationStoredElement = new SituationStoredElement()
                            {
                                Situation = situation,
                                SituationStoredElementIdentification = subprop.Name
                            };
                            situation.SituationStoredElements.Add(situationStoredElement);

                            foreach (JProperty subpropitem in subprop.Values())
                            {
                                SituationStoredElementItem situationStoredElementItem = new SituationStoredElementItem()
                                {
                                    SituationStoredElement = situationStoredElement,
                                    Key   = subpropitem.Name,
                                    Value = subpropitem.Value.ToString(),
                                };

                                situationStoredElement.SituationStoredElementItems.Add(situationStoredElementItem);
                            }
                        }
                        continue;
                    }

                    SituationItem situationItem = new SituationItem()
                    {
                        Key       = sitItem.Name,
                        Value     = sitItem.Value.ToString(),
                        Situation = situation
                    };

                    situation.SituationItems.Add(situationItem);
                }
            }

            //Verify some properties:
            VerifyFile(fileItem);
        }
 // Use this for initialization
 void Start()
 {
     // 詳細画面クラス取得
     characterDetail = GameObject.FindObjectOfType <Canvas> ().transform.GetComponent <CharacterDetail> ();
 }
Beispiel #18
0
        public async Task <IActionResult> Put(int characterId, [FromBody] CharacterDetail detail)
        {
            await _serviceAsync.UpdateAsync(characterId, detail).ConfigureAwait(false);

            return(NoContent());
        }
        private void AddCharacterToBestGroup(CharacterDetail characterDetail, TrialGroupConfiguration configuration)
        {
            List <CharacterGroup> groups;

            IEnumerable <CharacterGroup> availableGroups = configuration.Groups.Where(g => !g.Closed &&
                                                                                      !configuration.IsGroupReservedForNarratorOrExtraBiblical(g));

            if (!availableGroups.Any())
            {
                availableGroups = configuration.Groups.Where(g => !g.Closed);
            }

            var groupMatchQualityDictionary = new Dictionary <MatchQuality, List <CharacterGroup> >(configuration.Groups.Count);

            foreach (var characterGroup in availableGroups)
            {
                var voiceActor = characterGroup.VoiceActor;
                var quality    = new MatchQuality(voiceActor.GetGenderMatchQuality(characterDetail), voiceActor.GetAgeMatchQuality(characterDetail));
                if (!groupMatchQualityDictionary.TryGetValue(quality, out groups))
                {
                    groupMatchQualityDictionary[quality] = groups = new List <CharacterGroup>();
                }
                groups.Add(characterGroup);
            }

            var groupToProximityDict = new Dictionary <CharacterGroup, WeightedMinimumProximity>();

            if (groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Perfect, AgeMatchQuality.Perfect), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Perfect, AgeMatchQuality.CloseAdult), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Perfect, AgeMatchQuality.AdultVsChild), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Acceptable, AgeMatchQuality.Perfect), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 1.1);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Acceptable, AgeMatchQuality.CloseAdult), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 1.1);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Acceptable, AgeMatchQuality.AdultVsChild), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 1.1);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Mismatch, AgeMatchQuality.Perfect), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 2.3);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Mismatch, AgeMatchQuality.CloseAdult), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 2.4);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Mismatch, AgeMatchQuality.AdultVsChild), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 2.5);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Perfect, AgeMatchQuality.Mismatch), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 2.7);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Acceptable, AgeMatchQuality.Mismatch), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 2.9);
            }
            if (!groupToProximityDict.Any(i => i.Value.WeightedNumberOfBlocks >= Proximity.kDefaultMinimumProximity || i.Value.NumberOfBlocks >= configuration.MinimumProximity) &&
                groupMatchQualityDictionary.TryGetValue(new MatchQuality(GenderMatchQuality.Mismatch, AgeMatchQuality.Mismatch), out groups))
            {
                CalculateProximityForGroups(characterDetail, groups, groupToProximityDict, 3.2);
            }
            var bestGroupEntry = groupToProximityDict.Aggregate((l, r) => l.Value.WeightedNumberOfBlocks > r.Value.WeightedNumberOfBlocks ? l : r);
            var bestGroup      = bestGroupEntry.Key;

            if (configuration.MinimumProximity > bestGroupEntry.Value.NumberOfBlocks)
            {
                // We're adding the character to the best group we could find, but it is now the *worst* group in the configuration.
                configuration.NoteGroupWithWorstProximity(bestGroupEntry.Key, bestGroupEntry.Value.NumberOfBlocks);
            }
            bestGroup.CharacterIds.Add(characterDetail.CharacterId);
            if (RelatedCharactersData.Singleton.GetCharacterIdsForType(CharacterRelationshipType.SameCharacterWithMultipleAges).Contains(characterDetail.CharacterId))
            {
                foreach (var relatedCharacters in RelatedCharactersData.Singleton.GetCharacterIdToRelatedCharactersDictionary()[characterDetail.CharacterId])
                {
                    bestGroup.CharacterIds.AddRange(relatedCharacters.CharacterIds);
                }
            }
        }
Beispiel #20
0
 internal static bool ContainsDetail(this CharacterDetail searchedDetail, CharacterDetail detailToSearch)
 {
     return ((searchedDetail & detailToSearch) == detailToSearch);
 }