Add initial wiki and documentation structure

This commit introduces a comprehensive set of markdown files to document the IGP Fan Reference project. It includes sections like development setup, various feature overviews, and website goals. Additionally, a `.gitignore` file has been added. These additions provide a foundation for better organization, collaboration, and future development.
master
Jonathan 1 year ago
parent
commit
7d7be0d8e7
  1. 1
      .gitignore
  2. 24
      Development-Cheat-Sheet.md
  3. 96
      Development-Project-Data.md
  4. 87
      Development-Setup.md
  5. 3
      Development.md
  6. 55
      Feature-Brand-Quality.md
  7. 18
      Feature-Build-Calculator.md
  8. 23
      Feature-Catching-Up.md
  9. 30
      Feature-Data-List.md
  10. 7
      Feature-Discord-Bot.md
  11. 13
      Feature-Discord-Bots.md
  12. 17
      Feature-Faction-Display.md
  13. 3
      Feature-Footer.md
  14. 34
      Feature-Harass-Calculator.md
  15. 4
      Feature-Home-Page.md
  16. 22
      Feature-Key-Giveaway.md
  17. 4
      Feature-Navigation.md
  18. 4
      Feature-Notes.md
  19. 21
      Feature-Settings.md
  20. 4
      Feature-Timing-Calculator.md
  21. 19
      Feature-Website-Search.md
  22. 3
      Feature.md
  23. 31
      Home.md
  24. 13
      Improved-SQL-Usage.md
  25. 1
      _Footer.md
  26. 24
      _Sidebar.md

1
.gitignore vendored

@ -0,0 +1 @@
/.idea/

24
Development-Cheat-Sheet.md

@ -0,0 +1,24 @@
# Overview
This document will contain quick reference information on this project.
## Dev Team
| Name | Role | Discord |
| ------------------ | ---------- | ---------------------- |
| Jonathan McCaffrey | Maintainer | JonathanMcCaffrey#3544 |
## Project Links
| Name | Purpose | Link |
| ---------- | ----------------------------------------------------------------- | -------------------------------------------------------------- |
| Production | Customer facing version of website. `main` branch. | https://www.igpfanreference.com/ |
| Develop | Development/testing version of website. `develop` branch. | https://calm-mud-04916b210.1.azurestaticapps.net/ |
| GitRepo | Where all the dev work goes. | https://github.com/JonathanMcCaffrey/IGP-Fan-Reference |
| CI | Deployment CI logs. See if a new build has successfully released. | https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/actions |
## Educational Links
| Name | Purpose | Link |
| ------ | ------------------------------------- | -------------------------------------------------------------- |
| Blazor | Getting started information on Blazor | https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor |

96
Development-Project-Data.md

@ -0,0 +1,96 @@
# Overview
This document will contain general information on data in this project.
## General Note
This project is a work in progress. As such, most of the data in the website doesn't follow the document. Ideally, this
will be fixed over time.
## SQL
Relational data is stored in a local SQL database.
This data is converted into JSON so it can be handled by Blazor WASM.
<i>Currently, Blazor WASM has a bug that prevents SQL from being used in production. Although, given SQL doesn't seem to
provide much, aside from increased build times and load times, it might just be best to use the design principals of
SQL, and it's interface, without using the actual technology in production.</i>
The data is then loaded in by a Service, via it's load method.
```csharp
// Using Component
protected override async Task OnInitializedAsync()
{
await AgileService.Load();
}
```
```csharp
// Loading Service
public async Task Load()
{
if (isLoaded) return;
AgileSprintModels =
(await httpClient.GetFromJsonAsync<AgileSprintModel[]>("generated/AgileSprintModels.json")
?? Array.Empty<AgileSprintModel>()).ToList();
AgileTaskModels =
(await httpClient.GetFromJsonAsync<AgileTaskModel[]>("generated/AgileTaskModels.json")
?? Array.Empty<AgileTaskModel>()).ToList();
SortSql();
isLoaded = true;
NotifyDataChanged();
}
```
We create a `SortSql()` method to handle adjusting the data to match what SQL would of given us.
```csharp
private void SortSql()
{
foreach (var agileTask in AgileTaskModels!)
{
if (agileTask.AgileSprintModelId != null)
{
SprintById(agileTask.AgileSprintModelId.Value)?.AgileTaskModels.Add(agileTask);
}
}
}
```
We could also create indexes, or whatever other functionality we lose by SQL not working in production.
Then it's only a matter of using said data.
```csharp
@if (!agileService.IsLoaded())
{
<LoadingComponent/>
}
else
{
<LayoutMediumContentComponent>
<WebsiteTitleComponent>Agile</WebsiteTitleComponent>
<div class="agileViewContainer">
@foreach (var sprint in agileService.AgileSprintModels!
.OrderBy(e => e.EndDate).Reverse())
{
<details class="sprintDisplayContainer @sprint.GetSprintType().ToLower()"
open="@(sprint.GetSprintType() == SprintType.Current)">
<summary class="sprintSummary">
<div class="sprintTitle">@sprint.Name</div>
```
## Localized Strings
Localized strings are handled in the Localizations.resx file.
Most text isn't using localized strings yet. And English is the only plan of support in the short term, and probably in
the long term as well.
## Markdown Files
Documents and Notes are markdown files located in the `wwwroot/content` folder.
Navigation to these pages is handled via the SQL data.

87
Development-Setup.md

@ -0,0 +1,87 @@
# Overview
This document will contain general setup notes for the project.
## Prerequisite
To understand this document, you should have some software development experience. Particularly
using GitHub and Visual Studio.
- [GitHub Documentation](https://docs.github.com/en/get-started)
- [Visual Studio Documentation](https://visualstudio.microsoft.com/vs/getting-started/)
To create updates to the website, you should understand HTML/CSS and C#.
- [C# Documentation](https://docs.microsoft.com/en-us/dotnet/csharp/)
- [Mozilla's HTML Documentation](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started)
- [W3SCHOOLS' HTML Documentation](https://www.w3schools.com/html/)
Further, you should understand the related product and client needs. So it is recommended to play "IMMORTAL:
Gates of Pyre".
- [IGP Website](https://gatesofpyre.com/)
- [Alpha Client](https://discord.com/channels/636265083936309248/911737006193786900)
> _Don't have an alpha key? Contact me on @JonathanMcCaffrey#3544 on Discord._
## Installation
Download and install Visual Studio preview.
**Note:** Visual Studio Preview currently doesn't work on Mac for this project. Use a PC or Rider.
[https://visualstudio.microsoft.com/vs/preview/](https://visualstudio.microsoft.com/vs/preview/)
When installing, ensure you have selected "Workloads | **ASP.NET and web development**" and "Individual components | **
.NET WebAssembly build tools**".
## Download Project
Get this project from GitHub.
```bash
git clone https://github.com/JonathanMcCaffrey/IGP-Fan-Reference.git
```
## Project Tree
```
C:.
├───.github
│ └───workflows # Workflows to deploy website
├───Components # Components used be website
├───Contexts
├───IGP
│ ├───Pages # Website pages
│ └───wwwroot
│ ├───css
│ ├───generated # Files generated by IGP_Convert. Do not edit
│ ├───image
│ └───javascript
├───IGP_Convert # Converts SQL into JSON for Blazor Wasm
├───Model # Data models
└───Services # Web services
```
## Running
- Open `IGP/IGP.sln`.
- Click the green RUN button in Visual Studio.
- A local copy of the IGP Website should have launched on your machine.
## Publishing
Code committed to the `main` branch will automatically be deployed to [production](https://www.igpfanreference.com/).
Code committed to the `develop` branch will automatically be deployed
to [development](https://calm-mud-04916b210.1.azurestaticapps.net/).
_This is handled via the files in `.github/workflow`. Look into
these [GitHub Actions Documents](https://docs.github.com/en/actions) if curious about how this CI system works._
## Troubleshooting
Nothing that some good internet searches cannot resolve. But you can also contact the project maintainer
on [Discord](https://discord.gg/uMq8bMGeeN).

3
Development.md

@ -0,0 +1,3 @@
# Documents
Add develop documentation needed to maintain this website to this section.

55
Feature-Brand-Quality.md

@ -0,0 +1,55 @@
# Overview
> **User Story:** As a game developer, I want third-party websites to not reflect poorly on my brand.
IGP Fan Reference is a fan site of an existing product. As such, it should adopt different goals in brand quality than what it currently does.
# No Politics
Stop trying (and planning) to push software development education onto the customer. Not the right place.
- Remove the Development section.
- Remove the Permissions page.
- **Don't:** Announce coding streams on the Discord. We want to show gameplay, not C# code
- **Do:** Announce new features and announce game patch updates on the Discord
# Website Quality Control
## Remove the notes section until it's good.
- Avoid referring to placeholder content in IGP (the coop notes).
- Don't write partial notes or leave notes that are up to par (the armor-type notes).
> Given notes are inherently difficult to maintain and are development time sinks, perhaps the notes section needs to be scrapped. Given the feature may not feasibly meet a standard of quality.
## Do more design passes on the UI.
- Keep considering, "does this look nice?"
- Fix low-hanging fruit (styling issues) on mobile UI.
- No "programmer art" pages. (Perhaps hide the Settings page until its UI quality is improved.)
## Clean up the UI.
- Remove pointless features, like the Memory tester.
- Clean up unneeded pages, like the Streams page.
- Hide unfinished content.
- Move the About link to the bottom of the page
# Better Documentation
Have a documentation-driven approach to development.
- Add documents to missing features
- Update the quality and standardization of each document
- Look into documentation generation workflows that may already exist in GitHub
- Start maintaining documents via Visual Studio Code instead of GitHub text editor for better folder formatting and maintenance habits
# Privacy Policy
Add a standard privacy policy, and start collecting anonymous data by default.
# Keep Open Communication with SunSpear Games
Asking a simple question like "what is SunSpear Game's opinion on third-party branding" has already provided valuable data and IGPFR product direction.
Poke the company again should something arise that makes sense for them to express an opinion or statement.

18
Feature-Build-Calculator.md

@ -0,0 +1,18 @@
# Overview
> **User Story:** As a player, I want to be able to create and execute a usable game plan.
Clients are going to want to be able to construct a build order for the game, and measure when their build is particularly strong at a certain timing.
# Details
This tool exists on a [Build Calculator](https://www.igpfanreference.com/build-calculator) page.
- [x] The client should be able to use the same controls as found in the game
- [ ] The client should be able to view when a particular build is the strongest (timing attack)
- [ ] The client should get some hints when their particular build has a flaw (not spending enough ether or getting a new Town Hall overly late)
- [ ] The client should be able to make an attack plan not only with certain units but also with Pyre spells
- [x] The client should be able to refine their attack timing and attack details of the build order
- [ ] The client should get an actionable plain-text build order that they case use and easily share outside of IGPFR
- [ ] The client should be able to save build orders locally to be able to swap between different ideas they have made

23
Feature-Catching-Up.md

@ -0,0 +1,23 @@
# Overview
> **User Story:** As a player, I want to know how my faction has changed between patches.
This feature is inspired by a client in the Discord discussing how they would go about implenting a patch history viewer. Along with additional other clients discussing general lamentations of becoming out of date and being unaware of all the possible changes.
# Question
How big of an edge case nightmare is this feature going to be?
Removed units, changed spells, added passives. etc.
Is this going to be expensive to support? It sounds like it's going to take an increasing amount of database snapshots.
Won't be cause the website to become a massive download? If so, then how many patches do I choose to support? If the number is too few, won't the feature become pointless?
How much grunt work is it going to be needed to maintain this feature?
# Details
This tool exists Cathing Up page in the resources section.
- [ ] Start keeping database snapshots of all patches.
- [ ] Calendar selector to select when the client was last up to date.
- [ ] Select old and current database snapshots.
- [ ] Make a diff between the two patches.
- [ ] Make some curated content tags to indicate meaningful design changes.

30
Feature-Data-List.md

@ -0,0 +1,30 @@
# Overview
> **User Story:** As a player, I want to view and compare units against each other. Sort them based on stats. And see what units are supply and cost-efficient.
Clients are going to want to easily compare units together to answer a variety of questions.
- What has the highest DPS?
- Lowest cost?
- How do these values connect over the entire game?
- Faction?
- Unit type?
- etc.
# Prerequiste
Reorganize all Entity data into SQL.
# Details
Add a new "Data List" page in the **Resources** section.
On this page add a table list of all entity army units.
- Be able to sort based on Health, etc.
- Be able to filter based on Faction, Immortal, Name
- See Averages
- Compare stats with Supply, Alloy, and Ether efficiency
- Add a view button to show detailed Entity View Dialog
![DataLists](https://user-images.githubusercontent.com/1058561/166612164-cf4e1269-27bc-4dd3-8518-0e94c913c2d0.png)

7
Feature-Discord-Bot.md

@ -0,0 +1,7 @@
# Overview
> **User Story:** As a player, I want to be able to show others unit stats without sending them to an external website.
# Questions
Isn't this literally an anti-feature? While it's a cool idea, it doesn't fit with the goals of the project and encourages people to not link the website. Plus, no one may add the Discord bot to their server. Hosting the bot adds some extra unknowns. And the feature will have competition as others make Discord bots to act as a funnel to their own projects. Sure, we could also use it as a funnel by including a link in the Discord, but it's easier for our purposes to let people spread the tooling by word of mouth.

13
Feature-Discord-Bots.md

@ -0,0 +1,13 @@
# Overview
> **User Story:** As a player, I want to be able to easily reference and see the stats of a unit without having to leave Discord.
Add a Discord bot that can take player commands to provide unit details.
# Details
- People can type `!view throne` to see the stats of the Throne
- People can type `!help` to see all commands
- People can type `!link` to get a link to the website
How do we distinguish between IGPFR and other chat bots in a discord? `!fanRef view throne`?

17
Feature-Faction-Display.md

@ -0,0 +1,17 @@
# Overview
> **User Story:** As a player, I want to be able to easily understand a faction and it's units in a digestable manner.
New "Faction Showcase" page in the Resources section. Contains interactable images of all units belonging to a faction.
_This is to take up a user's need for a tech tree and faction overview._
# Details
- Have an organic and interesting looking image of all units belonging to a single faction
- Make it so you can hover over any unit to see a tooltip of its details
- Darken and blur all units not related to it. Amber Womb should have Ichor, Wraith Bow, Resistant, and Incubator as nonblured.
- Make some basic editors for editing this image
- Use MongoDB and a local Web API to save the custom image data
![InteractableImages](https://user-images.githubusercontent.com/1058561/166613196-45ceab2a-4343-44e5-8c09-a340379bc67d.png)

3
Feature-Footer.md

@ -0,0 +1,3 @@
# Overview
> **User Story:** As a player, I want to be able to find general information, contact details, and legal content related to the website.

34
Feature-Harass-Calculator.md

@ -0,0 +1,34 @@
# Overview
> **User Story:** As a player, I want to understand how effective harassment is against an enemy base.
This feature is inspired by a math equation that was being shared on the IGP Discord between skilled and pro players.
# Question
Are there other math calculations clients crave to explain certain aspects of the game?
What else does this Harass Calculator page need, besides just this damage calculator?
Should you also be able to enter the units you plan to harass with, to determine the initial cost investment, and what one must make to get out of it?
Shouldn't the act of destroying Ether Extractors and Town Halls also be considered?
Also, the calculator damage isn't instant. It's a resource loss that occurs over time when compared to a pre-existing delta. So should the calculator also indicate when the full effect of the alloy loss has occurred?
# Details
This tool exists on the [Harass Calculator](https://www.igpfanreference.com/harass-calculator) page.
- [x] Credit the person the came up with the math formula.
- [x] Allow people to enter the inputs to perform the calculation.
- [x] Explain how the calculation works.
- [ ] Add a first user experience flow that takes the person through the calculation step by step. Think of a program Wizard
- [ ] Support different variables on the Harass Calculator, when future game factions break the current mold of the calculation
- [ ] Add Ether Extractor destruction considerations
- [ ] Add Town Hall destruction considerations
- [ ] Add economy damage over time value
- [ ] Add some tools for selecting a Harassment force.
- [ ] Add additional tutorial information on what Harassment IS

4
Feature-Home-Page.md

@ -0,0 +1,4 @@
# Overview
> **User Story:** As a player, I want you to be able to immediately show me the value of your website.

22
Feature-Key-Giveaway.md

@ -0,0 +1,22 @@
# Overview
> **User Story:** As a content creator, I need some plan to give away keys.
This feature is inspired by SunSpear Games providing several alpha keys to the maintainer of this project.
# Question
- When do the keys expire?
- How open, or cryptic should I go about distributing keys?
- Given this concept is only a temporary thing, is it even worth the dev time to create an advance system for distributing keys?
- How can I whip up something quickly, to show one person a key? And to know a real person is getting and using the key? Do I need Captcha?
- How can I ensure I don't give someone a key that is used or expired?
- Could I possibly get enough people just asking me for keys via discord or twitch, to make no code implementation required?
# Details
I am going to make the decision to keep a portion of the keys for on-boarding.
- [x] Update the Wiki documentation to indicate a limited amount of devs, designers, QAs, etc. can get keys.
- [ ] Have some open method in the website to allow keys to be grabbed.
- [ ] Have some cryptic method in the website to allow keys to be grabbed.

4
Feature-Navigation.md

@ -0,0 +1,4 @@
# Overview
> **User Story:** As a player, I want to be able easily navigate the website.

4
Feature-Notes.md

@ -0,0 +1,4 @@
# Overview
> **User Story:** As a player, I want to be able to understand concepts in IGP to be able to grok win and lose conditions of the game.

21
Feature-Settings.md

@ -0,0 +1,21 @@
# Overview
> **User Story:** As a player, I don't want to have to keep entering my preferences onto the website.
The website will need a method of storage to save player defaults. Such a starting Faction and Immortal selection in the build calculator.
# Questions
Does the client desire a login to be able to store their settings online?
Does the client desire some personalization or default values that we are not currently considering?
# Details
This tool exists on the Settings page.
- [x] Have a page that saves preferences to local storage
- [ ] Design the UI so it's obvious where the saved values are related to
- [x] Be able to save default values for the build calculator
- [ ] Be able to save default values for the database
- [ ] Prompt returning users to consider using the Settings page if they haven't realized its existence

4
Feature-Timing-Calculator.md

@ -0,0 +1,4 @@
# Overview
> **User Story:** As a player, I want to be able to easily find and understand a possible timing window.

19
Feature-Website-Search.md

@ -0,0 +1,19 @@
# Overview
> **User Story:** As a player, I want to be able to find the content I want from the website without learning its unique layout.
This feature is inspired by clients in the Discord discussing how they don't make bookmarks or shortcuts. Younger clients rely on search features to find and repeatably retrieve content.
# Question
Are there other features clients may want that we are not aware of?
# Details
This tool exists on all web pages on the site.
- [x] Use CTRL + K to open the search window from anywhere.
- [x] Be able to search on all pages and content.
- [x] See a quick short description of the item being searched to provide context.
- [ ] Add additional tags based on topics a client may want to search for. "Frontliner"
- [ ] Improve search suggestions to facilitate the retrieval of what the client is looking for

3
Feature.md

@ -0,0 +1,3 @@
# Features
Add documentation details of current and future features to this section.

31
Home.md

@ -1 +1,30 @@
Welcome to the Wiki. > This development wiki is under construction
>
>_IGP refers to "IMMORTAL: Gates of Pyre." A title created by "SunSpear Games."_
# Goal of Project
IGP Fan Reference is designed to be a player reference for understanding the gameplay content of IGP.
The website fully supports offline mode and mobile devices, allowing players to review unit data and brainstorm build-order ideas wherever they are. An interactive pocket textbook of sorts.
---
What it won't be is a community-building tool.
- No forums
- No sharing builds between clients
- No meta reports
- No meta stats
- No meta builds
- No premium plans
I imagine there will be community sites in IMMORTAL: Gates of Pyre's future that will strongly execute on such project goals.
Clients should be able to easily export their build-order data to be able to take it to these other web projects or to share the data via other means.
# Current Focus
**IGP-Fan-Reference** will be spending its next priorities on improving the quality control of its web content and its dev documentation.

13
Improved-SQL-Usage.md

@ -0,0 +1,13 @@
# Overview
> **User Story:** As a web developer, I want better SQL practices to be used
The website is currently hard coding all the data for IGP game entities. This should be changed to SQL.
# IGP Fan Reference Server Project
This seperate server project will be used to handle the websites SQL data. It is a development only tool, and won't be used in the production version of the website.
- Use an SQL database
- Use SQL migration scrips
- Export that data to JSON

1
_Footer.md

@ -0,0 +1 @@
This project is fan-made and not affiliated with SunSpear Games in any way.

24
_Sidebar.md

@ -0,0 +1,24 @@
**[Wiki](https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/wiki)**
- [Development](Development)
- [Setup](Development-Setup)
- [Project Data](Development-Project-Data)
- [Cheat Sheet](Development-Cheat-Sheet)
- [Features](Feature)
- [Brand Quality](Feature-Brand-Quality)
- [Improved SQL Usage](Improved-SQL-Usage)
- [Build Calulator](Feature-Build-Calculator)
- [Harass Calulator](Feature-Harass-Calculator)
- [Website Search](Feature-Website-Search)
- [Navigation](Feature-Navigation)
- [Footer](Feature-Footer)
- [Mobile UI](Feature-Mobile-UI)
- [Settings](Feature-Settings)
- [Home Page](Feature-Home-Page)
- [Notes](Feature-Notes)
- [Timing Calculator](Feature-Timing-Calculator)
- _[Key Giveaway](Feature-Key-Giveaway)_
- _[Catching Up](Feature-Catching-Up)_
- _[Data Lists](Feature-Data-List)_
- _[Faction Display](Feature-Faction-Display)_
- ~[Discord Bot](Feature-Discord-Bot)~
Loading…
Cancel
Save