diff --git a/Components/Inputs/EntityLabelComponent.razor b/Components/Inputs/EntityLabelComponent.razor
index ae888b3..16942d0 100644
--- a/Components/Inputs/EntityLabelComponent.razor
+++ b/Components/Inputs/EntityLabelComponent.razor
@@ -22,15 +22,8 @@ else
private EntityModel Entity => DATA.Get()[EntityId];
- protected override void OnInitialized()
- {
- Console.Write(Entity.Info().Name);
- }
-
void EntityLabelClicked()
{
- Console.WriteLine("EntityLabelClicked()");
-
entityDialogService.AddDialog(EntityId);
}
}
\ No newline at end of file
diff --git a/Components/Navigation/DesktopNavComponent.razor b/Components/Navigation/DesktopNavComponent.razor
index f9e35a1..be3f19b 100644
--- a/Components/Navigation/DesktopNavComponent.razor
+++ b/Components/Navigation/DesktopNavComponent.razor
@@ -26,7 +26,7 @@
{
}
@@ -141,7 +141,6 @@
void MenuClicked(int menuName)
{
- Console.WriteLine($"MenuClicked {menuName}");
navigationService.ChangeNavigationSectionId(menuName);
}
@@ -152,7 +151,6 @@
void HoverOut(MouseEventArgs mouseEventArgs)
{
- Console.WriteLine(NavigationStateType.Default);
navigationService.ChangeNavigationState(NavigationStateType.Default);
}
diff --git a/IGP/Database.db b/IGP/Database.db
index b9a2e88..1e2c35a 100644
Binary files a/IGP/Database.db and b/IGP/Database.db differ
diff --git a/IGP/Dialog/EntityDialogComponent.razor b/IGP/Dialog/EntityDialogComponent.razor
index 5890b19..d5357dc 100644
--- a/IGP/Dialog/EntityDialogComponent.razor
+++ b/IGP/Dialog/EntityDialogComponent.razor
@@ -155,7 +155,6 @@
entity = DATA.Get()[entityDialogService.GetEntityId()];
refresh++;
- Console.WriteLine("OnUpdate()");
StateHasChanged();
}
diff --git a/IGP/Pages/Agile/Parts/SprintComponent.razor b/IGP/Pages/Agile/Parts/SprintComponent.razor
index eba8245..a0d716a 100644
--- a/IGP/Pages/Agile/Parts/SprintComponent.razor
+++ b/IGP/Pages/Agile/Parts/SprintComponent.razor
@@ -110,9 +110,6 @@
}
-
-
-
.taskContainer.@StatusType.In_Progress.ToLower() {
border-color: #030129;
background-color: #2c3a4c;
@@ -144,6 +141,10 @@
border-width: 8px;
}
+.taskContainer.@TaskType.Document.ToLower() {
+ border-style: dashed;
+ border-width: 2px;
+ }
.taskName {
font-weight: bold;
diff --git a/IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor b/IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor
index bf0e5e5..3112bda 100644
--- a/IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor
+++ b/IGP/Pages/Database/Entity/Parts/EntityAbilitiesComponent.razor
@@ -33,6 +33,12 @@
- Energy: @production.Energy
}
+ @if (!production.DefensiveLayer.Equals(0))
+ {
+
+ - Shields: @production.DefensiveLayer
+
+ }
if (production.BuildTime != 0)
{
@@ -84,6 +90,12 @@
Energy: @production.Energy
}
+ @if (!production.DefensiveLayer.Equals(0))
+ {
+
+ Shields: @production.DefensiveLayer
+
+ }
if (production.BuildTime != 0)
{
diff --git a/IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor b/IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor
index aa3e54c..98f38ca 100644
--- a/IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor
+++ b/IGP/Pages/Database/Entity/Parts/EntityPassivesComponent.razor
@@ -15,7 +15,7 @@
- Name: @info.Name
+ Passive Name: @info.Name
- Description: @((MarkupString)info.Description)
@@ -54,7 +54,7 @@
var requirementModel = DATA.Get()[requirement.Id];
- @requirement.Requirement.Replace("_", " "): @requirementModel.Info().Name
+ - @requirement.Requirement.Replace("_", " "): @requirementModel.Info().Name
}
diff --git a/IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor b/IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor
index f4eb25d..8a497e7 100644
--- a/IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor
+++ b/IGP/Pages/Database/Entity/Parts/EntityProductionComponent.razor
@@ -42,6 +42,12 @@
Pyre: @Production.Pyre
}
+ @if (!Production.Pyre.Equals(0))
+ {
+
+ Shields: @Production.DefensiveLayer
+
+ }
@if (!Production.BuildTime.Equals(0))
{
@@ -128,6 +134,12 @@
Pyre: @Production.Pyre
}
+ @if (!Production.DefensiveLayer.Equals(0))
+ {
+
+ Shields: @Production.DefensiveLayer
+
+ }
@if (!Production.BuildTime.Equals(0))
{
diff --git a/IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor b/IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor
index e6d8907..dae73f9 100644
--- a/IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor
+++ b/IGP/Pages/Database/Entity/Parts/EntityStatsComponent.razor
@@ -23,6 +23,13 @@
Energy: @Vitality.Energy
}
+ @if (!Vitality.Lasts.Equals(0))
+ {
+
+ Lasts: @Vitality.Lasts.ToString()s
+
+ }
+
@if (Vitality.Armor != "")
{
@@ -92,6 +99,12 @@
Energy: @Vitality.Energy
}
+ @if (!Vitality.Lasts.Equals(0))
+ {
+
+ Lasts: @Vitality.Lasts.ToString()s
+
+ }
@if (Vitality.Armor != "")
{
diff --git a/IGP/Program.cs b/IGP/Program.cs
index c29c579..611e216 100644
--- a/IGP/Program.cs
+++ b/IGP/Program.cs
@@ -20,7 +20,6 @@ builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.
builder.Services.AddLocalization();
-
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
@@ -30,9 +29,15 @@ builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
-
+builder.Services.AddSingleton();
builder.Services.AddSingleton();
-
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
builder.Services.AddSingleton(new HttpClient
{
@@ -40,8 +45,6 @@ builder.Services.AddSingleton(new HttpClient
});
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
#if NO_SQL
@@ -49,11 +52,6 @@ builder.Services.AddSingleton();
//builder.Services.AddDbContext(options => { options.UseSqlite("Data Source=./Database.db"); });
#endif
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
await builder.Build().RunAsync();
diff --git a/IGP/wwwroot/content/notes/settings/hotkeys.md b/IGP/wwwroot/content/notes/settings/hotkeys.md
index f975a0d..f68f9a5 100644
--- a/IGP/wwwroot/content/notes/settings/hotkeys.md
+++ b/IGP/wwwroot/content/notes/settings/hotkeys.md
@@ -7,7 +7,7 @@ updated_date: 4/13/2022
In the pre-alpha, IGP comes with some Unreal default hotkey setup.
-This document will explain how to setup, modify, and use a new hotkey setup.
+This document will explain how to set up, modify, and use a new hotkey setup.
## Save the "Input.ini" file
@@ -104,7 +104,7 @@ You can notice a single line of this file can be broken down like this.
## Modify the Input.ini file
-Your now going to want to modify the file with your own hotkey setup.
+You are now going to want to modify the file with your own hotkey setup.
To do this, replace any of the Key=`VALUE` mapped to the desired actions with any value from the list below.
diff --git a/IGP/wwwroot/generated/AgileSprintModels.json b/IGP/wwwroot/generated/AgileSprintModels.json
index d5e881d..568ff7c 100644
--- a/IGP/wwwroot/generated/AgileSprintModels.json
+++ b/IGP/wwwroot/generated/AgileSprintModels.json
@@ -1 +1 @@
-[{"Id":1,"Name":"Agile Sprint","Description":"Changelogs and sprint views were going to be pushed till later, but I am feeling inspired by the IGP Content Creators\u0027 minimum weekly lifecycle requirement. So I am going to focus on agile-related tasks, and handle roadmap tasks after this initial sprint. All weekly sprints will release on Sunday, starting next Sunday.","StartDate":"2022-02-14T00:00:00","EndDate":"2022-02-20T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":2,"Name":"SQL Update","Description":"The SQL update is big enough to be a full sprint in of itself, and I spent less time this week for development. Will just extend sprint by 2 week, and remove all non SQL tasks from the sprint.","StartDate":"2022-02-20T00:00:00","EndDate":"2022-03-27T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":3,"Name":"Database Page","Description":"Improvements to the Database page","StartDate":"2022-03-27T00:00:00","EndDate":"2022-04-03T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":4,"Name":"Branding","Description":"Improve streaming branding around the website","StartDate":"2022-04-03T00:00:00","EndDate":"2022-04-10T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":5,"Name":"Calculators","Description":"Improve Calculators","StartDate":"2022-04-10T00:00:00","EndDate":"2022-04-24T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":6,"Name":"Infrastructure Misc","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":7,"Name":"Damage Calculator and Lists","Description":"Sort unit data by damage output. Select a attack and defense unit to see hits to kill.","StartDate":"2022-05-08T00:00:00","EndDate":"2022-05-22T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":8,"Name":"More Test Automation and CI","Description":"More test automation work. Integrate into CI","StartDate":"2022-05-22T00:00:00","EndDate":"2022-06-05T00:00:00","Notes":null,"AgileTaskModels":[]}]
\ No newline at end of file
+[{"Id":0,"Name":"Easy Tasks","Description":"General tasks that I can grab when too tired to program","StartDate":null,"EndDate":null,"Notes":null,"AgileTaskModels":[]},{"Id":1,"Name":"Agile Sprint","Description":"Changelogs and sprint views were going to be pushed till later, but I am feeling inspired by the IGP Content Creators\u0027 minimum weekly lifecycle requirement. So I am going to focus on agile-related tasks, and handle roadmap tasks after this initial sprint. All weekly sprints will release on Sunday, starting next Sunday.","StartDate":"2022-02-14T00:00:00","EndDate":"2022-02-20T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":2,"Name":"SQL Update","Description":"The SQL update is big enough to be a full sprint in of itself, and I spent less time this week for development. Will just extend sprint by 2 week, and remove all non SQL tasks from the sprint.","StartDate":"2022-02-20T00:00:00","EndDate":"2022-03-27T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":3,"Name":"Database Page","Description":"Improvements to the Database page","StartDate":"2022-03-27T00:00:00","EndDate":"2022-04-03T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":4,"Name":"Branding","Description":"Improve streaming branding around the website","StartDate":"2022-04-03T00:00:00","EndDate":"2022-04-10T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":5,"Name":"Calculators","Description":"Improve Calculators","StartDate":"2022-04-10T00:00:00","EndDate":"2022-04-24T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":6,"Name":"Infrastructure Misc","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":7,"Name":"Damage Calculator and Lists","Description":"Sort unit data by damage output. Select a attack and defense unit to see hits to kill.","StartDate":"2022-05-08T00:00:00","EndDate":"2022-05-22T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":8,"Name":"More Test Automation and CI","Description":"More test automation work. Integrate into CI","StartDate":"2022-05-22T00:00:00","EndDate":"2022-06-05T00:00:00","Notes":null,"AgileTaskModels":[]}]
\ No newline at end of file
diff --git a/IGP/wwwroot/generated/AgileTaskModels.json b/IGP/wwwroot/generated/AgileTaskModels.json
index d6f6beb..0c7acdb 100644
--- a/IGP/wwwroot/generated/AgileTaskModels.json
+++ b/IGP/wwwroot/generated/AgileTaskModels.json
@@ -1 +1 @@
-[{"Id":1,"AgileSprintModelId":null,"Name":"Support Safari","Description":"Consider other web browsers.","Notes":"Added","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":2,"AgileSprintModelId":2,"Name":"Filter Patch Notes","Description":"You should be showing people what they really want to see in the patch notes.","Notes":"Added","Status":"Done","Priority":"Blocker","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":3,"AgileSprintModelId":5,"Name":"Consider Pyre","Description":"Add Pyre Income. Make it so you can take Pyre Camps and Pyre Miners","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":4,"AgileSprintModelId":5,"Name":"Optimizations","Description":"Build Calculator should be usable.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":5,"AgileSprintModelId":5,"Name":"Change Attack Timing Interval","Description":"Be able to set attack timing.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":6,"AgileSprintModelId":5,"Name":"Add Pyre Spells","Description":"Make Pyre Spells castable and consume Pyre on build order","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":7,"AgileSprintModelId":null,"Name":"Default builds (Rush Thrones)","Description":"Add a dropdown list of default builds.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":8,"AgileSprintModelId":null,"Name":"Load older builds","Description":"Be able to load older builds. How are you going to handle auto correct to current patch?","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":9,"AgileSprintModelId":null,"Name":"How to use Build Calculator step by step","Description":"Need docs","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":10,"AgileSprintModelId":null,"Name":"Compare Health and Damage","Description":"Refer to community example spreadsheet.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":11,"AgileSprintModelId":null,"Name":"Compare Unit\u0027s Damage with it\u0027s own costs","Description":"Refer to community example spreadsheet.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":12,"AgileSprintModelId":4,"Name":"View one unit stats from a link. Make YAML copy and paste","Description":"Design so people can easily copy and paste data into discord","Notes":"Ended up not using exact Yaml. Button in Database controls Detailed vs Plain display ","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":13,"AgileSprintModelId":2,"Name":"Look into SQL","Description":"You really should be using SQL.","Notes":"Agile and Change log pages now use SQL","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":14,"AgileSprintModelId":1,"Name":"Mobile Menu","Description":"You need a real mobile menu. Viewers don\u0027t scroll below the fold, so no one is going to know what happens when you click a button on phones.","Notes":"Added smaller menus for tablets and phones.","Status":"Done","Priority":"High","Task":"Feature","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":15,"AgileSprintModelId":2,"Name":"Acropolis Consume Mote","Description":"The Mote is suppose to be consumed when making a Town Hall.","Notes":"Fixed","Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":16,"AgileSprintModelId":5,"Name":"Multiple Travel Time in Harass Calculator","Description":"Travel time should be based on the amount of bases used. 3 bases is 3 travel times.","Notes":"Add notes...","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-02-18T00:00:00","Finished":null},{"Id":17,"AgileSprintModelId":1,"Name":"Update Database to 0.0.6.8375a","Description":"Xacal tech change, and Hallower damage change. Update Godhead text.","Notes":"Done","Status":"Done","Priority":"None","Task":"Feature","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":18,"AgileSprintModelId":null,"Name":"Patch History Viewer","Description":"Add an ability to compare patches, to see all nerfs and buffs made between them.","Notes":"Inspired by Zkay\u0027s post on discord, where he details a possible \u0027patch history viewer\u0027 implementation.","Status":"Fun_Idea","Priority":"None","Task":"Feature","OrderPriority":5,"Created":"2022-02-16T00:00:00","Finished":null},{"Id":19,"AgileSprintModelId":1,"Name":"Twitch Page","Description":"Did a ~3 hour test stream, and was personal quite happy with the quality. Make Twitch page, and stream patch, sprint planning and development on Sunday.","Notes":"Page added under General, and named \u0022Streams\u0022.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-16T00:00:00","Finished":"2022-02-16T00:00:00"},{"Id":20,"AgileSprintModelId":1,"Name":"Finish the database","Description":"Add more descriptions for everything. Reduce any data duplication with ids. Add upgrade connections. Add ability connections. Add passives and passives connections.","Notes":"Good enough for now","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":21,"AgileSprintModelId":1,"Name":"Change Log View","Description":"Add a log to view last changes.","Notes":"Added changelog page. Shows Today, X Days Ago, or exact date if patch is over a week old.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-14T00:00:00","Finished":"2022-02-14T00:00:00"},{"Id":22,"AgileSprintModelId":1,"Name":"Agile View","Description":"Add the agile view.","Notes":"Finished.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-17T00:00:00"},{"Id":23,"AgileSprintModelId":1,"Name":"GUID for Ids","Description":"Stop using enums for ids, and start using guids. Enums are just too limited, I lose out on component and inheritance design with them. Replace all your enums with guids, rip off the bandaid.","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":24,"AgileSprintModelId":1,"Name":"Co-op overview","Description":"Write some sort of blog on co-op gameplay so you have something the feels very content-ish. Maybe make it a video.","Notes":"Finished and released early.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-12T00:00:00"},{"Id":25,"AgileSprintModelId":1,"Name":"Mobile UI","Description":"Make website work on mobile.","Notes":"Should be good. Will test on phone later.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-15T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":26,"AgileSprintModelId":1,"Name":"Add Making Of View","Description":"View to reference UI designs. Nicely encourages the pratice of making the UI code a lot cleaner.","Notes":"Good enough for now","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":27,"AgileSprintModelId":3,"Name":"Close Nav Menu on Navigation","Description":"Close Nav Menu on Navigation","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":28,"AgileSprintModelId":3,"Name":"Add Passive Descriptions and Passive","Description":"Have to guess on a bunch of passives","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-31T00:00:00"},{"Id":29,"AgileSprintModelId":3,"Name":"Tooltips that show referenced units","Description":"I should see any referenced unit by hovering over it","Notes":"Links can now go to links which can go to links.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-01T00:00:00"},{"Id":30,"AgileSprintModelId":null,"Name":"Update Logo for Website","Description":"After color scheme is picked","Notes":null,"Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":31,"AgileSprintModelId":3,"Name":"Documentation page","Description":"Add documents on how to maintain website","Notes":"Added start of documents","Status":"Done","Priority":"Low","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":32,"AgileSprintModelId":null,"Name":"Test Automation","Description":"Selenium Tests","Notes":"Start adding IDs to everything","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":33,"AgileSprintModelId":null,"Name":"Unit Test","Description":"Add some unit tests","Notes":null,"Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":34,"AgileSprintModelId":4,"Name":"Fully Transfer everything to SQL","Description":"Need to regenerate the database once everthing is fully transfered","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-09T00:00:00"},{"Id":35,"AgileSprintModelId":3,"Name":"Adding a loading Component","Description":"For JSON loading","Notes":"Added loading component to Agile and Changelog screens","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":36,"AgileSprintModelId":3,"Name":"Optimize Loading of Data","Description":"Currently loading non Agile stuff on Agile page","Notes":"Moved SQL database injection to app root","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":37,"AgileSprintModelId":3,"Name":"Convert Notes to Markdown","Description":"Using Markdown and generating the Note pages seems like a better solution to SQL or hardcoding data","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-01T00:00:00"},{"Id":38,"AgileSprintModelId":3,"Name":"Improve Entity Filter Options","Description":"The options I give you is strange, given it filers on Faction type","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-04-01T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":39,"AgileSprintModelId":4,"Name":"Refresh Database Bug","Description":"Database dialog UI isn\u0027t refreshing enough","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-04-03T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":40,"AgileSprintModelId":4,"Name":"Branding Stuff","Description":"Add a schedule, improving branding, etc, ","Notes":"Only improved Twitch overlays","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-03T00:00:00","Finished":"2022-04-10T00:00:00"},{"Id":41,"AgileSprintModelId":4,"Name":"Improve Documents/Notes UI","Description":"Should have a left navigation menu. And prev/next buttons","Notes":"Updated UI. Will added prev/next and breadcrumbs later","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-05T00:00:00","Finished":"2022-04-10T00:00:00"},{"Id":42,"AgileSprintModelId":5,"Name":"Add GitHub links instead of showing code","Description":"For all code examples","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":43,"AgileSprintModelId":5,"Name":"Research More used RTS calculations","Description":"What other calculators like the Harass Page can be added","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2001-01-01T00:00:00","Finished":null},{"Id":44,"AgileSprintModelId":5,"Name":"Add Error Toasts to Calculator","Description":"Not enough \u0022Ether\u0022","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":45,"AgileSprintModelId":5,"Name":"Handle Divide by Zero in Harass Calculator","Description":"addDescription","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":46,"AgileSprintModelId":5,"Name":"Harass Calculator first user experience","Description":"Navigate player though the harass calculator steps","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":47,"AgileSprintModelId":5,"Name":"Training Queue","Description":"Add training queue times to the build calculator","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":48,"AgileSprintModelId":5,"Name":"Refresh Button for Build Calculator","Description":"Refresh to regenerate timeline and charts","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":49,"AgileSprintModelId":5,"Name":"Gameplay Warning State Toasts","Description":"\u0022You should upgrade your economy.\u0022 \u0022Your using too much ether, spend alloy\u0022","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":50,"AgileSprintModelId":5,"Name":"Make desktop navigation buttons","Description":"It popping up all the time is a tad tedious","Notes":"addNotes","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":"2022-04-12T00:00:00"},{"Id":51,"AgileSprintModelId":5,"Name":"Working Timers","Description":"Toast dismiss timers not making sense. Look into proper Timers","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":52,"AgileSprintModelId":5,"Name":"Clean up Build Calculator code","Description":"Code needs to be easily readable so it can be updated, maintained, and optimized","Notes":"addNotes","Status":"In_Progress","Priority":"Medium","Task":"Feature","OrderPriority":1,"Created":"2022-04-12T00:00:00","Finished":null}]
\ No newline at end of file
+[{"Id":1,"AgileSprintModelId":null,"Name":"Support Safari","Description":"Consider other web browsers.","Notes":"Added","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":2,"AgileSprintModelId":2,"Name":"Filter Patch Notes","Description":"You should be showing people what they really want to see in the patch notes.","Notes":"Added","Status":"Done","Priority":"Blocker","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":3,"AgileSprintModelId":5,"Name":"Consider Pyre","Description":"Add Pyre Income. Make it so you can take Pyre Camps and Pyre Miners","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":4,"AgileSprintModelId":5,"Name":"Optimizations","Description":"Build Calculator should be usable.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":5,"AgileSprintModelId":5,"Name":"Change Attack Timing Interval","Description":"Be able to set attack timing.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":6,"AgileSprintModelId":5,"Name":"Add Pyre Spells","Description":"Make Pyre Spells castable and consume Pyre on build order","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":7,"AgileSprintModelId":null,"Name":"Default builds (Rush Thrones)","Description":"Add a dropdown list of default builds.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":8,"AgileSprintModelId":null,"Name":"Load older builds","Description":"Be able to load older builds. How are you going to handle auto correct to current patch?","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":9,"AgileSprintModelId":null,"Name":"How to use Build Calculator step by step","Description":"Need docs","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":10,"AgileSprintModelId":null,"Name":"Compare Health and Damage","Description":"Refer to community example spreadsheet.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":11,"AgileSprintModelId":null,"Name":"Compare Unit\u0027s Damage with it\u0027s own costs","Description":"Refer to community example spreadsheet.","Notes":"Add notes...","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":12,"AgileSprintModelId":4,"Name":"View one unit stats from a link. Make YAML copy and paste","Description":"Design so people can easily copy and paste data into discord","Notes":"Ended up not using exact Yaml. Button in Database controls Detailed vs Plain display ","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":13,"AgileSprintModelId":2,"Name":"Look into SQL","Description":"You really should be using SQL.","Notes":"Agile and Change log pages now use SQL","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-20T00:00:00","Finished":null},{"Id":14,"AgileSprintModelId":1,"Name":"Mobile Menu","Description":"You need a real mobile menu. Viewers don\u0027t scroll below the fold, so no one is going to know what happens when you click a button on phones.","Notes":"Added smaller menus for tablets and phones.","Status":"Done","Priority":"High","Task":"Feature","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":15,"AgileSprintModelId":2,"Name":"Acropolis Consume Mote","Description":"The Mote is suppose to be consumed when making a Town Hall.","Notes":"Fixed","Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-20T00:00:00"},{"Id":16,"AgileSprintModelId":5,"Name":"Multiple Travel Time in Harass Calculator","Description":"Travel time should be based on the amount of bases used. 3 bases is 3 travel times.","Notes":"Add notes...","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-02-18T00:00:00","Finished":null},{"Id":17,"AgileSprintModelId":1,"Name":"Update Database to 0.0.6.8375a","Description":"Xacal tech change, and Hallower damage change. Update Godhead text.","Notes":"Done","Status":"Done","Priority":"None","Task":"Feature","OrderPriority":3,"Created":"2022-02-18T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":18,"AgileSprintModelId":null,"Name":"Patch History Viewer","Description":"Add an ability to compare patches, to see all nerfs and buffs made between them.","Notes":"Inspired by Zkay\u0027s post on discord, where he details a possible \u0027patch history viewer\u0027 implementation.","Status":"Fun_Idea","Priority":"None","Task":"Feature","OrderPriority":5,"Created":"2022-02-16T00:00:00","Finished":null},{"Id":19,"AgileSprintModelId":1,"Name":"Twitch Page","Description":"Did a ~3 hour test stream, and was personal quite happy with the quality. Make Twitch page, and stream patch, sprint planning and development on Sunday.","Notes":"Page added under General, and named \u0022Streams\u0022.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-16T00:00:00","Finished":"2022-02-16T00:00:00"},{"Id":20,"AgileSprintModelId":1,"Name":"Finish the database","Description":"Add more descriptions for everything. Reduce any data duplication with ids. Add upgrade connections. Add ability connections. Add passives and passives connections.","Notes":"Good enough for now","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":21,"AgileSprintModelId":1,"Name":"Change Log View","Description":"Add a log to view last changes.","Notes":"Added changelog page. Shows Today, X Days Ago, or exact date if patch is over a week old.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-14T00:00:00","Finished":"2022-02-14T00:00:00"},{"Id":22,"AgileSprintModelId":1,"Name":"Agile View","Description":"Add the agile view.","Notes":"Finished.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-17T00:00:00"},{"Id":23,"AgileSprintModelId":1,"Name":"GUID for Ids","Description":"Stop using enums for ids, and start using guids. Enums are just too limited, I lose out on component and inheritance design with them. Replace all your enums with guids, rip off the bandaid.","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":24,"AgileSprintModelId":1,"Name":"Co-op overview","Description":"Write some sort of blog on co-op gameplay so you have something the feels very content-ish. Maybe make it a video.","Notes":"Finished and released early.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-12T00:00:00"},{"Id":25,"AgileSprintModelId":1,"Name":"Mobile UI","Description":"Make website work on mobile.","Notes":"Should be good. Will test on phone later.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-15T00:00:00","Finished":"2022-02-18T00:00:00"},{"Id":26,"AgileSprintModelId":1,"Name":"Add Making Of View","Description":"View to reference UI designs. Nicely encourages the pratice of making the UI code a lot cleaner.","Notes":"Good enough for now","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-02-11T00:00:00","Finished":"2022-02-19T00:00:00"},{"Id":27,"AgileSprintModelId":3,"Name":"Close Nav Menu on Navigation","Description":"Close Nav Menu on Navigation","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":28,"AgileSprintModelId":3,"Name":"Add Passive Descriptions and Passive","Description":"Have to guess on a bunch of passives","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-31T00:00:00"},{"Id":29,"AgileSprintModelId":3,"Name":"Tooltips that show referenced units","Description":"I should see any referenced unit by hovering over it","Notes":"Links can now go to links which can go to links.","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-01T00:00:00"},{"Id":30,"AgileSprintModelId":null,"Name":"Update Logo for Website","Description":"After color scheme is picked","Notes":null,"Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":31,"AgileSprintModelId":3,"Name":"Documentation page","Description":"Add documents on how to maintain website","Notes":"Added start of documents","Status":"Done","Priority":"Low","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":32,"AgileSprintModelId":null,"Name":"Test Automation","Description":"Selenium Tests","Notes":"Start adding IDs to everything","Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":33,"AgileSprintModelId":null,"Name":"Unit Test","Description":"Add some unit tests","Notes":null,"Status":"Todo","Priority":"Low","Task":"Feature","OrderPriority":2,"Created":"2022-03-27T00:00:00","Finished":null},{"Id":34,"AgileSprintModelId":4,"Name":"Fully Transfer everything to SQL","Description":"Need to regenerate the database once everthing is fully transfered","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-09T00:00:00"},{"Id":35,"AgileSprintModelId":3,"Name":"Adding a loading Component","Description":"For JSON loading","Notes":"Added loading component to Agile and Changelog screens","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":36,"AgileSprintModelId":3,"Name":"Optimize Loading of Data","Description":"Currently loading non Agile stuff on Agile page","Notes":"Moved SQL database injection to app root","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-03-27T00:00:00"},{"Id":37,"AgileSprintModelId":3,"Name":"Convert Notes to Markdown","Description":"Using Markdown and generating the Note pages seems like a better solution to SQL or hardcoding data","Notes":null,"Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-03-27T00:00:00","Finished":"2022-04-01T00:00:00"},{"Id":38,"AgileSprintModelId":3,"Name":"Improve Entity Filter Options","Description":"The options I give you is strange, given it filers on Faction type","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-04-01T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":39,"AgileSprintModelId":4,"Name":"Refresh Database Bug","Description":"Database dialog UI isn\u0027t refreshing enough","Notes":null,"Status":"Done","Priority":"High","Task":"Bug","OrderPriority":3,"Created":"2022-04-03T00:00:00","Finished":"2022-04-03T00:00:00"},{"Id":40,"AgileSprintModelId":4,"Name":"Branding Stuff","Description":"Add a schedule, improving branding, etc, ","Notes":"Only improved Twitch overlays","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-03T00:00:00","Finished":"2022-04-10T00:00:00"},{"Id":41,"AgileSprintModelId":4,"Name":"Improve Documents/Notes UI","Description":"Should have a left navigation menu. And prev/next buttons","Notes":"Updated UI. Will added prev/next and breadcrumbs later","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-05T00:00:00","Finished":"2022-04-10T00:00:00"},{"Id":42,"AgileSprintModelId":5,"Name":"Add GitHub links instead of showing code","Description":"For all code examples","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":43,"AgileSprintModelId":5,"Name":"Research More used RTS calculations","Description":"What other calculators like the Harass Page can be added","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2001-01-01T00:00:00","Finished":null},{"Id":44,"AgileSprintModelId":5,"Name":"Add Error Toasts to Calculator","Description":"Not enough \u0022Ether\u0022","Notes":"Add notes...","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":45,"AgileSprintModelId":5,"Name":"Handle Divide by Zero in Harass Calculator","Description":"addDescription","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":46,"AgileSprintModelId":5,"Name":"Harass Calculator first user experience","Description":"Navigate player though the harass calculator steps","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":47,"AgileSprintModelId":5,"Name":"Training Queue","Description":"Add training queue times to the build calculator","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":48,"AgileSprintModelId":5,"Name":"Refresh Button for Build Calculator","Description":"Refresh to regenerate timeline and charts","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":49,"AgileSprintModelId":5,"Name":"Gameplay Warning State Toasts","Description":"\u0022You should upgrade your economy.\u0022 \u0022Your using too much ether, spend alloy\u0022","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":50,"AgileSprintModelId":5,"Name":"Make desktop navigation buttons","Description":"It popping up all the time is a tad tedious","Notes":"addNotes","Status":"Done","Priority":"Medium","Task":"Feature","OrderPriority":3,"Created":"2022-04-10T00:00:00","Finished":"2022-04-12T00:00:00"},{"Id":51,"AgileSprintModelId":5,"Name":"Working Timers","Description":"Toast dismiss timers not making sense. Look into proper Timers","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-10T00:00:00","Finished":null},{"Id":52,"AgileSprintModelId":5,"Name":"Clean up Build Calculator code","Description":"Code needs to be easily readable so it can be updated, maintained, and optimized","Notes":"addNotes","Status":"In_Progress","Priority":"Medium","Task":"Feature","OrderPriority":1,"Created":"2022-04-12T00:00:00","Finished":null},{"Id":53,"AgileSprintModelId":0,"Name":"Armor Types","Description":"Explain Light, Medium and Heavy armor types, and damage works","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Document","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":54,"AgileSprintModelId":0,"Name":"Economy Overview","Description":"How long it takes bases to mine out. How good natruals area","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Document","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":55,"AgileSprintModelId":0,"Name":"Timing and Scouting","Description":"Attacking and reacting to what the enemy is doing","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Document","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":56,"AgileSprintModelId":0,"Name":"Families, Factions, and Immortal Vanguards","Description":"How factions could be viewed.","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Document","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":57,"AgileSprintModelId":0,"Name":"Immortals Spells and Pyre","Description":"Using your Immortal","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Document","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":58,"AgileSprintModelId":null,"Name":"Organize Sprint Order","Description":"Sprints should be ordered as, current sprint, previous sprint, backlog, easy tasks, future sprints, old sprints","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null},{"Id":59,"AgileSprintModelId":5,"Name":"Better Sorting Alogs","Description":"Be smarted with searching through and sorting lists","Notes":"addNotes","Status":"Todo","Priority":"Medium","Task":"Feature","OrderPriority":2,"Created":"2022-04-13T00:00:00","Finished":null}]
\ No newline at end of file
diff --git a/IGP/wwwroot/generated/GitChangeModels.json b/IGP/wwwroot/generated/GitChangeModels.json
index ba9820d..a261254 100644
--- a/IGP/wwwroot/generated/GitChangeModels.json
+++ b/IGP/wwwroot/generated/GitChangeModels.json
@@ -1 +1 @@
-[{"Id":1,"GitPatchModelId":1,"Name":"Shrink Header Navigation","Description":"The full header navigation is now only visible on desktop when hovered.","Commit":"Feature","Important":"False"},{"Id":2,"GitPatchModelId":1,"Name":"Database UX Update","Description":"Desktop Database Filter UI has been updated. It\u0027s now always visible.","Commit":"Feature","Important":"False"},{"Id":3,"GitPatchModelId":2,"Name":"Fixing Thrum Stats","Description":"Speed was too low. Health and Shields ratio is slightly different.","Commit":"Fix","Important":"False"},{"Id":4,"GitPatchModelId":3,"Name":"Memory Tester","Description":"Fun quick feature added while I rewrite my database. Tests memory of units ranges and speeds.","Commit":"Feature","Important":"False"},{"Id":5,"GitPatchModelId":3,"Name":"Privacy Policy Removed","Description":"Removed cringe privacy policy. It misses the issue. Will eventually add operational analytics and cookies, and add a more applicable Privacy Policy if needed. Not a priority though.","Commit":"Fix","Important":"False"},{"Id":6,"GitPatchModelId":3,"Name":"Input Tripling","Description":"Fixed a bug where inputs could get tripled on the Build Calculator.","Commit":"Fix","Important":"False"},{"Id":7,"GitPatchModelId":3,"Name":"Agile Changes","Description":"Updated Agile log to indicate the next 2 weeks will be spent on SQL","Commit":"Planning","Important":"False"},{"Id":8,"GitPatchModelId":4,"Name":"Hiding WIP Pyre Feature","Description":"Whoops, WIP Pyre feature accidentally got committed to production. Now hidden.","Commit":"Fix","Important":"False"},{"Id":9,"GitPatchModelId":5,"Name":"Build Calc Optimization","Description":"Improved speeds","Commit":"Fix","Important":"False"},{"Id":10,"GitPatchModelId":5,"Name":"Change Log Filter","Description":"Change log now defaults to showing only important patches","Commit":"Feature","Important":"False"},{"Id":11,"GitPatchModelId":5,"Name":"Motes Consumed","Description":"Motes now consumed in the build calculator when making a townhall.","Commit":"Fix","Important":"False"},{"Id":12,"GitPatchModelId":6,"Name":"Agile UI Tweaks","Description":"Making the agile text look a bit better before stream.","Commit":"Style","Important":"False"},{"Id":13,"GitPatchModelId":7,"Name":"Database Armor","Description":"Added missing armor display to database.","Commit":"Fix","Important":"False"},{"Id":14,"GitPatchModelId":8,"Name":"Home Page","Description":"Added a quick placeholder-ish homepage.","Commit":"Feature","Important":"False"},{"Id":15,"GitPatchModelId":8,"Name":"Database Army Default","Description":"Database UI now defaults to Army selection. Given most people are probably going to want to view the units.","Commit":"Fix","Important":"False"},{"Id":16,"GitPatchModelId":9,"Name":"Mobile Menu Back","Description":"You can now click the page after selecting a Section, to go back to Section nav.","Commit":"Fix","Important":"False"},{"Id":17,"GitPatchModelId":10,"Name":"Mobile Menu Fixed","Description":"Fixed the mobile menu not actually being positioned to the bottom of the screen on phones.","Commit":"Fix","Important":"False"},{"Id":18,"GitPatchModelId":11,"Name":"Tablet Menu","Description":"Added a hamburger nav menu for tablets.","Commit":"Feature","Important":"False"},{"Id":19,"GitPatchModelId":11,"Name":"Mobile Menu","Description":"Added a bottom nav menu for phones.","Commit":"Feature","Important":"False"},{"Id":20,"GitPatchModelId":12,"Name":"0.0.6.8375a","Description":"Database updated to 0.0.6.8375a","Commit":"Game Patch","Important":"True"},{"Id":21,"GitPatchModelId":12,"Name":"Database Descriptions","Description":"Added more text descriptions to buildings and etc..","Commit":"Feature","Important":"False"},{"Id":22,"GitPatchModelId":12,"Name":"Guids","Description":"Now using Guids and strings over enums. View in /raw-database page.","Commit":"Feature","Important":"False"},{"Id":23,"GitPatchModelId":12,"Name":"Mobile UI","Description":"Additional mobile UI improvements. Harass calculator now has fewer inputs that don\u0027t matter.","Commit":"Feature","Important":"False"},{"Id":24,"GitPatchModelId":12,"Name":"Bug Tasks","Description":"Added feature/bug task indicator to agile view. Added consume mote bug in build calculator to next sprint. (Calculator not consuming motes on Town Hall building)","Commit":"Feature","Important":"False"},{"Id":25,"GitPatchModelId":12,"Name":"Entity Display UI","Description":"Display UI improved. Build Calculator now uses the same Entity display UI as the Database.","Commit":"Style","Important":"False"},{"Id":26,"GitPatchModelId":13,"Name":"Removed Embedded YouTube","Description":"Having embedded videos makes my privacy policy look completely untrue. Removed the video (it\u0027s now a link) and added a message on the privacy policy to point out that the error occured.","Commit":"Fix","Important":"False"},{"Id":27,"GitPatchModelId":13,"Name":"Agile View Backlog","Description":"Added backlog rendering to the Agile View Page. Added priority level to better indicate what tasks have high or zero priority.","Commit":"Feature","Important":"False"},{"Id":28,"GitPatchModelId":14,"Name":"Privacy Policy Page","Description":"The privacy policy is now a page rather than a blurb on the About page.","Commit":"Feature","Important":"False"},{"Id":29,"GitPatchModelId":14,"Name":"Privacy Policy Update","Description":"I added information on how I use personal data. And a disclaimer that privacy can never be guaranteed.","Commit":"Privacy Policy","Important":"False"},{"Id":30,"GitPatchModelId":14,"Name":"Minor Tweaks","Description":"Minor UI changes and text fixes.","Commit":"None","Important":"False"},{"Id":31,"GitPatchModelId":15,"Name":"Homepage","Description":"Making Of page no longer shows on the homepage","Commit":"Fix","Important":"False"},{"Id":32,"GitPatchModelId":15,"Name":"DevOnly Component","Description":"Added a DevOnly component to wrap UI content that should not be released to production. I.e. the Homepage bug.","Commit":"Feature","Important":"False"},{"Id":33,"GitPatchModelId":16,"Name":"Agile View","Description":"Add an agile page to show current activities.","Commit":"Feature","Important":"False"},{"Id":34,"GitPatchModelId":16,"Name":"Rendering Entire Database","Description":"I can now render the database without lag. Not sure what fixed it.","Commit":"Fix","Important":"False"},{"Id":35,"GitPatchModelId":16,"Name":"Database Data","Description":"Added a ton of data to the database. Such as various descriptions. More work is still to be done.","Commit":"Feature","Important":"False"},{"Id":36,"GitPatchModelId":16,"Name":"Database Ids","Description":"Database has less duplicated content. Army entities now link to their Upgrades and Abilities. More work is still to be done.","Commit":"Feature","Important":"False"},{"Id":37,"GitPatchModelId":16,"Name":"Blades of the Godhead Requirement","Description":"Fixed the requirement incorrectly being the Eye of Aros. Now is properly Bearer of the Crown.","Commit":"Fix","Important":"False"},{"Id":38,"GitPatchModelId":16,"Name":"UI Changes","Description":"Various UI changes and tweaks","Commit":"Style","Important":"False"},{"Id":39,"GitPatchModelId":16,"Name":"Streams","Description":"Added a Streams page. It mentions plans to do Twitch streams on Sunday.","Commit":"Feature","Important":"False"},{"Id":40,"GitPatchModelId":16,"Name":"IMMORTAL","Description":"Fixed \u0022IMMORTAL: Gates of Pyre\u0022 game title. Will no longer refer to it as \u0022Immortal: Gates of Pyre\u0022.","Commit":"Typo","Important":"False"},{"Id":41,"GitPatchModelId":16,"Name":"Mobile Support","Description":"All the pages should now work on phones.","Commit":"Feature","Important":"False"},{"Id":42,"GitPatchModelId":17,"Name":"Form Text","Description":"Fixed search bar in database, name and colour in build calculator, from not rendering \uD83D\uDE10","Commit":"Fix","Important":"False"},{"Id":43,"GitPatchModelId":17,"Name":"UI Test Automation Road Map","Description":"Adding test automation to the roadmap","Commit":"Planning","Important":"False"},{"Id":44,"GitPatchModelId":18,"Name":"Build Calculator Interval","Description":"600 is too laggy. Reducing to 360 until optimizations are done.","Commit":"Fix","Important":"False"},{"Id":45,"GitPatchModelId":18,"Name":"Changelog Patch Date","Description":"Fixed date on previous patch in changelog. Should be one day earlier.","Commit":"Fix","Important":"False"},{"Id":46,"GitPatchModelId":19,"Name":"UI Overhaul","Description":"Cleaned up and restyled a lot of UI. Like Page Containers, Alerts, Forms, Nav Buttons, and more.","Commit":"Style","Important":"False"},{"Id":47,"GitPatchModelId":19,"Name":"Separate Pages","Description":"Navigation now uses different pages, instead of loading content onto the main page.","Commit":"Feature","Important":"False"},{"Id":48,"GitPatchModelId":19,"Name":"Making Of","Description":"Adding Making Of page for design reference.","Commit":"Feature","Important":"False"},{"Id":49,"GitPatchModelId":19,"Name":"Change Log","Description":"Adding Change Log page for viewing update history.","Commit":"Feature","Important":"False"},{"Id":50,"GitPatchModelId":19,"Name":"Mobile Priority","Description":"Changed mobile support priority in roadmap from low and possible to high and planned, and updated description.","Commit":"Planning","Important":"False"},{"Id":51,"GitPatchModelId":20,"Name":"Purple Colours","Description":"Added placeholder-ish purple color scheme.","Commit":"Style","Important":"False"},{"Id":52,"GitPatchModelId":20,"Name":"SQL","Description":"Agile and Change Log pages now use JSON made from SQL","Commit":"Feature","Important":"False"},{"Id":53,"GitPatchModelId":21,"Name":"Discord Link","Description":"Made a discord for the website, and added invite link to contact page","Commit":"Feature","Important":"False"},{"Id":54,"GitPatchModelId":21,"Name":"Loading Improvemnts","Description":"Agile and Change Log loading improved","Commit":"Feature","Important":"False"},{"Id":55,"GitPatchModelId":21,"Name":"Desktop Nav closing","Description":"Desktop nav menu now closes when a page link is clicked","Commit":"Feature","Important":"False"},{"Id":56,"GitPatchModelId":22,"Name":"0.0.6.8900a","Description":"Database updated to 0.0.6.8900a","Commit":"Game Patch","Important":"True"},{"Id":57,"GitPatchModelId":23,"Name":"Database Links","Description":"Various entity references in the database now link to the entity via a dialog interface","Commit":"Feature","Important":"False"},{"Id":58,"GitPatchModelId":24,"Name":"Documentation Page","Description":"Added a docs page with some starter setup information","Commit":"Feature","Important":"False"},{"Id":59,"GitPatchModelId":24,"Name":"Database Filters","Description":"Fixed filter defaults. Removed unimportant filter types","Commit":"Fix","Important":"False"},{"Id":60,"GitPatchModelId":25,"Name":"Database Fixes","Description":"Various fixes to bad data. Added some missing entities","Commit":"Fix","Important":"False"},{"Id":61,"GitPatchModelId":25,"Name":"Plain View","Description":"Database can now change to plain view for easy copy and pasting","Commit":"Feature","Important":"False"},{"Id":62,"GitPatchModelId":25,"Name":"Direct Links","Description":"Database now supports direct links. database/Throne to see just Throne","Commit":"Feature","Important":"False"},{"Id":63,"GitPatchModelId":26,"Name":"Better Navigation","Description":"Documentational pages now use a more logical navigation format, with sections, and parent-child documents","Commit":"Feature","Important":"False"},{"Id":64,"GitPatchModelId":26,"Name":"Style Improvements","Description":"Improved home page styling on website highlighted content","Commit":"Style","Important":"False"},{"Id":65,"GitPatchModelId":26,"Name":"Warning Cleanup","Description":"Removed a bunch of development code warnings","Commit":"Chore","Important":"False"},{"Id":66,"GitPatchModelId":27,"Name":"Toasts","Description":"Added some error toasts to build calculator. Needs work","Commit":"Feature","Important":"False"},{"Id":67,"GitPatchModelId":27,"Name":"Localization Text","Description":"Added localization logic for handling some text. Currently only supporting English","Commit":"Feature","Important":"False"},{"Id":68,"GitPatchModelId":27,"Name":"GitHub Button","Description":"Harass Calculator now links to code in repo, instead of showing it as text","Commit":"Feature","Important":"False"},{"Id":69,"GitPatchModelId":28,"Name":"Markdown","Description":"Docs and Notes are now easily editable markdown files. Navigation will still be handled via SQL formatted data.","Commit":"Feature","Important":"False"},{"Id":70,"GitPatchModelId":28,"Name":"Passive Data","Description":"Added new passive data from Twitter post.","Commit":"Feature","Important":"True"},{"Id":71,"GitPatchModelId":28,"Name":"Toast Fade","Description":"Fixed toasts not fading out over time.","Commit":"Fix","Important":"False"},{"Id":72,"GitPatchModelId":28,"Name":"Click Desktop Menu","Description":"Added better menu navigation for desktop users.","Commit":"Feature","Important":"False"}]
\ No newline at end of file
+[{"Id":1,"GitPatchModelId":1,"Name":"Shrink Header Navigation","Description":"The full header navigation is now only visible on desktop when hovered.","Commit":"Feature","Important":"False"},{"Id":2,"GitPatchModelId":1,"Name":"Database UX Update","Description":"Desktop Database Filter UI has been updated. It\u0027s now always visible.","Commit":"Feature","Important":"False"},{"Id":3,"GitPatchModelId":2,"Name":"Fixing Thrum Stats","Description":"Speed was too low. Health and Shields ratio is slightly different.","Commit":"Fix","Important":"False"},{"Id":4,"GitPatchModelId":3,"Name":"Memory Tester","Description":"Fun quick feature added while I rewrite my database. Tests memory of units ranges and speeds.","Commit":"Feature","Important":"False"},{"Id":5,"GitPatchModelId":3,"Name":"Privacy Policy Removed","Description":"Removed cringe privacy policy. It misses the issue. Will eventually add operational analytics and cookies, and add a more applicable Privacy Policy if needed. Not a priority though.","Commit":"Fix","Important":"False"},{"Id":6,"GitPatchModelId":3,"Name":"Input Tripling","Description":"Fixed a bug where inputs could get tripled on the Build Calculator.","Commit":"Fix","Important":"False"},{"Id":7,"GitPatchModelId":3,"Name":"Agile Changes","Description":"Updated Agile log to indicate the next 2 weeks will be spent on SQL","Commit":"Planning","Important":"False"},{"Id":8,"GitPatchModelId":4,"Name":"Hiding WIP Pyre Feature","Description":"Whoops, WIP Pyre feature accidentally got committed to production. Now hidden.","Commit":"Fix","Important":"False"},{"Id":9,"GitPatchModelId":5,"Name":"Build Calc Optimization","Description":"Improved speeds","Commit":"Fix","Important":"False"},{"Id":10,"GitPatchModelId":5,"Name":"Change Log Filter","Description":"Change log now defaults to showing only important patches","Commit":"Feature","Important":"False"},{"Id":11,"GitPatchModelId":5,"Name":"Motes Consumed","Description":"Motes now consumed in the build calculator when making a townhall.","Commit":"Fix","Important":"False"},{"Id":12,"GitPatchModelId":6,"Name":"Agile UI Tweaks","Description":"Making the agile text look a bit better before stream.","Commit":"Style","Important":"False"},{"Id":13,"GitPatchModelId":7,"Name":"Database Armor","Description":"Added missing armor display to database.","Commit":"Fix","Important":"False"},{"Id":14,"GitPatchModelId":8,"Name":"Home Page","Description":"Added a quick placeholder-ish homepage.","Commit":"Feature","Important":"False"},{"Id":15,"GitPatchModelId":8,"Name":"Database Army Default","Description":"Database UI now defaults to Army selection. Given most people are probably going to want to view the units.","Commit":"Fix","Important":"False"},{"Id":16,"GitPatchModelId":9,"Name":"Mobile Menu Back","Description":"You can now click the page after selecting a Section, to go back to Section nav.","Commit":"Fix","Important":"False"},{"Id":17,"GitPatchModelId":10,"Name":"Mobile Menu Fixed","Description":"Fixed the mobile menu not actually being positioned to the bottom of the screen on phones.","Commit":"Fix","Important":"False"},{"Id":18,"GitPatchModelId":11,"Name":"Tablet Menu","Description":"Added a hamburger nav menu for tablets.","Commit":"Feature","Important":"False"},{"Id":19,"GitPatchModelId":11,"Name":"Mobile Menu","Description":"Added a bottom nav menu for phones.","Commit":"Feature","Important":"False"},{"Id":20,"GitPatchModelId":12,"Name":"0.0.6.8375a","Description":"Database updated to 0.0.6.8375a","Commit":"Game Patch","Important":"True"},{"Id":21,"GitPatchModelId":12,"Name":"Database Descriptions","Description":"Added more text descriptions to buildings and etc..","Commit":"Feature","Important":"False"},{"Id":22,"GitPatchModelId":12,"Name":"Guids","Description":"Now using Guids and strings over enums. View in /raw-database page.","Commit":"Feature","Important":"False"},{"Id":23,"GitPatchModelId":12,"Name":"Mobile UI","Description":"Additional mobile UI improvements. Harass calculator now has fewer inputs that don\u0027t matter.","Commit":"Feature","Important":"False"},{"Id":24,"GitPatchModelId":12,"Name":"Bug Tasks","Description":"Added feature/bug task indicator to agile view. Added consume mote bug in build calculator to next sprint. (Calculator not consuming motes on Town Hall building)","Commit":"Feature","Important":"False"},{"Id":25,"GitPatchModelId":12,"Name":"Entity Display UI","Description":"Display UI improved. Build Calculator now uses the same Entity display UI as the Database.","Commit":"Style","Important":"False"},{"Id":26,"GitPatchModelId":13,"Name":"Removed Embedded YouTube","Description":"Having embedded videos makes my privacy policy look completely untrue. Removed the video (it\u0027s now a link) and added a message on the privacy policy to point out that the error occured.","Commit":"Fix","Important":"False"},{"Id":27,"GitPatchModelId":13,"Name":"Agile View Backlog","Description":"Added backlog rendering to the Agile View Page. Added priority level to better indicate what tasks have high or zero priority.","Commit":"Feature","Important":"False"},{"Id":28,"GitPatchModelId":14,"Name":"Privacy Policy Page","Description":"The privacy policy is now a page rather than a blurb on the About page.","Commit":"Feature","Important":"False"},{"Id":29,"GitPatchModelId":14,"Name":"Privacy Policy Update","Description":"I added information on how I use personal data. And a disclaimer that privacy can never be guaranteed.","Commit":"Privacy Policy","Important":"False"},{"Id":30,"GitPatchModelId":14,"Name":"Minor Tweaks","Description":"Minor UI changes and text fixes.","Commit":"None","Important":"False"},{"Id":31,"GitPatchModelId":15,"Name":"Homepage","Description":"Making Of page no longer shows on the homepage","Commit":"Fix","Important":"False"},{"Id":32,"GitPatchModelId":15,"Name":"DevOnly Component","Description":"Added a DevOnly component to wrap UI content that should not be released to production. I.e. the Homepage bug.","Commit":"Feature","Important":"False"},{"Id":33,"GitPatchModelId":16,"Name":"Agile View","Description":"Add an agile page to show current activities.","Commit":"Feature","Important":"False"},{"Id":34,"GitPatchModelId":16,"Name":"Rendering Entire Database","Description":"I can now render the database without lag. Not sure what fixed it.","Commit":"Fix","Important":"False"},{"Id":35,"GitPatchModelId":16,"Name":"Database Data","Description":"Added a ton of data to the database. Such as various descriptions. More work is still to be done.","Commit":"Feature","Important":"False"},{"Id":36,"GitPatchModelId":16,"Name":"Database Ids","Description":"Database has less duplicated content. Army entities now link to their Upgrades and Abilities. More work is still to be done.","Commit":"Feature","Important":"False"},{"Id":37,"GitPatchModelId":16,"Name":"Blades of the Godhead Requirement","Description":"Fixed the requirement incorrectly being the Eye of Aros. Now is properly Bearer of the Crown.","Commit":"Fix","Important":"False"},{"Id":38,"GitPatchModelId":16,"Name":"UI Changes","Description":"Various UI changes and tweaks","Commit":"Style","Important":"False"},{"Id":39,"GitPatchModelId":16,"Name":"Streams","Description":"Added a Streams page. It mentions plans to do Twitch streams on Sunday.","Commit":"Feature","Important":"False"},{"Id":40,"GitPatchModelId":16,"Name":"IMMORTAL","Description":"Fixed \u0022IMMORTAL: Gates of Pyre\u0022 game title. Will no longer refer to it as \u0022Immortal: Gates of Pyre\u0022.","Commit":"Typo","Important":"False"},{"Id":41,"GitPatchModelId":16,"Name":"Mobile Support","Description":"All the pages should now work on phones.","Commit":"Feature","Important":"False"},{"Id":42,"GitPatchModelId":17,"Name":"Form Text","Description":"Fixed search bar in database, name and colour in build calculator, from not rendering \uD83D\uDE10","Commit":"Fix","Important":"False"},{"Id":43,"GitPatchModelId":17,"Name":"UI Test Automation Road Map","Description":"Adding test automation to the roadmap","Commit":"Planning","Important":"False"},{"Id":44,"GitPatchModelId":18,"Name":"Build Calculator Interval","Description":"600 is too laggy. Reducing to 360 until optimizations are done.","Commit":"Fix","Important":"False"},{"Id":45,"GitPatchModelId":18,"Name":"Changelog Patch Date","Description":"Fixed date on previous patch in changelog. Should be one day earlier.","Commit":"Fix","Important":"False"},{"Id":46,"GitPatchModelId":19,"Name":"UI Overhaul","Description":"Cleaned up and restyled a lot of UI. Like Page Containers, Alerts, Forms, Nav Buttons, and more.","Commit":"Style","Important":"False"},{"Id":47,"GitPatchModelId":19,"Name":"Separate Pages","Description":"Navigation now uses different pages, instead of loading content onto the main page.","Commit":"Feature","Important":"False"},{"Id":48,"GitPatchModelId":19,"Name":"Making Of","Description":"Adding Making Of page for design reference.","Commit":"Feature","Important":"False"},{"Id":49,"GitPatchModelId":19,"Name":"Change Log","Description":"Adding Change Log page for viewing update history.","Commit":"Feature","Important":"False"},{"Id":50,"GitPatchModelId":19,"Name":"Mobile Priority","Description":"Changed mobile support priority in roadmap from low and possible to high and planned, and updated description.","Commit":"Planning","Important":"False"},{"Id":51,"GitPatchModelId":20,"Name":"Purple Colours","Description":"Added placeholder-ish purple color scheme.","Commit":"Style","Important":"False"},{"Id":52,"GitPatchModelId":20,"Name":"SQL","Description":"Agile and Change Log pages now use JSON made from SQL","Commit":"Feature","Important":"False"},{"Id":53,"GitPatchModelId":21,"Name":"Discord Link","Description":"Made a discord for the website, and added invite link to contact page","Commit":"Feature","Important":"False"},{"Id":54,"GitPatchModelId":21,"Name":"Loading Improvemnts","Description":"Agile and Change Log loading improved","Commit":"Feature","Important":"False"},{"Id":55,"GitPatchModelId":21,"Name":"Desktop Nav closing","Description":"Desktop nav menu now closes when a page link is clicked","Commit":"Feature","Important":"False"},{"Id":56,"GitPatchModelId":22,"Name":"0.0.6.8900a","Description":"Database updated to 0.0.6.8900a","Commit":"Game Patch","Important":"True"},{"Id":57,"GitPatchModelId":23,"Name":"Database Links","Description":"Various entity references in the database now link to the entity via a dialog interface","Commit":"Feature","Important":"False"},{"Id":58,"GitPatchModelId":24,"Name":"Documentation Page","Description":"Added a docs page with some starter setup information","Commit":"Feature","Important":"False"},{"Id":59,"GitPatchModelId":24,"Name":"Database Filters","Description":"Fixed filter defaults. Removed unimportant filter types","Commit":"Fix","Important":"False"},{"Id":60,"GitPatchModelId":25,"Name":"Database Fixes","Description":"Various fixes to bad data. Added some missing entities","Commit":"Fix","Important":"False"},{"Id":61,"GitPatchModelId":25,"Name":"Plain View","Description":"Database can now change to plain view for easy copy and pasting","Commit":"Feature","Important":"False"},{"Id":62,"GitPatchModelId":25,"Name":"Direct Links","Description":"Database now supports direct links. database/Throne to see just Throne","Commit":"Feature","Important":"False"},{"Id":63,"GitPatchModelId":26,"Name":"Better Navigation","Description":"Documentational pages now use a more logical navigation format, with sections, and parent-child documents","Commit":"Feature","Important":"False"},{"Id":64,"GitPatchModelId":26,"Name":"Style Improvements","Description":"Improved home page styling on website highlighted content","Commit":"Style","Important":"False"},{"Id":65,"GitPatchModelId":26,"Name":"Warning Cleanup","Description":"Removed a bunch of development code warnings","Commit":"Chore","Important":"False"},{"Id":66,"GitPatchModelId":27,"Name":"Toasts","Description":"Added some error toasts to build calculator. Needs work","Commit":"Feature","Important":"False"},{"Id":67,"GitPatchModelId":27,"Name":"Localization Text","Description":"Added localization logic for handling some text. Currently only supporting English","Commit":"Feature","Important":"False"},{"Id":68,"GitPatchModelId":27,"Name":"GitHub Button","Description":"Harass Calculator now links to code in repo, instead of showing it as text","Commit":"Feature","Important":"False"},{"Id":69,"GitPatchModelId":28,"Name":"Markdown","Description":"Docs and Notes are now easily editable markdown files. Navigation will still be handled via SQL formatted data.","Commit":"Feature","Important":"False"},{"Id":70,"GitPatchModelId":28,"Name":"Passive Data","Description":"Added new passive data from Twitter post.","Commit":"Feature","Important":"True"},{"Id":71,"GitPatchModelId":28,"Name":"Toast Fade","Description":"Fixed toasts not fading out over time.","Commit":"Fix","Important":"False"},{"Id":72,"GitPatchModelId":28,"Name":"Click Desktop Menu","Description":"Added better menu navigation for desktop users.","Commit":"Feature","Important":"False"},{"Id":73,"GitPatchModelId":29,"Name":"Added document on Hotkeys","Description":"Document on how to customize hotkeys","Commit":"Feature","Important":"False"},{"Id":74,"GitPatchModelId":29,"Name":"0.0.6.9121a","Description":"Current game patch","Commit":"Feature","Important":"True"}]
\ No newline at end of file
diff --git a/IGP/wwwroot/generated/GitPatchModels.json b/IGP/wwwroot/generated/GitPatchModels.json
index 0fc1d11..a16e14f 100644
--- a/IGP/wwwroot/generated/GitPatchModels.json
+++ b/IGP/wwwroot/generated/GitPatchModels.json
@@ -1 +1 @@
-[{"Id":1,"Name":"Database UX Patch","Date":"2022-03-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":2,"Name":"Thrum Stats Hotfix","Date":"2022-03-12T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":3,"Name":"Memory Tester Patch","Date":"2022-03-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":4,"Name":"Hide Pyre Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":5,"Name":"Stream Patch","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":6,"Name":"Agile UI Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":7,"Name":"Armor Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":8,"Name":"Home Page Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":9,"Name":"Mobile Menu Hotfix 2","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":10,"Name":"Mobile Menu Hotfix","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":11,"Name":"Mobile Menu Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":12,"Name":"0.0.6.8375a Patch","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":13,"Name":"Google Tracking Hotfix","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":14,"Name":"Privacy Policy Patch","Date":"2022-02-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":15,"Name":"Home Page Quick Hotfix","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":16,"Name":"Early Agile Patch","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":17,"Name":"Form Text Rendering Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":18,"Name":"Reducing Timing Interval Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":19,"Name":"Changelog Patch","Date":"2022-02-14T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":20,"Name":"SQL Patch","Date":"2022-03-26T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":21,"Name":"Stream Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":22,"Name":"0.0.6.8900a Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":23,"Name":"Database Links Patch","Date":"2022-04-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":24,"Name":"Open Source Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":25,"Name":"Stream Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":26,"Name":"Notes/Docs Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":27,"Name":"Stream Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":28,"Name":"Passive Patch","Date":"2022-04-12T00:00:00","GitChangeModels":[],"Important":"True"}]
\ No newline at end of file
+[{"Id":1,"Name":"Database UX Patch","Date":"2022-03-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":2,"Name":"Thrum Stats Hotfix","Date":"2022-03-12T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":3,"Name":"Memory Tester Patch","Date":"2022-03-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":4,"Name":"Hide Pyre Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":5,"Name":"Stream Patch","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":6,"Name":"Agile UI Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":7,"Name":"Armor Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":8,"Name":"Home Page Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":9,"Name":"Mobile Menu Hotfix 2","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":10,"Name":"Mobile Menu Hotfix","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":11,"Name":"Mobile Menu Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":12,"Name":"0.0.6.8375a Patch","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":13,"Name":"Google Tracking Hotfix","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":14,"Name":"Privacy Policy Patch","Date":"2022-02-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":15,"Name":"Home Page Quick Hotfix","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":16,"Name":"Early Agile Patch","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":17,"Name":"Form Text Rendering Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":18,"Name":"Reducing Timing Interval Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":19,"Name":"Changelog Patch","Date":"2022-02-14T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":20,"Name":"SQL Patch","Date":"2022-03-26T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":21,"Name":"Stream Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":22,"Name":"0.0.6.8900a Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":23,"Name":"Database Links Patch","Date":"2022-04-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":24,"Name":"Open Source Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":25,"Name":"Stream Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":26,"Name":"Notes/Docs Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":27,"Name":"Stream Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":28,"Name":"Passive Patch","Date":"2022-04-12T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":29,"Name":"0.0.6.9121a Patch","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"True"}]
\ No newline at end of file
diff --git a/Model/Agile/Enums/TaskType.cs b/Model/Agile/Enums/TaskType.cs
index 374a9c0..9d11074 100644
--- a/Model/Agile/Enums/TaskType.cs
+++ b/Model/Agile/Enums/TaskType.cs
@@ -4,4 +4,5 @@ public class TaskType
{
public const string Feature = "Feature";
public const string Bug = "Bug";
+ public const string Document = "Document";
}
\ No newline at end of file
diff --git a/Model/BuildOrders/BuildOrderModel.cs b/Model/BuildOrders/BuildOrderModel.cs
index c16990c..6d198d2 100644
--- a/Model/BuildOrders/BuildOrderModel.cs
+++ b/Model/BuildOrders/BuildOrderModel.cs
@@ -10,7 +10,19 @@ public class BuildOrderModel
public string Name { get; set; } = "";
public string Color { get; set; } = "red";
- public Dictionary> Orders { get; set; } = new()
+ public Dictionary> StartedOrders { get; set; } = new()
+ {
+ {
+ 0,
+ new List
+ {
+ EntityModel.Get(DataType.STARTING_Bastion),
+ EntityModel.Get(DataType.STARTING_TownHall_Aru)
+ }
+ }
+ };
+
+ public Dictionary> CompletedOrders { get; set; } = new()
{
{
0,
@@ -29,7 +41,7 @@ public class BuildOrderModel
public List GetOrdersAt(int interval)
{
- return (from ordersAtTime in Orders
+ return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key == interval
select orders).ToList();
@@ -37,7 +49,7 @@ public class BuildOrderModel
public List GetCompletedAt(int interval)
{
- return (from ordersAtTime in Orders
+ return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) == interval
select orders).ToList();
@@ -45,15 +57,16 @@ public class BuildOrderModel
public List GetCompletedBefore(int interval)
{
- return (from ordersAtTime in Orders
+ return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
+ where ordersAtTime.Key >= interval
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
select orders).ToList();
}
public List GetHarvestersCompletedBefore(int interval)
{
- return (from ordersAtTime in Orders
+ return (from ordersAtTime in StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
where orders.Harvest() != null
diff --git a/Model/Entity/Data/DATA.cs b/Model/Entity/Data/DATA.cs
index 7bcbbb2..4998cc4 100644
--- a/Model/Entity/Data/DATA.cs
+++ b/Model/Entity/Data/DATA.cs
@@ -55,8 +55,8 @@ public class DATA
DataType.TEAPOT_FlyingTeapot, new EntityModel(DataType.TEAPOT_FlyingTeapot, EntityType.Teapot)
.AddPart(new EntityInfoModel
{
- Name = "Flying Teapot", Description = "Basic observer. Can fly and see hidden units",
- Notes = @"Much flying, Wow!"
+ Name = "Flying Teapot", Description = "Basic observer. Can fly and see hidden units within 1000 range.",
+ Notes = @"Doesn't take up a scout slot."
})
.AddPart(new EntityRequirementModel { Id = DataType.TEAPOT_Teapot })
.AddPart(new EntityProductionModel { Alloy = 100, Ether = 50 })
@@ -259,6 +259,7 @@ public class DATA
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_SummonGroveGuardian })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_InfuseTroops })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_ConstructBloodWell })
+ .AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_MarkPrey })
.AddPart(new EntityIdPyreSpellModel { Id = DataType.ISPELL_TheGreatHunt })
.AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_BoneStalker_Xol })
.AddPart(new EntityIdVanguardModel { Id = DataType.VANGUARD_WhiteWoodReaper_Xol })
@@ -319,7 +320,12 @@ public class DATA
DataType.IPASSIVE_MothersHunger,
new EntityModel(DataType.IPASSIVE_MothersHunger, EntityType.Passive)
.AddPart(new EntityInfoModel
- { Name = "Mother's Hunger", Description = "Mala's Blood Wells grant you pyre for nearby non-quitl deaths." })
+ {
+ Name = "Mother's Hunger",
+ Description = "Mala's Blood Wells grant you pyre for nearby non-quitl deaths, based on the supply.",
+ Notes = "+1 per supply"
+
+ })
},
{
DataType.IPASSIVE_StalkersSense,
@@ -458,7 +464,10 @@ public class DATA
DataType.VANGUARD_Sceptre_Orzum,
new EntityModel(DataType.VANGUARD_Sceptre_Orzum, EntityType.Army)
.AddPart(new EntityInfoModel
- { Name = "Sceptre", Descriptive = DescriptiveType.Harrier, Description = "" })
+ {
+ Name = "Sceptre", Descriptive = DescriptiveType.Harrier, Description = "",
+ Notes = "Loses 16 energy per second when moving."
+ })
.AddPart(new EntityTierModel { Tier = 3 })
.AddPart(new EntityHotkeyModel { Hotkey = "R", HoldSpace = true, HotkeyGroup = "Z" })
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
@@ -631,7 +640,7 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel
{ ReplaceId = DataType.UNIT_MaskedHunter, ImmortalId = DataType.IMMORTAL_Xol })
- .AddPart(new EntityProductionModel { Alloy = 50, Ether = 0, BuildTime = 40 })
+ .AddPart(new EntityProductionModel { Alloy = 50, Ether = 0, BuildTime = 35 })
.AddPart(new EntitySupplyModel { Takes = 2 })
.AddPart(new EntityVitalityModel
{ Health = 85, DefenseLayer = 10, Armor = ArmorType.Light, IsEtheric = false })
@@ -687,6 +696,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 5, Range = 50, AttacksPerSecond = 1.887f, Targets = TargetType.Ground })
+ .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
},
{
DataType.UNIT_Sipari,
@@ -790,6 +800,8 @@ public class DATA
Damage = 20, MediumDamage = 24, HeavyDamage = 28, Range = 500, AttacksPerSecond = 0.667f,
Targets = TargetType.All
})
+ .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WindStep })
+ .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_ZephyrRange })
.AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Windstep })
},
{
@@ -815,11 +827,13 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 435, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{
- Damage = 20, LightDamage = 40, MediumDamage = 30, Range = 250, AttacksPerSecond = 0.5f,
+ LightDamage = 32, MediumDamage = 24, Damage = 16, Range = 250, AttacksPerSecond = 0.5f,
Targets = TargetType.Ground
})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_SiroccoScript })
- .AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_RadiantWard})
+ .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RadiantWard })
+ .AddPart(new EntityIdAbilityModel {Id = DataType.ABILITY_RadiantWard})
+ .AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_SiroccoScript})
},
{
@@ -829,7 +843,8 @@ public class DATA
{
Name = "Absolver", Descriptive = DescriptiveType.Zone_Control,
Description =
- "Zone Control (Ground Unit) - Deploys to gain increased rate of fire to hold a position. Can only attack ground."
+ "Zone Control (Ground Unit) - Deploys to gain increased rate of fire to hold a position. Can only attack ground.",
+ Notes = "Deploy time is 2 seconds. Mobilize time is 1.5 seconds."
})
.AddPart(new EntityTierModel { Tier = 2 })
.AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "Z" })
@@ -886,7 +901,7 @@ public class DATA
.AddPart(new EntityWeaponModel
{ Damage = 8, Range = 500, AttacksPerSecond = 1.429f, Targets = TargetType.Ground })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_RelicOfTheWrathfulGaze })
- .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_Maledictions })
+ .AddPart(new EntityIdAbilityModel { Id = DataType.ABILITY_Maledictions })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_RelicOfTheWrathfulGaze })
},
{
@@ -922,6 +937,8 @@ public class DATA
Damage = 60, MediumDamage = 80, HeavyDamage = 100, Range = 1300, AttacksPerSecond = 0.143f,
Targets = TargetType.Ground
})
+
+ .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HallowedRuin })
},
{
DataType.UNIT_Sentinel,
@@ -1059,6 +1076,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 400, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 8, Range = 40, AttacksPerSecond = 1.25f, Targets = TargetType.Ground })
+ .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_HarvestAlloy })
},
{
DataType.UNIT_MaskedHunter,
@@ -1088,6 +1106,7 @@ public class DATA
{ Damage = 7, Range = 400, AttacksPerSecond = 1.4f, Targets = TargetType.All, HeavyDamage = 6 })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_Offering })
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BloodMothersFevor })
+ .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_Offering })
},
{
DataType.UNIT_Xacal,
@@ -1148,6 +1167,8 @@ public class DATA
Targets = TargetType.Ground
})
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuenchingScythes })
+
+ .AddPart(new EntityIdPassiveModel { Id = DataType.ABILITY_CullingStrike })
},
{
DataType.UNIT_RedSeer,
@@ -1311,6 +1332,8 @@ public class DATA
TargetType.Air
})
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_AaroxBurn })
+
+ .AddPart(new EntityIdAbilityModel() { Id = DataType.ABILITY_DiveBomb })
},
{
DataType.UNIT_Thrum,
@@ -1355,6 +1378,7 @@ public class DATA
.AddPart(new EntityWeaponModel
{ Damage = 9, Range = 500, AttacksPerSecond = 0.714f, Targets = TargetType.Ground })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_GuidingAmber })
+ .AddPart(new EntityIdPassiveModel() { Id = DataType.PASSIVE_WraithBowRange })
},
{
DataType.UNIT_Behemoth,
@@ -1383,7 +1407,7 @@ public class DATA
Targets = TargetType.Ground
})
.AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_BehemothCapacity })
- .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuitlStorage })
+ .AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_BehemothCapacity })
.AddPart(new EntityIdPassiveModel { Id = DataType.PASSIVE_QuitlStorage2 })
@@ -1417,6 +1441,19 @@ public class DATA
})
},
+ {
+ DataType.UPGRADE_RadiantWard,
+ new EntityModel(DataType.UPGRADE_RadiantWard, EntityType.Tech)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Research Radiant Ward", Descriptive = DescriptiveType.Upgrade,
+ Description = "Unlocks the dervish's Radiant Ward ability"
+ })
+ .AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB" })
+ .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
+ .AddPart(new EntityProductionModel { Alloy = 80, Ether = 80, BuildTime = 34 })
+ },
+
{
DataType.UPGRADE_FortifiedIcons,
new EntityModel(DataType.UPGRADE_FortifiedIcons, EntityType.Tech)
@@ -1498,7 +1535,7 @@ public class DATA
.AddPart(new EntityInfoModel
{
Name = "Sirocco Script", Descriptive = DescriptiveType.Upgrade,
- Description = "Increases the Dervish's movement speed by 50%."
+ Description = "Grant's the Dervish Sirocco Script"
})
.AddPart(new EntityHotkeyModel { Hotkey = "F", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
@@ -1563,7 +1600,10 @@ public class DATA
DataType.UPGRADE_Offering,
new EntityModel(DataType.UPGRADE_Offering, EntityType.Tech)
.AddPart(new EntityInfoModel
- { Name = "Offering", Descriptive = DescriptiveType.Upgrade, Description = "Unlocks Offering" })
+ {
+ Name = "Offering",
+ Descriptive = DescriptiveType.Upgrade,
+ Description = "Unlocks Offering" })
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "TAB" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityRequirementModel
@@ -1684,9 +1724,47 @@ public class DATA
Requirement = RequirementType.Research_Building
})
.AddPart(new EntityProductionModel { Alloy = 50, Ether = 75, BuildTime = 29 })
- .AddPart(new EntityIdUpgradeModel { Id = DataType.UPGRADE_WraithBowRange })
- .AddPart(new EntityIdPassiveModel() { Id = DataType.PASSIVE_WraithBowRange })
},
+
+ {
+ DataType.UPGRADE_Stalk,
+ new EntityModel(DataType.UPGRADE_Stalk, EntityType.Tech)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Research Stalk",
+ Description = "Unlocks the Bone Stalker's Stabilize",
+ Descriptive = DescriptiveType.Upgrade
+ })
+ .AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "TAB", HoldSpace = false })
+ .AddPart(new EntityFactionModel { Faction = FactionType.Aru })
+ .AddPart(new EntityRequirementModel
+ {
+ Id = DataType.BUILDING_Neurocyte,
+ Requirement = RequirementType.Research_Building
+ })
+ .AddPart(new EntityProductionModel { Alloy = 100, Ether = 80, BuildTime = 60 })
+ },
+
+ {
+ DataType.UPGRADE_Ambush,
+ new EntityModel(DataType.UPGRADE_Ambush, EntityType.Tech)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Research Ambush",
+ Description = "When Hidden, the Bone Stalker's next attack deals double damage",
+ Descriptive = DescriptiveType.Upgrade
+ })
+ .AddPart(new EntityHotkeyModel { Hotkey = "V", HotkeyGroup = "TAB", HoldSpace = false })
+ .AddPart(new EntityFactionModel { Faction = FactionType.Aru })
+ .AddPart(new EntityRequirementModel
+ {
+ Id = DataType.BUILDING_RedVale,
+ Requirement = RequirementType.Research_Building
+ })
+ .AddPart(new EntityProductionModel { Alloy = 100, Ether = 125, BuildTime = 80 })
+ },
+
+
{
DataType.UPGRADE_BloodPlague,
new EntityModel(DataType.UPGRADE_BloodPlague, EntityType.Tech)
@@ -1726,7 +1804,7 @@ public class DATA
// Neutral
{
DataType.PASSIVE_BastionPassives,
- new EntityModel(DataType.PASSIVE_Respite, EntityType.Passive)
+ new EntityModel(DataType.PASSIVE_BastionPassives, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "(Scouts and Pyre)", Descriptive = DescriptiveType.Passive,
@@ -1742,7 +1820,7 @@ public class DATA
{
Name = "Respite", Descriptive = DescriptiveType.Passive,
Description =
- @"Nearby units will slowly heal after not attacking for several seconds."
+ @"Nearby units will slowly heal after not attacking or being attacked for 10 seconds."
})
.AddPart(new EntityFactionModel { Faction = FactionType.Any })
},
@@ -1854,6 +1932,18 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
+ {
+ DataType.PASSIVE_SiroccoScript,
+ new EntityModel(DataType.PASSIVE_SiroccoScript, EntityType.Passive)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Sirocco Script Rites", Descriptive = DescriptiveType.Passive,
+ Description = @"Increases the derish's movement speed"
+ })
+ .AddPart(new EntityRequirementModel(){ Id = DataType.UPGRADE_SiroccoScript})
+ .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
+ },
+
{
DataType.PASSIVE_HallowingRites,
new EntityModel(DataType.PASSIVE_HallowingRites, EntityType.Passive)
@@ -1956,8 +2046,8 @@ public class DATA
},
{
- DataType.PASSIVE_QuitlStorage,
- new EntityModel(DataType.PASSIVE_QuitlStorage, EntityType.Passive)
+ DataType.PASSIVE_BehemothCapacity,
+ new EntityModel(DataType.PASSIVE_BehemothCapacity, EntityType.Passive)
.AddPart(new EntityInfoModel
{
Name = "Quitl Storage", Descriptive = DescriptiveType.Passive,
@@ -2000,17 +2090,7 @@ public class DATA
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
},
- {
- DataType.PASSIVE_RadiantWard,
- new EntityModel(DataType.PASSIVE_RadiantWard, EntityType.Passive)
- .AddPart(new EntityInfoModel
- {
- Name = "Radiant Ward", Descriptive = DescriptiveType.Applies_Debuff,
- Description = @"This unit is revealed?",
- Notes = "Not implemented."
- })
- .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
- },
+
{
DataType.PASSIVE_Stalk,
@@ -2018,10 +2098,11 @@ public class DATA
.AddPart(new EntityInfoModel
{
Name = "Stalk", Descriptive = DescriptiveType.Passive,
- Description = @"This unit has hidden when stabilized.",
- Notes = "Not implemented."
+ Description = @"After remaining stationary for several seconds, gain Hidden 3 and a movement speed boost.",
+ Notes = "Lose hidden on attacking"
})
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
+ .AddPart(new EntityRequirementModel{Id=DataType.UPGRADE_Stalk})
},
{
@@ -2029,9 +2110,20 @@ public class DATA
new EntityModel(DataType.PASSIVE_Stalk, EntityType.Passive)
.AddPart(new EntityInfoModel
{
- Name = "Stalk", Descriptive = DescriptiveType.Passive,
+ Name = "Ambush", Descriptive = DescriptiveType.Passive,
Description = @"This unit deals double damage when attacking from hidden.",
- Notes = "Not implemented."
+ })
+ .AddPart(new EntityFactionModel { Faction = FactionType.Aru })
+ .AddPart(new EntityRequirementModel(){Id=DataType.UPGRADE_Ambush})
+ },
+
+ {
+ DataType.PASSIVE_HiddenX,
+ new EntityModel(DataType.PASSIVE_HiddenX, EntityType.Passive)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Hidden X", Descriptive = DescriptiveType.Passive,
+ Description = @"This unit cannot be seen unless enemies units are within X.",
})
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
},
@@ -2085,19 +2177,6 @@ public class DATA
.AddPart(new EntityRequirementModel(){ Id = DataType.UPGRADE_FortifiedIcons, Requirement = RequirementType.Research_Upgrade})
.AddPart(new EntityFactionModel { Faction = FactionType.QRath })
},
-
- {
- DataType.PASSIVE_Maledictions,
- new EntityModel(DataType.PASSIVE_Maledictions, EntityType.Passive)
- .AddPart(new EntityInfoModel
- {
- Name = "Maledictions", Descriptive = DescriptiveType.Applies_Debuff,
- Description = @"Stun ground unit? With Maledictions spell.",
- Notes = "Not implemented"
- })
- .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
- },
-
{
DataType.PASSIVE_MendingCommand,
new EntityModel(DataType.PASSIVE_MendingCommand, EntityType.Passive)
@@ -2246,6 +2325,32 @@ public class DATA
// Abilities
// Q'Rath
+ {
+ DataType.ABILITY_RadiantWard,
+ new EntityModel(DataType.ABILITY_RadiantWard, EntityType.Ability)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Radiant Ward", Descriptive = DescriptiveType.Ability,
+ Description = @"Spawns a mine that reveals enemy units, slows them, and makes them take increased damage for a duration.",
+ })
+ .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
+ .AddPart(new EntityProductionModel { DefensiveLayer = 30, Cooldown = 40} )
+ .AddPart(new EntityRequirementModel { Id = DataType.UPGRADE_RadiantWard })
+ .AddPart(new EntityVitalityModel {Health = 30, DefenseLayer = 30, Lasts = 30, Armor = ArmorType.Light, IsStructure = true})
+ },
+
+ {
+ DataType.ABILITY_Maledictions,
+ new EntityModel(DataType.ABILITY_Maledictions, EntityType.Ability)
+ .AddPart(new EntityInfoModel
+ {
+ Name = "Maledictions", Descriptive = DescriptiveType.Ability,
+ Description = @"Stun ground unit? With Maledictions spell.",
+ Notes = "Not implemented"
+ })
+ .AddPart(new EntityFactionModel { Faction = FactionType.QRath })
+ },
+
{
DataType.ABILITY_BladesOfTheGodhead,
new EntityModel(DataType.ABILITY_BladesOfTheGodhead, EntityType.Ability)
@@ -2368,10 +2473,12 @@ public class DATA
{
Name = "Offering", Descriptive = DescriptiveType.Ability,
Description =
- "Sacrifices 10 life to increase range, speed, and attack speed for several seconds."
+ "Sacrifices 10 life to give Masked Hunters +3 damage for 3 shots. And increased speed and attack speed."
})
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "D" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
+ .AddPart(new EntityRequirementModel(){ Id= DataType.UPGRADE_Offering})
+
},
{
DataType.ABILITY_DiveBomb,
@@ -2405,7 +2512,7 @@ public class DATA
{
Name = "Lethal Bond", Descriptive = DescriptiveType.Ability,
Description =
- "After a short delay, enemy units in the target area receive a debuff which causes them to take double damage from all attacks for a duration."
+ "After a short delay, enemy units in the target area receive a debuff which causes them to take double damage from all attacks for a duration. Also gives the White Wood Reaper invisibility if it affects at least 1 enemy"
})
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "D" })
.AddPart(new EntityVanguardAddedModel
@@ -2484,7 +2591,7 @@ public class DATA
Description =
"Deals damage over time in an area and marks affected units for several seconds. Units that die while marked spawn a quitl.",
Notes =
- "Deals 20 damage + 15% of max life of the target immediately upon affecting the enemy unit. It deals the same damage again after 8 seconds. If the unit dies during those 8 seconds (including the final burst), spawns 1 quitl every 2 supply of the dead unit, rounded up"
+ "Deals 10 damage + 5% of max life of the target immediately upon affecting the enemy unit. It deals 15 damage + 15% after 8 seconds. If the unit dies during those 8 seconds (including the final burst), spawns 1 quitl every 2 supply of the dead unit, rounded up. Stacking only refreshes duration of debuff."
})
.AddPart(new EntityHotkeyModel { Hotkey = "W", HotkeyGroup = "D" })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Mala })
@@ -2530,6 +2637,7 @@ public class DATA
.AddPart(new EntityMovementModel { Speed = 210, Movement = MovementType.Ground })
.AddPart(new EntityWeaponModel
{ Damage = 125, Range = 1500, AttacksPerSecond = 0.175f, Targets = TargetType.Ground })
+ .AddPart(new EntityIdPassiveModel(){Id = DataType.PASSIVE_HiddenX})
},
// Pyre Spells
// Q'Rath
@@ -2691,16 +2799,19 @@ public class DATA
{
DataType.ISPELL_MarkPrey,
new EntityModel(DataType.ISPELL_MarkPrey, EntityType.Pyre_Spell)
- .AddPart(new EntityInfoModel { Name = "Mark Prey", Description = "Knowing where things are lets you hunt them?", Notes = "Not implemented."})
+ .AddPart(new EntityInfoModel { Name = "Mark Prey",
+ Description = @"Enemy units in the target area are Revealed through fog of war. Units still in the area after a short delay are marked for 10 seconds to take bonus damage and provide Pyre when killed.",
+ Notes = "+3 pyre for kills"
+ })
.AddPart(new EntityHotkeyModel { Hotkey = "E", HotkeyGroup = "1" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
- .AddPart(new EntityProductionModel { })
+ .AddPart(new EntityProductionModel { Cooldown = 15, Pyre = 25})
},
{
DataType.ISPELL_TheGreatHunt,
new EntityModel(DataType.ISPELL_TheGreatHunt, EntityType.Pyre_Spell)
- .AddPart(new EntityInfoModel { Name = "The Great Hunt", Description = "Reduces enemy vision to 300."})
+ .AddPart(new EntityInfoModel { Name = "The Great Hunt", Description = "Enemy unit and structures have their vision reduce to 3 for a short time."})
.AddPart(new EntityHotkeyModel { Hotkey = "R", HotkeyGroup = "1" })
.AddPart(new EntityFactionModel { Faction = FactionType.Aru })
.AddPart(new EntityVanguardAddedModel { ImmortalId = DataType.IMMORTAL_Xol })
diff --git a/Model/Entity/Data/Ids_Entity.cs b/Model/Entity/Data/Ids_Entity.cs
index 8239950..b7f085b 100644
--- a/Model/Entity/Data/Ids_Entity.cs
+++ b/Model/Entity/Data/Ids_Entity.cs
@@ -114,17 +114,24 @@ public static class DataType
public static string UPGRADE_BehemothCapacity = "d0390dd2-d9a5-4b20-9d8b-f554f4c52143";
public static string UPGRADE_BloodPlague = "9c207e21-f595-49d0-967d-f30ca8cc3745";
public static string UPGRADE_BirthingStorm = "0cb2f1a4-03b3-491b-9db3-d2d4590ede3a";
+
+ public static string UPGRADE_RadiantWard = "c8acc6d0-9f26-475a-aff4-4e2b2f9657f2";
+ public static string UPGRADE_Stalk = "36fbc2c0-e9e3-4f54-a79a-981db908c25c";
+ public static string UPGRADE_Ambush = "6cf83dc9-717f-4fa9-b417-a3371474a1da";
+
public static string PASSIVE_WraithBowRange = "196dd8a6-2044-44e1-aac4-fbaa40552699";
+ public static string PASSIVE_HiddenX = "7b819996-ffc0-4e07-9c11-c91c5f9d467b";
+
+
public static string PASSIVE_Respite = "607c39f4-a957-4a7a-8fc6-a239f9e570ec";
public static string PASSIVE_BastionPassives = "ea42b9cb-2456-4ed2-b490-fcfde12c6153";
public static string PASSIVE_HallowedWarrior = "fea43ced-33f3-4531-af7d-740c1789fec1";
public static string PASSIVE_GreavesOfAhqar = "3c408d75-7bee-4089-84c0-74620ac708b6";
public static string PASSIVE_FortifiedIcons = "35f3f02f-e22e-44be-b2ea-82972c383308";
- public static string PASSIVE_Maledictions = "6cdc109c-157d-433a-b225-192e39c0b613";
public static string PASSIVE_HarvestAlloy = "84bacf5a-b106-455c-8cff-66c3998404f8";
public static string PASSIVE_RelicOfTheWrathfulGaze = "ccebc0c9-cfd5-465a-8a5d-2495bd745a83";
@@ -139,6 +146,8 @@ public static class DataType
public static string PASSIVE_ThroneMovingShot = "699423ed-7410-4daf-8b07-9dc733a8bf55";
+ public static string PASSIVE_SiroccoScript = "11c21afa-ff88-4e42-9f97-a1d1595b115c";
+
public static string PASSIVE_HallowingRites = "9c8ae47b-954e-4a17-8f35-f128c9114b61";
public static string PASSIVE_RegentsWrath = "f111f004-6548-4430-9d13-ef44ab108ae7";
public static string PASSIVE_PsalmOfFire = "d28f6b7c-d319-4fb8-bdd4-92ede40a0751";
@@ -146,10 +155,9 @@ public static class DataType
public static string PASSIVE_HallowedGround = "bdb28984-246f-4642-84ab-9e83c02b3e2e";
public static string PASSIVE_CastFromLife = "3cc734de-f8e7-4e69-9fa5-bdf725c4941b";
public static string PASSIVE_Rootway = "46768d4a-5047-4973-b5ca-995cda25ee8d";
- public static string PASSIVE_QuitlStorage = "a210f109-d3ac-44d4-9724-601c795a2394";
+ public static string PASSIVE_BehemothCapacity = "a210f109-d3ac-44d4-9724-601c795a2394";
public static string PASSIVE_QuitlStorage2 = "0b27b863-fce5-40e4-96c7-6df94bdd92b9";
public static string PASSIVE_Temporary = "940c04f1-df0b-4cf7-9514-09dfd9009554";
- public static string PASSIVE_RadiantWard = "db1fc8bd-d86a-4eda-b83c-16e8d0ce4f81";
public static string PASSIVE_Stalk = "9c107bfd-0050-4670-91b8-f9a8d771225d";
public static string PASSIVE_Ambush = "9d0a9482-0303-4a15-bb88-972f6ae60a39";
@@ -177,6 +185,10 @@ public static class DataType
public static string PASSIVE_FireQuitl = "80f6b382-da1c-49a1-8235-1ea37983ea54";
public static string PASSIVE_XacalDamage = "69928f20-5332-418f-ada3-694da3f7b199";
+ public static string ABILITY_RadiantWard = "db1fc8bd-d86a-4eda-b83c-16e8d0ce4f81";
+
+ public static string ABILITY_Maledictions = "6cdc109c-157d-433a-b225-192e39c0b613";
+
public static string ABILITY_BladesOfTheGodhead = "000154ac-faf5-483d-b0bd-e84335891a27";
public static string ABILITY_Windstep = "a410b296-39f7-42e0-87c8-6cef11eb967c";
public static string ABILITY_Leap = "aa155b88-125a-4d25-b63f-77987ea6e519";
diff --git a/Model/Entity/EntityModel.cs b/Model/Entity/EntityModel.cs
index 4ee44c4..8096fbb 100644
--- a/Model/Entity/EntityModel.cs
+++ b/Model/Entity/EntityModel.cs
@@ -12,8 +12,8 @@ namespace Model.Entity;
public class EntityModel
{
- public static readonly string GameVersion = "0.0.6.8900a";
-
+ public static readonly string GameVersion = "0.0.6.9121a";
+
private static Dictionary _database= null!;
private static List _entityModels= null!;
diff --git a/Model/Entity/Parts/EntityProductionModel.cs b/Model/Entity/Parts/EntityProductionModel.cs
index 52dd3a5..f77f312 100644
--- a/Model/Entity/Parts/EntityProductionModel.cs
+++ b/Model/Entity/Parts/EntityProductionModel.cs
@@ -10,6 +10,8 @@ public class EntityProductionModel : IEntityPartInterface
public int Pyre { get; set; } = 0;
public int Energy { get; set; } = 0;
+
+ public int DefensiveLayer { get; set; } = 0;
public int BuildTime { get; set; } = 0;
// Remove cooldown as a cost, and move into ability stats
diff --git a/Model/Entity/Parts/EntityVitalityModel.cs b/Model/Entity/Parts/EntityVitalityModel.cs
index 4eaa555..cdd0c84 100644
--- a/Model/Entity/Parts/EntityVitalityModel.cs
+++ b/Model/Entity/Parts/EntityVitalityModel.cs
@@ -7,6 +7,8 @@ public class EntityVitalityModel : IEntityPartInterface
public string Type { get; set; } = "EntityVitalityModel";
public int Health { get; set; } = 0;
public int DefenseLayer { get; set; } = 0;
+
+ public int Lasts { get; set; } = 0;
public string Defense { get; set; } = DefenseType.None;
public string Armor { get; set; } = ArmorType.Light;
public bool IsEtheric { get; set; } = false;
diff --git a/Services/IServices.cs b/Services/IServices.cs
index ee536a4..67a9877 100644
--- a/Services/IServices.cs
+++ b/Services/IServices.cs
@@ -244,6 +244,17 @@ public interface IMemoryTesterService {
public void Unsubscribe(MemoryAction memoryAction);
}
+public interface IGameLogicService
+{
+ public bool Add(EntityModel entity, int atInterval);
+ public int MeetsRequirements(EntityModel entity, int interval);
+ public int MeetsAlloy(EntityModel entity, int interval);
+ public int MeetsEther(EntityModel entity, int interval);
+ public int MeetsPyre(EntityModel entity, int interval);
+ public int MeetsSupply(EntityModel entity, int interval);
+ public int MeetsTrainingQueue(EntityModel entity, int interval);
+}
+
public interface IBuildOrderService {
public bool Add(EntityModel entity, IEconomyService withEconomy, IToastService toastService);
public void Add(EntityModel entity, int atInterval);
diff --git a/Services/Immortal/BuildComparisionService.cs b/Services/Immortal/BuildComparisionService.cs
index 83fd661..18df979 100644
--- a/Services/Immortal/BuildComparisionService.cs
+++ b/Services/Immortal/BuildComparisionService.cs
@@ -72,7 +72,7 @@ public class BuildComparisionService : IBuildComparisonService {
public void HydratedLoadedJson() {
foreach (var build in buildComparison.Builds)
- foreach (var orders in build.Orders.Values)
+ foreach (var orders in build.StartedOrders.Values)
foreach (var order in orders)
order.Copy(EntityModel.Get(order.DataType));
}
diff --git a/Services/Immortal/BuildOrderService.cs b/Services/Immortal/BuildOrderService.cs
index eb51f69..d8f731e 100644
--- a/Services/Immortal/BuildOrderService.cs
+++ b/Services/Immortal/BuildOrderService.cs
@@ -22,7 +22,7 @@ public class BuildOrderService : IBuildOrderService
public Dictionary> GetOrders()
{
- return buildOrder.Orders;
+ return buildOrder.StartedOrders;
}
public void Subscribe(Action action)
@@ -37,11 +37,27 @@ public class BuildOrderService : IBuildOrderService
public void Add(EntityModel entity, int atInterval)
{
- if (!buildOrder.Orders.ContainsKey(atInterval))
- buildOrder.Orders.Add(atInterval, new List { entity.Clone() });
- else
- buildOrder.Orders[atInterval].Add(entity.Clone());
+ if (!buildOrder.StartedOrders.ContainsKey(atInterval))
+ {
+ buildOrder.StartedOrders.Add(atInterval, new List { });
+ }
+
+ var production = entity.Production();
+
+ var completedTime = atInterval;
+ if (production != null)
+ {
+ completedTime += production.BuildTime;
+ }
+
+ if (!buildOrder.CompletedOrders.ContainsKey(atInterval))
+ {
+ buildOrder.CompletedOrders.Add(completedTime, new List { });
+ }
+ buildOrder.StartedOrders[atInterval].Add(entity.Clone());
+ buildOrder.CompletedOrders[completedTime].Add(entity.Clone());
+
if (atInterval > lastInterval) lastInterval = atInterval;
}
@@ -72,10 +88,10 @@ public class BuildOrderService : IBuildOrderService
//Account for human Micro delay
interval += HumanMicro;
- if (!buildOrder.Orders.ContainsKey(interval))
- buildOrder.Orders.Add(interval, new List { entity.Clone() });
+ if (!buildOrder.StartedOrders.ContainsKey(interval))
+ buildOrder.StartedOrders.Add(interval, new List { entity.Clone() });
else
- buildOrder.Orders[interval].Add(entity.Clone());
+ buildOrder.StartedOrders[interval].Add(entity.Clone());
lastInterval = interval;
@@ -109,20 +125,20 @@ public class BuildOrderService : IBuildOrderService
EntityModel entityRemoved = null!;
- if (buildOrder.Orders.Keys.Count > 1)
+ if (buildOrder.StartedOrders.Keys.Count > 1)
{
- var last = buildOrder.Orders.Keys.Last();
+ var last = buildOrder.StartedOrders.Keys.Last();
- if (buildOrder.Orders[last].Count > 0)
+ if (buildOrder.StartedOrders[last].Count > 0)
{
- entityRemoved = buildOrder.Orders[last].Last();
- buildOrder.Orders[last].Remove(buildOrder.Orders[last].Last());
+ entityRemoved = buildOrder.StartedOrders[last].Last();
+ buildOrder.StartedOrders[last].Remove(buildOrder.StartedOrders[last].Last());
}
- if (buildOrder.Orders[last].Count == 0) buildOrder.Orders.Remove(last);
+ if (buildOrder.StartedOrders[last].Count == 0) buildOrder.StartedOrders.Remove(last);
- if (buildOrder.Orders.Keys.Count > 0)
- lastInterval = buildOrder.Orders.Keys.Last() + 1;
+ if (buildOrder.StartedOrders.Keys.Count > 0)
+ lastInterval = buildOrder.StartedOrders.Keys.Last() + 1;
else
lastInterval = 1;
@@ -158,23 +174,27 @@ public class BuildOrderService : IBuildOrderService
public List GetOrdersAt(int interval)
{
- return (from ordersAtTime in buildOrder.Orders
- from orders in ordersAtTime.Value
- where ordersAtTime.Key == interval
- select orders).ToList();
+ if (!buildOrder.StartedOrders.ContainsKey(interval))
+ {
+ return new List();
+ }
+
+ return buildOrder.StartedOrders[interval].ToList();
}
public List GetCompletedAt(int interval)
{
- return (from ordersAtTime in buildOrder.Orders
- from orders in ordersAtTime.Value
- where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) == interval
- select orders).ToList();
+ if (!buildOrder.CompletedOrders.ContainsKey(interval))
+ {
+ return new List();
+ }
+
+ return buildOrder.CompletedOrders[interval].ToList();
}
public List GetCompletedBefore(int interval)
- {
- return (from ordersAtTime in buildOrder.Orders
+ {
+ return (from ordersAtTime in buildOrder.StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
select orders).ToList();
@@ -182,7 +202,7 @@ public class BuildOrderService : IBuildOrderService
public List GetHarvestersCompletedBefore(int interval)
{
- return (from ordersAtTime in buildOrder.Orders
+ return (from ordersAtTime in buildOrder.StartedOrders
from orders in ordersAtTime.Value
where ordersAtTime.Key + (orders.Production() == null ? 0 : orders.Production().BuildTime) <= interval
where orders.Harvest() != null
@@ -197,14 +217,14 @@ public class BuildOrderService : IBuildOrderService
foreach (var requirement in requirements)
if (requirement.Requirement == RequirementType.Morph)
{
- var entitiesNeeded = from entitiesAtInterval in buildOrder.Orders
+ var entitiesNeeded = from entitiesAtInterval in buildOrder.StartedOrders
from requiredEntity in entitiesAtInterval.Value
where requestedInterval > entitiesAtInterval.Key +
(requiredEntity.Production() == null ? 0 : requiredEntity.Production().BuildTime)
where requiredEntity.DataType == requirement.Id
select requiredEntity;
- var entitiesAlreadyMorphed = from entitiesAtInterval in buildOrder.Orders
+ var entitiesAlreadyMorphed = from entitiesAtInterval in buildOrder.StartedOrders
from existingEntity in entitiesAtInterval.Value
where existingEntity.DataType == entity.DataType
select existingEntity;
@@ -214,7 +234,7 @@ public class BuildOrderService : IBuildOrderService
}
else
{
- var entitiesNeeded = from entitiesAtInterval in buildOrder.Orders
+ var entitiesNeeded = from entitiesAtInterval in buildOrder.StartedOrders
from requiredEntity in entitiesAtInterval.Value
where requestedInterval > entitiesAtInterval.Key +
(requiredEntity.Production() == null ? 0 : requiredEntity.Production().BuildTime)
@@ -279,14 +299,14 @@ public class BuildOrderService : IBuildOrderService
var supplyTakenTotal = 0;
- var supplyTakens = from entitiesAtInterval in buildOrder.Orders
+ var supplyTakens = from entitiesAtInterval in buildOrder.StartedOrders
from supplyTakingEntity in entitiesAtInterval.Value
where supplyTakingEntity.Supply()?.Takes > 0
select supplyTakingEntity.Supply().Takes;
foreach (var supplyTaken in supplyTakens) supplyTakenTotal += supplyTaken;
var supplyGrantedTotal = 0;
- var supplyGranteds = from entitiesAtInterval in buildOrder.Orders
+ var supplyGranteds = from entitiesAtInterval in buildOrder.StartedOrders
from supplyGrantingEntity in entitiesAtInterval.Value
where supplyGrantingEntity.Supply()?.Grants > 0
select supplyGrantingEntity.Supply().Grants;
diff --git a/Services/Immortal/GameLogicService.cs b/Services/Immortal/GameLogicService.cs
new file mode 100644
index 0000000..8c7da30
--- /dev/null
+++ b/Services/Immortal/GameLogicService.cs
@@ -0,0 +1,58 @@
+using Model.Entity;
+using Model.Types;
+
+namespace Services.Immortal;
+
+public class GameLogicService : IGameLogicService
+{
+ private ITimingService timingService;
+ private IEconomyService economyService;
+ private IBuildOrderService buildOrderService;
+
+ public GameLogicService(ITimingService timingService, IEconomyService economyService, IBuildOrderService buildOrderService)
+ {
+ this.timingService = timingService;
+ this.economyService = economyService;
+ this.buildOrderService = buildOrderService;
+ }
+
+ public bool Add(EntityModel entity, int atInterval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public int MeetsRequirements(EntityModel entity, int interval)
+ {
+ var buildOrders = buildOrderService.GetCompletedBefore(interval);
+
+
+
+
+ return -1;
+ }
+
+ public int MeetsAlloy(EntityModel entity, int interval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public int MeetsEther(EntityModel entity, int interval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public int MeetsPyre(EntityModel entity, int interval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public int MeetsSupply(EntityModel entity, int interval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public int MeetsTrainingQueue(EntityModel entity, int interval)
+ {
+ throw new NotImplementedException();
+ }
+}
\ No newline at end of file
diff --git a/Services/Website/NavigationService.cs b/Services/Website/NavigationService.cs
index d40eb39..6e6416a 100644
--- a/Services/Website/NavigationService.cs
+++ b/Services/Website/NavigationService.cs
@@ -63,7 +63,6 @@ public class NavigationService : INavigationService {
webSectionType = section;
navSelectionType = NavSelectionType.Section;
- Console.WriteLine(webSectionType);
NotifyDataChanged();
}