示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
 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));
         }
     }
 }