コード例 #1
0
ファイル: FamilyTree.cs プロジェクト: ijedi1234/Attila2CK2
        public void updateReligionForCharacter(CK2Character character, bool canOverwrite, HashSet <int> processed)
        {
            bool hasChar = !(processed.Add(character.getFamilyTreeID()));

            if (hasChar)
            {
                return;
            }
            if (character.getReligion() == null || canOverwrite)
            {
                character.setReligion(this.religion);
            }
            CK2Character father = character.getFather();

            if (father != null)
            {
                updateReligionForCharacter(father, canOverwrite, processed);
            }
            List <CK2Character> children = character.getChildren();

            if (children != null)
            {
                foreach (CK2Character child in children)
                {
                    updateReligionForCharacter(child, canOverwrite, processed);
                }
            }
        }
コード例 #2
0
ファイル: FamilyTree.cs プロジェクト: ijedi1234/Attila2CK2
        private void updateDynastyForCharacter(CK2Character character, CK2Dynasty newDynasty, bool canOverwrite, HashSet <int> processed)
        {
            bool hasChar = !(processed.Add(character.getFamilyTreeID()));

            if (hasChar)
            {
                return;
            }
            if (character.getDynasty() == null || canOverwrite)
            {
                character.setDynasty(newDynasty);
            }
            CK2Character father = character.getFather();

            if (father != null)
            {
                //CK2Dynasty fatherDynasty = father.getDynasty();
                //if (fatherDynasty == null || fatherDynasty.getID() != newDynasty.getID())
                updateDynastyForCharacter(father, newDynasty, canOverwrite, processed);
            }
            List <CK2Character> children = character.getChildren();

            if (children != null)
            {
                foreach (CK2Character child in children)
                {
                    //CK2Dynasty childDynasty = child.getDynasty();
                    //if (childDynasty == null || childDynasty.getID() != newDynasty.getID())
                    updateDynastyForCharacter(child, newDynasty, canOverwrite, processed);
                }
            }
        }
コード例 #3
0
        private static void selectCharacter(HashSet <int> writtenCharacters, StreamWriter writer, CK2Character character)
        {
            if (character == null)
            {
                return;
            }
            bool bWritten = !(writtenCharacters.Add(character.getID()));

            if (bWritten)
            {
                return;
            }
            writeCharacter(writer, character);
            CK2Character father = character.getFather();

            selectCharacter(writtenCharacters, writer, father);
            List <CK2Character> children = character.getChildren();

            if (children != null)
            {
                foreach (CK2Character child in children)
                {
                    selectCharacter(writtenCharacters, writer, child);
                }
            }
            CK2Character spouse = character.getSpouse();

            selectCharacter(writtenCharacters, writer, spouse);
        }
コード例 #4
0
        private static void selectCharacter(HashSet <int> writtenCharacters, CK2Character character, Dictionary <string, HashSet <CK2Character> > charactersToOutput)
        {
            if (character == null)
            {
                return;
            }
            bool bWritten = !(writtenCharacters.Add(character.getID()));

            if (bWritten)
            {
                return;
            }
            appendCharToCTO(character, charactersToOutput);
            CK2Character father = character.getFather();

            selectCharacter(writtenCharacters, father, charactersToOutput);
            List <CK2Character> children = character.getChildren();

            if (children != null)
            {
                foreach (CK2Character child in children)
                {
                    selectCharacter(writtenCharacters, child, charactersToOutput);
                }
            }
            CK2Character spouse = character.getSpouse();

            selectCharacter(writtenCharacters, spouse, charactersToOutput);
        }
