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