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"> |
|
||||||
@foreach (var note in NoteService.NoteModels) { |
|
||||||
if (note.IsHidden) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
if (selectedSection != "All" && note.Section != selectedSection) { |
|
||||||
continue; |
continue; |
||||||
} |
} |
||||||
@if (note.IsPreAlpha) { |
<NoteComponent NoteContentModel="note"/> |
||||||
<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> |
</PaperComponent> |
||||||
|
</Content> |
||||||
|
</LayoutWithSidebarComponent> |
||||||
} |
} |
||||||
</div> |
|
||||||
</LayoutMediumContentComponent> |
|
||||||
|
|
||||||
} |
|
||||||
<style> |
<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 { |
|
||||||
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":[]}] |
||||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue