public static IEnumerable <Command> BuildFacilityCommands(BuildableDef building)
        {
            ThingDef thingDef = building as ThingDef;

            if (thingDef == null)
            {
                yield break;
            }
            CompProperties_AffectedByFacilities affectedByFacilities = thingDef.GetCompProperties <CompProperties_AffectedByFacilities>();

            if (affectedByFacilities == null)
            {
                yield break;
            }
            for (int i = 0; i < affectedByFacilities.linkableFacilities.Count; i++)
            {
                ThingDef         facility = affectedByFacilities.linkableFacilities[i];
                Designator_Build des      = BuildCopyCommandUtility.FindAllowedDesignator(facility, true);
                if (des != null)
                {
                    yield return(des);
                }
            }
            yield break;
        }
        public static IEnumerable <Command> BuildFacilityCommands(BuildableDef building)
        {
            ThingDef thingDef = building as ThingDef;

            if (thingDef != null)
            {
                CompProperties_AffectedByFacilities affectedByFacilities = thingDef.GetCompProperties <CompProperties_AffectedByFacilities>();
                if (affectedByFacilities != null)
                {
                    int i = 0;
                    Designator_Build des;
                    while (true)
                    {
                        if (i >= affectedByFacilities.linkableFacilities.Count)
                        {
                            yield break;
                        }
                        ThingDef facility = affectedByFacilities.linkableFacilities[i];
                        des = BuildCopyCommandUtility.FindAllowedDesignator(facility);
                        if (des != null)
                        {
                            break;
                        }
                        i++;
                    }
                    yield return((Command)des);

                    /*Error: Unable to find new state assignment for yield return*/;
                }
            }
        }
        public static IEnumerable <Thing> PotentialThingsToLinkTo(ThingDef myDef, IntVec3 myPos, Rot4 myRot, Map map)
        {
            _003CPotentialThingsToLinkTo_003Ec__Iterator1 _003CPotentialThingsToLinkTo_003Ec__Iterator = (_003CPotentialThingsToLinkTo_003Ec__Iterator1) /*Error near IL_0034: stateMachine*/;

            CompAffectedByFacilities.alreadyReturnedCount.Clear();
            CompProperties_AffectedByFacilities myProps = myDef.GetCompProperties <CompProperties_AffectedByFacilities>();

            if (myProps.linkableFacilities != null)
            {
                IEnumerable <Thing> candidates = Enumerable.Empty <Thing>();
                for (int i = 0; i < myProps.linkableFacilities.Count; i++)
                {
                    candidates = candidates.Concat(map.listerThings.ThingsOfDef(myProps.linkableFacilities[i]));
                }
                Vector3 myTrueCenter = Gen.TrueCenter(myPos, myRot, myDef.size, myDef.Altitude);
                IOrderedEnumerable <Thing> sortedCandidates = (from x in candidates
                                                               orderby Vector3.Distance(myTrueCenter, x.TrueCenter())
                                                               select x).ThenBy(delegate(Thing x)
                {
                    IntVec3 position2 = x.Position;
                    return(position2.x);
                }).ThenBy(delegate(Thing x)
                {
                    IntVec3 position = x.Position;
                    return(position.z);
                });
                foreach (Thing item in sortedCandidates)
                {
                    if (CompAffectedByFacilities.CanPotentiallyLinkTo_Static(item, myDef, myPos, myRot))
                    {
                        CompProperties_Facility facilityProps = item.def.GetCompProperties <CompProperties_Facility>();
                        if (CompAffectedByFacilities.alreadyReturnedCount.ContainsKey(item.def))
                        {
                            if (CompAffectedByFacilities.alreadyReturnedCount[item.def] < facilityProps.maxSimultaneous)
                            {
                                goto IL_0232;
                            }
                            continue;
                        }
                        CompAffectedByFacilities.alreadyReturnedCount.Add(item.def, 0);
                        goto IL_0232;
                    }
                    continue;
IL_0232:
                    Dictionary <ThingDef, int> dictionary;
                    ThingDef def;
                    (dictionary = CompAffectedByFacilities.alreadyReturnedCount)[def = item.def] = dictionary[def] + 1;
                    yield return(item);

                    /*Error: Unable to find new state assignment for yield return*/;
                }
            }
            yield break;
IL_02b1:
            /*Error near IL_02b2: Unexpected return in MoveNext()*/;
        }
        public static IEnumerable <Thing> PotentialThingsToLinkTo(ThingDef myDef, IntVec3 myPos, Rot4 myRot, Map map)
        {
            CompAffectedByFacilities.alreadyReturnedCount.Clear();
            CompProperties_AffectedByFacilities myProps = myDef.GetCompProperties <CompProperties_AffectedByFacilities>();

            if (myProps.linkableFacilities == null)
            {
                yield break;
            }
            IEnumerable <Thing> candidates = Enumerable.Empty <Thing>();

            for (int i = 0; i < myProps.linkableFacilities.Count; i++)
            {
                candidates = candidates.Concat(map.listerThings.ThingsOfDef(myProps.linkableFacilities[i]));
            }
            Vector3 myTrueCenter = GenThing.TrueCenter(myPos, myRot, myDef.size, myDef.Altitude);
            IOrderedEnumerable <Thing> sortedCandidates = from x in candidates
                                                          orderby Vector3.Distance(myTrueCenter, x.TrueCenter()), x.Position.x, x.Position.z
            select x;

            foreach (Thing th in sortedCandidates)
            {
                if (CompAffectedByFacilities.CanPotentiallyLinkTo_Static(th, myDef, myPos, myRot))
                {
                    CompProperties_Facility facilityProps = th.def.GetCompProperties <CompProperties_Facility>();
                    if (CompAffectedByFacilities.alreadyReturnedCount.ContainsKey(th.def))
                    {
                        if (CompAffectedByFacilities.alreadyReturnedCount[th.def] >= facilityProps.maxSimultaneous)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        CompAffectedByFacilities.alreadyReturnedCount.Add(th.def, 0);
                    }
                    Dictionary <ThingDef, int> dictionary;
                    ThingDef def;
                    (dictionary = CompAffectedByFacilities.alreadyReturnedCount)[def = th.def] = dictionary[def] + 1;
                    yield return(th);
                }
            }
            yield break;
        }
        public static IEnumerable <Thing> PotentialThingsToLinkTo(ThingDef myDef, IntVec3 myPos, Rot4 myRot, Map map)
        {
            alreadyReturnedCount.Clear();
            CompProperties_AffectedByFacilities compProperties = myDef.GetCompProperties <CompProperties_AffectedByFacilities>();

            if (compProperties.linkableFacilities == null)
            {
                yield break;
            }
            IEnumerable <Thing> enumerable = Enumerable.Empty <Thing>();

            for (int i = 0; i < compProperties.linkableFacilities.Count; i++)
            {
                enumerable = enumerable.Concat(map.listerThings.ThingsOfDef(compProperties.linkableFacilities[i]));
            }
            Vector3 myTrueCenter = GenThing.TrueCenter(myPos, myRot, myDef.size, myDef.Altitude);
            IOrderedEnumerable <Thing> orderedEnumerable = from x in enumerable
                                                           orderby Vector3.Distance(myTrueCenter, x.TrueCenter()), x.Position.x, x.Position.z
            select x;

            foreach (Thing item in orderedEnumerable)
            {
                if (!CanPotentiallyLinkTo_Static(item, myDef, myPos, myRot))
                {
                    continue;
                }
                CompProperties_Facility compProperties2 = item.def.GetCompProperties <CompProperties_Facility>();
                if (alreadyReturnedCount.ContainsKey(item.def))
                {
                    if (alreadyReturnedCount[item.def] >= compProperties2.maxSimultaneous)
                    {
                        continue;
                    }
                }
                else
                {
                    alreadyReturnedCount.Add(item.def, 0);
                }
                alreadyReturnedCount[item.def]++;
                yield return(item);
            }
        }