コード例 #5
0
ファイル: FamilyTree.cs プロジェクト: ijedi1234/Attila2CK2
        public void updateSpouses(CK2Character character, HashSet <int> processed, List <List <string> > esfFamilyTreeStructure)
        {
            bool hasChar = !(processed.Add(character.getID()));

            if (hasChar)
            {
                return;
            }
            CK2Character spouse = character.getSpouse();

            if (character.getSpouse() != null)
            {
                CK2Dynasty spouseDynasty = character.getSpouse().getDynasty();
                if (spouseDynasty == null)
                {
                    discoverTree(spouse, fam2Char, esfFamilyTreeStructure);
                    spouseDynasty = this.deriveDynasty(spouse);
                    associatedDynasties.Add(spouseDynasty);
                    updateDynasty(spouseDynasty, spouse, false);
                    updateReligion(spouse, false);
                    updateCulture(spouse, false);
                }
            }
            CK2Character father = character.getFather();

            if (father != null)
            {
                updateSpouses(father, processed, esfFamilyTreeStructure);
            }
            List <CK2Character> children = character.getChildren();

            if (children != null)
            {
                foreach (CK2Character child in children)
                {
                    updateSpouses(child, processed, esfFamilyTreeStructure);
                }
            }
        }
コード例 #6
0
ファイル: FamilyTree.cs プロジェクト: ijedi1234/Attila2CK2
        private void discoverTree(CK2Character character, Dictionary <int, CK2Character> familyID2Characters, List <List <string> > esfFamilyTreeStructure)
        {
            int           charsFamilyID  = character.getFamilyTreeID();
            List <string> familyTreeInfo = esfFamilyTreeStructure[charsFamilyID - 1];
            int           fatherID       = Int32.Parse(familyTreeInfo[4]);
            int           spouseID       = Int32.Parse(familyTreeInfo[5]);
            //This is apparently spouse-related (?)
            int numSpousesPos = 6;
            int numSpouses    = Int32.Parse(familyTreeInfo[numSpousesPos]);

            if (spouseID == 0 && numSpouses > 0)
            {
                spouseID = Int32.Parse(familyTreeInfo[numSpousesPos + 1]);
            }
            int        numChildrenPos = numSpouses + numSpousesPos + 1;
            int        numChildren    = Int32.Parse(familyTreeInfo[numChildrenPos]);
            int        numAdoptedPos  = numChildren + numChildrenPos + 1;
            int        numAdopted     = Int32.Parse(familyTreeInfo[numAdoptedPos]);
            List <int> childrenIDs    = new List <int>(numChildren);

            for (int i = 0; i < numChildren; i++)
            {
                int childID = Int32.Parse(familyTreeInfo[numChildrenPos + i + 1]);
                childrenIDs.Add(childID);
            }
            for (int i = 0; i < numAdopted; i++)
            {
                int childID = Int32.Parse(familyTreeInfo[numAdoptedPos + i + 1]);
                childrenIDs.Add(childID);
            }
            if (fatherID != 0)
            {
                character.setFather(familyID2Characters[fatherID]);
            }
            if (spouseID != 0)
            {
                character.setSpouse(familyID2Characters[spouseID]);
            }
            if ((numChildren + numAdopted) != 0)
            {
                List <CK2Character> children = new List <CK2Character>(numChildren + numAdopted);
                foreach (int childID in childrenIDs)
                {
                    children.Add(familyID2Characters[childID]);
                }
                if (children.Count == 0)
                {
                    character.setChildren(null);
                }
                else
                {
                    character.setChildren(children);
                }
            }
            int  booleanPrefacePos = numAdopted + numAdoptedPos + 1;
            int  booleanListPos    = booleanPrefacePos + 2;
            bool isBastard         = (familyTreeInfo[booleanListPos + 2] == "yes");

            character.setIsBastard(isBastard);

            //Skip the female->male spouse. She is handled in the next run.
            {
                CK2Character father = character.getFather();
                if (father != null)
                {
                    bool hasChar = (father.getChildren() != null);
                    if (!hasChar)
                    {
                        discoverTree(father, familyID2Characters, esfFamilyTreeStructure);
                    }
                    if (character.getBirth().CompareTo(father.getBirth()) <= 0)
                    {
                        character.incrementBirthDay(father);
                    }
                }

                List <CK2Character> children = character.getChildren();
                if (children != null)
                {
                    foreach (CK2Character child in children)
                    {
                        bool hasChar = (child.getFather() != null);
                        if (!hasChar)
                        {
                            discoverTree(child, familyID2Characters, esfFamilyTreeStructure);
                        }
                    }
                }

                //CK2Character spouse = character.getSpouse();
                //if (character.getIsMale() && spouse != null) {
                //    discoverTree(spouse, familyID2Characters, esfFamilyTreeStructure);
                //}
            }
        }