Ejemplo n.º 1
0
        public static bool Remove(ListerThings __instance, Thing t)
        {
            if (!ListerThings.EverListable(t.def, __instance.use))
            {
                return(false);
            }
            List <Thing> ld = listsByDef(__instance)[t.def];

            lock (ld)             //ADDED
            {
                ld.Remove(t);
            }

            ThingRequestGroup[] allGroups = ThingListGroupHelper.AllGroups;
            for (int index = 0; index < allGroups.Length; ++index)
            {
                ThingRequestGroup group = allGroups[index];
                if ((__instance.use != ListerThingsUse.Region || group.StoreInRegion()) && group.Includes(t.def))
                {
                    List <Thing> tl = listsByGroup(__instance)[index];
                    lock (tl)                     //ADDED
                    {
                        int li = tl.LastIndexOf(t);
                        if (li > -1)
                        {
                            tl.RemoveAt(li);
                        }
                    }
                }
            }
            return(false);
        }
        public static bool RegisterInRegions(Thing thing, Map map)
        {
            if (!ListerThings.EverListable(thing.def, ListerThingsUse.Region))
            {
                return(false);
            }
            int tID = Thread.CurrentThread.ManagedThreadId;

            if (!tmpRegionsLists.TryGetValue(tID, out List <Region> tmpRegions))
            {
                tmpRegions           = new List <Region>();
                tmpRegionsLists[tID] = tmpRegions;
            }
            else
            {
                tmpRegions.Clear();
            }
            RegionListersUpdater.GetTouchableRegions(thing, map, tmpRegions, false);
            for (int i = 0; i < tmpRegions.Count; i++)
            {
                ListerThings listerThings = tmpRegions[i].ListerThings;
                lock (listerThings)
                {
                    if (!listerThings.Contains(thing))
                    {
                        listerThings.Add(thing);
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 3
0
        public static bool Add(ListerThings __instance, Thing t)
        {
            if (!ListerThings.EverListable(t.def, __instance.use))
            {
                return(false);
            }
            List <Thing> thingList1;

            if (!listsByDef(__instance).TryGetValue(t.def, out thingList1))
            {
                thingList1 = new List <Thing>();
                listsByDef(__instance).Add(t.def, thingList1);
            }
            lock (thingList1)
            {
                thingList1.Add(t);
            }
            foreach (ThingRequestGroup allGroup in ThingListGroupHelper.AllGroups)
            {
                if ((__instance.use != ListerThingsUse.Region || allGroup.StoreInRegion()) && allGroup.Includes(t.def))
                {
                    List <Thing> thingList2 = listsByGroup(__instance)[(int)allGroup];
                    if (thingList2 == null)
                    {
                        thingList2 = new List <Thing>();
                        listsByGroup(__instance)[(int)allGroup] = thingList2;
                    }
                    lock (thingList2)
                    {
                        thingList2.Add(t);
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
        public static bool Remove(ListerThings __instance, Thing t)
        {
            ThingDef thingDef = t.def;

            if (!ListerThings.EverListable(thingDef, __instance.use))
            {
                return(false);
            }
            lock (__instance)
            {
                List <Thing> newListsByDef = new List <Thing>(listsByDef(__instance)[thingDef]);
                newListsByDef.Remove(t);
                listsByDef(__instance)[thingDef] = newListsByDef;
            }

            ThingRequestGroup[] allGroups = ThingListGroupHelper.AllGroups;
            for (int i = 0; i < allGroups.Length; i++)
            {
                ThingRequestGroup group = allGroups[i];
                if ((__instance.use != ListerThingsUse.Region || group.StoreInRegion()) && group.Includes(thingDef))
                {
                    lock (__instance)
                    {
                        List <Thing> newListsByGroup = new List <Thing>(listsByGroup(__instance)[i]);
                        newListsByGroup.Remove(t);
                        listsByGroup(__instance)[i] = newListsByGroup;
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 5
0
 static void Postfix(ListerThings __instance, Thing t)
 {
     if (Multiplayer.Client == null)
     {
         return;
     }
     if (t.def.category == ThingCategory.Item && ListerThings.EverListable(t.def, __instance.use))
     {
         Multiplayer.WorldComp.DirtyColonyTradeForMap(t.Map);
     }
 }
        public static void RegisterInRegions(Thing thing, Map map)
        {
            ThingDef def = thing.def;

            if (!ListerThings.EverListable(def, ListerThingsUse.Region))
            {
                return;
            }
            newRegionListersUpdater.GetTouchableRegions(thing, map, newRegionListersUpdater.tmpRegions, false);
            for (int i = 0; i < newRegionListersUpdater.tmpRegions.Count; i++)
            {
                ListerThings listerThings = newRegionListersUpdater.tmpRegions[i].ListerThings;
                if (!listerThings.Contains(thing))
                {
                    listerThings.Add(thing);
                }
            }
        }
Ejemplo n.º 7
0
        public static void DeregisterInRegions(Thing thing, Map map)
        {
            ThingDef def = thing.def;

            if (!ListerThings.EverListable(def, ListerThingsUse.Region))
            {
                return;
            }
            GetTouchableRegions(thing, map, tmpRegions, true);
            for (int i = 0; i < tmpRegions.Count; i++)
            {
                ListerThings listerThings = tmpRegions[i].ListerThings;
                if (listerThings.Contains(thing))
                {
                    listerThings.Remove(thing);
                }
            }
            tmpRegions.Clear();
        }
Ejemplo n.º 8
0
        public static bool DeregisterInRegions(Thing thing, Map map)
        {
            if (!ListerThings.EverListable(thing.def, ListerThingsUse.Region))
            {
                return(false);
            }
            List <Region> tmpRegions = new List <Region>();

            RegionListersUpdater.GetTouchableRegions(thing, map, tmpRegions, true);
            for (int i = 0; i < tmpRegions.Count; i++)
            {
                ListerThings listerThings = tmpRegions[i].ListerThings;
                lock (listerThings)
                {
                    if (listerThings.Contains(thing))
                    {
                        listerThings.Remove(thing);
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 9
0
        public static bool Add(ListerThings __instance, Thing t)
        {
            ThingDef thingDef = t.def;

            if (!ListerThings.EverListable(thingDef, __instance.use))
            {
                return(false);
            }

            lock (__instance)
            {
                if (!listsByDef(__instance).TryGetValue(thingDef, out List <Thing> value))
                {
                    value = new List <Thing>();
                    listsByDef(__instance).Add(t.def, value);
                }
                value.Add(t);
            }

            ThingRequestGroup[] allGroups = ThingListGroupHelper.AllGroups;
            foreach (ThingRequestGroup thingRequestGroup in allGroups)
            {
                if ((__instance.use != ListerThingsUse.Region || thingRequestGroup.StoreInRegion()) && thingRequestGroup.Includes(thingDef))
                {
                    lock (__instance)
                    {
                        List <Thing> list = listsByGroup(__instance)[(uint)thingRequestGroup];
                        if (list == null)
                        {
                            list = new List <Thing>();
                            listsByGroup(__instance)[(uint)thingRequestGroup] = list;
                        }
                        list.Add(t);
                    }
                }
            }
            return(false);
        }