private static void AddInheritedRelationships(FactionDatabase database, int factionID, List <int> visited, List <InheritedRelationship> list, List <int> subjectIDs) { if (database == null || visited.Contains(factionID)) { return; } visited.Add(factionID); var faction = database.GetFaction(factionID); if (faction != null) { for (int p = 0; p < faction.parents.Length; p++) { var parentID = faction.parents[p]; var parent = database.GetFaction(parentID); if (parent != null) { for (int r = 0; r < parent.relationships.Count; r++) { var relationship = parent.relationships[r]; if (relationship.inheritable) { var subject = database.GetFaction(relationship.factionID); if (subject != null) { list.Add(new InheritedRelationship(subject.name + " (" + parent.name + ")", relationship.affinity)); if (!subjectIDs.Contains(subject.id)) { subjectIDs.Add(subject.id); } } } } AddInheritedRelationships(database, parentID, visited, list, subjectIDs); } } } }
/// <summary> /// Draw a Love/Hate faction member gizmo based on the faction's color. /// </summary> public void OnDrawGizmos() { if (factionDatabase == null) { return; } var faction = factionDatabase.GetFaction(factionID); if (faction == null || faction.color >= Faction.GizmoIconNames.Length) { return; } Gizmos.DrawIcon(transform.position, Faction.GizmoIconNames[faction.color], true); }
/// <summary> /// Looks up a faction by its ID. /// </summary> /// <returns>The faction.</returns> /// <param name="factionID">Faction ID.</param> /// <param name="silent">If set to <c>true</c>, don't log warnings.</param> public Faction GetFaction(int factionID, bool silent) { Faction faction = null; if (m_factions.ContainsKey(factionID)) { // Get from cache: faction = m_factions[factionID]; } else { // Look up in database and update cache: faction = factionDatabase.GetFaction(factionID); if (faction != null) { m_factions.Add(factionID, faction); } } if (faction == null && !silent) { Debug.LogWarning("Love/Hate: Can't find faction with ID " + factionID, this); } return(faction); }
private static void AddAveragedRelationships(FactionDatabase database, int factionID, List <InheritedRelationship> list, List <int> subjectIDs) { if (database == null || list == null || subjectIDs == null) { return; } for (int i = 0; i < subjectIDs.Count; i++) { var subject = database.GetFaction(subjectIDs[i]); if (subject != null) { var affinity = database.GetAffinity(factionID, subject.id); list.Add(new InheritedRelationship(subject.name + " [inherited]", affinity)); } } }