コード例 #1
0
 static void Prefix(TileTemperaturesComp __instance)
 {
     if (Multiplayer.InInterface && __instance != Multiplayer.WorldComp.uiTemperatures)
     {
         Multiplayer.WorldComp.uiTemperatures.WorldComponentTick();
     }
 }
コード例 #2
0
 public static bool ClearCaches(TileTemperaturesComp __instance)
 {
     tileCount = Find.WorldGrid.TilesCount;
     cache     = new CachedTileTemperatureData[tileCount];
     usedSlots = new int[tileCount];
     return(false);
 }
コード例 #3
0
 static void Postfix(TileTemperaturesComp __instance, int tile, bool __state)
 {
     if (__state && Multiplayer.ShouldSync)
     {
         Array.Resize(ref __instance.cache[tile].twelfthlyTempAverages, 13);
     }
 }
コード例 #4
0
 public static bool SeasonAndOutdoorTemperatureAcceptableFor(TileTemperaturesComp __instance, ref bool __result, int tile, ThingDef animalRace)
 {
     if (__instance.SeasonAcceptableFor(tile, animalRace))
     {
         __result = __instance.OutdoorTemperatureAcceptableFor(tile, animalRace);
         return(false);
     }
     __result = false;
     return(false);
 }
コード例 #5
0
        static bool Prefix(TileTemperaturesComp __instance, int tile, ref TileTemperaturesComp.CachedTileTemperatureData __result)
        {
            if (Multiplayer.InInterface && __instance != Multiplayer.WorldComp.uiTemperatures)
            {
                __result = Multiplayer.WorldComp.uiTemperatures.RetrieveCachedData(tile);
                return(false);
            }

            return(true);
        }
コード例 #6
0
        private static CachedTileTemperatureData RetrieveCachedData2(TileTemperaturesComp __instance, int tile)
        {
            if (cache[tile] != null)
            {
                return(cache[tile]);
            }

            cache[tile] = new CachedTileTemperatureData(tile);
            usedSlots[(Interlocked.Increment(ref endIndex) - 1) % tileCount] = tile;
            return(cache[tile]);
        }
コード例 #7
0
        public static bool OutdoorTemperatureAcceptableFor(TileTemperaturesComp __instance, ref bool __result, int tile, ThingDef animalRace)
        {
            float outdoorTemp = __instance.GetOutdoorTemp(tile);

            if (outdoorTemp > animalRace.GetStatValueAbstract(StatDefOf.ComfyTemperatureMin))
            {
                __result = outdoorTemp < animalRace.GetStatValueAbstract(StatDefOf.ComfyTemperatureMax);
                return(false);
            }
            __result = false;
            return(false);
        }
コード例 #8
0
        static void Prefix(TileTemperaturesComp __instance, int tile, ref bool __state)
        {
            if (Multiplayer.Client == null)
            {
                return;
            }

            var cache = __instance.cache;

            __state = cache[tile] == null;

            if (!Multiplayer.ShouldSync && cache[tile]?.twelfthlyTempAverages.Length == 13)
            {
                cache[tile] = null;
                __instance.usedSlots.Remove(tile);
            }
        }
コード例 #9
0
        static bool Prefix(ref TileTemperaturesComp __instance)
        {
            for (int index = 0; index < __instance.usedSlots.Count; ++index)
            {
                __instance.cache[__instance.usedSlots[index]].CheckCache();
            }
            int modvalue = Find.TickManager.TicksGame % 300;

            if ((modvalue < 84 &&
                 modvalue >= 84 + RefcellRespeedConfig.currentTimeMultiplier) ||
                !__instance.usedSlots.Any <int>())
            {
                return(false);
            }
            __instance.cache[__instance.usedSlots[0]] = (TileTemperaturesComp.CachedTileTemperatureData)null;
            __instance.usedSlots.RemoveAt(0);
            return(false);
        }
コード例 #10
0
        public static bool WorldComponentTick(TileTemperaturesComp __instance)
        {
            for (int i = startIndex; i < endIndex; i++)
            {
                if (cache[usedSlots[i % tileCount]] == null)
                {
                    Interlocked.Increment(ref startIndex);
                }
                else
                {
                    cache[usedSlots[i % tileCount]].CheckCache();
                }
            }

            if (Find.TickManager.TicksGame % 300 == 84 && startIndex < endIndex)
            {
                cache[usedSlots[(Interlocked.Increment(ref startIndex) - 1) % tileCount]] = null;
            }
            return(false);
        }
コード例 #11
0
 public static bool AverageTemperatureForTwelfth(TileTemperaturesComp __instance, ref float __result, int tile, Twelfth twelfth)
 {
     __result = RetrieveCachedData2(__instance, tile).AverageTemperatureForTwelfth(twelfth);
     return(false);
 }
コード例 #12
0
 public static bool OffsetFromDailyRandomVariation(TileTemperaturesComp __instance, ref float __result, int tile, int absTick)
 {
     __result = RetrieveCachedData2(__instance, tile).OffsetFromDailyRandomVariation(absTick);
     return(false);
 }
コード例 #13
0
 public static bool OutdoorTemperatureAt(TileTemperaturesComp __instance, ref float __result, int tile, int absTick)
 {
     __result = RetrieveCachedData2(__instance, tile).OutdoorTemperatureAt(absTick);
     return(false);
 }
コード例 #14
0
 public static bool GetSeasonalTemp(TileTemperaturesComp __instance, ref float __result, int tile)
 {
     __result = RetrieveCachedData2(__instance, tile).GetSeasonalTemp();
     return(false);
 }
コード例 #15
0
 public static bool WorldComponentTick(TileTemperaturesComp __instance)
 {
     if (!cache2.TryGetValue(__instance, out CachedTileTemperatureData2[] cache3))