Files
Performance-Fish/Source/PerformanceFish/Hauling/StorageExtensions.cs
T
bbradson 20aebe4e83 Fix compatibility with Rimfactory's digital storage
760/768 being the limit and errors getting thrown when randomly overhauling are issues PRF independently has, with nothing else present too
2024-01-27 12:48:22 +01:00

45 lines
1.8 KiB
C#

// Copyright (c) 2023 bradson
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
namespace PerformanceFish.Hauling;
public static class StorageExtensions
{
public static int TrueItemsPerCell(this Thing slotGroupParent)
=> slotGroupParent.TrueItemsPerCell(slotGroupParent.TryGetLwmCompProperties());
public static int TrueItemsPerCell(this Thing slotGroupParent, CompProperties? lwmProps)
=> Math.Max(lwmProps == null
? 0
: Math.Max(LwmCompCacheValue.LwmMinNumberStacks!(lwmProps),
LwmCompCacheValue.LwmMaxNumberStacks!(lwmProps)),
slotGroupParent is Building building ? building.MaxItemsInCell : 1);
public static int TrueTotalSlots(this Thing slotGroupParent, CompProperties? lwmProps,
DefModExtension? rimfactoryExtension)
=> Math.Max(rimfactoryExtension == null ? 0 : RimfactoryExtensionCacheValue.Limit!(rimfactoryExtension),
slotGroupParent.TrueItemsPerCell(lwmProps) * slotGroupParent.SlotGroupCellCount());
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static CompProperties? TryGetLwmCompProperties(this Thing thing)
=> LwmCompCache.GetOrAdd(thing).CompProperties;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static DefModExtension? TryGetRimfactoryExtension(this Thing thing)
=> RimfactoryExtensionCache.GetOrAdd(thing).ModExtension;
public static int GetTotalSlots(this SlotGroup slotGroup) => slotGroup.GetTotalSlots(slotGroup.CellsList.Count);
public static int GetTotalSlots(this SlotGroup slotGroup, int cellCount)
=> slotGroup.parent is Building storage
? storage.TrueItemsPerCell() * cellCount
: cellCount;
static StorageExtensions()
{
LwmCompCacheValue.EnsureInitialized();
RimfactoryExtensionCacheValue.EnsureInitialized();
}
}