More data, and minor updates to Build Calculator for June 2025 Playtest
This commit is contained in:
@@ -25,6 +25,11 @@
|
|||||||
Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed.
|
Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed.
|
||||||
<br/>
|
<br/>
|
||||||
Currently not considering running out of alloy and ether to harvest.
|
Currently not considering running out of alloy and ether to harvest.
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
Build Calculator was built based on a much older version of the game and was only quickly modified for the June 2025 Playtest version, so the above disclaimer is only more true.
|
||||||
|
<br/>
|
||||||
|
Expect even more oddities and invalid data then the above warning implies.
|
||||||
</Message>
|
</Message>
|
||||||
</AlertComponent>
|
</AlertComponent>
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,11 @@
|
|||||||
}
|
}
|
||||||
@if (FilterService.GetFaction() == DataType.FACTION_Aru)
|
@if (FilterService.GetFaction() == DataType.FACTION_Aru)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
<option value="@DataType.IMMORTAL_Atzlan"
|
||||||
|
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Atzlan))">
|
||||||
|
Atzlan
|
||||||
|
</option>
|
||||||
<option value="@DataType.IMMORTAL_Mala"
|
<option value="@DataType.IMMORTAL_Mala"
|
||||||
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Mala))">
|
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Mala))">
|
||||||
Mala
|
Mala
|
||||||
|
|||||||
@@ -22,13 +22,13 @@
|
|||||||
|
|
||||||
|
|
||||||
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
|
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
|
||||||
? "#0a0f12"
|
? hotkey.GetColor()
|
||||||
: hotkey.GetColor();
|
: hotkey.GetColor();
|
||||||
|
|
||||||
var x = hotkey.PositionX * Size;
|
var x = hotkey.PositionX * Size;
|
||||||
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
|
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
|
||||||
|
|
||||||
var width = Size;
|
var width = Size * hotkey.Width;
|
||||||
var height = hotkey.PositionY == 0 ? 50 : Size;
|
var height = hotkey.PositionY == 0 ? 50 : Size;
|
||||||
|
|
||||||
var borderRadius = hotkey.PositionY == 0 ? 12 : 0;
|
var borderRadius = hotkey.PositionY == 0 ? 12 : 0;
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
|
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
|
||||||
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
|
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
|
||||||
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
|
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
|
||||||
: hotkey.KeyText.Equals("TAB") ? "Tab"
|
: hotkey.KeyText.Equals("X") ? "X"
|
||||||
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
|
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
|
||||||
|
|
||||||
|
|
||||||
@@ -292,9 +292,9 @@
|
|||||||
controlGroup = "Z";
|
controlGroup = "Z";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("TAB"))
|
if (KeyService.GetAllPressedKeys().Contains("X"))
|
||||||
{
|
{
|
||||||
controlGroup = "TAB";
|
controlGroup = "X";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("C"))
|
if (KeyService.GetAllPressedKeys().Contains("C"))
|
||||||
|
|||||||
@@ -21,11 +21,6 @@ public class BuildToCompareModel
|
|||||||
? DataType.BUPGRADE_MiningLevel2_QRath
|
? DataType.BUPGRADE_MiningLevel2_QRath
|
||||||
: DataType.BUPGRADE_MiningLevel2_Aru];
|
: DataType.BUPGRADE_MiningLevel2_Aru];
|
||||||
|
|
||||||
public EntityModel GetTownHallMining3Entity => DATA.Get()[
|
|
||||||
Faction.Equals(DataType.FACTION_QRath)
|
|
||||||
? DataType.BUPGRADE_MiningLevel3_QRath
|
|
||||||
: DataType.BUPGRADE_MiningLevel3_Aru];
|
|
||||||
|
|
||||||
public int NumberOfTownHallExpansions
|
public int NumberOfTownHallExpansions
|
||||||
{
|
{
|
||||||
get => numberOfTownHallExpansions;
|
get => numberOfTownHallExpansions;
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ public abstract class DATA
|
|||||||
{
|
{
|
||||||
DataType.IMMORTAL_Atzlan,
|
DataType.IMMORTAL_Atzlan,
|
||||||
new EntityModel(DataType.IMMORTAL_Atzlan, EntityType.Immortal)
|
new EntityModel(DataType.IMMORTAL_Atzlan, EntityType.Immortal)
|
||||||
.AddPart(new EntityInfoModel { Name = "Aru" })
|
.AddPart(new EntityInfoModel { Name = "Atzlan" })
|
||||||
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
||||||
.AddPart(new EntityHarvestModel
|
.AddPart(new EntityHarvestModel
|
||||||
{
|
{
|
||||||
@@ -747,12 +747,12 @@ public abstract class DATA
|
|||||||
.AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
|
.AddPart(new EntityMovementModel { Speed = 360, Movement = MovementType.Ground })
|
||||||
.AddPart(new EntityWeaponModel
|
.AddPart(new EntityWeaponModel
|
||||||
{
|
{
|
||||||
Damage = 25, MediumDamage = 35, HeavyDamage = 45, Range = 800, AttacksPerSecond = 1.429f,
|
Damage = 25, MediumDamage = 35, HeavyDamage = 45, Range = 800, SecondsBetweenAttacks = 1.429f,
|
||||||
Targets = TargetType.Ground
|
Targets = TargetType.Ground
|
||||||
})
|
})
|
||||||
.AddPart(new EntityWeaponModel
|
.AddPart(new EntityWeaponModel
|
||||||
{
|
{
|
||||||
Damage = 85, MediumDamage = 100, HeavyDamage = 115, Range = 1000, AttacksPerSecond = 2.5f,
|
Damage = 85, MediumDamage = 100, HeavyDamage = 115, Range = 1000, SecondsBetweenAttacks = 2.5f,
|
||||||
MinimumRange = 500,
|
MinimumRange = 500,
|
||||||
Targets = TargetType.Ground
|
Targets = TargetType.Ground
|
||||||
})
|
})
|
||||||
@@ -3650,7 +3650,7 @@ public abstract class DATA
|
|||||||
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
|
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
|
||||||
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
|
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
|
||||||
})
|
})
|
||||||
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "CONTROL" })
|
.AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
|
||||||
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
|
||||||
.AddPart(new EntityRequirementModel
|
.AddPart(new EntityRequirementModel
|
||||||
{
|
{
|
||||||
@@ -3664,6 +3664,50 @@ public abstract class DATA
|
|||||||
TotalAmount = 3600
|
TotalAmount = 3600
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
DataType.CONVERSION_EtherSruge_Aru,
|
||||||
|
new EntityModel(DataType.CONVERSION_EtherSruge_Aru, EntityType.Building_Upgrade)
|
||||||
|
.AddPart(new EntityInfoModel
|
||||||
|
{
|
||||||
|
Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
|
||||||
|
Description = "Gain 100 Ether over 50 seconds"
|
||||||
|
})
|
||||||
|
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
|
||||||
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
|
||||||
|
.AddPart(new EntityRequirementModel
|
||||||
|
{
|
||||||
|
Id = DataType.BUILDING_Acropolis,
|
||||||
|
Requirement = RequirementType.Morph
|
||||||
|
})
|
||||||
|
.AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
|
||||||
|
.AddPart(new EntityHarvestModel
|
||||||
|
{
|
||||||
|
HarvestedPerInterval = 5, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
|
||||||
|
TotalAmount = 100
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
DataType.CONVERSION_EtherSruge_QRath,
|
||||||
|
new EntityModel(DataType.CONVERSION_EtherSruge_QRath, EntityType.Building_Upgrade)
|
||||||
|
.AddPart(new EntityInfoModel
|
||||||
|
{
|
||||||
|
Name = "Ether Surge", Descriptive = DescriptiveType.Upgrade,
|
||||||
|
Description = "Gain 100 Ether over 50 seconds"
|
||||||
|
})
|
||||||
|
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "CONTROL" })
|
||||||
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_QRath })
|
||||||
|
.AddPart(new EntityRequirementModel
|
||||||
|
{
|
||||||
|
Id = DataType.BUILDING_Acropolis,
|
||||||
|
Requirement = RequirementType.Morph
|
||||||
|
})
|
||||||
|
.AddPart(new EntityProductionModel { Alloy = 50, Cooldown = 50, RequiresWorker = false })
|
||||||
|
.AddPart(new EntityHarvestModel
|
||||||
|
{
|
||||||
|
HarvestedPerInterval = 5, RequiresWorker = false, Resource = ResourceType.Ether, Slots = 1,
|
||||||
|
TotalAmount = 100
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
DataType.BUILDING_ApostleOfBinding,
|
DataType.BUILDING_ApostleOfBinding,
|
||||||
@@ -3918,7 +3962,7 @@ public abstract class DATA
|
|||||||
DataType.BUPGRADE_GodHeart,
|
DataType.BUPGRADE_GodHeart,
|
||||||
new EntityModel(DataType.BUPGRADE_GodHeart, EntityType.Building_Upgrade)
|
new EntityModel(DataType.BUPGRADE_GodHeart, EntityType.Building_Upgrade)
|
||||||
.AddPart(new EntityInfoModel { Name = "God Heart", Descriptive = DescriptiveType.Upgrade })
|
.AddPart(new EntityInfoModel { Name = "God Heart", Descriptive = DescriptiveType.Upgrade })
|
||||||
.AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
|
.AddPart(new EntityHotkeyModel { Hotkey = "A", HotkeyGroup = "CONTROL" })
|
||||||
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
||||||
.AddPart(new EntityVitalityModel
|
.AddPart(new EntityVitalityModel
|
||||||
{ Health = 3100, DefenseLayer = 900, Armor = ArmorType.Heavy, IsStructure = true })
|
{ Health = 3100, DefenseLayer = 900, Armor = ArmorType.Heavy, IsStructure = true })
|
||||||
@@ -3944,7 +3988,7 @@ public abstract class DATA
|
|||||||
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
|
Name = "Mining Level 2", Descriptive = DescriptiveType.Upgrade,
|
||||||
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
|
Description = "Upgrades the nearest resource cluster to allow more workers to mine from it."
|
||||||
})
|
})
|
||||||
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "CONTROL" })
|
.AddPart(new EntityHotkeyModel { Hotkey = "Q", HotkeyGroup = "CONTROL" })
|
||||||
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
.AddPart(new EntityFactionModel { Faction = DataType.FACTION_Aru })
|
||||||
.AddPart(new EntityRequirementModel
|
.AddPart(new EntityRequirementModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -84,10 +84,13 @@ public static class DataType
|
|||||||
public static string BUILDING_ApostleOfBinding = nameof(BUILDING_ApostleOfBinding);
|
public static string BUILDING_ApostleOfBinding = nameof(BUILDING_ApostleOfBinding);
|
||||||
public static string BUILDING_GroveHeart = nameof(BUILDING_GroveHeart);
|
public static string BUILDING_GroveHeart = nameof(BUILDING_GroveHeart);
|
||||||
public static string BUILDING_EtherMaw = nameof(BUILDING_EtherMaw);
|
public static string BUILDING_EtherMaw = nameof(BUILDING_EtherMaw);
|
||||||
public static string BUPGRADE_MiningLevel2_QRath = "d7beb217-8eaf-4f88-8882-05bd7e0fbebd";
|
|
||||||
public static string BUPGRADE_MiningLevel3_QRath = "2b7d0da9-a897-4d3e-b9bd-3ec4a7c95d2c";
|
public static string BUPGRADE_MiningLevel2_QRath = nameof(BUPGRADE_MiningLevel2_QRath);
|
||||||
public static string BUPGRADE_MiningLevel2_Aru = "ffa76506-470b-4a67-acc6-3dc9686df004";
|
public static string BUPGRADE_MiningLevel2_Aru = nameof(BUPGRADE_MiningLevel2_Aru);
|
||||||
public static string BUPGRADE_MiningLevel3_Aru = "010b3279-472d-4d54-9a85-ebc5c664ee73";
|
public static string CONVERSION_EtherSruge_QRath = nameof(CONVERSION_EtherSruge_QRath);
|
||||||
|
public static string CONVERSION_EtherSruge_Aru = nameof(CONVERSION_EtherSruge_Aru);
|
||||||
|
|
||||||
|
|
||||||
public static string BUPGRADE_GodHeart = nameof(BUPGRADE_GodHeart);
|
public static string BUPGRADE_GodHeart = nameof(BUPGRADE_GodHeart);
|
||||||
public static string BUPGRADE_Omnivore = nameof(BUPGRADE_Omnivore);
|
public static string BUPGRADE_Omnivore = nameof(BUPGRADE_Omnivore);
|
||||||
public static string BUILDING_LegionHall = nameof(BUILDING_LegionHall);
|
public static string BUILDING_LegionHall = nameof(BUILDING_LegionHall);
|
||||||
|
|||||||
@@ -4,6 +4,12 @@ public enum KeyType
|
|||||||
{
|
{
|
||||||
Action,
|
Action,
|
||||||
ControlGroup,
|
ControlGroup,
|
||||||
|
|
||||||
|
Army,
|
||||||
|
Train,
|
||||||
|
Research,
|
||||||
|
Construct,
|
||||||
|
|
||||||
Cancel,
|
Cancel,
|
||||||
Advance,
|
Advance,
|
||||||
Economy,
|
Economy,
|
||||||
|
|||||||
@@ -4,22 +4,31 @@ namespace Model.Hotkeys;
|
|||||||
|
|
||||||
public class HotkeyModel
|
public class HotkeyModel
|
||||||
{
|
{
|
||||||
public static readonly string[] KeyGroups = { "Z", "1", "2", "TAB", "CONTROL", "SHIFT", "C" };
|
public static readonly string[] KeyGroups = { "Z", "1", "2", "X", "CONTROL", "SHIFT", "C" };
|
||||||
public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V", "CAPSLOCK" };
|
public static readonly string[] HotKeys = { "`", "Q", "W", "E", "R", "A", "S", "F", "X", "V", "CAPSLOCK", "TAB" };
|
||||||
public string KeyText { get; set; }
|
public string KeyText { get; set; }
|
||||||
public KeyType KeyType { get; set; }
|
public KeyType KeyType { get; set; }
|
||||||
public int PositionX { get; set; }
|
public int PositionX { get; set; }
|
||||||
public int PositionY { get; set; }
|
public int PositionY { get; set; }
|
||||||
public bool IsHidden { get; set; }
|
public bool IsHidden { get; set; }
|
||||||
|
|
||||||
|
public int Width { get; set; } = 1;
|
||||||
|
|
||||||
public string GetColor()
|
public string GetColor()
|
||||||
{
|
{
|
||||||
return KeyType == KeyType.Action ? "#404146"
|
return KeyType == KeyType.Action ? "#404146"
|
||||||
: KeyType == KeyType.Cancel ? "#621b1b"
|
: KeyType == KeyType.Cancel ? "#621b1b"
|
||||||
: KeyType == KeyType.ControlGroup ? "#443512"
|
: KeyType == KeyType.ControlGroup ? "#443512"
|
||||||
|
|
||||||
|
: KeyType == KeyType.Army ? "#443512"
|
||||||
|
: KeyType == KeyType.Train ? "#124443"
|
||||||
|
: KeyType == KeyType.Research ? "#221244"
|
||||||
|
: KeyType == KeyType.Construct ? "#122844"
|
||||||
|
: KeyType == KeyType.Pyre ? "#441212"
|
||||||
|
|
||||||
: KeyType == KeyType.Advance ? "#23262c"
|
: KeyType == KeyType.Advance ? "#23262c"
|
||||||
: KeyType == KeyType.Economy ? "#262c23"
|
: KeyType == KeyType.Economy ? "#262c23"
|
||||||
: KeyType == KeyType.Pyre ? "#440e2c"
|
|
||||||
: "#37393F";
|
: "#37393F";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,45 +39,51 @@ public class HotkeyModel
|
|||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "Z",
|
KeyText = "Z",
|
||||||
KeyType = KeyType.ControlGroup,
|
KeyType = KeyType.Train,
|
||||||
PositionX = 0,
|
PositionX = 1,
|
||||||
PositionY = 0
|
PositionY = 3
|
||||||
},
|
},
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "D",
|
KeyText = "D",
|
||||||
KeyType = KeyType.ControlGroup,
|
KeyType = KeyType.Army,
|
||||||
PositionX = 1,
|
PositionX = 3,
|
||||||
PositionY = 0
|
PositionY = 2
|
||||||
},
|
},
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "C",
|
KeyText = "C",
|
||||||
KeyType = KeyType.ControlGroup,
|
KeyType = KeyType.Construct,
|
||||||
PositionX = 2,
|
PositionX = 3,
|
||||||
PositionY = 0
|
PositionY = 3
|
||||||
},
|
},
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "V",
|
KeyText = "V",
|
||||||
KeyType = KeyType.Pyre,
|
KeyType = KeyType.Pyre,
|
||||||
PositionX = 3,
|
PositionX = 4,
|
||||||
PositionY = 0
|
PositionY = 3
|
||||||
},
|
},
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "TAB",
|
KeyText = "X",
|
||||||
KeyType = KeyType.ControlGroup,
|
KeyType = KeyType.Research,
|
||||||
PositionX = 4,
|
PositionX = 2,
|
||||||
PositionY = 0
|
PositionY = 3
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
KeyText = "`",
|
KeyText = "`",
|
||||||
KeyType = KeyType.Cancel,
|
KeyType = KeyType.Cancel,
|
||||||
PositionX = 0,
|
PositionX = 0,
|
||||||
|
PositionY = 0
|
||||||
|
},
|
||||||
|
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
KeyText = "TAB",
|
||||||
|
KeyType = KeyType.Action,
|
||||||
|
PositionX = 0,
|
||||||
PositionY = 1
|
PositionY = 1
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -143,7 +158,8 @@ public class HotkeyModel
|
|||||||
KeyText = "SPACE",
|
KeyText = "SPACE",
|
||||||
KeyType = KeyType.Advance,
|
KeyType = KeyType.Advance,
|
||||||
PositionX = 1,
|
PositionX = 1,
|
||||||
PositionY = 3
|
PositionY = 4,
|
||||||
|
Width = 4
|
||||||
},
|
},
|
||||||
// Economy
|
// Economy
|
||||||
new()
|
new()
|
||||||
|
|||||||
@@ -107,12 +107,9 @@ public class EconomyComparisionService : IEconomyComparisonService
|
|||||||
{
|
{
|
||||||
var townHall = buildToCompare.GetTownHallEntity;
|
var townHall = buildToCompare.GetTownHallEntity;
|
||||||
var townHallMining2 = buildToCompare.GetTownHallMining2Entity;
|
var townHallMining2 = buildToCompare.GetTownHallMining2Entity;
|
||||||
var townHallMining3 = buildToCompare.GetTownHallMining3Entity;
|
|
||||||
|
|
||||||
Add(townHall, buildToCompare, time);
|
Add(townHall, buildToCompare, time);
|
||||||
Add(townHallMining2, buildToCompare, time + townHall.Production()!.BuildTime);
|
Add(townHallMining2, buildToCompare, time + townHall.Production()!.BuildTime);
|
||||||
Add(townHallMining3, buildToCompare,
|
|
||||||
time + townHall.Production()!.BuildTime + townHallMining2.Production()!.BuildTime);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CalculateEconomy(buildToCompare);
|
CalculateEconomy(buildToCompare);
|
||||||
|
|||||||
Reference in New Issue
Block a user