223 changed files with 4382 additions and 2847 deletions
@ -0,0 +1,11 @@ |
|||||||
|
{ |
||||||
|
"version": "0.2.0", |
||||||
|
"configurations": [ |
||||||
|
{ |
||||||
|
"name": "Launch and Debug Standalone Blazor WebAssembly App", |
||||||
|
"type": "blazorwasm", |
||||||
|
"request": "launch", |
||||||
|
"cwd": "${workspaceFolder}/IGP" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
{ |
||||||
|
"version": "2.0.0", |
||||||
|
"tasks": [ |
||||||
|
{ |
||||||
|
"label": "build", |
||||||
|
"command": "dotnet", |
||||||
|
"type": "process", |
||||||
|
"args": [ |
||||||
|
"build", |
||||||
|
"${workspaceFolder}/IGP/IGP.csproj", |
||||||
|
"/property:GenerateFullPaths=true", |
||||||
|
"/consoleloggerparameters:NoSummary" |
||||||
|
], |
||||||
|
"problemMatcher": "$msCompile" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"label": "publish", |
||||||
|
"command": "dotnet", |
||||||
|
"type": "process", |
||||||
|
"args": [ |
||||||
|
"publish", |
||||||
|
"${workspaceFolder}/IGP/IGP.csproj", |
||||||
|
"/property:GenerateFullPaths=true", |
||||||
|
"/consoleloggerparameters:NoSummary" |
||||||
|
], |
||||||
|
"problemMatcher": "$msCompile" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"label": "watch", |
||||||
|
"command": "dotnet", |
||||||
|
"type": "process", |
||||||
|
"args": [ |
||||||
|
"watch", |
||||||
|
"run", |
||||||
|
"--project", |
||||||
|
"${workspaceFolder}/IGP/IGP.csproj" |
||||||
|
], |
||||||
|
"problemMatcher": "$msCompile" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
@ -1,29 +1,27 @@ |
|||||||
<div class="paper"> |
<div class="paperDisplay"> |
||||||
@ChildContent |
@ChildContent |
||||||
</div> |
</div> |
||||||
|
|
||||||
<style> |
<style> |
||||||
.paper { |
.paperDisplay { |
||||||
padding-top: 24px; |
padding-top: 24px; |
||||||
padding-left: 24px; |
padding-left: 24px; |
||||||
padding-right: 24px; |
padding-right: 24px; |
||||||
padding-bottom: 24px; |
padding-bottom: 24px; |
||||||
margin: auto; |
|
||||||
overflow-y: auto; |
overflow-y: auto; |
||||||
overflow-x: hidden; |
overflow-x: hidden; |
||||||
border: 4px solid var(--paper-border); |
border: 4px solid var(--paper-border); |
||||||
background-color: var(--paper); |
background-color: var(--paper); |
||||||
box-shadow: 0px 6px var(--paper-border); |
box-shadow: 0px 6px var(--paper-border); |
||||||
width: 100%; |
|
||||||
} |
} |
||||||
</style> |
</style> |
||||||
|
|
||||||
@code { |
@code { |
||||||
|
|
||||||
[Parameter] |
[Parameter] |
||||||
public RenderFragment ChildContent { get; set; } |
public RenderFragment ChildContent { get; set; } = default!; |
||||||
|
|
||||||
[Parameter] |
[Parameter] |
||||||
public string Title { get; set; } |
public string Title { get; set; } = default!; |
||||||
|
|
||||||
} |
} |
||||||
@ -0,0 +1,58 @@ |
|||||||
|
|
||||||
|
<div class="layoutWithSidebar"> |
||||||
|
<div class="layoutSidebar"> |
||||||
|
@Sidebar |
||||||
|
</div> |
||||||
|
<div class="layoutContent"> |
||||||
|
@Content |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.layoutWithSidebar { |
||||||
|
display: grid; |
||||||
|
|
||||||
|
gap: 16px; |
||||||
|
width: 65%; |
||||||
|
min-width: 1000px; |
||||||
|
margin-left: auto; |
||||||
|
margin-right: auto; |
||||||
|
padding-top: 10px; |
||||||
|
padding-bottom: 30px; |
||||||
|
|
||||||
|
grid-template-columns: 412px 1fr; |
||||||
|
} |
||||||
|
|
||||||
|
.layoutSidebar { |
||||||
|
background: var(--paper); |
||||||
|
padding: 16px; |
||||||
|
} |
||||||
|
|
||||||
|
.layoutContent { |
||||||
|
} |
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) { |
||||||
|
.layoutWithSidebar { |
||||||
|
flex-direction: column-reverse; |
||||||
|
width: 100%; |
||||||
|
min-width: 350px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@media only screen and (min-width: 1024px) { |
||||||
|
.layoutWithSidebar { |
||||||
|
margin-top: 50px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
[Parameter] |
||||||
|
public RenderFragment Sidebar { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public RenderFragment Content { get; set; } = default!; |
||||||
|
} |
||||||
@ -1,22 +1,15 @@ |
|||||||
@if (Markdown == null) { |
@((MarkupString)MarkdownText) |
||||||
<div>Loading...</div> |
|
||||||
} |
|
||||||
else { |
|
||||||
@((MarkupString)Markdown) |
|
||||||
} |
|
||||||
|
|
||||||
@code { |
@code { |
||||||
|
|
||||||
[Inject] |
[Inject] |
||||||
protected HttpClient Http { get; set; } |
protected HttpClient Http { get; set; } = default!; |
||||||
|
|
||||||
[Parameter] |
[Parameter] |
||||||
public string MarkdownFileName { get; set; } |
public string MarkdownFileName { get; set; } = default!; |
||||||
|
|
||||||
public string Markdown { get; set; } |
private string MarkdownText { get; set; } = ""; |
||||||
|
|
||||||
protected override async Task OnInitializedAsync() { |
protected override async Task OnInitializedAsync() { |
||||||
Markdown = Markdig.Markdown.ToHtml(await Http.GetStringAsync($"markdown/{MarkdownFileName}.md")); |
MarkdownText = Markdig.Markdown.ToHtml(await Http.GetStringAsync($"markdown/{MarkdownFileName}.md")); |
||||||
} |
} |
||||||
|
|
||||||
} |
} |
||||||
Binary file not shown.
@ -1,23 +1,24 @@ |
|||||||
@implements IDisposable |
@inject IBuildOrderService buildOrderService |
||||||
|
|
||||||
|
@implements IDisposable |
||||||
|
|
||||||
<FormLayoutComponent> |
<FormLayoutComponent> |
||||||
<FormTextAreaComponent Label="JSON Data" |
<FormTextAreaComponent Label="JSON Data" |
||||||
Rows="14" |
Rows="14" |
||||||
Value="@BuildOrderService.AsJson()"> |
Value="@buildOrderService.AsJson()"> |
||||||
</FormTextAreaComponent> |
</FormTextAreaComponent> |
||||||
</FormLayoutComponent> |
</FormLayoutComponent> |
||||||
|
|
||||||
@code { |
@code { |
||||||
|
|
||||||
[Inject] |
protected override void OnInitialized() |
||||||
IBuildOrderService BuildOrderService { get; set; } |
{ |
||||||
|
buildOrderService.Subscribe(StateHasChanged); |
||||||
protected override void OnInitialized() { |
|
||||||
BuildOrderService.Subscribe(StateHasChanged); |
|
||||||
} |
} |
||||||
|
|
||||||
void IDisposable.Dispose() { |
void IDisposable.Dispose() |
||||||
BuildOrderService.Unsubscribe(StateHasChanged); |
{ |
||||||
|
buildOrderService.Unsubscribe(StateHasChanged); |
||||||
} |
} |
||||||
|
|
||||||
} |
} |
||||||
@ -0,0 +1,115 @@ |
|||||||
|
@layout PageLayout |
||||||
|
|
||||||
|
@inject IDocumentationService documentationService |
||||||
|
@implements IDisposable |
||||||
|
|
||||||
|
@page "/docs" |
||||||
|
|
||||||
|
@if (!documentationService.IsLoaded()) |
||||||
|
{ |
||||||
|
<LoadingComponent/> |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
<LayoutMediumContentComponent> |
||||||
|
<PaperComponent> |
||||||
|
@foreach (var docSection in documentationService.DocSectionModels) |
||||||
|
{ |
||||||
|
<div class="docSectionContainer"> |
||||||
|
<div class="docSectionTitle">@docSection.Name</div> |
||||||
|
<div class="docContentContainer"> |
||||||
|
@foreach (var docContent in docSection.DocumentationModels) |
||||||
|
{ |
||||||
|
<NavLink class="docContentLink" href="@docContent.GetDocLink()"> |
||||||
|
<div class="docContentName">@docContent.Name</div> |
||||||
|
<div class="docContentDescription">@docContent.Description</div> |
||||||
|
</NavLink> |
||||||
|
} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
} |
||||||
|
</PaperComponent> |
||||||
|
</LayoutMediumContentComponent> |
||||||
|
} |
||||||
|
|
||||||
|
<style> |
||||||
|
.docSectionContainer { |
||||||
|
width: 100%; |
||||||
|
padding: 8px; |
||||||
|
} |
||||||
|
|
||||||
|
.docSectionTitle { |
||||||
|
font-size: 3rem; |
||||||
|
font-weight: bold; |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 32px; |
||||||
|
} |
||||||
|
|
||||||
|
.docContentContainer { |
||||||
|
display: grid; |
||||||
|
gap: 12px; |
||||||
|
grid-template-columns: 1fr 1fr; |
||||||
|
} |
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) { |
||||||
|
.docContentContainer { |
||||||
|
grid-template-columns: 1fr; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.docContentName { |
||||||
|
font-weight: bold; |
||||||
|
font-size: 1.6rem; |
||||||
|
} |
||||||
|
|
||||||
|
.docContentDescription { |
||||||
|
font-weight: normal; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.docContentLink { |
||||||
|
background-color: var(--paper); |
||||||
|
border: 1px solid var(--paper-border); |
||||||
|
border-radius: 2px; |
||||||
|
padding-left: 12px; |
||||||
|
padding-right: 12px; |
||||||
|
padding-top: 24px; |
||||||
|
padding-bottom: 24px; |
||||||
|
color: white; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
gap: 12px; |
||||||
|
text-align: center; |
||||||
|
margin-left: 12px; |
||||||
|
margin-right: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.docContentLink:hover { |
||||||
|
background-color: var(--paper-hover); |
||||||
|
border-color: var(--paper-border-hover); |
||||||
|
text-decoration: none; |
||||||
|
box-shadow: 0 4px 6px rgba(0,0,0,0.6); |
||||||
|
transform: translateY(-2px) scale(1.01); |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Text { get; set; } |
||||||
|
|
||||||
|
protected override void OnInitialized() |
||||||
|
{ |
||||||
|
documentationService.Subscribe(StateHasChanged); |
||||||
|
|
||||||
|
documentationService.Load(); |
||||||
|
} |
||||||
|
|
||||||
|
public void Dispose() |
||||||
|
{ |
||||||
|
documentationService.Unsubscribe(StateHasChanged); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
<div class="doc"> |
||||||
|
<div class="docHeader"> |
||||||
|
<div class="docTitle">@DocContentModel.Name</div> |
||||||
|
|
||||||
|
<div class="docDates"> |
||||||
|
<div class="docDateUpdated"><b>Updated</b>: @DocContentModel.UpdatedDate.ToString("MM/dd/yyyy")</div> |
||||||
|
<div class="docDateCreated"><b>Created</b>: @DocContentModel.CreatedDate.ToString("MM/dd/yyyy")</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="docContent">@((MarkupString)Markdown.ToHtml(DocContentModel.Content))</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<style> |
||||||
|
.docTitle { |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
|
||||||
|
.docHeader { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.docDates { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public DocContentModel DocContentModel { get; set; } = default!; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,70 @@ |
|||||||
|
@if (Document!.DocumentationModels.Count > 0) |
||||||
|
{ |
||||||
|
<div class="docInnerNavContainer"> |
||||||
|
@foreach (var innerDoc in Document.DocumentationModels) |
||||||
|
{ |
||||||
|
var linkStyle = $"docInnerNavButton inner_{Layers}"; |
||||||
|
<NavLink class="@linkStyle" href="@innerDoc.GetDocLink()">@innerDoc.Name</NavLink> |
||||||
|
<DocumentInnerNavComponent Document="@innerDoc" Layers="@IncrementLayers()"/> |
||||||
|
} |
||||||
|
</div> |
||||||
|
} |
||||||
|
|
||||||
|
<style> |
||||||
|
|
||||||
|
.docInnerNavContainer { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.docInnerNavButton a { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.docInnerNavButton a:hover { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.docInnerNavButton { |
||||||
|
padding: 8px; |
||||||
|
margin-left: 8px; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.inner_1 { |
||||||
|
margin-left: 8px; |
||||||
|
} |
||||||
|
|
||||||
|
.inner_2 { |
||||||
|
margin-left: 16px; |
||||||
|
} |
||||||
|
|
||||||
|
.inner_3 { |
||||||
|
margin-left: 24px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public DocContentModel? Document { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public int Layers { get; set; } = 1; |
||||||
|
|
||||||
|
public int IncrementLayers() |
||||||
|
{ |
||||||
|
return Layers + 1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private string GetLink(DocContentModel doc) |
||||||
|
{ |
||||||
|
return $"docs/{doc.Href}"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
<div class="docNavContainer"> |
||||||
|
@foreach (var doc in Documents) |
||||||
|
{ |
||||||
|
if (doc.Parent == null) |
||||||
|
{ |
||||||
|
<NavLink class="docNavButton" href="@doc.GetDocLink()">@doc.Name</NavLink> |
||||||
|
<DocumentInnerNavComponent Document="@doc"/> |
||||||
|
} |
||||||
|
} |
||||||
|
</div> |
||||||
|
|
||||||
|
<style> |
||||||
|
.docNavContainer { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.docNavButton a { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.docNavButton a:hover { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.docNavButton { |
||||||
|
padding: 8px; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public List<DocContentModel> Documents { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public List<DocConnectionModel> Connections { get; set; } = default!; |
||||||
|
|
||||||
|
private string GetLink(DocContentModel doc) |
||||||
|
{ |
||||||
|
return $"docs/{doc.Href}"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,82 @@ |
|||||||
|
@layout PageLayout; |
||||||
|
|
||||||
|
@page "/immortal-home" |
||||||
|
|
||||||
|
<LayoutMediumContentComponent> |
||||||
|
<PaperComponent> |
||||||
|
<div class="mainContainer"> |
||||||
|
<div class="mainTitle"> |
||||||
|
Fan Reference |
||||||
|
</div> |
||||||
|
|
||||||
|
<div> |
||||||
|
Refer to various aspects of "IMMORTAL: Gates of Pyre" from this external reference! |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</PaperComponent> |
||||||
|
|
||||||
|
<ContentDividerComponent></ContentDividerComponent> |
||||||
|
|
||||||
|
<PaperComponent> |
||||||
|
<div class="heroesContainer"> |
||||||
|
|
||||||
|
<ContentHighlightComponent |
||||||
|
Title="Database" |
||||||
|
Description="Review the units!" |
||||||
|
Href="/database" |
||||||
|
ImageHref="image/hero/Database.png"/> |
||||||
|
|
||||||
|
<ContentHighlightComponent |
||||||
|
Title="Build Calculator" |
||||||
|
Description="Make a build!" |
||||||
|
Href="/build-calculator" |
||||||
|
ImageHref="image/hero/Build.png"/> |
||||||
|
|
||||||
|
<ContentHighlightComponent |
||||||
|
Title="Notes" |
||||||
|
Description="Read some notes!" |
||||||
|
Href="/notes" |
||||||
|
ImageHref="image/hero/Notes.png"/> |
||||||
|
|
||||||
|
<ContentHighlightComponent |
||||||
|
Title="Streams" |
||||||
|
Description="Watch live development!" |
||||||
|
Href="/streams" |
||||||
|
ImageHref="image/hero/Streams.png"/> |
||||||
|
</div> |
||||||
|
</PaperComponent> |
||||||
|
|
||||||
|
<ContentDividerComponent></ContentDividerComponent> |
||||||
|
|
||||||
|
<AlertComponent> |
||||||
|
<Title>Under Construction</Title> |
||||||
|
<Message>Website is still being made. Check out <NavLink Href="/immortal-roadmap">Road Map</NavLink> for future plans, <NavLink Href="/immortal-agile">Agile</NavLink> for present tasks, and <NavLink Href="/immortal-changelog">Change Log</NavLink> for past changes.</Message> |
||||||
|
|
||||||
|
</AlertComponent> |
||||||
|
|
||||||
|
</LayoutMediumContentComponent> |
||||||
|
|
||||||
|
<style> |
||||||
|
.mainContainer { |
||||||
|
padding-bottom: 32px; |
||||||
|
} |
||||||
|
|
||||||
|
.mainTitle { |
||||||
|
font-size: 2.2rem; |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
|
||||||
|
.heroesContainer { |
||||||
|
display: grid; |
||||||
|
gap: 64px; |
||||||
|
justify-content: center; |
||||||
|
margin: auto; |
||||||
|
grid-template-columns: 1fr 1fr; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) { |
||||||
|
.heroesContainer { |
||||||
|
grid-template-columns: 1fr; } |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,76 @@ |
|||||||
|
<NavLink Href="@Href" class="contentHighlight"> |
||||||
|
<div class="contentHighlightTitle"> |
||||||
|
@Title |
||||||
|
</div> |
||||||
|
<img src="@ImageHref" class="contentHighlightImage" alt="@Title"/> |
||||||
|
<div class="contentHighlightCallToAction"> |
||||||
|
@Description |
||||||
|
</div> |
||||||
|
</NavLink> |
||||||
|
|
||||||
|
|
||||||
|
<style> |
||||||
|
.contentHighlight { |
||||||
|
background-color: var(--paper); |
||||||
|
border: 1px solid var(--paper-border); |
||||||
|
border-radius: 2px; |
||||||
|
padding-left: 12px; |
||||||
|
padding-right: 12px; |
||||||
|
padding-top: 24px; |
||||||
|
padding-bottom: 24px; |
||||||
|
color: white; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
gap: 12px; |
||||||
|
text-align: center; |
||||||
|
margin-left: 12px; |
||||||
|
margin-right: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.contentHighlight:hover { |
||||||
|
background-color: var(--paper-hover); |
||||||
|
border-color: var(--paper-border-hover); |
||||||
|
text-decoration: none; |
||||||
|
box-shadow: 0 4px 6px rgba(0,0,0,0.6); |
||||||
|
transform: translateY(-2px) scale(1.01); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.contentHighlightTitle { |
||||||
|
font-weight: 800; |
||||||
|
font-size: 1.3rem; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.contentHighlightImage { |
||||||
|
border: 1px solid rgba(0,0,0,0.5); |
||||||
|
box-shadow: 2px 2px 2px rgba(0,0,0,0.5); |
||||||
|
height: 400px; |
||||||
|
width: 400px; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.contentHighlightCallToAction { |
||||||
|
font-weight: 700; |
||||||
|
font-size: 1.1rem; |
||||||
|
margin: auto; |
||||||
|
padding: 16px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string Href { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string Title { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string Description { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string ImageHref { get; set; } = default!; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -1,149 +0,0 @@ |
|||||||
@layout PageLayout; |
|
||||||
|
|
||||||
@page "/immortal-home" |
|
||||||
|
|
||||||
<LayoutMediumContentComponent> |
|
||||||
<div class="mainContainer"> |
|
||||||
<div class="mainTitle"> |
|
||||||
Fan Reference |
|
||||||
</div> |
|
||||||
|
|
||||||
<div> |
|
||||||
Refer to various aspects of "IMMORTAL: Gates of Pyre" from this external reference! |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<ContentDividerComponent></ContentDividerComponent> |
|
||||||
|
|
||||||
<div class="herosContainer"> |
|
||||||
<div class="hero"> |
|
||||||
<div class="heroTitle"> |
|
||||||
Database |
|
||||||
</div> |
|
||||||
<img src="image/hero/Database.png" class="heroImage"/> |
|
||||||
<NavLink Href="/database" class="heroCallToAction"> |
|
||||||
Review the units! |
|
||||||
</NavLink> |
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
<div class="hero"> |
|
||||||
<div class="heroTitle"> |
|
||||||
Build Calculator |
|
||||||
</div> |
|
||||||
<img src="image/hero/Build.png" class="heroImage"/> |
|
||||||
<NavLink Href="/build-calculator" class="heroCallToAction"> |
|
||||||
Make a build! |
|
||||||
</NavLink> |
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
<div class="hero"> |
|
||||||
<div class="heroTitle"> |
|
||||||
Notes |
|
||||||
</div> |
|
||||||
<img src="image/hero/Notes.png" class="heroImage"/> |
|
||||||
<NavLink Href="/notes" class="heroCallToAction"> |
|
||||||
Read some notes! |
|
||||||
</NavLink> |
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
<div class="hero"> |
|
||||||
<div class="heroTitle"> |
|
||||||
Streams |
|
||||||
</div> |
|
||||||
<img src="image/hero/Streams.png" class="heroImage"/> |
|
||||||
<NavLink Href="/streams" class="heroCallToAction"> |
|
||||||
Watch live development! |
|
||||||
</NavLink> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
|
|
||||||
<ContentDividerComponent></ContentDividerComponent> |
|
||||||
|
|
||||||
<AlertComponent> |
|
||||||
<Title>Under Construction</Title> |
|
||||||
<Message>Website is still being made. Check out <NavLink Href="/immortal-roadmap">Road Map</NavLink> for future plans, <NavLink Href="/immortal-agile">Agile</NavLink> for present tasks, and <NavLink Href="/immortal-changelog">Change Log</NavLink> for past changes.</Message> |
|
||||||
|
|
||||||
</AlertComponent> |
|
||||||
|
|
||||||
</LayoutMediumContentComponent> |
|
||||||
|
|
||||||
<style> |
|
||||||
.mainContainer { |
|
||||||
padding-bottom: 32px; |
|
||||||
} |
|
||||||
|
|
||||||
.mainTitle { |
|
||||||
font-size: 2.2rem; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
|
|
||||||
.quoteContainer { |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
gap: 8px; |
|
||||||
max-width: 600px; |
|
||||||
margin: auto; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.quoteTitle { |
|
||||||
font-weight: 800; |
|
||||||
margin-bottom: 8px; |
|
||||||
} |
|
||||||
|
|
||||||
.quoteText { |
|
||||||
margin: auto; |
|
||||||
font-style: italic; |
|
||||||
} |
|
||||||
|
|
||||||
.herosContainer { |
|
||||||
display: flex; |
|
||||||
flex-wrap: wrap; |
|
||||||
gap: 64px; |
|
||||||
justify-content: center; |
|
||||||
} |
|
||||||
|
|
||||||
.hero { |
|
||||||
padding: 32px; |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
gap: 32px; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
.heroTitle { |
|
||||||
font-weight: 800; |
|
||||||
font-size: 1.3rem; |
|
||||||
margin: auto; |
|
||||||
} |
|
||||||
|
|
||||||
.heroImage { |
|
||||||
border: 1px solid rgba(0,0,0,0.5); |
|
||||||
box-shadow: 2px 2px 2px rgba(0,0,0,0.5); |
|
||||||
height: 400px; |
|
||||||
width: 400px; |
|
||||||
margin: auto; |
|
||||||
} |
|
||||||
|
|
||||||
.heroCallToAction { |
|
||||||
font-weight: 700; |
|
||||||
font-size: 1.1rem; |
|
||||||
margin: auto; |
|
||||||
background-color: var(--primary); |
|
||||||
border: 1px solid var(--primary); |
|
||||||
padding: 16px; |
|
||||||
cursor: pointer; |
|
||||||
color: white; |
|
||||||
} |
|
||||||
|
|
||||||
.heroCallToAction:hover { |
|
||||||
background-color: var(--primary-hover); |
|
||||||
border-color: var(--primary-border-hover); |
|
||||||
} |
|
||||||
|
|
||||||
</style> |
|
||||||
@ -0,0 +1,140 @@ |
|||||||
|
@layout PageLayout |
||||||
|
|
||||||
|
@inject INoteService noteService |
||||||
|
@implements IDisposable |
||||||
|
|
||||||
|
@page "/notes" |
||||||
|
|
||||||
|
|
||||||
|
@if (!noteService.IsLoaded()) |
||||||
|
{ |
||||||
|
<LoadingComponent/> |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
<LayoutMediumContentComponent> |
||||||
|
|
||||||
|
<PaperComponent> |
||||||
|
@foreach (var noteSection in noteService.NoteSectionModels) |
||||||
|
{ |
||||||
|
<div class="noteSectionContainer"> |
||||||
|
<div class="noteSectionTitle">@noteSection.Name</div> |
||||||
|
<div class="noteContentContainer"> |
||||||
|
@foreach (var noteContent in noteSection.NoteContentModels) |
||||||
|
{ |
||||||
|
<NavLink class="noteContentLink" href="@noteContent.GetNoteLink()"> |
||||||
|
<div class="noteContentName">@noteContent.Name</div> |
||||||
|
<div class="noteContentDescription">@noteContent.Description</div> |
||||||
|
</NavLink> |
||||||
|
} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
} |
||||||
|
</PaperComponent> |
||||||
|
</LayoutMediumContentComponent> |
||||||
|
} |
||||||
|
<style> |
||||||
|
.noteSectionContainer { |
||||||
|
width: 100%; |
||||||
|
padding: 8px; |
||||||
|
} |
||||||
|
|
||||||
|
.noteSectionTitle { |
||||||
|
font-size: 3rem; |
||||||
|
font-weight: bold; |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 32px; |
||||||
|
} |
||||||
|
|
||||||
|
.noteContentContainer { |
||||||
|
display: grid; |
||||||
|
gap: 12px; |
||||||
|
grid-template-columns: 1fr 1fr; |
||||||
|
} |
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) { |
||||||
|
.noteContentContainer { |
||||||
|
grid-template-columns: 1fr; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.noteContentName { |
||||||
|
font-weight: bold; |
||||||
|
font-size: 1.6rem; |
||||||
|
} |
||||||
|
|
||||||
|
.noteContentDescription { |
||||||
|
font-weight: normal; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.noteContentLink { |
||||||
|
background-color: var(--paper); |
||||||
|
border: 1px solid var(--paper-border); |
||||||
|
border-radius: 2px; |
||||||
|
padding-left: 12px; |
||||||
|
padding-right: 12px; |
||||||
|
padding-top: 24px; |
||||||
|
padding-bottom: 24px; |
||||||
|
color: white; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
gap: 12px; |
||||||
|
text-align: center; |
||||||
|
margin-left: 12px; |
||||||
|
margin-right: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.noteContentLink:hover { |
||||||
|
background-color: var(--paper-hover); |
||||||
|
border-color: var(--paper-border-hover); |
||||||
|
text-decoration: none; |
||||||
|
box-shadow: 0 4px 6px rgba(0,0,0,0.6); |
||||||
|
transform: translateY(-2px) scale(1.01); |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href1 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href2 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href3 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href4 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href5 { get; set; } |
||||||
|
|
||||||
|
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? ""; |
||||||
|
|
||||||
|
string selectedSection = "All"; |
||||||
|
|
||||||
|
protected override void OnInitialized() |
||||||
|
{ |
||||||
|
noteService.Subscribe(StateHasChanged); |
||||||
|
|
||||||
|
noteService.Load(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void Dispose() |
||||||
|
{ |
||||||
|
noteService.Unsubscribe(StateHasChanged); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void OnSectionChanged(ChangeEventArgs e) |
||||||
|
{ |
||||||
|
selectedSection = e.Value!.ToString()!; |
||||||
|
StateHasChanged(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -1,109 +1,71 @@ |
|||||||
@layout PageLayout |
@layout PageLayout |
||||||
|
|
||||||
@inject INoteService NoteService |
@inject INoteService noteService |
||||||
@implements IDisposable |
@implements IDisposable |
||||||
|
|
||||||
@page "/notes" |
@page "/notes/{href1}/{href2?}/{href3?}/{href4?}/{href5?}" |
||||||
|
|
||||||
|
|
||||||
@if (!NoteService.IsLoaded()) |
@if (!noteService.IsLoaded()) |
||||||
{ |
{ |
||||||
<LoadingComponent></LoadingComponent> |
<LoadingComponent/> |
||||||
} |
} |
||||||
else |
else |
||||||
{ |
{ |
||||||
<LayoutMediumContentComponent> |
<LayoutWithSidebarComponent> |
||||||
<WebsiteTitleComponent>Notes</WebsiteTitleComponent> |
<Sidebar> |
||||||
|
<NoteNavComponent |
||||||
<div class="section"> |
Connections="noteService.NoteConnectionModels" |
||||||
<div for="noteSection">Section: </div> |
Notes="noteService.NoteContentModels"/> |
||||||
<div style="flex: 1"></div> |
</Sidebar> |
||||||
<select @oninput="OnSectionChanged" style="background-color: #36393F; width: 250px; margin-right: 16px;" name="noteSection"> |
<Content> |
||||||
<option value="All">All</option> |
<PaperComponent> |
||||||
|
@foreach (var note in noteService.NoteContentModels) |
||||||
</select> |
{ |
||||||
</div> |
if (!note.Href.Equals(Href)) |
||||||
|
{ |
||||||
<div class="notesContainer"> |
continue; |
||||||
@foreach (var note in NoteService.NoteModels) { |
} |
||||||
if (note.IsHidden) { |
<NoteComponent NoteContentModel="note"/> |
||||||
continue; |
|
||||||
} |
} |
||||||
if (selectedSection != "All" && note.Section != selectedSection) { |
</PaperComponent> |
||||||
continue; |
</Content> |
||||||
} |
</LayoutWithSidebarComponent> |
||||||
@if (note.IsPreAlpha) { |
|
||||||
<AlertComponent Type=SeverityType.Warning> |
|
||||||
<Title>Pre Alpha</Title> |
|
||||||
<Message>This note refers to content that is in pre-alpha. It won't be accurate in future updates to IGP.</Message> |
|
||||||
</AlertComponent> |
|
||||||
} |
|
||||||
<PaperComponent> |
|
||||||
<div style="display: flex; flex-direction: row;"> |
|
||||||
<span style="font-weight: bold; font-style:italic;">@note.Section</span> |
|
||||||
<div style="flex: 1"></div> |
|
||||||
<span style="font-weight: bold; font-style:italic;">Last Updated on @note.LastUpdated</span> |
|
||||||
</div> |
|
||||||
<div> |
|
||||||
<div id="@note.DEPRECATED_Id()" style="font-weight: bold; font-size: 1.4rem;">@note.Name</div> |
|
||||||
|
|
||||||
<div style="white-space:break-spaces;">@((MarkupString)note.Description)</div> |
|
||||||
</div> |
|
||||||
</PaperComponent> |
|
||||||
} |
|
||||||
</div> |
|
||||||
</LayoutMediumContentComponent> |
|
||||||
|
|
||||||
} |
} |
||||||
<style> |
|
||||||
.section { |
|
||||||
display: flex; |
|
||||||
width: 500px; |
|
||||||
flex-direction: row; |
|
||||||
background-color: var(--paper); |
|
||||||
justify-content: center; |
|
||||||
padding: 24px; |
|
||||||
border: 4px solid var(--paper-border); |
|
||||||
box-shadow: 0px 6px var(--paper-border); |
|
||||||
} |
|
||||||
|
|
||||||
.notesContainer { |
<style> |
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
gap: 16px; |
|
||||||
} |
|
||||||
|
|
||||||
.noteContainer { |
|
||||||
padding: 24px; |
|
||||||
border: 2px solid black; |
|
||||||
margin: auto; |
|
||||||
overflow-y: auto; |
|
||||||
overflow-x: hidden; |
|
||||||
background-color: var(--paper); |
|
||||||
} |
|
||||||
</style> |
</style> |
||||||
|
|
||||||
@code { |
@code { |
||||||
|
|
||||||
string selectedSection = "All"; |
[Parameter] |
||||||
|
public string? Href1 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href2 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href3 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href4 { get; set; } |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public string? Href5 { get; set; } |
||||||
|
|
||||||
|
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? ""; |
||||||
|
|
||||||
protected override void OnInitialized() |
protected override void OnInitialized() |
||||||
{ |
{ |
||||||
NoteService.Subscribe(StateHasChanged); |
noteService.Subscribe(StateHasChanged); |
||||||
|
|
||||||
NoteService.Load(); |
noteService.Load(); |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
public void Dispose() |
public void Dispose() |
||||||
{ |
{ |
||||||
NoteService.Unsubscribe(StateHasChanged); |
noteService.Unsubscribe(StateHasChanged); |
||||||
|
|
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
void OnSectionChanged(ChangeEventArgs e) { |
|
||||||
selectedSection = e.Value.ToString(); |
|
||||||
StateHasChanged(); |
|
||||||
} |
|
||||||
} |
} |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
<div class="note"> |
||||||
|
<div class="noteHeader"> |
||||||
|
<div class="noteTitle">@NoteContentModel.Name</div> |
||||||
|
|
||||||
|
<div class="noteDates"> |
||||||
|
<div class="noteDateUpdated"><b>Updated</b>: @NoteContentModel.UpdatedDate.ToString("MM/dd/yyyy")</div> |
||||||
|
<div class="noteDateCreated"><b>Created</b>: @NoteContentModel.CreatedDate.ToString("MM/dd/yyyy")</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="noteContent">@((MarkupString)Markdown.ToHtml(NoteContentModel.Content))</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<style> |
||||||
|
.noteTitle { |
||||||
|
font-weight: bold; |
||||||
|
} |
||||||
|
|
||||||
|
.noteHeader { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
|
||||||
|
.noteDates { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public NoteContentModel NoteContentModel { get; set; } = default!; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,75 @@ |
|||||||
|
@if (Note!.NoteContentModels.Count > 0) |
||||||
|
{ |
||||||
|
<div class="noteInnerNavContainer"> |
||||||
|
@foreach (var innerNote in Note.NoteContentModels) |
||||||
|
{ |
||||||
|
var linkStyle = $"noteInnerNavButton inner_{Layers}"; |
||||||
|
<NavLink class="@linkStyle" href="@innerNote.GetNoteLink()">@innerNote.Name</NavLink> |
||||||
|
<NoteInnerNavComponent Note="@innerNote" Layers="@IncrementLayers()"/> |
||||||
|
} |
||||||
|
</div> |
||||||
|
} |
||||||
|
|
||||||
|
<style> |
||||||
|
|
||||||
|
.noteInnerNavContainer { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.noteInnerNavButton a { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.noteInnerNavButton a:hover { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.noteInnerNavButton { |
||||||
|
padding: 8px; |
||||||
|
margin-left: 8px; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.noteInnerNavButton:hover { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.inner_1 { |
||||||
|
margin-left: 8px; |
||||||
|
} |
||||||
|
|
||||||
|
.inner_2 { |
||||||
|
margin-left: 16px; |
||||||
|
} |
||||||
|
|
||||||
|
.inner_3 { |
||||||
|
margin-left: 24px; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public NoteContentModel? Note { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public int Layers { get; set; } = 1; |
||||||
|
|
||||||
|
public int IncrementLayers() |
||||||
|
{ |
||||||
|
return Layers + 1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private string GetLink(NoteContentModel note) |
||||||
|
{ |
||||||
|
return $"notes/{note.Href}"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,43 @@ |
|||||||
|
<div class="noteNavContainer"> |
||||||
|
@foreach (var note in Notes) |
||||||
|
{ |
||||||
|
if (note.Parent == null) |
||||||
|
{ |
||||||
|
<NavLink class="noteNavButton" href="@note.GetNoteLink()">@note.Name</NavLink> |
||||||
|
<NoteInnerNavComponent Note="@note"/> |
||||||
|
} |
||||||
|
} |
||||||
|
</div> |
||||||
|
|
||||||
|
<style> |
||||||
|
.noteNavContainer { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.noteNavButton a { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.noteNavButton a:hover { |
||||||
|
color: white; |
||||||
|
background-color: var(--primary-hover); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
.noteNavButton { |
||||||
|
padding: 8px; |
||||||
|
color: white; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
||||||
|
|
||||||
|
@code { |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public List<NoteContentModel> Notes { get; set; } = default!; |
||||||
|
|
||||||
|
[Parameter] |
||||||
|
public List<NoteConnectionModel> Connections { get; set; } = default!; |
||||||
|
|
||||||
|
} |
||||||
@ -1,229 +0,0 @@ |
|||||||
@layout PageLayout |
|
||||||
@page "/sandbox" |
|
||||||
@inject IJSRuntime JS |
|
||||||
|
|
||||||
<LayoutLargeContentComponent> |
|
||||||
<WebsiteTitleComponent>Sandbox</WebsiteTitleComponent> |
|
||||||
|
|
||||||
<div> |
|
||||||
Generic Page of Testing In Progress code |
|
||||||
</div> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(WebPageModel))"> |
|
||||||
WebPageModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(WebSectionModel))"> |
|
||||||
WebSectionModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(PatchModel))"> |
|
||||||
PatchModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(ChangeModel))"> |
|
||||||
ChangeModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(SprintModel))"> |
|
||||||
SprintModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<button @onclick="() => DownloadFile(typeof(TaskModel))"> |
|
||||||
TaskModel |
|
||||||
</button> |
|
||||||
|
|
||||||
<FormLayoutComponent> |
|
||||||
<FormTextAreaComponent Value="@infoText"></FormTextAreaComponent> |
|
||||||
</FormLayoutComponent> |
|
||||||
|
|
||||||
|
|
||||||
</LayoutLargeContentComponent> |
|
||||||
|
|
||||||
|
|
||||||
@code { |
|
||||||
readonly List<EntityModel> entities = EntityModel.GetList(); |
|
||||||
|
|
||||||
List<EntityInfoModel> infos = new(); |
|
||||||
|
|
||||||
string infoText = ""; |
|
||||||
string weaponText = ""; |
|
||||||
|
|
||||||
readonly List<ChangeModel> changes = new(); |
|
||||||
readonly List<PatchModel> patches = new(); |
|
||||||
|
|
||||||
private async Task DownloadFile(Type type) { |
|
||||||
var fileName = $"{type.ToString().Split(".").Last()}s.csv"; |
|
||||||
|
|
||||||
var objectData = |
|
||||||
type == typeof(PatchModel) ? new List<object>(patches) |
|
||||||
: type == typeof(ChangeModel) ? new List<object>(changes) |
|
||||||
: new List<object>(); |
|
||||||
|
|
||||||
await JS.InvokeVoidAsync("download", fileName, Generate(type, objectData)); |
|
||||||
} |
|
||||||
|
|
||||||
void GenerateEntityModels() { |
|
||||||
var properties = typeof(EntityInfoModel).GetProperties(); |
|
||||||
|
|
||||||
infoText += "Id,Name,Descriptive,Description,Notes\n"; |
|
||||||
|
|
||||||
var id = 1; |
|
||||||
foreach (var entity in entities) { |
|
||||||
infoText += $"{id++},{entity.Info().Name},{entity.Info().Descriptive},{entity.Info().Description},{entity.Info().Notes}\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
string Generate(Type type, List<object> dataList) { |
|
||||||
var properties = type.GetProperties(); |
|
||||||
|
|
||||||
var generatedText = ""; |
|
||||||
|
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
|
|
||||||
if (property.GetAccessors().First().IsVirtual) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
var attributes = property.GetCustomAttributes().OfType<ObsoleteAttribute>(); |
|
||||||
if (attributes.Count() > 0) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
generatedText += property.Name; |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
generatedText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
generatedText = generatedText.Trim(); |
|
||||||
if (generatedText.EndsWith(",")) { |
|
||||||
generatedText = generatedText.Remove(generatedText.Length - 1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
generatedText += "\n"; |
|
||||||
|
|
||||||
foreach (var data in dataList) { |
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
|
|
||||||
if (property.GetAccessors().First().IsVirtual) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
var attributes = property.GetCustomAttributes().OfType<ObsoleteAttribute>(); |
|
||||||
if (attributes.Count() > 0) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
if (property.GetValue(data) != null) { |
|
||||||
generatedText += "\"" + property.GetValue(data).ToString().Replace("\"", "\"\"") + "\""; |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
generatedText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
else { |
|
||||||
generatedText += "\"" + " " + "\""; |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
generatedText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
generatedText = generatedText.Trim(); |
|
||||||
if (generatedText.EndsWith(",")) { |
|
||||||
generatedText = generatedText.Remove(generatedText.Length - 1); |
|
||||||
} |
|
||||||
|
|
||||||
generatedText += "\n"; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
return generatedText; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
void GenerateWeapons() { |
|
||||||
var properties = typeof(EntityWeaponModel).GetProperties(); |
|
||||||
|
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
|
|
||||||
if (property.GetAccessors().First().IsVirtual) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
var attributes = property.GetCustomAttributes().OfType<ObsoleteAttribute> |
|
||||||
(); |
|
||||||
if (attributes.Count() > 0) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
weaponText += property.Name; |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
weaponText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
weaponText += "\n"; |
|
||||||
|
|
||||||
foreach (var entity in entities) { |
|
||||||
foreach (var weapon in entity.Weapons()) { |
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
|
|
||||||
if (property.GetAccessors().First().IsVirtual) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
var attributes = property.GetCustomAttributes().OfType<ObsoleteAttribute> |
|
||||||
(); |
|
||||||
if (attributes.Count() > 0) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
weaponText += property.GetValue(weapon); |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
weaponText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
weaponText += "\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void GenerateExample() { |
|
||||||
var properties = typeof(EntityInfoModel).GetProperties(); |
|
||||||
|
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
infoText += property.Name; |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
infoText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
infoText += "\n"; |
|
||||||
|
|
||||||
foreach (var entity in entities) { |
|
||||||
if (entity.Info() != null) { |
|
||||||
for (var index = 0; index < properties.Count(); index++) { |
|
||||||
var property = properties[index]; |
|
||||||
infoText += property.GetValue(entity.Info()); |
|
||||||
if (index != properties.Count() - 1) { |
|
||||||
infoText += ","; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
infoText += "\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -0,0 +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","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]}] |
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue