diff --git a/Models/DamageStats.cs b/Models/DamageStats.cs new file mode 100644 index 0000000..6716624 --- /dev/null +++ b/Models/DamageStats.cs @@ -0,0 +1,12 @@ +namespace ZenithInfo.Models +{ + public class DamageStats + { + public double AverageDps { get; set; } + public double ShieldDps { get; set; } + public double HullDps { get; set; } + public double AverageAlpha { get; set; } + public double ShieldAlpha { get; set; } + public double HullAlpha { get; set; } + } +} diff --git a/Models/Enums.cs b/Models/Enums.cs new file mode 100644 index 0000000..90a9034 --- /dev/null +++ b/Models/Enums.cs @@ -0,0 +1,32 @@ +namespace ZenithInfo.Models +{ + public enum ModuleSizes + { + Small, + Medium, + Large, + Capital, + } + + public enum DamageTypes + { + Shield, + Hull, + } + + public enum SpinalTypes + { + Hitscan, + Multishot, + } + + public enum TurretTypes + { + Artillery, + Autocannon, + BeamLaser, + Blaster, + Railgun, + PulseLaser, + } +} diff --git a/Models/Spinal.cs b/Models/Spinal.cs index 1609ce7..93da198 100644 --- a/Models/Spinal.cs +++ b/Models/Spinal.cs @@ -1,25 +1,7 @@ +using System.Collections.Generic; + namespace ZenithInfo.Models { - private enum SpinalSizes - { - Small, - Medium, - Large, - Capital, - } - - private enum SpinalTypes - { - Hitscan, - Multishot, - } - - private enum DamageTypes - { - Shield, - Hull, - } - public class Spinal { public string Name { get; set; } @@ -28,11 +10,47 @@ namespace ZenithInfo.Models public double Range { get; set; } public SpinalTypes Type { get; set; } public DamageTypes DamageType { get; set; } - public SpinalSizes Size { get; set; } + public ModuleSizes Size { get; set; } public double Velocity { get; set; } public double Interval { get; set; } public int Icon { get; set; } public double ParticleSize { get; set; } public double BaseCost { get; set; } + public string? Rarity { get; set; } + + public DamageStats Dps(int range: 0, int barrelCount: 1) + { + if (range > this.Range) + { + return new DamageStats(0, 0, 0, 0, 0, 0); + } + + double baseAlpha = this.Damage * barrelCount; + double shieldAlpha = 0; + double hullAlpha = 0; + + double intervalTime = this.Interval * (barrelCount - 1); + double totalDelay = this.Reload + intervalTime; + double baseDps = baseAlpha / (totalDelay != 0 ? totalDelay : 1); // prevent divide by zero + double shieldDps = 0; + double hullDps = 0; + + // all percentages are placeholders until david tells me what they're actually supposed to be + if (this.DamageType == DamageTypes.Shield) { + shieldAlpha = baseAlpha; + hullAlpha = baseAlpha * 0.5; + shieldDps = baseDps; + hullDps = baseDps * 0.5; + } else if (this.DamageType == DamageTypes.Hull) { + shieldAlpha = baseAlpha * 0.5; + hullAlpha = baseAlpha; + shieldDps = baseDps * 0.5; + hullDps = baseDps; + } + + double averageDps = (shieldDps + hullDps) / 2; + double averageAlpha = (shieldAlpha + hullAlpha) / 2; + return new DamageStats(averageDps, shieldDps, hullDps, averageAlpha, shieldAlpha, hullAlpha); + } } } diff --git a/Models/Turret.cs b/Models/Turret.cs index 5a92d1a..7d617d7 100644 --- a/Models/Turret.cs +++ b/Models/Turret.cs @@ -1,23 +1,7 @@ +using System.Collections.Generic; + namespace ZenithInfo.Models { - private enum TurretSizes - { - Small, - Medium, - Large, - Capital, - } - - private enum TurretTypes - { - Artillery, - Autocannon, - BeamLaser, - Blaster, - Railgun, - PulseLaser, - } - public class Turret { public string Name { get; set; } @@ -27,13 +11,67 @@ namespace ZenithInfo.Models public double OptimalRange { get; set; } public double FalloffRange { get; set; } public double Accuracy { get; set; } - public TurretSizes Size { get; set; } + public ModuleSizes Size { get; set; } public TurretTypes Type { get; set; } - public double Velocity { get; set; } - public double Interval { get; set; } public int Icon { get; set; } public double BeamSize { get; set; } public double BaseCost { get; set; } public string? Rarity { get; set; } + + public DamageTypes DamageType() + { + new Dictionary + { + { TurretTypes.Artillery, DamageTypes.Hull }, + { TurretTypes.Autocannon, DamageTypes.Hull }, + { TurretTypes.BeamLaser, DamageTypes.Shield }, + { TurretTypes.Blaster, DamageTypes.Shield }, + { TurretTypes.Railgun, DamageTypes.Hull }, + { TurretTypes.PulseLaser, DamageTypes.Shield }, + }[this.Type]; + } + + public DamageStats Dps(int range: 0) + { + if (range > this.Range) + { + return new DamageStats(0, 0, 0, 0, 0, 0); + } + + double baseAlpha = this.Damage; + double shieldAlpha = 0; + double hullAlpha = 0; + + double baseDps = baseAlpha / (this.Reload != 0 ? this.Reload : 1); // prevent divide by zero + double shieldDps = 0; + double hullDps = 0; + + // all percentages are placeholders until david tells me what they're actually supposed to be + if (this.DamageType() == DamageTypes.Shield) + { + shieldAlpha = baseAlpha; + hullAlpha = baseAlpha * 0.5; + shieldDps = baseDps; + hullDps = baseDps * 0.5; + } + else if (this.DamageType() == DamageTypes.Hull) + { + shieldAlpha = baseAlpha * 0.5; + hullAlpha = baseAlpha; + shieldDps = baseDps * 0.5; + hullDps = baseDps; + } + + double averageDps = (shieldDps + hullDps) / 2; + double averageAlpha = (shieldAlpha + hullAlpha) / 2; + return new DamageStats( + averageDps, + shieldDps, + hullDps, + averageAlpha, + shieldAlpha, + hullAlpha + ); + } } }