feat: add dps calculation methods to spinals and turrets
This commit is contained in:
parent
56dda7b976
commit
35508c8264
4 changed files with 142 additions and 42 deletions
12
Models/DamageStats.cs
Normal file
12
Models/DamageStats.cs
Normal file
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
32
Models/Enums.cs
Normal file
32
Models/Enums.cs
Normal file
|
@ -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,
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,7 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ZenithInfo.Models
|
namespace ZenithInfo.Models
|
||||||
{
|
{
|
||||||
private enum SpinalSizes
|
|
||||||
{
|
|
||||||
Small,
|
|
||||||
Medium,
|
|
||||||
Large,
|
|
||||||
Capital,
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum SpinalTypes
|
|
||||||
{
|
|
||||||
Hitscan,
|
|
||||||
Multishot,
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum DamageTypes
|
|
||||||
{
|
|
||||||
Shield,
|
|
||||||
Hull,
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Spinal
|
public class Spinal
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
@ -28,11 +10,47 @@ namespace ZenithInfo.Models
|
||||||
public double Range { get; set; }
|
public double Range { get; set; }
|
||||||
public SpinalTypes Type { get; set; }
|
public SpinalTypes Type { get; set; }
|
||||||
public DamageTypes DamageType { get; set; }
|
public DamageTypes DamageType { get; set; }
|
||||||
public SpinalSizes Size { get; set; }
|
public ModuleSizes Size { get; set; }
|
||||||
public double Velocity { get; set; }
|
public double Velocity { get; set; }
|
||||||
public double Interval { get; set; }
|
public double Interval { get; set; }
|
||||||
public int Icon { get; set; }
|
public int Icon { get; set; }
|
||||||
public double ParticleSize { get; set; }
|
public double ParticleSize { get; set; }
|
||||||
public double BaseCost { 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,7 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ZenithInfo.Models
|
namespace ZenithInfo.Models
|
||||||
{
|
{
|
||||||
private enum TurretSizes
|
|
||||||
{
|
|
||||||
Small,
|
|
||||||
Medium,
|
|
||||||
Large,
|
|
||||||
Capital,
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum TurretTypes
|
|
||||||
{
|
|
||||||
Artillery,
|
|
||||||
Autocannon,
|
|
||||||
BeamLaser,
|
|
||||||
Blaster,
|
|
||||||
Railgun,
|
|
||||||
PulseLaser,
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Turret
|
public class Turret
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
@ -27,13 +11,67 @@ namespace ZenithInfo.Models
|
||||||
public double OptimalRange { get; set; }
|
public double OptimalRange { get; set; }
|
||||||
public double FalloffRange { get; set; }
|
public double FalloffRange { get; set; }
|
||||||
public double Accuracy { get; set; }
|
public double Accuracy { get; set; }
|
||||||
public TurretSizes Size { get; set; }
|
public ModuleSizes Size { get; set; }
|
||||||
public TurretTypes Type { get; set; }
|
public TurretTypes Type { get; set; }
|
||||||
public double Velocity { get; set; }
|
|
||||||
public double Interval { get; set; }
|
|
||||||
public int Icon { get; set; }
|
public int Icon { get; set; }
|
||||||
public double BeamSize { get; set; }
|
public double BeamSize { get; set; }
|
||||||
public double BaseCost { get; set; }
|
public double BaseCost { get; set; }
|
||||||
public string? Rarity { get; set; }
|
public string? Rarity { get; set; }
|
||||||
|
|
||||||
|
public DamageTypes DamageType()
|
||||||
|
{
|
||||||
|
new Dictionary<TurretTypes, DamageTypes>
|
||||||
|
{
|
||||||
|
{ 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
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue