r2mods/ilspy_dump/ror2_csproj/RoR2.Items/RandomlyLunarUtils.cs

83 lines
2.3 KiB
C#

using System.Collections.Generic;
namespace RoR2.Items;
public static class RandomlyLunarUtils
{
private const float replacePercentagePerStack = 0.05f;
public static PickupIndex CheckForLunarReplacement(PickupIndex pickupIndex, Xoroshiro128Plus rng)
{
PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
if (CanReplace(pickupDef))
{
int itemCountGlobal = Util.GetItemCountGlobal(DLC1Content.Items.RandomlyLunar.itemIndex, requiresAlive: false, requiresConnected: false);
if (itemCountGlobal > 0)
{
List<PickupIndex> list = null;
if (pickupDef.itemIndex != ItemIndex.None)
{
list = Run.instance.availableLunarItemDropList;
}
else if (pickupDef.equipmentIndex != EquipmentIndex.None)
{
list = Run.instance.availableLunarEquipmentDropList;
}
if (list != null && list.Count > 0 && rng.nextNormalizedFloat < 0.05f * (float)itemCountGlobal)
{
int index = rng.RangeInt(0, list.Count);
return list[index];
}
}
}
return pickupIndex;
}
public static void CheckForLunarReplacementUniqueArray(PickupIndex[] pickupIndices, Xoroshiro128Plus rng)
{
int itemCountGlobal = Util.GetItemCountGlobal(DLC1Content.Items.RandomlyLunar.itemIndex, requiresAlive: false, requiresConnected: false);
if (itemCountGlobal <= 0)
{
return;
}
List<PickupIndex> list = null;
List<PickupIndex> list2 = null;
for (int i = 0; i < pickupIndices.Length; i++)
{
PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndices[i]);
if (!CanReplace(pickupDef) || !(rng.nextNormalizedFloat < 0.05f * (float)itemCountGlobal))
{
continue;
}
List<PickupIndex> list3 = null;
if (pickupDef.itemIndex != ItemIndex.None)
{
if (list == null)
{
list = new List<PickupIndex>(Run.instance.availableLunarItemDropList);
Util.ShuffleList(list, rng);
}
list3 = list;
}
else if (pickupDef.equipmentIndex != EquipmentIndex.None)
{
if (list2 == null)
{
list2 = new List<PickupIndex>(Run.instance.availableLunarEquipmentDropList);
Util.ShuffleList(list2, rng);
}
list3 = list2;
}
if (list3 != null && list3.Count > 0)
{
pickupIndices[i] = list3[i % list3.Count];
}
}
}
public static bool CanReplace(PickupDef pickupDef)
{
return !(pickupDef?.isLunar ?? true);
}
}