using System.Collections.Generic; using System.Linq; using Nullframes.Intrigues.Graph; namespace Nullframes.Intrigues { public class FamilyFlow { public static Dictionary> Parents; public static Dictionary> Childs; public static Dictionary> Partners; public static Dictionary> Families; private static Dictionary> memberNodes; private static List nodes; private static void Init() { Parents = new Dictionary>(); Childs = new Dictionary>(); Partners = new Dictionary>(); memberNodes = new Dictionary>(); Families = new Dictionary>(); nodes = new List(); foreach (var group in IM.IEDatabase.groupDataList.Where(g => g is FamilyGroupData) .OfType()) { var members = IM.IEDatabase.nodeDataList.Where(n => n is FamilyMemberData && n.GroupId == group.ID) .OfType().ToList(); memberNodes.Add(group.ID, members); nodes.AddRange(members); } } public static void LoadActors() { Init(); foreach (var familyGroup in memberNodes) { foreach (var member in familyGroup.Value) { var childOutput = member.Outputs.ElementAtOrDefault(0); //Child var partnerOutput = member.Outputs.ElementAtOrDefault(1); //Partner if (childOutput != null) { var childnodes = new List(); foreach (var nextNode in childOutput.DataCollection .Select(output => nodes.Find(n => n.ID == output.NextID)) .Where(nextNode => nextNode != null)) { childnodes.Add(nextNode); if (Parents.ContainsKey(nextNode.ActorID)) Parents[nextNode.ActorID].Add(member); else Parents.Add(nextNode.ActorID, new List() { { member } }); } if (childnodes.Count > 0) Childs.Add(member.ActorID, childnodes); } if (partnerOutput != null) { var partnerNodes = new List(); foreach (var nextNode in partnerOutput.DataCollection .Select(output => nodes.Find(n => n.ID == output.NextID)) .Where(nextNode => nextNode != null)) { partnerNodes.Add(nextNode); if (Partners.ContainsKey(nextNode.ActorID)) Partners[nextNode.ActorID].Add(member); else Partners.Add(nextNode.ActorID, new List() { { member } }); } if (partnerNodes.Count > 0) Partners.Add(member.ActorID, partnerNodes); } } if (IM.IEDatabase.groupDataList.FirstOrDefault(g => g is FamilyGroupData family && family.ID == familyGroup.Key) is FamilyGroupData fGroup) Families.Add(fGroup, familyGroup.Value); } } } }