1.5, added stuff, fixed stuff
- mod icon - fixes for new vanilla clipping issues - GenClosest optimization improving repairing, wardening, tending jobs - caching for new ListerBuildings methods - DynamicDrawManager single threading - Type.GetFields caching - StatParts analyzer category - removed duplicate steam warning and optionally window - added exception handling for debug menu, incidentworker, Graphic_Multi, InitializeComps, making all those now log what mod broke and not cause black screens or whatever
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
// 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/.
|
||||
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace PerformanceFish.Hauling;
|
||||
|
||||
public class StorageDistrict
|
||||
@@ -93,11 +95,18 @@ public class StorageDistrict
|
||||
public void RemoveThing(Thing thing)
|
||||
{
|
||||
if (!StoredThingsOfDef(thing.def).Remove(thing))
|
||||
ThrowHelper.ThrowInvalidOperationException();
|
||||
{
|
||||
ThrowForInvalidRemovalAttempt(thing);
|
||||
}
|
||||
|
||||
FreeSlots = TotalSlots - --_storedThingCount;
|
||||
}
|
||||
|
||||
[DoesNotReturn]
|
||||
private void ThrowForInvalidRemovalAttempt(Thing thing)
|
||||
=> ThrowHelper.ThrowInvalidOperationException($"Failed removing thing '{
|
||||
thing}' from district at cells '{Cells.ToStringSafeEnumerable()}'");
|
||||
|
||||
public List<Thing> StoredThingsOfDef(ThingDef def) => _storedThingsByDef.GetOrAdd(def.shortHash);
|
||||
|
||||
public bool CapacityAllows(Thing t) => FreeSlots > 0 || StoredThingsOfDef(t.def).ContainsThingStackableWith(t);
|
||||
|
||||
@@ -206,7 +206,7 @@ public sealed class StorageSettingsPatches : ClassWithFishPatches
|
||||
public void Update(Thing thing, bool allowedToAccept)
|
||||
{
|
||||
_value = allowedToAccept.AsInt();
|
||||
_nextUpdateTick = TickHelper.Add(512, thing.thingIDNumber, 128);
|
||||
_nextUpdateTick = TickHelper.Add(2048, thing.thingIDNumber, 512);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,11 +141,16 @@ public sealed class StoreUtilityPrepatches : ClassWithFishPrepatches
|
||||
public override void Transpiler(ILProcessor ilProcessor, ModuleDefinition module)
|
||||
=> ilProcessor.ReplaceBodyWith(ReplacementBody);
|
||||
|
||||
public static void ReplacementBody(Thing t, Pawn carrier, Map map, Faction faction, SlotGroup? slotGroup,
|
||||
public static void ReplacementBody(Thing t, Pawn carrier, Map map, Faction faction,
|
||||
#if V1_4
|
||||
SlotGroup? slotGroup,
|
||||
#else
|
||||
ISlotGroup? slotGroup,
|
||||
#endif
|
||||
bool needAccurateResult, ref IntVec3 closestSlot, ref float closestDistSquared,
|
||||
ref StoragePriority foundPriority)
|
||||
{
|
||||
if (slotGroup == null || !slotGroup.parent.Accepts(t) || !CapacityAllows(slotGroup, t))
|
||||
if (slotGroup == null || !slotGroup.Settings.AllowedToAccept(t) || !CapacityAllows(slotGroup, t))
|
||||
return;
|
||||
|
||||
var thingPosition = t.SpawnedOrAnyParentSpawned ? t.PositionHeld : carrier.PositionHeld;
|
||||
@@ -194,9 +199,18 @@ public sealed class StoreUtilityPrepatches : ClassWithFishPrepatches
|
||||
}
|
||||
}
|
||||
|
||||
#if V1_4
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static StorageDistrict[] GetDistricts(SlotGroup slotGroup) => slotGroup.Districts();
|
||||
// wrapper for analyzer compatibility, as it otherwise throws on ref returns
|
||||
#else
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static StorageDistrict[] GetDistricts(ISlotGroup iSlotGroup)
|
||||
=> iSlotGroup is SlotGroup slotGroup ? slotGroup.Districts() : StorageDistrict.GetDefaultArray();
|
||||
#endif
|
||||
|
||||
public static bool CapacityAllows(ISlotGroup iSlotGroup, Thing t)
|
||||
=> iSlotGroup is not SlotGroup slotGroup || CapacityAllows(slotGroup, t);
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
public static bool CapacityAllows(SlotGroup slotGroup, Thing t)
|
||||
@@ -218,9 +232,9 @@ public sealed class StoreUtilityPrepatches : ClassWithFishPrepatches
|
||||
public sealed class TryFindBestBetterStoreCellForPatch : FishPrepatch
|
||||
{
|
||||
public override string? Description { get; }
|
||||
= "Optimizes a loop in the method to make use of cached storage priorities for fewer comparisons against "
|
||||
+ "those. Also removes haulables from ListerHaulables if the found best store cell turns out to be the "
|
||||
+ "current cell";
|
||||
= "Optimizes a loop in the method to treat storage groups as proper groups without duplicate checks and to "
|
||||
+ "make use of cached storage priorities for fewer comparisons against those. Also removes haulables from "
|
||||
+ "ListerHaulables if the found best store cell turns out to be the current cell";
|
||||
|
||||
public override MethodBase TargetMethodBase { get; } = methodof(StoreUtility.TryFindBestBetterStoreCellFor);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user