Skip to content

Commit

Permalink
Merge pull request #43 from Synthesis-Collective/42-implement-runtime…
Browse files Browse the repository at this point in the history
…-build-cache

runtime-"cache" performance improvement
  • Loading branch information
EzioTheDeadPoet authored Dec 24, 2024
2 parents ddefde9 + 2a0695e commit 1de313a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 11 deletions.
11 changes: 9 additions & 2 deletions SynthesisRPGLoot/Analyzers/ArmorAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ public ArmorAnalyzer(IPatcherState<ISkyrimMod, ISkyrimModGetter> state,
{
ChosenRpgEnchantEffects[i] = new();
}

GeneratedItemCache = new();
GeneratedLeveledItemsCache = new();
}

protected override void AnalyzeGear()
Expand Down Expand Up @@ -178,7 +181,7 @@ protected override FormKey EnchantItem(ResolvedListItem<IArmorGetter> item, int
var newArmorEditorId = EditorIdPrefix + RarityClasses[rarity].Label.ToUpper() + "_" +
itemName +
"_of_" + GetEnchantmentsStringForName(effects, true);
if (State.LinkCache.TryResolve<IArmorGetter>(newArmorEditorId, out var armorGetter))
if (GeneratedItemCache.TryGetValue(newArmorEditorId, out var armorGetter))
{
return armorGetter.FormKey;
}
Expand All @@ -198,6 +201,8 @@ protected override FormKey EnchantItem(ResolvedListItem<IArmorGetter> item, int
newArmor.Keywords?.Add(Skyrim.Keyword.MagicDisallowEnchanting);
}

GeneratedItemCache.Add(newArmor.EditorID, newArmor);

if (Program.Settings.GeneralSettings.LogGeneratedItems)
Console.WriteLine($"Generated {newArmor.Name}");

Expand All @@ -206,7 +211,7 @@ protected override FormKey EnchantItem(ResolvedListItem<IArmorGetter> item, int
else
{
var newArmorEditorId = EditorIdPrefix + item.Resolved.EditorID;
if (State.LinkCache.TryResolve<IArmorGetter>(newArmorEditorId, out var armorGetter))
if (GeneratedItemCache.TryGetValue(newArmorEditorId, out var armorGetter))
{
return State.PatchMod.Armors.GetOrAddAsOverride(armorGetter).FormKey;
}
Expand All @@ -219,6 +224,8 @@ protected override FormKey EnchantItem(ResolvedListItem<IArmorGetter> item, int
? itemName
: RarityClasses[rarity].Label + " " + itemName;

GeneratedItemCache.Add(newArmor.EditorID, newArmor);

if (Program.Settings.GeneralSettings.LogGeneratedItems)
Console.WriteLine($"Generated {newArmor.Name}");

Expand Down
17 changes: 10 additions & 7 deletions SynthesisRPGLoot/Analyzers/GearAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public abstract class GearAnalyzer<TType>

protected string ItemTypeDescriptor;

protected Dictionary<string, ILeveledItemGetter> GeneratedLeveledItemsCache { get; init; }

protected Dictionary<string, TType> GeneratedItemCache { get; init; }

public void Analyze()
{
Expand Down Expand Up @@ -157,7 +160,7 @@ public void Generate()
var levelForName = ench.Entry.Data.Level;
var topLevelListEditorId = $"HAL_TOP_LList_{ench.Resolved.EditorID}_Level_{levelForName}";
LeveledItem topLevelList;
if (State.LinkCache.TryResolve<ILeveledItemGetter>(topLevelListEditorId, out var topLeveledListGetter))
if (GeneratedLeveledItemsCache.TryGetValue(topLevelListEditorId, out var topLeveledListGetter))
{
topLevelList = State.PatchMod.LeveledItems.GetOrAddAsOverride(topLeveledListGetter);
}
Expand All @@ -168,6 +171,8 @@ public void Generate()
topLevelList.Entries = [];
topLevelList.EditorID = topLevelListEditorId;
topLevelList.Flags = GetLeveledItemFlags();

GeneratedLeveledItemsCache.Add(topLevelList.EditorID,topLevelList);

for (var i = 0; i < GearSettings.BaseItemChanceWeight; i++)
{
Expand All @@ -183,7 +188,7 @@ public void Generate()
var leveledItemEditorId =
$"HAL_SUB_LList_{rarityClass.Label}_{ench.Resolved.EditorID}_Level_{levelForName}";
LeveledItem leveledItem;
if (State.LinkCache.TryResolve<ILeveledItemGetter>(leveledItemEditorId,
if (GeneratedLeveledItemsCache.TryGetValue(leveledItemEditorId,
out var leveledItemGetter))
{
leveledItem = State.PatchMod.LeveledItems.GetOrAddAsOverride(leveledItemGetter);
Expand All @@ -195,6 +200,8 @@ public void Generate()
leveledItem.Entries = [];
leveledItem.EditorID = leveledItemEditorId;
leveledItem.Flags = GetLeveledItemFlags();

GeneratedLeveledItemsCache[leveledItem.EditorID] = leveledItem;

for (var i = 0; i < VarietyCountPerRarity; i++)
{
Expand Down Expand Up @@ -247,11 +254,6 @@ protected FormKey GenerateEnchantment(int rarity)
var objectEffectEditorId = EditorIdPrefix + "ENCH_" + RarityClasses[rarity].Label.ToUpper() + "_" +
GetEnchantmentsStringForName(effects, true);

if (State.LinkCache.TryResolve<IObjectEffectGetter>(objectEffectEditorId, out var objectEffectGetter))
{
return objectEffectGetter.FormKey;
}

var newObjectEffectGetter = State.PatchMod.ObjectEffects.AddNewLocking(State.PatchMod.GetNextFormKey());
newObjectEffectGetter.DeepCopyIn(effects.First().Enchantment);
newObjectEffectGetter.EditorID = objectEffectEditorId;
Expand All @@ -264,6 +266,7 @@ protected FormKey GenerateEnchantment(int rarity)
ChosenRpgEnchants[rarity].Add(RarityClasses[rarity].Label + " " + GetEnchantmentsStringForName(effects),
newObjectEffectGetter.FormKey);
ChosenRpgEnchantEffects[rarity].Add(newObjectEffectGetter.FormKey, effects);

return newObjectEffectGetter.FormKey;
}

Expand Down
12 changes: 10 additions & 2 deletions SynthesisRPGLoot/Analyzers/WeaponAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ public WeaponAnalyzer(IPatcherState<ISkyrimMod, ISkyrimModGetter> state,
{
ChosenRpgEnchantEffects[i] = new();
}

GeneratedItemCache = new();
GeneratedLeveledItemsCache = new();
}

protected override void AnalyzeGear()
Expand Down Expand Up @@ -178,7 +181,7 @@ protected override FormKey EnchantItem(ResolvedListItem<IWeaponGetter> item, int
var newWeaponEditorId = EditorIdPrefix + RarityClasses[rarity].Label.ToUpper() + "_" +
itemName +
"_of_" + GetEnchantmentsStringForName(effects, true);
if (State.LinkCache.TryResolve<IWeaponGetter>(newWeaponEditorId, out var weaponGetter))
if (GeneratedItemCache.TryGetValue(newWeaponEditorId, out var weaponGetter))
{
return weaponGetter.FormKey;
}
Expand All @@ -198,6 +201,8 @@ protected override FormKey EnchantItem(ResolvedListItem<IWeaponGetter> item, int
newWeapon.Keywords?.Add(Skyrim.Keyword.MagicDisallowEnchanting);
}

GeneratedItemCache.Add(newWeapon.EditorID, newWeapon);

if (Program.Settings.GeneralSettings.LogGeneratedItems)
Console.WriteLine($"Generated {newWeapon.Name}");

Expand All @@ -206,10 +211,11 @@ protected override FormKey EnchantItem(ResolvedListItem<IWeaponGetter> item, int
else
{
var newWeaponEditorId = EditorIdPrefix + item.Resolved.EditorID;
if (State.LinkCache.TryResolve<IWeaponGetter>(newWeaponEditorId, out var weaponGetter))
if (GeneratedItemCache.TryGetValue(newWeaponEditorId, out var weaponGetter))
{
return weaponGetter.FormKey;
}

var newWeapon = State.PatchMod.Weapons.AddNewLocking(State.PatchMod.GetNextFormKey());
newWeapon.DeepCopyIn(item.Resolved);
newWeapon.EditorID = newWeaponEditorId;
Expand All @@ -218,6 +224,8 @@ protected override FormKey EnchantItem(ResolvedListItem<IWeaponGetter> item, int
? itemName
: RarityClasses[rarity].Label + " " + itemName;

GeneratedItemCache.Add(newWeapon.EditorID, newWeapon);

if (Program.Settings.GeneralSettings.LogGeneratedItems)
Console.WriteLine($"Generated {newWeapon.Name}");

Expand Down

0 comments on commit 1de313a

Please sign in to comment.