public Person GetUnlandedMember(int dynastyID) { dynasty d = dynastiesGenerated[dynastyID]; Person rP = null; if (null != d) { foreach(Person p in d) { if (null == p.holding) { rP = p; break; } } } else { Debug.Log("Dynasty ID " + dynastyID + " is null!"); } return rP; }
//Returns IDs of dynasties generated //TODO: Param for "bonus" family members if we need a larger dynasty (eg. the player) public int[] GenerateIntertwinedDynasties(int dynCount) { float GENERATE_NEW_SPOUSE_CHANCE = 2.0f/( 3f * (float)dynCount);//0.33f; dynasty[] createdDyns = new dynasty[dynCount]; int[] dynastyIDs = new int[dynCount]; List<Person> unmarried = new List<Person>(); List<Person> married = new List<Person>(); //people to generate kids for - only need 1 from each couple //Generate dynastic heads for(int i = 0; i < dynCount; i++) { dynastyIDs[i] = NextDynasty(); createdDyns[i] = new dynasty(); dynastyNames.Add(dynastyIDs[i], GetFamilyName()); dynastyFlags.Add(dynastyIDs[i], GetFamilyBanner()); Person head = new Person(dynastyIDs[i], 1, dynastyNames[dynastyIDs[i]]); createdDyns[i].Add(head); unmarried.Add(head); //Generate heads' siblings int numSibs = Random.Range(1, 4); for(int s = 0; s < numSibs; s++) { Person sibling = new Person(dynastyIDs[i], 2, dynastyNames[dynastyIDs[i]]); //head.AddSibling(sibling); createdDyns[i].Add(sibling); unmarried.Add(sibling); } /*foreach(Person p in createdDyns[i]) { foreach(Person q in createdDyns[i]) { if( p != q) p.AddSibling(q); } }*/ for(int outerPersonInd = 0; outerPersonInd < createdDyns[i].Count; outerPersonInd++) { for(int innerPersonInd = outerPersonInd+1; innerPersonInd < createdDyns[i].Count; innerPersonInd++) { createdDyns[i][outerPersonInd].AddSibling(createdDyns[i][innerPersonInd]); } } } //Generate marriages (and new spouses if we like) for(int i = 0; i < dynCount; i++) { List<Person> CreatedSpouses = new List<Person>(); foreach(Person p in createdDyns[i]) { if(!p.IsMarried()) { if(Random.Range(0.0f, 1.0f) < GENERATE_NEW_SPOUSE_CHANCE) { //New spouse out of nowhere Person newSpouse = new Person(dynastyIDs[i], 3, dynastyNames[dynastyIDs[i]]); p.AddSpouse(newSpouse); CreatedSpouses.Add(newSpouse); unmarried.Remove(p); married.Add(p); } else if(dynCount > 1) { FindSpouse(p, unmarried, married); } } } //Add newly created spouses to dynasty foreach(Person p in CreatedSpouses) { createdDyns[i].Add(p); } CreatedSpouses = null; } List<Person> addedKids = new List<Person>(); //Generate Children foreach(Person p in married) { int kidDyn = p.GetDynasty(); int kidDynIndex = -1; for(int i = 0; i < dynCount; i++) { if(dynastyIDs[i] == kidDyn) { kidDynIndex = i; break; } } int numKids = Random.Range(0,5); for(int k = 0; k < numKids; k++) { Person kid = new Person(kidDyn, 4, dynastyNames[kidDyn]); addedKids.Add(kid); unmarried.Add(kid); p.AddChild(kid); createdDyns[kidDynIndex].Add(kid); } } //TODO: Another round of marrying here? Add a few more connections. foreach(Person p in addedKids) { if(!p.IsMarried()) FindSpouse(p, unmarried, married); } //Add created dynasties to the list of generated dynasties for(int i = 0; i < dynCount; i++) { dynastiesGenerated.Add(dynastyIDs[i], createdDyns[i]); } unmarried = null; married = null; createdDyns = null; return dynastyIDs; }