feat: add dps calculation methods to spinals and turrets

This commit is contained in:
cswimr 2024-12-31 10:33:24 -05:00
parent 56dda7b976
commit 35508c8264
Signed by: cswimr
GPG key ID: 0EC431A8DA8F8087
4 changed files with 142 additions and 42 deletions

12
Models/DamageStats.cs Normal file
View 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
View 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,
}
}

View file

@ -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);
}
} }
} }

View file

@ -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
);
}
} }
} }