int createFamilyFeud(Family family1, Family family2) { int victimDisputesCreated = 0; for (int x = 0; x < family1.family_members.Count; x++) { for (int y = 0; y < family2.family_members.Count; y++) { int a = npcs.IndexOf(family1.family_members[x]); int b = npcs.IndexOf(family2.family_members[y]); FamilyFeud feudHistory = new FamilyFeud(0, npcs[a], npcs[b]); //Make them hate eachother if they don't already love eachother (romeo juliet situation) if (relationships[a,b] != 3) { relationships[a, b] = randomRelationshipValue(-3, -2, -3); npcs[a].addHistory(feudHistory); } if (relationships[b, a] != 3) { if (npcs[a] == victim) victimDisputesCreated++; npcs[b].addHistory(feudHistory); relationships[b, a] = randomRelationshipValue(-3, -2, -3); } if (feud == null) { feud = feudHistory; } } } return victimDisputesCreated; }
void createFamilies() { foreach (Npc npc in npcs) { /* Family logic If less families than the max, randomly attempt to create a family If random attempt failed or families at max, then randomly choose existing family and attempt to join If unsuccesful, just take a surname and remove it from the list If at the end of the NPC loop there are families with only one member, randomly choose a non family member to join. If none available, remove from that family and make the family name just a surname */ //If there is room for a new family, attempt to make one if (families.Count < max_families) { //If attempt is succesful add the NPC to it and change their surname int r = Random.Range(0, 100); if (r > 60) { r = Random.Range(0, surnames.Count); string surname = surnames[r]; surnames.RemoveAt(r); Family family = new Family(surname); npc.family = family; families.Add(family); family.family_members.Add(npc); npc.surname = surname; if (npc.gender == Npc.Gender.Male) family.husband = npc; else family.wife = npc; } } //If there is room in an existing family, try to join it if (npc.surname == "") { foreach (Family family in families) { //If the family has room for children, or is missing a husband or wife and this NPC is the right gender, add to family if (family.family_members.Count < max_family_size && ((family.husband != null && family.wife != null) || (npc.gender == Npc.Gender.Male && family.husband == null) || (npc.gender == Npc.Gender.Female && family.wife == null))) { int r = Random.Range(0, 100); if (r > 30) { npc.family = family; family.family_members.Add(npc); npc.surname = family.family_name; if (family.husband != null && family.wife != null) { family.children.Add(npc); } else if (family.husband == null) { family.husband = npc; } else if (family.wife == null) { family.wife = npc; } break; } } } } //If not joined a family by this point, take a random surname if (npc.surname == "") { int i = Random.Range(0, surnames.Count); string randomSurname = surnames[i]; surnames.RemoveAt(i); npc.surname = randomSurname; npc.family = null; } } //IF there are any families with 1 member, add the first non-family npc to it. If none available, remove the family. for (int f = families.Count - 1; f >= 0; f--) { if (families[f].family_members.Count == 1) { Npc.Gender searchingFor; if (families[f].wife == null) searchingFor = Npc.Gender.Female; else searchingFor = Npc.Gender.Male; bool stillSearching = true; int i = 0; while (stillSearching == true && i < npcs.Count - 1) { if (npcs[i].family == null && npcs[i].gender == searchingFor) { npcs[i].family = families[f]; families[f].family_members.Add(npcs[i]); npcs[i].surname = families[f].family_name; if (searchingFor == Npc.Gender.Male) families[f].husband = npcs[i]; else families[f].wife = npcs[i]; Debug.Log("added " + npcs[i].firstname + "to the " + families[f].family_name + "family"); stillSearching = false; } i++; } if (stillSearching) { Debug.Log("No suitable npcs found, removing " + families[f].family_name + " family"); families[f].family_members[0].family = null; families.Remove(families[f]); } } } }