Notes and Vibe start
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,32 @@
|
||||
namespace Model;
|
||||
|
||||
public sealed record UnitData(
|
||||
string Id,
|
||||
string Name,
|
||||
int Hexite,
|
||||
int Flux,
|
||||
int Supply,
|
||||
int ProductionTime,
|
||||
int Health,
|
||||
int Energy,
|
||||
int Shields,
|
||||
int ArmorRating,
|
||||
int MovementSpeed,
|
||||
int DamagePerSecond,
|
||||
int AttackRange,
|
||||
IReadOnlyList<string> Attributes,
|
||||
int Tier,
|
||||
string Faction,
|
||||
string? Hotkey,
|
||||
int BuildAtSameTime,
|
||||
int? Limit)
|
||||
{
|
||||
public double DpsPerHexite => UnitEfficiency.CalculateDpsPerHexite(DamagePerSecond, Hexite);
|
||||
public double DpsPerFlux => UnitEfficiency.CalculateDpsPerFlux(DamagePerSecond, Flux);
|
||||
public double DpsPerTotalCost => UnitEfficiency.CalculateDpsPerTotalCost(DamagePerSecond, Hexite, Flux);
|
||||
|
||||
public double HealthPerHexite => UnitEfficiency.CalculateHealthPerHexite(Health, Hexite);
|
||||
public double HealthPerFlux => UnitEfficiency.CalculateHealthPerFlux(Health, Flux);
|
||||
public double HealthPerTotalCost => UnitEfficiency.CalculateHealthPerTotalCost(Health, Hexite, Flux);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
namespace Model;
|
||||
|
||||
public static class UnitEfficiency
|
||||
{
|
||||
public static double CalculateDpsPerHexite(int damagePerSecond, int hexite) => CalculateEfficiency(damagePerSecond, hexite);
|
||||
public static double CalculateDpsPerFlux(int damagePerSecond, int flux) => CalculateEfficiency(damagePerSecond, flux);
|
||||
public static double CalculateDpsPerTotalCost(int damagePerSecond, int hexite, int flux) => CalculateEfficiency(damagePerSecond, hexite + flux);
|
||||
|
||||
public static double CalculateHealthPerHexite(int health, int hexite) => CalculateEfficiency(health, hexite);
|
||||
public static double CalculateHealthPerFlux(int health, int flux) => CalculateEfficiency(health, flux);
|
||||
public static double CalculateHealthPerTotalCost(int health, int hexite, int flux) => CalculateEfficiency(health, hexite + flux);
|
||||
|
||||
private static double CalculateEfficiency(int value, int cost)
|
||||
{
|
||||
if (cost <= 0)
|
||||
{
|
||||
return value > 0 ? double.PositiveInfinity : 0;
|
||||
}
|
||||
|
||||
return (double)value / cost;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,361 @@
|
||||
// <auto-generated />
|
||||
namespace Model;
|
||||
|
||||
public static class Units
|
||||
{
|
||||
public static readonly UnitData CorsairRaiders = new(
|
||||
Id: "CorsairRaiders",
|
||||
Name: "Corsair Raiders",
|
||||
Hexite: 58,
|
||||
Flux: 0,
|
||||
Supply: 2,
|
||||
ProductionTime: 30,
|
||||
Health: 175,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 650,
|
||||
DamagePerSecond: 8,
|
||||
AttackRange: 8,
|
||||
Attributes: ["Light Armor", "Biological"],
|
||||
Tier: 1,
|
||||
Faction: "Corsair",
|
||||
Hotkey: "Z",
|
||||
BuildAtSameTime: 3,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData CorsairRovers = new(
|
||||
Id: "CorsairRovers",
|
||||
Name: "Corsair Rovers",
|
||||
Hexite: 100,
|
||||
Flux: 25,
|
||||
Supply: 3,
|
||||
ProductionTime: 35,
|
||||
Health: 320,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 750,
|
||||
DamagePerSecond: 17,
|
||||
AttackRange: 7,
|
||||
Attributes: ["Light Armor"],
|
||||
Tier: 1,
|
||||
Faction: "Corsair",
|
||||
Hotkey: "X",
|
||||
BuildAtSameTime: 2,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData CorsairSnipers = new(
|
||||
Id: "CorsairSnipers",
|
||||
Name: "Corsair Snipers",
|
||||
Hexite: 38,
|
||||
Flux: 100,
|
||||
Supply: 4,
|
||||
ProductionTime: 30,
|
||||
Health: 100,
|
||||
Energy: 0,
|
||||
Shields: 100,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 425,
|
||||
DamagePerSecond: 14,
|
||||
AttackRange: 20,
|
||||
Attributes: ["Light Armor", "Biological", "Bonus Damage vs Light Armor"],
|
||||
Tier: 1,
|
||||
Faction: "Corsair",
|
||||
Hotkey: "C",
|
||||
BuildAtSameTime: 2,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData CorsairHovercraft = new(
|
||||
Id: "CorsairHovercraft",
|
||||
Name: "Corsair Hovercraft",
|
||||
Hexite: 100,
|
||||
Flux: 62,
|
||||
Supply: 4,
|
||||
ProductionTime: 20,
|
||||
Health: 375,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 550,
|
||||
DamagePerSecond: 20,
|
||||
AttackRange: 9,
|
||||
Attributes: ["Medium Armor"],
|
||||
Tier: 2,
|
||||
Faction: "Corsair",
|
||||
Hotkey: null,
|
||||
BuildAtSameTime: 2,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData CorsairFlamer = new(
|
||||
Id: "CorsairFlamer",
|
||||
Name: "Corsair Flamer",
|
||||
Hexite: 100,
|
||||
Flux: 200,
|
||||
Supply: 6,
|
||||
ProductionTime: 35,
|
||||
Health: 1000,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 2,
|
||||
MovementSpeed: 450,
|
||||
DamagePerSecond: 64,
|
||||
AttackRange: 4,
|
||||
Attributes: ["Heavy Armor", "Bonus Damage vs Light Armor", "Respawns for free after death"],
|
||||
Tier: 3,
|
||||
Faction: "Corsair",
|
||||
Hotkey: "V",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Gatherer = new(
|
||||
Id: "Gatherer",
|
||||
Name: "Gatherer",
|
||||
Hexite: 100,
|
||||
Flux: 0,
|
||||
Supply: 0,
|
||||
ProductionTime: 18,
|
||||
Health: 275,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 510,
|
||||
DamagePerSecond: 0,
|
||||
AttackRange: 0,
|
||||
Attributes: ["Biological", "Respawns for free after death"],
|
||||
Tier: 0,
|
||||
Faction: "Grell",
|
||||
Hotkey: "H",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: 5);
|
||||
|
||||
public static readonly UnitData BroodGuard = new(
|
||||
Id: "BroodGuard",
|
||||
Name: "Brood Guard",
|
||||
Hexite: 125,
|
||||
Flux: 0,
|
||||
Supply: 3,
|
||||
ProductionTime: 33,
|
||||
Health: 250,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 550,
|
||||
DamagePerSecond: 15,
|
||||
AttackRange: 1,
|
||||
Attributes: ["Medium Armor", "Biological"],
|
||||
Tier: 1,
|
||||
Faction: "Grell",
|
||||
Hotkey: "G",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Lasher = new(
|
||||
Id: "Lasher",
|
||||
Name: "Lasher",
|
||||
Hexite: 50,
|
||||
Flux: 25,
|
||||
Supply: 2,
|
||||
ProductionTime: 26,
|
||||
Health: 150,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 550,
|
||||
DamagePerSecond: 14,
|
||||
AttackRange: 8,
|
||||
Attributes: ["Light Armor", "Biological", "Bonus Damage vs Medium Armor"],
|
||||
Tier: 1,
|
||||
Faction: "Grell",
|
||||
Hotkey: "R",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Skrell = new(
|
||||
Id: "Skrell",
|
||||
Name: "Skrell",
|
||||
Hexite: 12,
|
||||
Flux: 19,
|
||||
Supply: 1,
|
||||
ProductionTime: 35,
|
||||
Health: 50,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 900,
|
||||
DamagePerSecond: 5,
|
||||
AttackRange: 2,
|
||||
Attributes: ["Air unit", "Light Armor", "Biological", "Bonus Damage vs Air"],
|
||||
Tier: 1,
|
||||
Faction: "Grell",
|
||||
Hotkey: "T",
|
||||
BuildAtSameTime: 4,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Stinger = new(
|
||||
Id: "Stinger",
|
||||
Name: "Stinger",
|
||||
Hexite: 25,
|
||||
Flux: 0,
|
||||
Supply: 1,
|
||||
ProductionTime: 39,
|
||||
Health: 90,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 700,
|
||||
DamagePerSecond: 9,
|
||||
AttackRange: 1,
|
||||
Attributes: ["Light Armor", "Biological"],
|
||||
Tier: 1,
|
||||
Faction: "Grell",
|
||||
Hotkey: "Q",
|
||||
BuildAtSameTime: 3,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Harbinger = new(
|
||||
Id: "Harbinger",
|
||||
Name: "Harbinger",
|
||||
Hexite: 75,
|
||||
Flux: 50,
|
||||
Supply: 4,
|
||||
ProductionTime: 35,
|
||||
Health: 400,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 1,
|
||||
MovementSpeed: 475,
|
||||
DamagePerSecond: 14,
|
||||
AttackRange: 6,
|
||||
Attributes: ["Biological", "Medium Armor", "Bonus Damage vs Heavy Armor"],
|
||||
Tier: 2,
|
||||
Faction: "Grell",
|
||||
Hotkey: "W",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Mandragora = new(
|
||||
Id: "Mandragora",
|
||||
Name: "Mandragora",
|
||||
Hexite: 125,
|
||||
Flux: 25,
|
||||
Supply: 4,
|
||||
ProductionTime: 48,
|
||||
Health: 450,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 1,
|
||||
MovementSpeed: 550,
|
||||
DamagePerSecond: 22,
|
||||
AttackRange: 4,
|
||||
Attributes: ["Medium Armor", "Biological"],
|
||||
Tier: 2,
|
||||
Faction: "Grell",
|
||||
Hotkey: "F",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Thresher = new(
|
||||
Id: "Thresher",
|
||||
Name: "Thresher",
|
||||
Hexite: 100,
|
||||
Flux: 175,
|
||||
Supply: 8,
|
||||
ProductionTime: 65,
|
||||
Health: 300,
|
||||
Energy: 0,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 450,
|
||||
DamagePerSecond: 36,
|
||||
AttackRange: 27,
|
||||
Attributes: ["Biological", "Heavy Armor", "Bonus Damage vs Buildings"],
|
||||
Tier: 2,
|
||||
Faction: "Grell",
|
||||
Hotkey: "S",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Behemoth = new(
|
||||
Id: "Behemoth",
|
||||
Name: "Behemoth",
|
||||
Hexite: 100,
|
||||
Flux: 200,
|
||||
Supply: 8,
|
||||
ProductionTime: 80,
|
||||
Health: 625,
|
||||
Energy: 5,
|
||||
Shields: 0,
|
||||
ArmorRating: 1,
|
||||
MovementSpeed: 500,
|
||||
DamagePerSecond: 15,
|
||||
AttackRange: 12,
|
||||
Attributes: ["Air unit", "Regains Energy From Attacking", "Biological", "Heavy Armor", "Bonus Damage vs Heavy Armor"],
|
||||
Tier: 3,
|
||||
Faction: "Grell",
|
||||
Hotkey: "D",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Reaver = new(
|
||||
Id: "Reaver",
|
||||
Name: "Reaver",
|
||||
Hexite: 200,
|
||||
Flux: 100,
|
||||
Supply: 8,
|
||||
ProductionTime: 80,
|
||||
Health: 900,
|
||||
Energy: 15,
|
||||
Shields: 0,
|
||||
ArmorRating: 3,
|
||||
MovementSpeed: 525,
|
||||
DamagePerSecond: 51,
|
||||
AttackRange: 2,
|
||||
Attributes: ["Regains Energy From Attacking", "Biological", "Heavy Armor"],
|
||||
Tier: 3,
|
||||
Faction: "Grell",
|
||||
Hotkey: "A",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static readonly UnitData Weaver = new(
|
||||
Id: "Weaver",
|
||||
Name: "Weaver",
|
||||
Hexite: 75,
|
||||
Flux: 175,
|
||||
Supply: 4,
|
||||
ProductionTime: 40,
|
||||
Health: 200,
|
||||
Energy: 80,
|
||||
Shields: 0,
|
||||
ArmorRating: 0,
|
||||
MovementSpeed: 650,
|
||||
DamagePerSecond: 10,
|
||||
AttackRange: 12,
|
||||
Attributes: ["Medium Armor", "Biological", "Bonus Damage vs Air"],
|
||||
Tier: 3,
|
||||
Faction: "Grell",
|
||||
Hotkey: "E",
|
||||
BuildAtSameTime: 1,
|
||||
Limit: null);
|
||||
|
||||
public static IReadOnlyList<UnitData> All { get; } =
|
||||
[
|
||||
CorsairRaiders,
|
||||
CorsairRovers,
|
||||
CorsairSnipers,
|
||||
CorsairHovercraft,
|
||||
CorsairFlamer,
|
||||
Gatherer,
|
||||
BroodGuard,
|
||||
Lasher,
|
||||
Skrell,
|
||||
Stinger,
|
||||
Harbinger,
|
||||
Mandragora,
|
||||
Thresher,
|
||||
Behemoth,
|
||||
Reaver,
|
||||
Weaver,
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user