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