Esempio n. 6
0
        public override void ResolveReferences(ThingDef parentDef)
        {
            linkableBuildings = new List <ThingDef>();
            List <ThingDef> allDefsListForReading = DefDatabase <ThingDef> .AllDefsListForReading;

            for (int i = 0; i < allDefsListForReading.Count; i++)
            {
                CompProperties_AffectedByFacilities compProperties = allDefsListForReading[i].GetCompProperties <CompProperties_AffectedByFacilities>();
                if (compProperties != null && compProperties.linkableFacilities != null)
                {
                    for (int j = 0; j < compProperties.linkableFacilities.Count; j++)
                    {
                        if (compProperties.linkableFacilities[j] == parentDef)
                        {
                            linkableBuildings.Add(allDefsListForReading[i]);
                            break;
                        }
                    }
                }
            }
        }
        public override void ResolveReferences(ThingDef parentDef)
        {
            this.linkableBuildings = new List <ThingDef>();
            List <ThingDef> allDefsListForReading = DefDatabase <ThingDef> .AllDefsListForReading;

            for (int i = 0; i < allDefsListForReading.Count; i++)
            {
                CompProperties_AffectedByFacilities compProperties = allDefsListForReading[i].GetCompProperties <CompProperties_AffectedByFacilities>();
                if (compProperties != null && compProperties.linkableFacilities != null)
                {
                    int num = 0;
                    while (num < compProperties.linkableFacilities.Count)
                    {
                        if (compProperties.linkableFacilities[num] != parentDef)
                        {
                            num++;
                            continue;
                        }
                        this.linkableBuildings.Add(allDefsListForReading[i]);
                        break;
                    }
                }
            }
        }