Пример #1
0
        protected void AddRelationships(Dictionary <CustomPawn, Pawn> lookup, IEnumerable <CustomRelationship> relationships)
        {
            PawnGenerationRequest request = new PawnGenerationRequest();

            foreach (CustomRelationship r in RelationshipManager.ExplicitRelationships)
            {
                PawnRelationWorker worker = this.relationshipManager.FindPawnRelationWorker(r.def);
                if (worker.GetType().GetMethod("CreateRelation",
                                               BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly) == null)
                {
                    continue;
                }
                Pawn source = null;
                Pawn target = null;
                if (!lookup.TryGetValue(r.source, out source))
                {
                    Log.Warning("Prepare Carefully could not find source pawn when trying to create relationship (" + r.def.defName + "): " + r.source.Name);
                    continue;
                }
                if (!lookup.TryGetValue(r.target, out target))
                {
                    Log.Warning("Prepare Carefully could not find target pawn when trying to create relationship (" + r.def.defName + "): " + r.target.Name);
                    continue;
                }

                // TODO: If either of those lookups are failing, we're not tracking pawns properly
                // somewhere.  I've seen those lookups fail after deleting colonists (but not
                // consistently).  Should track down the root cause.

                worker.CreateRelation(source, target, ref request);
            }
        }
Пример #2
0
        public PawnRelationWorker FindPawnRelationWorker(PawnRelationDef def)
        {
            CarefullyPawnRelationDef carefullyDef = DefDatabase <CarefullyPawnRelationDef> .GetNamedSilentFail(def.defName);

            if (carefullyDef == null || carefullyDef.workerClass == null)
            {
                return(def.Worker);
            }
            else
            {
                PawnRelationWorker worker = carefullyDef.Worker;
                if (worker != null)
                {
                    return(carefullyDef.Worker);
                }
                else
                {
                    return(def.Worker);
                }
            }
        }
Пример #3
0
        public PawnRelationWorker FindPawnRelationWorker(PawnRelationDef def)
        {
            CarefullyPawnRelationDef carefullyDef = DefDatabase <CarefullyPawnRelationDef> .GetNamedSilentFail(def.defName);

            if (carefullyDef == null || carefullyDef.workerClass == null)
            {
                return(def.Worker);
            }
            else
            {
                PawnRelationWorker worker = carefullyDef.Worker;
                if (worker != null)
                {
                    //Log.Message("Returned carefully worker for " + def.defName + ", " + worker.GetType().FullName);
                    return(carefullyDef.Worker);
                }
                else
                {
                    return(def.Worker);
                }
            }
        }