Skip to content

Commit

Permalink
Pre-Alpha polish
Browse files Browse the repository at this point in the history
Added constants for string values. Cleaned up stuff for release. Added documentation
  • Loading branch information
DanielWieder committed Nov 18, 2017
1 parent f542899 commit ecd4f58
Show file tree
Hide file tree
Showing 48 changed files with 636 additions and 351 deletions.
2 changes: 2 additions & 0 deletions PoeCrafting/PoeCrafting.Data/FetchArmourByItemName.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public ItemBase Execute()
a.Armour,
a.Evasion,
a.EnergyShield,
a.Block,
a.Str,
a.Dex,
a.Int,
Expand All @@ -44,6 +45,7 @@ public ItemBase Execute()
item.Properties.Add("Str", entity.Str);
item.Properties.Add("Dex", entity.Dex);
item.Properties.Add("Int", entity.Int);
item.Properties.Add("Block", entity.Block);

return item;
}
Expand Down
10 changes: 9 additions & 1 deletion PoeCrafting/PoeCrafting.Data/FetchCurrencyValues.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ namespace PoeCrafting.Data
{
public class FetchCurrencyValues : IFetchCurrencyValues
{
private Dictionary<string, string> leagueLookup = new Dictionary<string, string>
{
{"Standard", "standard"},
{"Hardcore", "hardcore"},
{"Harbinger", "tmpstandard"},
{"HC Harbinger", "tmphardcore"},
};

public string url = @"http://poe.ninja/api/Data/GetCurrencyOverview?league=";

public string League { get; set; }
Expand All @@ -23,7 +31,7 @@ public class FetchCurrencyValues : IFetchCurrencyValues

using (WebClient wc = new WebClient())
{
string json = wc.DownloadString(url + League);
string json = wc.DownloadString(url + leagueLookup[League]);
using (var sr = new StringReader(json))
{
using (var jr = new JsonTextReader(sr))
Expand Down
2 changes: 2 additions & 0 deletions PoeCrafting/PoeCrafting.Data/FetchWeaponsByItemName.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public ItemBase Execute()
a.MaxDamage,
a.APS,
a.DPS,
a.Crit,
a.Str,
a.Dex,
a.Int,
Expand All @@ -45,6 +46,7 @@ public ItemBase Execute()
item.Properties.Add("Str", entity.Str);
item.Properties.Add("Dex", entity.Dex);
item.Properties.Add("Int", entity.Int);
item.Properties.Add("Crit", entity.Crit);

return item;
}
Expand Down
164 changes: 7 additions & 157 deletions PoeCrafting/PoeCrafting.Domain/Condition/AffixValueCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,61 +8,9 @@

namespace PoeCrafting.Domain.Condition
{
public static class AffixValueCalculator
public class AffixValueCalculator
{
private static readonly List<string> PercentDefenseAffixNames = new List<string>
{
"Local Increased Evasion Rating Percent",
"Local Increased Energy Shield Percent",
"Local Increased Physical Damage Reduction Rating Percent",
"Str Master Armour Percent Crafted",
"Str Master Evasion Percent Crafted",
"Local Increased Armour And Evasion",
"Local Increased Energy Shield Percent",
"Local Increased Evasion Rating Percent",
"Local Increased Armour And Energy Shield",
"Str Master Energy Shield Percent Crafted",
"Local Increased Evasion And Energy Shield",
"Local Increased Armour Evasion Energy Shield",
"Str Master Armour And Evasion Percent Crafted",
"Str Master Armour And Energy Shield Percent Crafted",
"Str Master Evasion And Energy Shield Percent Crafted",
"Local Increased Physical Damage Reduction Rating Percent"
};

private static readonly List<string> HybridDefenseAffixNames = new List<string>
{
"Local Increased Armour And Evasion And Stun Recovery",
"Local Increased Energy Shield Percent And Stun Recovery",
"Local Increased Evasion Rating Percent And Stun Recovery",
"Local Increased Armour And Energy Shield And Stun Recovery",
"Local Increased Evasion And Energy Shield And Stun Recovery",
"Local Increased Armour Evasion Energy Shield Stun Recovery",
"Local Increased Physical Damage Reduction Rating Percent And Stun Recovery"
};

private static List<string> EnergyShieldPercentDefenseAffixNames => PercentDefenseAffixNames.Where(x => x.Contains("Energy Shield")).ToList();
private static List<string> EvasionPercentDefenseAffixNames => PercentDefenseAffixNames.Where(x => x.Contains("Evasion")).ToList();
private static List<string> ArmourPercentDefenseAffixNames => PercentDefenseAffixNames.Where(x => x.Contains("Armour") || x.Contains("Physical Damage Reduction Rating")).ToList();

private static List<string> HybridEnergyShieldPercentDefenseAffixNames => HybridDefenseAffixNames.Where(x => x.Contains("EnergyShield")).ToList();
private static List<string> HybridEvasionPercentDefenseAffixNames => HybridDefenseAffixNames.Where(x => x.Contains("Evasion")).ToList();
private static List<string> HybridArmourPercentDefenseAffixNames => HybridDefenseAffixNames.Where(x => x.Contains("Armour") || x.Contains("Physical Damage Reduction Rating")).ToList();

private class ConditionContainer
{
public ItemBase ItemBase;
public List<ItemProperty> Affixes;
}

private class ItemProperty
{
public string ModType;
public AffixType Type;
public List<int> Values;
}

public static List<int> GetAffixValues(string mod, Equipment item, AffixType type, StatValueType valueType)
public List<int> GetAffixValues(string mod, Equipment item, AffixType type, StatValueType valueType)
{
var conditionItem = new ConditionContainer()
{
Expand All @@ -72,7 +20,7 @@ public static List<int> GetAffixValues(string mod, Equipment item, AffixType typ
return GetAffixValue(mod, type, conditionItem);
}

public static List<int> GetModMax(string modType, ItemBase itemBase, List<Affix> affixes, AffixType type)
public List<int> GetModMax(string modType, ItemBase itemBase, List<Affix> affixes, AffixType type)
{
var max = StatValueType.Max;

Expand All @@ -84,7 +32,7 @@ public static List<int> GetModMax(string modType, ItemBase itemBase, List<Affix>
return GetAffixValue(modType, type, conditionItem);
}

private static ItemProperty StatToCondition(Affix affix, StatValueType valueType, List<int> values = null)
private ItemProperty StatToCondition(Affix affix, StatValueType valueType, List<int> values = null)
{
return new ItemProperty()
{
Expand All @@ -94,7 +42,7 @@ private static ItemProperty StatToCondition(Affix affix, StatValueType valueType
};
}

private static List<int> GetTypedValue(Affix affix, StatValueType valueType, List<int> values = null)
private List<int> GetTypedValue(Affix affix, StatValueType valueType, List<int> values = null)
{
switch (valueType)
{
Expand All @@ -121,109 +69,11 @@ private static List<int> GetAffixValue(string mod, AffixType type, ConditionCont
}
if (type == AffixType.Meta)
{
return new List<int> { GetMetaConditionValue(mod, a)};
MetaAffixValueCalculator calculator = new MetaAffixValueCalculator();
return new List<int> { calculator.GetMetaConditionValue(mod, a)};
}

throw new NotImplementedException($"The affix type {Enum.GetName(typeof(AffixType), type)} is not recognized");
}

private static int GetMetaConditionValue(string modType, ConditionContainer a)
{
var prefixes = a.Affixes.Where(x => x.Type == AffixType.Prefix).ToList();
var suffixes = a.Affixes.Where(x => x.Type == AffixType.Suffix).ToList();

if (modType.Contains("Open Prefix"))
{
return prefixes.Count > 3 ? 3 : 3 - prefixes.Count;
}
if (modType.Contains("Open Suffix"))
{
return suffixes.Count > 3 ? 3 : 3 - suffixes.Count;
}
if (modType == "Total Energy Shield")
{
return GetDefenseConditionValue(a, "Energy Shield", "Local Increased Energy Shield", EnergyShieldPercentDefenseAffixNames, HybridEnergyShieldPercentDefenseAffixNames);
}
if (modType == "Total Armour")
{
return GetDefenseConditionValue(a, "Armour", "Local Increased Physical Damage Reduction Rating", ArmourPercentDefenseAffixNames, HybridArmourPercentDefenseAffixNames);
}
if (modType == "Total Evasion")
{
return GetDefenseConditionValue(a, "Evasion", "Increased Evasion Rating", EvasionPercentDefenseAffixNames, HybridEvasionPercentDefenseAffixNames);
}
if (modType == "Total Resistances")
{
var coldRes = GetMaxOrZero(suffixes, "Cold Resist");
var fireRes = GetMaxOrZero(suffixes, "Fire Resist");
var lightningRes = GetMaxOrZero(suffixes, "Lightning Resist");
var chaosRes = GetMaxOrZero(suffixes, "Chaos Resist");
var allRes = GetMaxOrZero(suffixes, "All Resistances");

var resList = new List<int>
{
coldRes,
fireRes,
lightningRes,
chaosRes,
allRes * 3
};

resList = resList.OrderByDescending(x => x).ToList();
resList = resList.Take(3).ToList();
return resList.Sum();
}
if (modType == "Total Elemental Resistances")
{
var coldRes = GetMaxOrZero(suffixes, "Cold Resist");
var fireRes = GetMaxOrZero(suffixes, "Fire Resist");
var lightningRes = GetMaxOrZero(suffixes, "Lightning Resist");
var allRes = GetMaxOrZero(suffixes, "All Resistances");

var resList = new List<int>
{
coldRes,
fireRes,
lightningRes,
allRes * 3
};

resList = resList.OrderByDescending(x => x).ToList();
resList = resList.Take(3).ToList();
return resList.Sum();
}

throw new NotImplementedException($"The meta affix {modType} is not recognized");
}

private static int GetDefenseConditionValue(ConditionContainer a, string propertyName, string flatDefenseName, List<string> percentDefensesNames, List<string> hybridDefenseNames)
{
var prefixes = a.Affixes.Where(x => x.Type == AffixType.Prefix).ToList();

var percentDefenses = prefixes.Where(x => percentDefensesNames.Contains(x.ModType)).ToList();
var hybridDefenses = prefixes.Where(x => hybridDefenseNames.Contains(x.ModType)).ToList();

var baseDefense = a.ItemBase.Properties.ContainsKey(propertyName) ? a.ItemBase.Properties[propertyName] : 0;
var flatDefense = GetMaxOrZero(prefixes, flatDefenseName);
var percentDefense = GetMaxOrZero(percentDefenses);
var hybridDefense = GetMaxOrZero(hybridDefenses);

return (int)((baseDefense + flatDefense) * (120 + percentDefense + hybridDefense) / 100);
}

private static int GetMaxOrZero(List<ItemProperty> items, string property, int index = 0)
{
var properties = items.Where(x => x.ModType == property).ToList();
return GetMaxOrZero(properties, index);
}

private static int GetMaxOrZero(List<ItemProperty> items, int index = 0)
{
if (!items.Any())
{
return 0;
}
return items.Max(x => x.Values[index]);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public class ConditionResolutionFactory
{
public static ConditionResolution ResolveCondition(ConditionAffix affix, Equipment item, AffixType type, StatValueType valueType)
{
var value = AffixValueCalculator.GetAffixValues(affix.ModType, item, type, valueType);
AffixValueCalculator calculator = new AffixValueCalculator();
var value = calculator.GetAffixValues(affix.ModType, item, type, valueType);

return new ConditionResolution()
{
Expand Down

0 comments on commit ecd4f58

Please sign in to comment.