Updating Mudblazor Version
This commit is contained in:
@@ -15,24 +15,24 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<SupportedPlatform Include="browser" />
|
<SupportedPlatform Include="browser"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Markdig" Version="0.28.1" />
|
<PackageReference Include="Markdig" Version="0.28.1"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="8.0.14" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="8.0.14"/>
|
||||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14" />
|
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Inputs\" />
|
<Folder Include="Inputs\"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Model\Model.csproj" />
|
<ProjectReference Include="..\Model\Model.csproj"/>
|
||||||
<ProjectReference Include="..\Services\Services.csproj" />
|
<ProjectReference Include="..\Services\Services.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Inputs\" />
|
<None Remove="Inputs\"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -13,15 +13,14 @@
|
|||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
.code::-webkit-scrollbar {
|
.code::-webkit-scrollbar {
|
||||||
height: 0;
|
height: 0;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.devOnlyTitle {
|
.devOnlyTitle {
|
||||||
background-color: rgba(20,20,20,0.75);
|
background-color: rgba(20, 20, 20, 0.75);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
color: orange;
|
color: orange;
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
@@ -30,14 +30,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.devOnlyContent {
|
.devOnlyContent {
|
||||||
background-color: rgba(20,20,20,0.75);
|
background-color: rgba(20, 20, 20, 0.75);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.devOnlyTitleContainer {
|
.devOnlyTitleContainer {
|
||||||
background: repeating-linear-gradient( 45deg, blue, blue 50px, orange 51px, orange 100px);
|
background: repeating-linear-gradient(45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-left: 6px dashed orange;
|
border-left: 6px dashed orange;
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
.devOnlyContentContainer {
|
.devOnlyContentContainer {
|
||||||
border: 6px dashed orange;
|
border: 6px dashed orange;
|
||||||
background: repeating-linear-gradient( 45deg, blue, blue 50px, orange 51px, orange 100px);
|
background: repeating-linear-gradient(45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||||
box-shadow: 5px 5px 5px blue;
|
box-shadow: 5px 5px 5px blue;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
@@ -58,11 +58,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Inject]
|
[Inject] NavigationManager NavigationManager { get; set; } = default!;
|
||||||
NavigationManager NavigationManager { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
bool isOnDev;
|
bool isOnDev;
|
||||||
|
|
||||||
|
|||||||
@@ -69,10 +69,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Title { get; set; } = default!;
|
||||||
public string Title { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -32,10 +32,10 @@
|
|||||||
z-index: 2147483647;
|
z-index: 2147483647;
|
||||||
|
|
||||||
background-color: var(--info-secondary);
|
background-color: var(--info-secondary);
|
||||||
border: 1px solid var(--info-secondary-border);
|
border: 1px solid var(--info-secondary-border);
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
|
||||||
box-shadow: 0 3px 8px rgba(0,0,0,0.5);
|
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -55,13 +55,10 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string InfoText { get; set; } = default!;
|
||||||
public string InfoText { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int? Margin { get; set; }
|
||||||
public int? Margin { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -70,13 +70,13 @@
|
|||||||
.makingOfContainer summary {
|
.makingOfContainer summary {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
background-color: rgba(0,0,0, 0.1);
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.shownCode {
|
.shownCode {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
background-color: rgba(0,0,0, 0.1);
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.makingOfContainer details[open] .shownCode {
|
.makingOfContainer details[open] .shownCode {
|
||||||
@@ -97,20 +97,15 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Title { get; set; } = default!;
|
||||||
public RenderFragment Title { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Description { get; set; } = default!;
|
||||||
public RenderFragment Description { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Example { get; set; } = default!;
|
||||||
public RenderFragment Example { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Usage { get; set; } = default!;
|
||||||
public RenderFragment Usage { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Code { get; set; } = default!;
|
||||||
public RenderFragment Code { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -9,24 +9,22 @@
|
|||||||
<style>
|
<style>
|
||||||
.makingOfSection {
|
.makingOfSection {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: rgba(0,0,0, 0.1);
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
padding: 25px;
|
padding: 25px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
border: 2px black dashed;
|
border: 2px black dashed;
|
||||||
}
|
}
|
||||||
|
|
||||||
.makingOfSection > summary {
|
.makingOfSection > summary {
|
||||||
font-size: 3.4em;
|
font-size: 3.4em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Title { get; set; } = default!;
|
||||||
public string Title { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -18,10 +18,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Title { get; set; } = default!;
|
||||||
public string Title { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -52,13 +52,10 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? Title { get; set; }
|
||||||
public RenderFragment? Title { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? Message { get; set; }
|
||||||
public RenderFragment? Message { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Type { get; set; } = SeverityType.Warning;
|
||||||
public string Type { get; set; } = SeverityType.Warning;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.toastContainer {
|
.toastContainer {
|
||||||
border: 4px solid;
|
border: 4px solid;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
@@ -58,11 +58,10 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public ToastModel? Toast { get; set; }
|
||||||
public ToastModel? Toast { get; set; } = default!;
|
|
||||||
|
|
||||||
private float removalTime = 1300;
|
private readonly float removalTime = 1300;
|
||||||
private float fadeoutTime = 1200;
|
private readonly float fadeoutTime = 1200;
|
||||||
|
|
||||||
private float Opacity()
|
private float Opacity()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -51,20 +51,15 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = "";
|
||||||
public string Label { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = "";
|
||||||
public string Info { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool ReadOnly { get; set; }
|
||||||
public bool ReadOnly { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool Value { get; set; }
|
||||||
public bool Value { get; set; }
|
|
||||||
|
|
||||||
private string labelId = "";
|
private string labelId = "";
|
||||||
|
|
||||||
|
|||||||
@@ -35,23 +35,18 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
//TODO Clean up
|
//TODO Clean up
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = default!;
|
||||||
public string Label { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = default!;
|
||||||
public string Info { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? Display { get; set; }
|
||||||
public RenderFragment? Display { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool? ReadOnly { get; set; }
|
||||||
public bool? ReadOnly { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Value { get; set; }
|
||||||
public string? Value { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
<div class="escapeCodeContainer">
|
<div class="escapeCodeContainer">
|
||||||
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
||||||
rows="8"
|
rows="8"
|
||||||
@onchange="OnChange" />
|
@onchange="OnChange"/>
|
||||||
|
|
||||||
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
||||||
rows="8"
|
rows="8"
|
||||||
@bind="Output" />
|
@bind="Output"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -73,20 +73,15 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = "";
|
||||||
public string Label { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = "";
|
||||||
public string Info { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<AnswerEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<AnswerEventArgs> OnChange { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public MemoryQuestionModel MemoryQuestion { get; set; } = default!;
|
||||||
public MemoryQuestionModel MemoryQuestion { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool IsSubmitted { get; set; }
|
||||||
public bool IsSubmitted { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
private string? guess = "";
|
private string? guess = "";
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -38,17 +38,13 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||||
public RenderFragment? FormLabelComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Id { get; set; } = default!;
|
||||||
public string Id { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||||
public RenderFragment? FormInfoComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
void OnInputChanged(ChangeEventArgs changeEventArgs)
|
void OnInputChanged(ChangeEventArgs changeEventArgs)
|
||||||
{
|
{
|
||||||
@@ -73,16 +69,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool ReadOnly { get; set; }
|
||||||
public bool ReadOnly { get; set; } = false;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int Value { get; set; }
|
||||||
public int Value { get; set; } = 0;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int Min { get; set; }
|
||||||
public int Min { get; set; } = 0;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int Max { get; set; } = 2048;
|
||||||
public int Max { get; set; } = 2048;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -17,16 +17,12 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||||
public RenderFragment? FormLabelComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||||
public RenderFragment? FormInfoComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
type="text"
|
type="text"
|
||||||
rows="@Rows"
|
rows="@Rows"
|
||||||
value="@Value"
|
value="@Value"
|
||||||
@onchange="OnChange" />
|
@onchange="OnChange"/>
|
||||||
</div>
|
</div>
|
||||||
@if (Info != "")
|
@if (Info != "")
|
||||||
{
|
{
|
||||||
@@ -56,32 +56,23 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||||
public RenderFragment? FormLabelComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||||
public RenderFragment? FormInfoComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool? ReadOnly { get; set; }
|
||||||
public bool? ReadOnly { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Value { get; set; }
|
||||||
public string? Value { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int Rows { get; set; } = 4;
|
||||||
public int Rows { get; set; } = 4;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = "";
|
||||||
public string Label { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = "";
|
||||||
public string Info { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Placeholder { get; set; } = "";
|
||||||
public string Placeholder { get; set; } = "";
|
|
||||||
|
|
||||||
private string labelId = "";
|
private string labelId = "";
|
||||||
|
|
||||||
|
|||||||
@@ -52,34 +52,25 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Id { get; set; } = "";
|
||||||
public string Id { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = "";
|
||||||
public string Label { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = "";
|
||||||
public string Info { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Placeholder { get; set; } = "";
|
||||||
public string Placeholder { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnInput { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnInput { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback OnFocus { get; set; }
|
||||||
public EventCallback OnFocus { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool ReadOnly { get; set; }
|
||||||
public bool ReadOnly { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Value { get; set; } = "";
|
||||||
public string Value { get; set; } = "";
|
|
||||||
|
|
||||||
private string labelId = "";
|
private string labelId = "";
|
||||||
|
|
||||||
|
|||||||
@@ -46,72 +46,67 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.switch {
|
.switch {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
top: 4px;
|
top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.switch input {
|
.switch input {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider {
|
.slider {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background-color: var(--paper-border);
|
background-color: var(--paper-border);
|
||||||
-webkit-transition: .4s;
|
-webkit-transition: .4s;
|
||||||
transition: .4s;
|
transition: .4s;
|
||||||
border-radius: 34px;
|
border-radius: 34px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider:before {
|
.slider:before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: "";
|
content: "";
|
||||||
height: 26px;
|
height: 26px;
|
||||||
width: 26px;
|
width: 26px;
|
||||||
left: 4px;
|
left: 4px;
|
||||||
bottom: 4px;
|
bottom: 4px;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
-webkit-transition: .4s;
|
-webkit-transition: .4s;
|
||||||
transition: .4s;
|
transition: .4s;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checked + .slider {
|
.checked + .slider {
|
||||||
background-color: #7838df;
|
background-color: #7838df;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checked + .slider:before {
|
.checked + .slider:before {
|
||||||
-webkit-transform: translateX(26px);
|
-webkit-transform: translateX(26px);
|
||||||
-ms-transform: translateX(26px);
|
-ms-transform: translateX(26px);
|
||||||
transform: translateX(26px);
|
transform: translateX(26px);
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Label { get; set; } = "";
|
||||||
public string Label { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Info { get; set; } = "";
|
||||||
public string Info { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool ReadOnly { get; set; }
|
||||||
public bool ReadOnly { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public bool Value { get; set; }
|
||||||
public bool Value { get; set; }
|
|
||||||
|
|
||||||
private string labelId = "";
|
private string labelId = "";
|
||||||
|
|
||||||
|
|||||||
@@ -37,10 +37,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? InfoQuestionComponent { get; set; }
|
||||||
public RenderFragment? InfoQuestionComponent { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? InfoAnswerComponent { get; set; }
|
||||||
public RenderFragment? InfoAnswerComponent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,31 +19,28 @@
|
|||||||
background-color: var(--secondary);
|
background-color: var(--secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.@MyButtonType.Primary.ToString().ToLower():hover {
|
.@MyButtonType.Primary.ToString().ToLower():hover {
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary-hover);
|
||||||
border-color: var(--primary-border-hover);
|
border-color: var(--primary-border-hover);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.@MyButtonType.Secondary.ToString().ToLower():hover {
|
.@MyButtonType.Secondary.ToString().ToLower():hover {
|
||||||
background-color: var(--secondary-hover);
|
background-color: var(--secondary-hover);
|
||||||
border-color: var(--secondary-border-hover);
|
border-color: var(--secondary-border-hover);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<EventArgs> OnClick { get; set; }
|
||||||
public EventCallback<EventArgs> OnClick { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public MyButtonType MyButtonType { get; set; }
|
||||||
public MyButtonType MyButtonType { get; set; } = default!;
|
|
||||||
|
|
||||||
private void ButtonClicked(EventArgs eventArgs)
|
private void ButtonClicked(EventArgs eventArgs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,76 +7,75 @@
|
|||||||
{
|
{
|
||||||
styleClass = "selected";
|
styleClass = "selected";
|
||||||
}
|
}
|
||||||
|
|
||||||
<button @onclick="@(e => OnChangeChoice(choice))" class="groupChoiceButton @styleClass">@choice</button>
|
<button @onclick="@(e => OnChangeChoice(choice))" class="groupChoiceButton @styleClass">@choice</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
.groupButtonContainerContainer {
|
.groupButtonContainerContainer {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
justify-items: flex-start;
|
justify-items: flex-start;
|
||||||
}
|
}
|
||||||
.groupButtonContainer {
|
|
||||||
display: flex;
|
|
||||||
background-color: var(--background);
|
|
||||||
gap: 2px;
|
|
||||||
margin-right: auto;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.groupChoiceButton {
|
.groupButtonContainer {
|
||||||
background-color: var(--primary);
|
display: flex;
|
||||||
color: white;
|
background-color: var(--background);
|
||||||
padding: 12px;
|
gap: 2px;
|
||||||
border: 1px solid var(--primary);
|
margin-right: auto;
|
||||||
}
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.groupChoiceButton:hover {
|
.groupChoiceButton {
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary);
|
||||||
border-color: var(--primary-border-hover);
|
color: white;
|
||||||
}
|
padding: 12px;
|
||||||
|
border: 1px solid var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
.selected {
|
.groupChoiceButton:hover {
|
||||||
background-color: var(--secondary);
|
background-color: var(--primary-hover);
|
||||||
color: white;
|
border-color: var(--primary-border-hover);
|
||||||
font-style: normal;
|
}
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selected:hover {
|
.selected {
|
||||||
background-color: var(--secondary-hover);
|
background-color: var(--secondary);
|
||||||
border-color: var(--secondary-border-hover);
|
color: white;
|
||||||
}
|
font-style: normal;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selected:hover {
|
||||||
|
background-color: var(--secondary-hover);
|
||||||
|
border-color: var(--secondary-border-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.groupButtonContainer .groupChoiceButton:first-child {
|
.groupButtonContainer .groupChoiceButton:first-child {
|
||||||
border-top-left-radius: 8px;
|
border-top-left-radius: 8px;
|
||||||
border-bottom-left-radius: 8px;
|
border-bottom-left-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.groupButtonContainer .groupChoiceButton:last-child {
|
.groupButtonContainer .groupChoiceButton:last-child {
|
||||||
border-top-right-radius: 8px;
|
border-top-right-radius: 8px;
|
||||||
border-bottom-right-radius: 8px;
|
border-bottom-right-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Choice { get; set; } = default!;
|
||||||
public string Choice { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public List<string> Choices { get; set; } = default!;
|
||||||
public List<string> Choices { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public EventCallback<string> OnClick { get; set; }
|
||||||
public EventCallback<string> OnClick { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Href { get; set; } = "";
|
||||||
public string Href { get; set; } = "";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Href { get; set; } = "";
|
||||||
public string Href { get; set; } = "";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,8 +14,7 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string EntityId { get; set; } = default!;
|
||||||
public string EntityId { get; set; } = default!;
|
|
||||||
|
|
||||||
private EntityModel Entity => DATA.Get()[EntityId];
|
private EntityModel Entity => DATA.Get()[EntityId];
|
||||||
|
|
||||||
|
|||||||
@@ -24,12 +24,10 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Href { get; set; } = "";
|
||||||
public string Href { get; set; } = "";
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -30,26 +30,24 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchHotkey {
|
.searchHotkey {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
background-color: rgba(255,255,255,0.05);
|
background-color: rgba(255, 255, 255, 0.05);
|
||||||
border: 2px solid rgba(255,255,255,0.25);
|
border: 2px solid rgba(255, 255, 255, 0.25);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Id { get; set; } = default!;
|
||||||
public string Id { get; set; } = default!;
|
|
||||||
|
|
||||||
private string _userAgent = "";
|
private string _userAgent = "";
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,11 +29,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Id { get; set; } = default!;
|
||||||
public string Id { get; set; } = default!;
|
|
||||||
|
|
||||||
private void ButtonClicked(EventArgs eventArgs)
|
private void ButtonClicked(EventArgs eventArgs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@media only screen and (min-width: 1024px) {
|
@@media only screen and (min-width: 1024px) {
|
||||||
.lrg_container {
|
.lrg_container {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
@@ -34,7 +33,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (min-width: 1024px) {
|
@@media only screen and (min-width: 1024px) {
|
||||||
.med_container {
|
.med_container {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 30px;
|
padding-bottom: 30px;
|
||||||
|
|
||||||
grid-template-columns: 412px 1fr;
|
grid-template-columns: 412px 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layoutSidebar {
|
.layoutSidebar {
|
||||||
@@ -39,7 +39,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@media only screen and (min-width: 1024px) {
|
@@media only screen and (min-width: 1024px) {
|
||||||
.layoutWithSidebar {
|
.layoutWithSidebar {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
@@ -50,10 +49,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Sidebar { get; set; } = default!;
|
||||||
public RenderFragment Sidebar { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Content { get; set; } = default!;
|
||||||
public RenderFragment Content { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||||
public RenderFragment? ChildContent { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,11 +3,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Inject]
|
[Inject] protected HttpClient Http { get; set; } = default!;
|
||||||
protected HttpClient Http { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string MarkdownFileName { get; set; } = default!;
|
||||||
public string MarkdownFileName { get; set; } = default!;
|
|
||||||
|
|
||||||
private string MarkdownText { get; set; } = "";
|
private string MarkdownText { get; set; } = "";
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.clickOffBackground.clickOffVisible {
|
.clickOffBackground.clickOffVisible {
|
||||||
visibility:visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sectionButton {
|
.sectionButton {
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
background-color: rgba(255,255,255,0.1);
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.menuHeader {
|
.menuHeader {
|
||||||
@@ -106,11 +106,11 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sectionNav {
|
.sectionNav {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.websiteTitle {
|
.websiteTitle {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -119,11 +119,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navMenuPosition {
|
.navMenuPosition {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 18px;
|
top: 18px;
|
||||||
left: calc(-50% + -330px / 2);
|
left: calc(-50% + -330px / 2);
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navMenuContainer {
|
.navMenuContainer {
|
||||||
@@ -166,11 +166,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<NavLink target="@Links.GetTarget(Page.Href)" @onclick="() => { NavigationService.ChangeNavigationState(NavigationStateType.Default); NavigationService.ChangeNavigationSectionId(-1); }" href="@Page.Href" class="desktopNavLink">
|
<NavLink target="@Links.GetTarget(Page.Href)"
|
||||||
|
@onclick="() => { NavigationService.ChangeNavigationState(NavigationStateType.Default); NavigationService.ChangeNavigationSectionId(-1); }"
|
||||||
|
href="@Page.Href" class="desktopNavLink">
|
||||||
<div class="navName">
|
<div class="navName">
|
||||||
@Page.Name
|
@Page.Name
|
||||||
</div>
|
</div>
|
||||||
@@ -50,11 +52,11 @@ else
|
|||||||
border-bottom-right-radius: 4px;
|
border-bottom-right-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.desktopNavLink:hover {
|
.desktopNavLink:hover {
|
||||||
color: #8EC3FF;
|
color: #8EC3FF;
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary-hover);
|
||||||
border-color: var(--primary-border-hover);
|
border-color: var(--primary-border-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navSelected {
|
.navSelected {
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary-hover);
|
||||||
@@ -65,10 +67,9 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public WebPageModel Page { get; set; } = default!;
|
||||||
public WebPageModel Page { get; set; } = default!;
|
|
||||||
|
|
||||||
bool isOnPage = false;
|
bool isOnPage;
|
||||||
|
|
||||||
protected override Task OnParametersSetAsync()
|
protected override Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
<DesktopNavLinkComponent Page=childPage></DesktopNavLinkComponent>
|
<DesktopNavLinkComponent Page=childPage></DesktopNavLinkComponent>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -24,7 +25,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public WebSectionModel Section { get; set; } = default!;
|
||||||
public WebSectionModel Section { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
<div class="mobileNavSectionsContainer">
|
<div class="mobileNavSectionsContainer">
|
||||||
@foreach (var webSection in WebSections)
|
@foreach (var webSection in WebSections)
|
||||||
{
|
{
|
||||||
<div class="mobileNavSectionButton" @onclick="() => OnSectionClicked(webSection)" @onclick:preventDefault="true" @onclick:stopPropagation="true">
|
<div class="mobileNavSectionButton" @onclick="() => OnSectionClicked(webSection)"
|
||||||
|
@onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||||
<div class="mobileNavSectionButtonText">
|
<div class="mobileNavSectionButtonText">
|
||||||
<i class="fa-solid @webSection.Icon" style="font-size: 28px;"></i>
|
<i class="fa-solid @webSection.Icon" style="font-size: 28px;"></i>
|
||||||
</div>
|
</div>
|
||||||
@@ -11,7 +12,8 @@
|
|||||||
<SearchIconButtonComponent/>
|
<SearchIconButtonComponent/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="fullPageButton @(selectedSection != null)" @onclick="OnPageClicked" @onclick:stopPropagation="false" @onclick:preventDefault="false">
|
<div class="fullPageButton @(selectedSection != null)" @onclick="OnPageClicked" @onclick:stopPropagation="false"
|
||||||
|
@onclick:preventDefault="false">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if (selectedSection != null)
|
@if (selectedSection != null)
|
||||||
@@ -27,7 +29,9 @@
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
<div class="mobileNavPageButton" @onclick="() => OnPageLinkClicked(webPage)" @onclick:preventDefault="true" @onclick:stopPropagation="true">
|
|
||||||
|
<div class="mobileNavPageButton" @onclick="() => OnPageLinkClicked(webPage)"
|
||||||
|
@onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||||
<div class="mobileNavPageButtonText">
|
<div class="mobileNavPageButtonText">
|
||||||
@webPage.Name
|
@webPage.Name
|
||||||
</div>
|
</div>
|
||||||
@@ -45,7 +49,7 @@
|
|||||||
height: 100vh;
|
height: 100vh;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: none;
|
display: none;
|
||||||
background-color: rgba(0,0,0,0.6);
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullPageButton.True {
|
.fullPageButton.True {
|
||||||
@@ -53,11 +57,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.mobileFooter {
|
.mobileFooter {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
background-color: rgba(0,0,0,1);
|
background-color: rgba(0, 0, 0, 1);
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: none;
|
display: none;
|
||||||
@@ -109,10 +111,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.mobileNavPageButton:hover {
|
.mobileNavPageButton:hover {
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary-hover);
|
||||||
border-color: var(--primary-border-hover);
|
border-color: var(--primary-border-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.mobileNavSectionButton:hover {
|
.mobileNavSectionButton:hover {
|
||||||
@@ -143,11 +145,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
#if NO_SQL
|
#if NO_SQL
|
||||||
[Parameter]
|
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
[Parameter]
|
[Parameter]
|
||||||
@@ -157,8 +157,7 @@
|
|||||||
public DbSet<WebPageModel> WebPages { get; set; }
|
public DbSet<WebPageModel> WebPages { get; set; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[Inject]
|
[Inject] public NavigationManager NavigationManager { get; set; } = default!;
|
||||||
public NavigationManager NavigationManager { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
private WebSectionModel? selectedSection;
|
private WebSectionModel? selectedSection;
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="fullPageButton @navOpen" @onclick="OnNavClicked" @onclick:stopPropagation="false" @onclick:preventDefault="false">
|
<div class="fullPageButton @navOpen" @onclick="OnNavClicked" @onclick:stopPropagation="false"
|
||||||
|
@onclick:preventDefault="false">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
<NavLink href="@webPage.Href" class="tabletNavItem" @onclick="OnPageClicked">
|
<NavLink href="@webPage.Href" class="tabletNavItem" @onclick="OnPageClicked">
|
||||||
@webPage.Name
|
@webPage.Name
|
||||||
</NavLink>
|
</NavLink>
|
||||||
@@ -58,12 +60,12 @@
|
|||||||
height: 100vh;
|
height: 100vh;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: none;
|
display: none;
|
||||||
background-color: rgba(0,0,0,0.6);
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullPageButton.True {
|
.fullPageButton.True {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tablet {
|
.tablet {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -71,7 +73,7 @@
|
|||||||
|
|
||||||
.tabletNav {
|
.tabletNav {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
background-color: rgba(30,30,30,0.98);
|
background-color: rgba(30, 30, 30, 0.98);
|
||||||
display: none;
|
display: none;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
@@ -108,7 +110,7 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
background-color: var(--accent);
|
background-color: var(--accent);
|
||||||
border-bottom: 4px solid rgba(0,0,0,0.95);
|
border-bottom: 4px solid rgba(0, 0, 0, 0.95);
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,16 +127,16 @@
|
|||||||
|
|
||||||
.tabletButton {
|
.tabletButton {
|
||||||
border: 2px solid black;
|
border: 2px solid black;
|
||||||
background-color: rgba(0,0,0,0.3);
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
width: 80px;
|
width: 80px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabletButton:hover {
|
.tabletButton:hover {
|
||||||
background-color: rgba(0,0,0,0.7);
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
@@ -153,11 +155,9 @@
|
|||||||
@code {
|
@code {
|
||||||
|
|
||||||
#if NO_SQL
|
#if NO_SQL
|
||||||
[Parameter]
|
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
[Parameter]
|
[Parameter]
|
||||||
|
|||||||
@@ -5,14 +5,11 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public WebDeploymentType DeploymentType { get; set; }
|
||||||
public WebDeploymentType DeploymentType { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||||
public NavigationManager MyNavigationManager { get; set; } = default!;
|
|
||||||
|
|
||||||
bool isDisplayable;
|
bool isDisplayable;
|
||||||
|
|
||||||
|
|||||||
@@ -11,11 +11,9 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||||
public NavigationManager MyNavigationManager { get; set; } = default!;
|
|
||||||
|
|
||||||
bool isDisplayable;
|
bool isDisplayable;
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,9 @@
|
|||||||
|
|
||||||
<div class="footerDivider"></div>
|
<div class="footerDivider"></div>
|
||||||
|
|
||||||
<div class="footerLastUpdated">Website updated <a href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/commits/main"><b>@VariableService.Variables["LastUpdated"]</b></a></div>
|
<div class="footerLastUpdated">Website updated <a
|
||||||
|
href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/commits/main"><b>@VariableService.Variables["LastUpdated"]</b></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="footerDisclaimer">
|
<div class="footerDisclaimer">
|
||||||
This website is fan-made and not affiliated with <b>SunSpear Games</b> in any way.
|
This website is fan-made and not affiliated with <b>SunSpear Games</b> in any way.
|
||||||
@@ -36,20 +38,19 @@
|
|||||||
.footerIcon {
|
.footerIcon {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
background-color: rgba(255,255,255,0.05);
|
background-color: rgba(255, 255, 255, 0.05);
|
||||||
border: 2px solid rgba(255,255,255,0.1);
|
border: 2px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
line-height: 0;
|
line-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footerIcon:hover {
|
.footerIcon:hover {
|
||||||
color: #8fc5ff;
|
color: #8fc5ff;
|
||||||
background-color: rgba(200,200,255,0.1);
|
background-color: rgba(200, 200, 255, 0.1);
|
||||||
border: 2px solid rgba(140,140,255,0.4);
|
border: 2px solid rgba(140, 140, 255, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.footerContainer {
|
.footerContainer {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -69,7 +70,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.footerDivider {
|
.footerDivider {
|
||||||
background-color: rgba(255,255,255,0.12);
|
background-color: rgba(255, 255, 255, 0.12);
|
||||||
height: 1px;
|
height: 1px;
|
||||||
width: 128px;
|
width: 128px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
|
|||||||
@@ -10,10 +10,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Dividee { get; set; } = default!;
|
||||||
public RenderFragment Dividee { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment Divider { get; set; } = default!;
|
||||||
public RenderFragment Divider { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<div style="display:flex; flex-direction:column; align-items:center;padding-right: 12px;padding-left: 4px; font-family:monospace">
|
<div
|
||||||
|
style="display:flex; flex-direction:column; align-items:center;padding-right: 12px;padding-left: 4px; font-family:monospace">
|
||||||
<div style="height: 0px;display:flex; flex-direction:row; ">
|
<div style="height: 0px;display:flex; flex-direction:row; ">
|
||||||
<div style="font-size: 18px; height: 0px;">
|
<div style="font-size: 18px; height: 0px;">
|
||||||
∑
|
∑
|
||||||
@@ -12,13 +13,10 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment LoopEnd { get; set; } = default!;
|
||||||
public RenderFragment LoopEnd { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment LoopStart { get; set; } = default!;
|
||||||
public RenderFragment LoopStart { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment IndexSymbol { get; set; } = default!;
|
||||||
public RenderFragment IndexSymbol { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
u {
|
u {
|
||||||
text-decoration-color: inherit;
|
text-decoration-color: inherit;
|
||||||
text-decoration-thickness:1px;
|
text-decoration-thickness: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.spoiler:hover {
|
.spoiler:hover {
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.14" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.14"/>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.14">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.14">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Model\Model.csproj" />
|
<ProjectReference Include="..\Model\Model.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
+36
-36
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
@if (PermissionService.GetIsDataCollectionEnabled())
|
@if (PermissionService.GetIsDataCollectionEnabled())
|
||||||
{
|
{
|
||||||
<NavigationTracker />
|
<NavigationTracker/>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -38,51 +38,51 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
text-decoration-color: #8fc5ff;
|
text-decoration-color: #8fc5ff;
|
||||||
text-decoration-thickness: 3px;
|
text-decoration-thickness: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--severity-warning-color: #2a2000;
|
--severity-warning-color: #2a2000;
|
||||||
--severity-warning-border-color: #755c13;
|
--severity-warning-border-color: #755c13;
|
||||||
--severity-error-color: #290102;
|
--severity-error-color: #290102;
|
||||||
--severity-error-border-color: #4C2C33;
|
--severity-error-border-color: #4C2C33;
|
||||||
--severity-information-color: #030129;
|
--severity-information-color: #030129;
|
||||||
--severity-information-border-color: #2c3a4c;
|
--severity-information-border-color: #2c3a4c;
|
||||||
--severity-success-color: #042901;
|
--severity-success-color: #042901;
|
||||||
--severity-success-border-color: #2E4C2C;
|
--severity-success-border-color: #2E4C2C;
|
||||||
|
|
||||||
--accent: #432462;
|
--accent: #432462;
|
||||||
--primary: #4308a3;
|
--primary: #4308a3;
|
||||||
--primary-border: #2c0b62;
|
--primary-border: #2c0b62;
|
||||||
--primary-hover: #5e00f7;
|
--primary-hover: #5e00f7;
|
||||||
--primary-border-hover: #a168ff;
|
--primary-border-hover: #a168ff;
|
||||||
--background: #161618;
|
--background: #161618;
|
||||||
--secondary: #23133e;
|
--secondary: #23133e;
|
||||||
--secondary-hover: #2a0070;
|
--secondary-hover: #2a0070;
|
||||||
--secondary-border-hover: #a168ff;
|
--secondary-border-hover: #a168ff;
|
||||||
--paper: #252526;
|
--paper: #252526;
|
||||||
--paper-border: #151516;
|
--paper-border: #151516;
|
||||||
|
|
||||||
--paper-hover: #52366f;
|
--paper-hover: #52366f;
|
||||||
--paper-border-hover: #653497;
|
--paper-border-hover: #653497;
|
||||||
|
|
||||||
--info: #451376;
|
--info: #451376;
|
||||||
--info-border: #210b36;
|
--info-border: #210b36;
|
||||||
|
|
||||||
--dialog-border-color: black;
|
--dialog-border-color: black;
|
||||||
--dialog-border-width: 2px;
|
--dialog-border-width: 2px;
|
||||||
--dialog-radius: 6px;
|
--dialog-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool isLoaded = false;
|
private bool isLoaded;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
@using Services.Website
|
@implements IDisposable;
|
||||||
@implements IDisposable;
|
|
||||||
@inject IMyDialogService MyDialogService
|
@inject IMyDialogService MyDialogService
|
||||||
@inject IJSRuntime JsRuntime
|
@inject IJSRuntime JsRuntime
|
||||||
|
|
||||||
@@ -21,10 +20,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="confirmDialogFooter">
|
<div class="confirmDialogFooter">
|
||||||
<ButtonComponent MyButtonType="MyButtonType.Secondary" OnClick="MyDialogService.GetDialogContents().OnCancel">
|
<ButtonComponent MyButtonType="MyButtonType.Secondary"
|
||||||
|
OnClick="MyDialogService.GetDialogContents().OnCancel">
|
||||||
Cancel
|
Cancel
|
||||||
</ButtonComponent>
|
</ButtonComponent>
|
||||||
<ButtonComponent MyButtonType="MyButtonType.Primary" OnClick="MyDialogService.GetDialogContents().OnConfirm">
|
<ButtonComponent MyButtonType="MyButtonType.Primary"
|
||||||
|
OnClick="MyDialogService.GetDialogContents().OnConfirm">
|
||||||
@MyDialogService.GetDialogContents().ConfirmButtonLabel
|
@MyDialogService.GetDialogContents().ConfirmButtonLabel
|
||||||
</ButtonComponent>
|
</ButtonComponent>
|
||||||
</div>
|
</div>
|
||||||
@@ -32,62 +33,62 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.pageContents * {
|
.pageContents * {
|
||||||
filter: blur(2px);
|
filter: blur(2px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.confirmDialogBackground {
|
.confirmDialogBackground {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.confirmDialogContainer {
|
.confirmDialogContainer {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
width: 800px;
|
width: 800px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
border-width: var(--dialog-border-width);
|
border-width: var(--dialog-border-width);
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: var(--dialog-border-color);
|
border-color: var(--dialog-border-color);
|
||||||
border-radius: var(--dialog-radius);
|
border-radius: var(--dialog-radius);
|
||||||
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
|
||||||
|
|
||||||
box-shadow: 1px 2px 2px black;
|
box-shadow: 1px 2px 2px black;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.confirmDialogHeader {
|
.confirmDialogHeader {
|
||||||
font-size: 1.4em;
|
font-size: 1.4em;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.confirmDialogBody {
|
.confirmDialogBody {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.confirmDialogFooter {
|
.confirmDialogFooter {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
@if (entityDialogService.HasHistory())
|
@if (entityDialogService.HasHistory())
|
||||||
{
|
{
|
||||||
<button class="backButton" @onclick="entityDialogService.BackDialog">
|
<button class="backButton" @onclick="entityDialogService.BackDialog">
|
||||||
<div class="backButtonIcon"> </div>
|
<div class="backButtonIcon"></div>
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,93 +55,92 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.dialogBackground {
|
.dialogBackground {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialogContainer {
|
.dialogContainer {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
width: 800px;
|
width: 800px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
border-width: var(--dialog-border-width);
|
border-width: var(--dialog-border-width);
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: var(--dialog-border-color);
|
border-color: var(--dialog-border-color);
|
||||||
border-radius: var(--dialog-radius);
|
border-radius: var(--dialog-radius);
|
||||||
|
|
||||||
|
|
||||||
box-shadow: 1px 2px 2px black;
|
box-shadow: 1px 2px 2px black;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialogHeader {
|
.dialogHeader {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--accent);
|
background-color: var(--accent);
|
||||||
border-top-left-radius: var(--dialog-radius);
|
border-top-left-radius: var(--dialog-radius);
|
||||||
border-top-right-radius: var(--dialog-radius);
|
border-top-right-radius: var(--dialog-radius);
|
||||||
border-bottom: 4px solid black;
|
border-bottom: 4px solid black;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.backButton {
|
.backButton {
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
|
||||||
border: 1px solid var(--accent);
|
border: 1px solid var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
.backButton:hover {
|
.backButton:hover {
|
||||||
background-color: var(--primary-hover);
|
background-color: var(--primary-hover);
|
||||||
border: 1px solid var(--primary-border-hover);
|
border: 1px solid var(--primary-border-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
.backButtonIcon
|
.backButtonIcon {
|
||||||
{
|
height: 32px;
|
||||||
height: 32px;
|
width: 32px;
|
||||||
width: 32px;
|
border: solid white;
|
||||||
border: solid white;
|
border-width: 0 9px 9px 0;
|
||||||
border-width: 0 9px 9px 0;
|
transform: rotate(135deg);
|
||||||
transform: rotate(135deg);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.dialogTitle {
|
.dialogTitle {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialogContent {
|
.dialogContent {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
|
||||||
height: 800px;
|
height: 800px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialogFooter {
|
.dialogFooter {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 6px;
|
height: 6px;
|
||||||
background-color: var(--paper);
|
background-color: var(--paper);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
EntityModel entity = default!;
|
EntityModel entity = default!;
|
||||||
|
|
||||||
private int refresh = 0;
|
private int refresh;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
@onclick:stopPropagation="true">
|
@onclick:stopPropagation="true">
|
||||||
|
|
||||||
<FormLayoutComponent>
|
<FormLayoutComponent>
|
||||||
<FormTextComponent OnFocus="OnFocus" Id="searchInput" Placeholder="Search..." OnInput="SearchChanged"></FormTextComponent>
|
<FormTextComponent OnFocus="OnFocus" Id="searchInput" Placeholder="Search..."
|
||||||
|
OnInput="SearchChanged"></FormTextComponent>
|
||||||
</FormLayoutComponent>
|
</FormLayoutComponent>
|
||||||
|
|
||||||
<div class="searchBox">
|
<div class="searchBox">
|
||||||
@@ -55,79 +56,80 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.pageContents * {
|
.pageContents * {
|
||||||
filter: blur(2px);
|
filter: blur(2px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchBackground {
|
.searchBackground {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchBox {
|
.searchBox {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
height: 530px;
|
height: 530px;
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchContents {
|
.searchContents {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
|
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.searchSectionTitle {
|
.searchSectionTitle {
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.searchContainer {
|
.searchContainer {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
width: 800px;
|
width: 800px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
|
|
||||||
background-color: var(--background);
|
background-color: var(--background);
|
||||||
border-width: var(--dialog-border-width);
|
border-width: var(--dialog-border-width);
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: var(--dialog-border-color);
|
border-color: var(--dialog-border-color);
|
||||||
border-radius: var(--dialog-radius);
|
border-radius: var(--dialog-radius);
|
||||||
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
|
||||||
|
|
||||||
box-shadow: 1px 2px 2px black;
|
box-shadow: 1px 2px 2px black;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchLink {
|
.searchLink {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.searchContainer {
|
.searchContainer {
|
||||||
height: 300px;
|
height: 300px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.searchBox {
|
|
||||||
height: 230px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
.searchBox {
|
||||||
|
height: 230px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -161,6 +163,7 @@
|
|||||||
{
|
{
|
||||||
timer.Enabled = searchService.IsVisible;
|
timer.Enabled = searchService.IsVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-11
@@ -21,26 +21,26 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Blazor-Analytics" Version="3.11.0" />
|
<PackageReference Include="Blazor-Analytics" Version="3.11.0"/>
|
||||||
<PackageReference Include="Markdig" Version="0.30.3" />
|
<PackageReference Include="Markdig" Version="0.30.3"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.14" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.14"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.14" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.14"/>
|
||||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14" />
|
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14"/>
|
||||||
<PackageReference Include="MudBlazor" Version="6.0.14" />
|
<PackageReference Include="MudBlazor" Version="8.5.1"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js" />
|
<ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Components\Components.csproj" />
|
<ProjectReference Include="..\Components\Components.csproj"/>
|
||||||
<ProjectReference Include="..\Model\Model.csproj" />
|
<ProjectReference Include="..\Model\Model.csproj"/>
|
||||||
<ProjectReference Include="..\Services\Services.csproj" />
|
<ProjectReference Include="..\Services\Services.csproj"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="wwwroot\generated" />
|
<Folder Include="wwwroot\generated"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
+16
-13
@@ -6,12 +6,16 @@
|
|||||||
@using Services.Website
|
@using Services.Website
|
||||||
@implements IDisposable
|
@implements IDisposable
|
||||||
|
|
||||||
<MudThemeProvider />
|
<MudThemeProvider/>
|
||||||
|
<MudPopoverProvider/>
|
||||||
|
<MudDialogProvider/>
|
||||||
|
<MudSnackbarProvider/>
|
||||||
|
|
||||||
<MudLayout>
|
<MudLayout>
|
||||||
<MudAppBar Elevation="1">
|
<MudAppBar Elevation="1">
|
||||||
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true">
|
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true">
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@((e) => DrawerToggle())" />
|
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start"
|
||||||
|
OnClick="@(e => DrawerToggle())"/>
|
||||||
</MudHidden>
|
</MudHidden>
|
||||||
<MudButton Class="ml-3 mr-8"
|
<MudButton Class="ml-3 mr-8"
|
||||||
Href="/"
|
Href="/"
|
||||||
@@ -25,26 +29,26 @@
|
|||||||
Variant="Variant.Text"
|
Variant="Variant.Text"
|
||||||
Color="Color.Default"
|
Color="Color.Default"
|
||||||
Class="mr-4">
|
Class="mr-4">
|
||||||
<MudIcon Icon="fa-solid fa-helmet-battle" Class="mr-2" />
|
<MudIcon Icon="fa-solid fa-helmet-battle" Class="mr-2"/>
|
||||||
Build Calculator
|
Build Calculator
|
||||||
</MudButton>
|
</MudButton>
|
||||||
<MudButton Href="/harass-calculator"
|
<MudButton Href="/harass-calculator"
|
||||||
Variant="Variant.Text"
|
Variant="Variant.Text"
|
||||||
Color="Color.Default"
|
Color="Color.Default"
|
||||||
Class="mr-4">
|
Class="mr-4">
|
||||||
<MudIcon Icon="fa-solid fa-bow-arrow" Class="mr-2" />
|
<MudIcon Icon="fa-solid fa-bow-arrow" Class="mr-2"/>
|
||||||
Harass Calculator
|
Harass Calculator
|
||||||
</MudButton>
|
</MudButton>
|
||||||
<MudButton Href="/database"
|
<MudButton Href="/database"
|
||||||
Variant="Variant.Text"
|
Variant="Variant.Text"
|
||||||
Color="Color.Default"
|
Color="Color.Default"
|
||||||
Class="mr-4">
|
Class="mr-4">
|
||||||
<MudIcon Icon="fa-solid fa-clipboard-list" Class="mr-2" />
|
<MudIcon Icon="fa-solid fa-clipboard-list" Class="mr-2"/>
|
||||||
Database
|
Database
|
||||||
</MudButton>
|
</MudButton>
|
||||||
</MudHidden>
|
</MudHidden>
|
||||||
<MudSpacer />
|
<MudSpacer/>
|
||||||
<SearchButtonComponent Id="desktop-searchButton" />
|
<SearchButtonComponent Id="desktop-searchButton"/>
|
||||||
</MudAppBar>
|
</MudAppBar>
|
||||||
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true">
|
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true">
|
||||||
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
|
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
|
||||||
@@ -53,8 +57,8 @@
|
|||||||
<MudNavLink Href="/build-calculator" Icon="fa-solid fa-helmet-battle">Build Calculator</MudNavLink>
|
<MudNavLink Href="/build-calculator" Icon="fa-solid fa-helmet-battle">Build Calculator</MudNavLink>
|
||||||
<MudNavLink Href="/harass-calculator" Icon="fa-solid fa-bow-arrow">Harass Calculator</MudNavLink>
|
<MudNavLink Href="/harass-calculator" Icon="fa-solid fa-bow-arrow">Harass Calculator</MudNavLink>
|
||||||
<MudNavLink Href="/database" Icon="fa-solid fa-clipboard-list">Database</MudNavLink>
|
<MudNavLink Href="/database" Icon="fa-solid fa-clipboard-list">Database</MudNavLink>
|
||||||
<MudSpacer />
|
<MudSpacer/>
|
||||||
<MudDivider Class="my-2" />
|
<MudDivider Class="my-2"/>
|
||||||
</MudNavMenu>
|
</MudNavMenu>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
</MudDrawer>
|
</MudDrawer>
|
||||||
@@ -70,9 +74,9 @@
|
|||||||
</MudLayout>
|
</MudLayout>
|
||||||
|
|
||||||
|
|
||||||
<MudThemeProvider @ref="@_mudThemeProvider" @bind-IsDarkMode="@_isDarkMode" />
|
<MudThemeProvider @ref="@_mudThemeProvider" @bind-IsDarkMode="@_isDarkMode"/>
|
||||||
<MudDialogProvider />
|
<MudDialogProvider/>
|
||||||
<MudSnackbarProvider />
|
<MudSnackbarProvider/>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
@@ -153,5 +157,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
What is this website for?
|
What is this website for?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
This is just a "yet another third-party tool" website for a video game. If you played a game like Path of Exile, you are probably already used to seeing a bunch of said tools.
|
This is just a "yet another third-party tool" website for a video game. If you played a game like Path
|
||||||
|
of Exile, you are probably already used to seeing a bunch of said tools.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
<InfoBodyComponent>
|
<InfoBodyComponent>
|
||||||
@@ -24,7 +25,9 @@
|
|||||||
So what is <i>this</i> specific tool for?
|
So what is <i>this</i> specific tool for?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
Ideally, this website will be a casual reference, for getting started with understanding the themes and game patterns of IMMORTAL: Gates of Pyre. That said, this tool is currently not near to achieving said goal. In the meantime, you can check out the simple calculator and database tools on this website.
|
Ideally, this website will be a casual reference, for getting started with understanding the themes and
|
||||||
|
game patterns of IMMORTAL: Gates of Pyre. That said, this tool is currently not near to achieving said
|
||||||
|
goal. In the meantime, you can check out the simple calculator and database tools on this website.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
<InfoBodyComponent>
|
<InfoBodyComponent>
|
||||||
@@ -40,7 +43,9 @@
|
|||||||
Any disclaimers?
|
Any disclaimers?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
This website has no association with "SunSpear Games." Beyond that, any game data displayed on this website for "IMMORTAL: Gates of Pyre" may be inaccurate due to my own human error and time limitations. Use with caution.
|
This website has no association with "SunSpear Games." Beyond that, any game data displayed on this
|
||||||
|
website for "IMMORTAL: Gates of Pyre" may be inaccurate due to my own human error and time limitations.
|
||||||
|
Use with caution.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
</PaperComponent>
|
</PaperComponent>
|
||||||
|
|||||||
@@ -32,7 +32,8 @@
|
|||||||
|
|
||||||
<div class="calculatorGrid">
|
<div class="calculatorGrid">
|
||||||
<div class="gridItem" style="grid-area: timing;">
|
<div class="gridItem" style="grid-area: timing;">
|
||||||
<ButtonComponent MyButtonType="MyButtonType.Secondary" OnClick="OnResetClicked">Clear Build Order</ButtonComponent>
|
<ButtonComponent MyButtonType="MyButtonType.Secondary" OnClick="OnResetClicked">Clear Build Order
|
||||||
|
</ButtonComponent>
|
||||||
<PanelComponent>
|
<PanelComponent>
|
||||||
<InfoTooltipComponent InfoText="@Locale["Tooltip Timing Info"]">
|
<InfoTooltipComponent InfoText="@Locale["Tooltip Timing Info"]">
|
||||||
<TimingComponent></TimingComponent>
|
<TimingComponent></TimingComponent>
|
||||||
@@ -119,7 +120,8 @@
|
|||||||
What is this tool?
|
What is this tool?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
This is a calculator to determine build timings. Mostly so someone can quickly try out a few build orders to see if they somewhat make sense.
|
This is a calculator to determine build timings. Mostly so someone can quickly try out a few build
|
||||||
|
orders to see if they somewhat make sense.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -128,13 +130,22 @@
|
|||||||
How does it work?
|
How does it work?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
The tool calculates every second of game time. So if you attempt to build a <b>Legion Hall</b> as your first action, the tool will scan every second, until you get to one where the request can be made. In this case, that is interval 58.
|
The tool calculates every second of game time. So if you attempt to build a <b>Legion Hall</b> as
|
||||||
|
your first action, the tool will scan every second, until you get to one where the request can be
|
||||||
|
made. In this case, that is interval 58.
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
If you then build 2 <b>Apostle of Bindings</b> a <b>Soul Foundry</b> and a 3 <b>Absolvers</b> you should see yourself roughly floating 500 alloy, with barely having any ether. Which means you could of gotten an <b>Acropolis</b> and a <b>Zentari</b> without hurting your build.
|
If you then build 2 <b>Apostle of Bindings</b> a <b>Soul Foundry</b> and a 3 <b>Absolvers</b> you
|
||||||
|
should see yourself roughly floating 500 alloy, with barely having any ether. Which means you could
|
||||||
|
of gotten an <b>Acropolis</b> and a <b>Zentari</b> without hurting your build.
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Try building <b>Apostle of Bindings</b> before the <b>Legion Hall</b> and see how that changes the timing of your 3 <b>Absolvers</b>. (Spoiler: <SpoilerTextComponent> your <b>Absolvers</b> will be built much faster, and you won't be floating so much alloy.</SpoilerTextComponent>)
|
Try building <b>Apostle of Bindings</b> before the <b>Legion Hall</b> and see how that changes the
|
||||||
|
timing of your 3 <b>Absolvers</b>. (Spoiler:
|
||||||
|
<SpoilerTextComponent> your <b>Absolvers</b> will be built much faster, and you won't be floating so
|
||||||
|
much alloy.
|
||||||
|
</SpoilerTextComponent>
|
||||||
|
)
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -230,7 +241,7 @@
|
|||||||
DataCollectionService.SendEvent(
|
DataCollectionService.SendEvent(
|
||||||
DataCollectionKeys.PageInitialized,
|
DataCollectionKeys.PageInitialized,
|
||||||
new Dictionary<string, string> { { "page", "build-calculator" } }
|
new Dictionary<string, string> { { "page", "build-calculator" } }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IDisposable.Dispose()
|
void IDisposable.Dispose()
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
<Display>@lastInterval | T @Interval.ToTime(lastInterval)</Display>
|
<Display>@lastInterval | T @Interval.ToTime(lastInterval)</Display>
|
||||||
</FormDisplayComponent>
|
</FormDisplayComponent>
|
||||||
<FormDisplayComponent Label="Army Attacking At">
|
<FormDisplayComponent Label="Army Attacking At">
|
||||||
<Display>@(lastInterval + timingService.GetTravelTime()) | T @Interval.ToTime(lastInterval + timingService.GetTravelTime())</Display>
|
<Display>@(lastInterval + timingService.GetTravelTime()) |
|
||||||
|
T @Interval.ToTime(lastInterval + timingService.GetTravelTime())</Display>
|
||||||
</FormDisplayComponent>
|
</FormDisplayComponent>
|
||||||
</div>
|
</div>
|
||||||
<FormDisplayComponent Label="Army units built">
|
<FormDisplayComponent Label="Army units built">
|
||||||
@@ -38,18 +39,21 @@
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
.armyView {
|
.armyView {
|
||||||
overflow-y: scroll; width: 100%; overflow-x: hidden; height: 350px;
|
overflow-y: scroll;
|
||||||
}
|
width: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
height: 350px;
|
||||||
|
}
|
||||||
|
|
||||||
.armyCardsContainer {
|
.armyCardsContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.armyCard {
|
.armyCard {
|
||||||
width:100px;
|
width: 100px;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
}
|
}
|
||||||
@@ -60,6 +64,7 @@
|
|||||||
left: -16px;
|
left: -16px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.armyCount {
|
.armyCount {
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
}
|
}
|
||||||
@@ -134,7 +139,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO Better
|
//TODO Better
|
||||||
var armyCountIs = 0;
|
var armyCountIs = 0;
|
||||||
foreach (var army in armyCount)
|
foreach (var army in armyCount)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
|
|
||||||
<div class="bankContainer">
|
<div class="bankContainer">
|
||||||
<FormDisplayComponent Label="Time">
|
<FormDisplayComponent Label="Time">
|
||||||
<Display>@(BuildOrderService.GetLastRequestInterval() + 1) | T @Interval.ToTime(BuildOrderService.GetLastRequestInterval() + 1)</Display>
|
<Display>@(BuildOrderService.GetLastRequestInterval() + 1) |
|
||||||
|
T @Interval.ToTime(BuildOrderService.GetLastRequestInterval() + 1)</Display>
|
||||||
</FormDisplayComponent>
|
</FormDisplayComponent>
|
||||||
<div class="bankRow">
|
<div class="bankRow">
|
||||||
<FormDisplayComponent Label="Alloy">
|
<FormDisplayComponent Label="Alloy">
|
||||||
@@ -62,11 +63,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Inject]
|
[Inject] IBuildOrderService BuildOrderService { get; set; } = default!;
|
||||||
IBuildOrderService BuildOrderService { get; set; } = default!;
|
|
||||||
|
|
||||||
[Inject]
|
[Inject] IEconomyService EconomyService { get; set; } = default!;
|
||||||
IEconomyService EconomyService { get; set; } = default!;
|
|
||||||
|
|
||||||
EconomyModel _economy = new();
|
EconomyModel _economy = new();
|
||||||
int _supplyGranted;
|
int _supplyGranted;
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ else
|
|||||||
var takenPixels = new Dictionary<int, bool>();
|
var takenPixels = new Dictionary<int, bool>();
|
||||||
|
|
||||||
<div style="width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
<div style="width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
||||||
<div style="position: relative; border: 2px solid gray; border-radius:2px; width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
<div
|
||||||
|
style="position: relative; border: 2px solid gray; border-radius:2px; width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
||||||
@foreach (var point in chart.Points)
|
@foreach (var point in chart.Points)
|
||||||
{
|
{
|
||||||
var x = int.Parse(point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax));
|
var x = int.Parse(point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax));
|
||||||
@@ -27,11 +28,12 @@ else
|
|||||||
|
|
||||||
|
|
||||||
<div style="position: absolute;
|
<div style="position: absolute;
|
||||||
bottom:@point.GetValue(chart.HighestValuePoint, chart.ValueDisplayMax)px;
|
bottom:@point.GetValue(chart.HighestValuePoint, chart.ValueDisplayMax)px;
|
||||||
left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px;
|
left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
height: 0px;">
|
height: 0px;">
|
||||||
<div style="width:1px; height: 1px; border-top-right-radius:10px; border-top-left-radius:10px; border: 2px solid @chart.ChartColor; background-color:@chart.ChartColor">
|
<div
|
||||||
|
style="width:1px; height: 1px; border-top-right-radius:10px; border-top-left-radius:10px; border: 2px solid @chart.ChartColor; background-color:@chart.ChartColor">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -42,16 +44,16 @@ else
|
|||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.chartsContainer {
|
.chartsContainer {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<FormLayoutComponent>
|
<FormLayoutComponent>
|
||||||
<FormDisplayComponent Label="Highest Alloy">
|
<FormDisplayComponent Label="Highest Alloy">
|
||||||
@@ -103,7 +105,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int lastRequestedRefreshIndex = 0;
|
int lastRequestedRefreshIndex;
|
||||||
|
|
||||||
void OnAge(object? sender, ElapsedEventArgs elapsedEventArgs)
|
void OnAge(object? sender, ElapsedEventArgs elapsedEventArgs)
|
||||||
{
|
{
|
||||||
@@ -130,7 +132,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int requestedRefreshIndex = 0;
|
int requestedRefreshIndex;
|
||||||
|
|
||||||
void OnBuilderOrderChanged()
|
void OnBuilderOrderChanged()
|
||||||
{
|
{
|
||||||
@@ -320,8 +322,8 @@ else
|
|||||||
charts.Add(etherChart);
|
charts.Add(etherChart);
|
||||||
|
|
||||||
|
|
||||||
//TODO WIP
|
//TODO WIP
|
||||||
//charts.Add(pyreChart);
|
//charts.Add(pyreChart);
|
||||||
|
|
||||||
charts.Add(armyChart);
|
charts.Add(armyChart);
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,15 @@
|
|||||||
}
|
}
|
||||||
<style>
|
<style>
|
||||||
.entityClickView {
|
.entityClickView {
|
||||||
overflow-y: scroll; width: 100%; overflow-x: hidden; height: 550px;
|
overflow-y: scroll;
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
height: 550px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private EntityModel? _entity = default!;
|
private EntityModel? _entity;
|
||||||
private string _viewType = EntityViewType.Detailed;
|
private string _viewType = EntityViewType.Detailed;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
|
|||||||
@@ -22,7 +22,8 @@
|
|||||||
|
|
||||||
|
|
||||||
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
|
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
|
||||||
? "#0a0f12" : hotkey.GetColor();
|
? "#0a0f12"
|
||||||
|
: hotkey.GetColor();
|
||||||
|
|
||||||
var x = hotkey.PositionX * Size;
|
var x = hotkey.PositionX * Size;
|
||||||
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
|
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
|
||||||
@@ -37,6 +38,7 @@
|
|||||||
{
|
{
|
||||||
border = "5px solid black";
|
border = "5px solid black";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hotkey.KeyText.Equals(controlGroup))
|
if (hotkey.KeyText.Equals(controlGroup))
|
||||||
{
|
{
|
||||||
color = "#257525";
|
color = "#257525";
|
||||||
@@ -49,9 +51,9 @@
|
|||||||
|
|
||||||
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
|
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
|
||||||
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
|
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
|
||||||
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
|
: hotkey.KeyText.Equals("SHIFT") ? "Shift"
|
||||||
: hotkey.KeyText.Equals("TAB") ? "Tab"
|
: hotkey.KeyText.Equals("TAB") ? "Tab"
|
||||||
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
|
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
|
||||||
|
|
||||||
|
|
||||||
var controlStyle = $"background-color:{color}; " +
|
var controlStyle = $"background-color:{color}; " +
|
||||||
@@ -74,11 +76,11 @@
|
|||||||
var usedStyle = hotkey.PositionY == 0 ? controlStyle : keyStyle;
|
var usedStyle = hotkey.PositionY == 0 ? controlStyle : keyStyle;
|
||||||
|
|
||||||
<div style="position:relative;
|
<div style="position:relative;
|
||||||
cursor:pointer;
|
cursor:pointer;
|
||||||
top:@y.ToString()px;
|
top:@y.ToString()px;
|
||||||
left:@x.ToString()px;
|
left:@x.ToString()px;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
height: 0px;">
|
height: 0px;">
|
||||||
|
|
||||||
<div @onclick="e => ButtonClicked(e, hotkey)" style="@usedStyle">
|
<div @onclick="e => ButtonClicked(e, hotkey)" style="@usedStyle">
|
||||||
@keyText
|
@keyText
|
||||||
@@ -138,8 +140,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int Size { get; set; } = 100;
|
||||||
public int Size { get; set; } = 100;
|
|
||||||
|
|
||||||
readonly Dictionary<string, EntityModel> data = EntityModel.GetDictionary();
|
readonly Dictionary<string, EntityModel> data = EntityModel.GetDictionary();
|
||||||
readonly List<HotkeyModel> hotkeys = HotkeyModel.GetAll();
|
readonly List<HotkeyModel> hotkeys = HotkeyModel.GetAll();
|
||||||
@@ -163,7 +164,7 @@
|
|||||||
BuildOrderService.Unsubscribe(OnBuilderOrderChanged);
|
BuildOrderService.Unsubscribe(OnBuilderOrderChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
int completedTimeCount = 0;
|
int completedTimeCount;
|
||||||
|
|
||||||
void OnBuilderOrderChanged()
|
void OnBuilderOrderChanged()
|
||||||
{
|
{
|
||||||
@@ -237,6 +238,7 @@
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,6 +258,7 @@
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,6 +268,7 @@
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,6 +278,7 @@
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,26 +291,32 @@
|
|||||||
{
|
{
|
||||||
controlGroup = "Z";
|
controlGroup = "Z";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("TAB"))
|
if (KeyService.GetAllPressedKeys().Contains("TAB"))
|
||||||
{
|
{
|
||||||
controlGroup = "TAB";
|
controlGroup = "TAB";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("C"))
|
if (KeyService.GetAllPressedKeys().Contains("C"))
|
||||||
{
|
{
|
||||||
controlGroup = "C";
|
controlGroup = "C";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("D"))
|
if (KeyService.GetAllPressedKeys().Contains("D"))
|
||||||
{
|
{
|
||||||
controlGroup = "D";
|
controlGroup = "D";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("V"))
|
if (KeyService.GetAllPressedKeys().Contains("V"))
|
||||||
{
|
{
|
||||||
controlGroup = "V";
|
controlGroup = "V";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("ALT"))
|
if (KeyService.GetAllPressedKeys().Contains("ALT"))
|
||||||
{
|
{
|
||||||
controlGroup = "ALT";
|
controlGroup = "ALT";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyService.GetAllPressedKeys().Contains("SHIFT"))
|
if (KeyService.GetAllPressedKeys().Contains("SHIFT"))
|
||||||
{
|
{
|
||||||
controlGroup = "SHIFT";
|
controlGroup = "SHIFT";
|
||||||
@@ -367,7 +378,7 @@
|
|||||||
DataCollectionService.SendEvent(
|
DataCollectionService.SendEvent(
|
||||||
DataCollectionKeys.BuildCalcInput,
|
DataCollectionKeys.BuildCalcInput,
|
||||||
new Dictionary<string, string> { { "key", hotkey.KeyText.ToLower() }, { "input-source", "mouse" } }
|
new Dictionary<string, string> { { "key", hotkey.KeyText.ToLower() }, { "input-source", "mouse" } }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if (hotkey.KeyText.Equals(HotKeyType.SPACE.ToString()))
|
if (hotkey.KeyText.Equals(HotKeyType.SPACE.ToString()))
|
||||||
|
|||||||
@@ -16,15 +16,14 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||||
public RenderFragment ChildContent { get; set; } = default!;
|
|
||||||
|
|
||||||
private void HandleKeyDown(KeyboardEventArgs e)
|
private void HandleKeyDown(KeyboardEventArgs e)
|
||||||
{
|
{
|
||||||
DataCollectionService.SendEvent(
|
DataCollectionService.SendEvent(
|
||||||
DataCollectionKeys.BuildCalcInput,
|
DataCollectionKeys.BuildCalcInput,
|
||||||
new Dictionary<string, string> { { "key", e.Key.ToLower() }, { "input-source", "keyboard" } }
|
new Dictionary<string, string> { { "key", e.Key.ToLower() }, { "input-source", "keyboard" } }
|
||||||
);
|
);
|
||||||
|
|
||||||
KeyService.AddPressedKey(e.Key);
|
KeyService.AddPressedKey(e.Key);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,9 @@
|
|||||||
Value="BuildDelay"
|
Value="BuildDelay"
|
||||||
OnChange="@OnBuildingInputDelayChanged">
|
OnChange="@OnBuildingInputDelayChanged">
|
||||||
<FormLabelComponent>Building Input Delay</FormLabelComponent>
|
<FormLabelComponent>Building Input Delay</FormLabelComponent>
|
||||||
<FormInfoComponent>Add a input delay to constructing buildings for simulating worker movement and player micro.</FormInfoComponent>
|
<FormInfoComponent>Add a input delay to constructing buildings for simulating worker movement and player
|
||||||
|
micro.
|
||||||
|
</FormInfoComponent>
|
||||||
</FormNumberComponent>
|
</FormNumberComponent>
|
||||||
<div class="optionRow">
|
<div class="optionRow">
|
||||||
<FormLayoutComponent>
|
<FormLayoutComponent>
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
How do I contact you for feature requests and bug reports?
|
How do I contact you for feature requests and bug reports?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
You can message me at <b>JonathanMcCaffrey#3544</b> on my <a href="https://discord.gg/uMq8bMGeeN" target="_blank">Discord</a> channel.
|
You can message me at <b>JonathanMcCaffrey#3544</b> on my <a href="https://discord.gg/uMq8bMGeeN"
|
||||||
|
target="_blank">Discord</a> channel.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
</PaperComponent>
|
</PaperComponent>
|
||||||
|
|||||||
@@ -0,0 +1,393 @@
|
|||||||
|
@layout PageLayout
|
||||||
|
|
||||||
|
@inject IDataCollectionService DataCollectionService
|
||||||
|
@using Model
|
||||||
|
@inherits BasePage
|
||||||
|
|
||||||
|
@page "/data-tables"
|
||||||
|
|
||||||
|
<LayoutMediumContentComponent>
|
||||||
|
<WebsiteTitleComponent>Comparision Tables</WebsiteTitleComponent>
|
||||||
|
|
||||||
|
<PaperComponent>
|
||||||
|
Credit to Zard for deriving the formula.
|
||||||
|
</PaperComponent>
|
||||||
|
|
||||||
|
<PaperComponent>
|
||||||
|
<LayoutRowComponent>
|
||||||
|
<LayoutColumnComponent>
|
||||||
|
<FormLayoutComponent>
|
||||||
|
<FormDisplayComponent Label="Cost of worker">
|
||||||
|
<Display>@CostOfWorker</Display>
|
||||||
|
</FormDisplayComponent>
|
||||||
|
|
||||||
|
<FormDisplayComponent Label="Alloy mined per second by worker">
|
||||||
|
<Display>@AlloyMinedPerSecondByWorker</Display>
|
||||||
|
</FormDisplayComponent>
|
||||||
|
|
||||||
|
<FormDisplayComponent Label="Time to produce worker">
|
||||||
|
<Display>@TimeToProduceWorker</Display>
|
||||||
|
</FormDisplayComponent>
|
||||||
|
</FormLayoutComponent>
|
||||||
|
</LayoutColumnComponent>
|
||||||
|
|
||||||
|
<LayoutColumnComponent>
|
||||||
|
<FormLayoutComponent>
|
||||||
|
<FormNumberComponent Min="1"
|
||||||
|
Id="numberOfWorkersLostToHarass"
|
||||||
|
Value="@((int)NumberOfWorkersLostToHarass)"
|
||||||
|
OnChange="@(e =>
|
||||||
|
{
|
||||||
|
NumberOfWorkersLostToHarass = int.Parse(e.Value!.ToString()!);
|
||||||
|
Calculate();
|
||||||
|
})">
|
||||||
|
<FormLabelComponent>Number of workers lost to harass</FormLabelComponent>
|
||||||
|
</FormNumberComponent>
|
||||||
|
|
||||||
|
<FormNumberComponent Min="1"
|
||||||
|
Id="numberOfTownHallsExisting"
|
||||||
|
Value="@((int)NumberOfTownHallsExisting)"
|
||||||
|
OnChange="OnTownHallsChanged">
|
||||||
|
<FormLabelComponent>Number of townhalls you have</FormLabelComponent>
|
||||||
|
</FormNumberComponent>
|
||||||
|
|
||||||
|
<div id="numberOfTownHallTravelTimes">
|
||||||
|
@{
|
||||||
|
var index = 0;
|
||||||
|
}
|
||||||
|
@foreach (var travelTime in TravelTimes)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
if (index == 1)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = $"numberOfTownHallsExisting_{index}";
|
||||||
|
<FormNumberComponent Min="0"
|
||||||
|
Id="@id"
|
||||||
|
Value="@((int)travelTime.Value)"
|
||||||
|
OnChange="e => { OnTownHallTravelTimeChanged(e, travelTime); }">
|
||||||
|
<FormLabelComponent>Worker travel time from other
|
||||||
|
base @(travelTime.Index + 1)</FormLabelComponent>
|
||||||
|
</FormNumberComponent>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<FormDisplayComponent Label="Total alloy lost">
|
||||||
|
<Display>
|
||||||
|
<div style="font-size: 1.5rem; font-weight: 800;">
|
||||||
|
<span id="totalAlloyHarassment">
|
||||||
|
@TotalAlloyHarassment
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</Display>
|
||||||
|
</FormDisplayComponent>
|
||||||
|
|
||||||
|
|
||||||
|
</FormLayoutComponent>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<div>
|
||||||
|
(<b>Worker replacement costs:</b> <span id="workerReplacementCost">@WorkerReplacementCost()</span>)
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
(<b>Delayed mining time:</b> <span id="delayedMiningCost">@DelayedMiningCost()</span>)
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
(<b>Average travel time:</b> <span id="getAverageTravelTime">@GetAverageTravelTime()</span>)
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</LayoutColumnComponent>
|
||||||
|
</LayoutRowComponent>
|
||||||
|
</PaperComponent>
|
||||||
|
|
||||||
|
<ContentDividerComponent></ContentDividerComponent>
|
||||||
|
|
||||||
|
<PaperComponent>
|
||||||
|
<InfoBodyComponent>
|
||||||
|
<InfoQuestionComponent>
|
||||||
|
What is this tool?
|
||||||
|
</InfoQuestionComponent>
|
||||||
|
<InfoAnswerComponent>
|
||||||
|
The Harass Calculator allows you to calculate damage done to an enemy alloy line. For example, if you
|
||||||
|
were to attack with Ichors, and kill 6 enemy workers, you can set the
|
||||||
|
<b>
|
||||||
|
Number of workers lost to
|
||||||
|
harass
|
||||||
|
</b> to 6. This would determine a loss of <span id="exampleTotalAlloyLoss">@ExampleTotalAlloyLoss</span>
|
||||||
|
alloy. Quite
|
||||||
|
the large number.
|
||||||
|
</InfoAnswerComponent>
|
||||||
|
</InfoBodyComponent>
|
||||||
|
|
||||||
|
<InfoBodyComponent>
|
||||||
|
<InfoQuestionComponent>
|
||||||
|
What can I learn from this?
|
||||||
|
</InfoQuestionComponent>
|
||||||
|
<InfoAnswerComponent>
|
||||||
|
Well, let's assume you lost a full alloy line of workers, and have to take that
|
||||||
|
@ExampleTotalAlloyLoss alloy cost (<span id="exampleWorkerCost">@ExampleWorkerCost</span>
|
||||||
|
to rebuy the workers, and <span id="exampleMiningTimeCost">@ExampleMiningTimeCost</span> in lost mining
|
||||||
|
time.)
|
||||||
|
<br/><br/>
|
||||||
|
If you were to set the <b>Number of townhalls you have</b> to 2, the calculator will consider worker
|
||||||
|
transfer micro. Allowing you to cut the total cost by roughly
|
||||||
|
<span id="exampleTotalAlloyLossDifference">@ExampleTotalAlloyLossDifference</span> alloy. However, that
|
||||||
|
number isn't
|
||||||
|
entirely accurate, you are also going to have to bump up the <b>Worker travel time to alloy</b> to
|
||||||
|
account for the time it takes the transferred workers to arrive at the decimated alloy line.
|
||||||
|
<br/><br/>
|
||||||
|
Let's say it takes 10 seconds for workers to transfer from your second base. Let's enter that for the
|
||||||
|
second base travel time for the more accurate loss of
|
||||||
|
<span
|
||||||
|
id="exampleTotalAlloyLossAccurate">
|
||||||
|
@ExampleTotalAlloyLossAccurate
|
||||||
|
</span> alloy
|
||||||
|
(saving you <span
|
||||||
|
id="exampleTotalAlloyLossAccurateDifference">@ExampleTotalAlloyLossAccurateDifference</span> alloy.)
|
||||||
|
<i>
|
||||||
|
Which is
|
||||||
|
much better than not transferring workers!
|
||||||
|
</i>
|
||||||
|
</InfoAnswerComponent>
|
||||||
|
</InfoBodyComponent>
|
||||||
|
|
||||||
|
<InfoBodyComponent>
|
||||||
|
<InfoQuestionComponent>
|
||||||
|
Can I see the formula for the calculation?
|
||||||
|
</InfoQuestionComponent>
|
||||||
|
<InfoAnswerComponent>
|
||||||
|
The Harass Calculator is based on the following calculation.
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<div class="mathContainer">
|
||||||
|
<div> =c*m+r*g*(t+l) +</div>
|
||||||
|
|
||||||
|
<MathLoopSumComponent>
|
||||||
|
<LoopStart><i>x</i> =1</LoopStart>
|
||||||
|
<LoopEnd>
|
||||||
|
⌊
|
||||||
|
<MathDivisionComponent>
|
||||||
|
<Dividee>m</Dividee>
|
||||||
|
<Divider>a</Divider>
|
||||||
|
</MathDivisionComponent>
|
||||||
|
⌋
|
||||||
|
</LoopEnd>
|
||||||
|
<IndexSymbol>
|
||||||
|
<i>x</i>
|
||||||
|
</IndexSymbol>
|
||||||
|
</MathLoopSumComponent>
|
||||||
|
|
||||||
|
<div style="width: 132px">g*<i>x</i>*(t+l)</div>
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
<div style="font-family:monospace;">
|
||||||
|
<div>c is CostOfWorker</div>
|
||||||
|
<div>m is NumberOfWorkersLostToHarass, <i>m for [M]otes</i></div>
|
||||||
|
<div>a is NumberOfTownHallsExisting, <i>a for [A]cropolis</i></div>
|
||||||
|
<div>r is m mod a is LeftOverWorkersToProduceCount()</div>
|
||||||
|
<div>g is AlloyMinedPerSecondByWorker</div>
|
||||||
|
<div>t is TimeToProduceWorker</div>
|
||||||
|
<div>l is TravelTime</div>
|
||||||
|
<div><i>x</i> is workerProductionIndex</div>
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
This logic has since been changed slightly to allow client to enter different travel times per base.
|
||||||
|
<br/>
|
||||||
|
</InfoAnswerComponent>
|
||||||
|
</InfoBodyComponent>
|
||||||
|
<InfoBodyComponent>
|
||||||
|
<InfoQuestionComponent>
|
||||||
|
Can I see the code for the calculation?
|
||||||
|
</InfoQuestionComponent>
|
||||||
|
<InfoAnswerComponent>
|
||||||
|
<br/>
|
||||||
|
<LinkButtonComponent
|
||||||
|
Href="https://git.jonathanmccaffrey.ca/JonathanMcCaffrey/IGP-Fan-Reference/src/branch/main/IGP/Pages/HarassCalculatorPage.razor#L226">
|
||||||
|
View Here
|
||||||
|
</LinkButtonComponent>
|
||||||
|
</InfoAnswerComponent>
|
||||||
|
</InfoBodyComponent>
|
||||||
|
</PaperComponent>
|
||||||
|
|
||||||
|
|
||||||
|
</LayoutMediumContentComponent>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.mathContainer {
|
||||||
|
font-family: monospace;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
border: 1px black solid;
|
||||||
|
padding: 32px;
|
||||||
|
background-color: #1A1B1E
|
||||||
|
}
|
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) {
|
||||||
|
.mathContainer {
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
// Example calcs
|
||||||
|
float ExampleTotalAlloyLoss => Calculate(
|
||||||
|
WorkerReplacementCost(6),
|
||||||
|
SimultaneousProductionFloor(1, 6),
|
||||||
|
6,
|
||||||
|
new List<float> { 0 });
|
||||||
|
|
||||||
|
float ExampleWorkerCost => WorkerReplacementCost(6);
|
||||||
|
|
||||||
|
float ExampleMiningTimeCost => ExampleTotalAlloyLoss - ExampleWorkerCost;
|
||||||
|
|
||||||
|
float ExampleTotalAlloyLossDifference => ExampleTotalAlloyLoss - Calculate(
|
||||||
|
WorkerReplacementCost(6),
|
||||||
|
SimultaneousProductionFloor(2, 6),
|
||||||
|
6,
|
||||||
|
new List<float> { 0, 0 });
|
||||||
|
|
||||||
|
float ExampleTotalAlloyLossAccurate => Calculate(
|
||||||
|
WorkerReplacementCost(6),
|
||||||
|
SimultaneousProductionFloor(2, 6),
|
||||||
|
6,
|
||||||
|
new List<float> { 0, 10 });
|
||||||
|
|
||||||
|
float ExampleTotalAlloyLossAccurateDifference => ExampleTotalAlloyLoss - ExampleTotalAlloyLossAccurate;
|
||||||
|
|
||||||
|
float TotalAlloyHarassment;
|
||||||
|
|
||||||
|
readonly float CostOfWorker = 50;
|
||||||
|
readonly float AlloyMinedPerSecondByWorker = 1;
|
||||||
|
readonly float TimeToProduceWorker = 20;
|
||||||
|
float NumberOfWorkersLostToHarass = 1;
|
||||||
|
float NumberOfTownHallsExisting = 1;
|
||||||
|
|
||||||
|
float GetAverageTravelTime()
|
||||||
|
{
|
||||||
|
if (TravelTimes.Count == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float sum = 0;
|
||||||
|
|
||||||
|
foreach (var travelTime in TravelTimes)
|
||||||
|
{
|
||||||
|
sum += travelTime.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum / NumberOfTownHallsExisting;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float SimultaneousProductionFloor()
|
||||||
|
{
|
||||||
|
if (NumberOfTownHallsExisting <= 0 || NumberOfWorkersLostToHarass <= 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NumberOfWorkersLostToHarass / Math.Min(NumberOfTownHallsExisting, NumberOfWorkersLostToHarass);
|
||||||
|
}
|
||||||
|
|
||||||
|
float SimultaneousProductionFloor(float existingTownHalls, float numberOfWorkersLost)
|
||||||
|
{
|
||||||
|
if (existingTownHalls <= 0 || numberOfWorkersLost <= 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return numberOfWorkersLost / Math.Min(existingTownHalls, numberOfWorkersLost);
|
||||||
|
}
|
||||||
|
|
||||||
|
float WorkerReplacementCost()
|
||||||
|
{
|
||||||
|
return CostOfWorker * NumberOfWorkersLostToHarass;
|
||||||
|
}
|
||||||
|
|
||||||
|
float WorkerReplacementCost(int numberOfWorkersLostToHarass)
|
||||||
|
{
|
||||||
|
return CostOfWorker * numberOfWorkersLostToHarass;
|
||||||
|
}
|
||||||
|
|
||||||
|
float DelayedMiningCost()
|
||||||
|
{
|
||||||
|
return TotalAlloyHarassment - WorkerReplacementCost();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Calculate()
|
||||||
|
{
|
||||||
|
TotalAlloyHarassment = Calculate(WorkerReplacementCost(),
|
||||||
|
SimultaneousProductionFloor(),
|
||||||
|
NumberOfWorkersLostToHarass,
|
||||||
|
TravelTimes.Select(x => x.Value).ToList(),
|
||||||
|
TimeToProduceWorker,
|
||||||
|
AlloyMinedPerSecondByWorker);
|
||||||
|
}
|
||||||
|
|
||||||
|
float Calculate(float workerReplacementCost,
|
||||||
|
float simultaneousProductionFloor,
|
||||||
|
float numberOfWorkersLostToHarass,
|
||||||
|
IList<float> travelTimes,
|
||||||
|
float timeToProduceWorker = 20,
|
||||||
|
float alloyMinedPerSecondByWorker = 1)
|
||||||
|
{
|
||||||
|
var totalAlloyHarassment = workerReplacementCost;
|
||||||
|
|
||||||
|
for (var workerProductionIndex = 0; workerProductionIndex < simultaneousProductionFloor; workerProductionIndex++)
|
||||||
|
{
|
||||||
|
totalAlloyHarassment += alloyMinedPerSecondByWorker * timeToProduceWorker * (workerProductionIndex + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var remainder = (int)(numberOfWorkersLostToHarass % simultaneousProductionFloor);
|
||||||
|
for (var remainderIndex = 0; remainderIndex < remainder; remainderIndex++)
|
||||||
|
{
|
||||||
|
totalAlloyHarassment += alloyMinedPerSecondByWorker * timeToProduceWorker * (simultaneousProductionFloor + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var travelTimeIndex = 0; travelTimeIndex < numberOfWorkersLostToHarass; travelTimeIndex++)
|
||||||
|
{
|
||||||
|
var townHallIndex = travelTimeIndex % travelTimes.Count;
|
||||||
|
totalAlloyHarassment += alloyMinedPerSecondByWorker * travelTimes[townHallIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
return totalAlloyHarassment;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
base.OnInitialized();
|
||||||
|
Calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<TravelTime> TravelTimes { get; set; } = new() { new TravelTime(0, 0) };
|
||||||
|
|
||||||
|
private void OnTownHallsChanged(ChangeEventArgs obj)
|
||||||
|
{
|
||||||
|
NumberOfTownHallsExisting = int.Parse(obj.Value!.ToString()!);
|
||||||
|
|
||||||
|
while (TravelTimes.Count > NumberOfTownHallsExisting)
|
||||||
|
TravelTimes.Remove(TravelTimes.Last());
|
||||||
|
|
||||||
|
while (TravelTimes.Count < NumberOfTownHallsExisting)
|
||||||
|
TravelTimes.Add(new TravelTime(TravelTimes.Count, 10 * TravelTimes.Count));
|
||||||
|
Calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnTownHallTravelTimeChanged(ChangeEventArgs obj, TravelTime travelTime)
|
||||||
|
{
|
||||||
|
travelTime.Value = (int)obj.Value!;
|
||||||
|
|
||||||
|
Calculate();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<h3>UnitTable</h3>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<h3>WeaponTable</h3>
|
||||||
|
|
||||||
|
|
||||||
|
<MudDataGrid Items="@_entityWeapons.Take(4)">
|
||||||
|
<Columns>
|
||||||
|
<PropertyColumn Property="x => x.Range" Title="Nr"/>
|
||||||
|
</Columns>
|
||||||
|
</MudDataGrid>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
List<EntityWeaponModel> _entityWeapons;
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
base.OnInitialized();
|
||||||
|
|
||||||
|
_entityWeapons = DATA.Get()
|
||||||
|
.SelectMany(e => e.Value.EntityParts)
|
||||||
|
.OfType<EntityWeaponModel>()
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,7 +20,9 @@
|
|||||||
</PaperComponent>
|
</PaperComponent>
|
||||||
|
|
||||||
<div style="margin-left: 8px">
|
<div style="margin-left: 8px">
|
||||||
<ButtonGroupComponent OnClick="choice => { EntityDisplayService.SetDisplayType(choice); }" Choice="@EntityDisplayService.GetDisplayType()" Choices="@EntityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
<ButtonGroupComponent OnClick="choice => { EntityDisplayService.SetDisplayType(choice); }"
|
||||||
|
Choice="@EntityDisplayService.GetDisplayType()"
|
||||||
|
Choices="@EntityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<PaperComponent>
|
<PaperComponent>
|
||||||
@@ -50,7 +52,8 @@
|
|||||||
What is this tool?
|
What is this tool?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
This is a reference database. Mostly so unit stats can be reviewed outside of the game, IMMORTAL: Gates of Pyre.
|
This is a reference database. Mostly so unit stats can be reviewed outside of the game, IMMORTAL: Gates
|
||||||
|
of Pyre.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -59,7 +62,8 @@
|
|||||||
Is this database complete?
|
Is this database complete?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
No. A lot of content is missing, that needs to be manually transfered from screenshots of IMMORTAL: Gates of Pyre. This will happen slowly over-time.
|
No. A lot of content is missing, that needs to be manually transfered from screenshots of IMMORTAL:
|
||||||
|
Gates of Pyre. This will happen slowly over-time.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -68,7 +72,9 @@
|
|||||||
Is this database updated to the latest version?
|
Is this database updated to the latest version?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
Maybe. Check this <b>@VariableService.Variables["GamePatch"]</b> version number, and compare it to the number on discord, in the <b>#game-updates</b> channel. That should give a general sense of how out of date the data is.
|
Maybe. Check this <b>@VariableService.Variables["GamePatch"]</b> version number, and compare it to the
|
||||||
|
number on discord, in the <b>#game-updates</b> channel. That should give a general sense of how out of
|
||||||
|
date the data is.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -115,8 +121,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Inject]
|
[Inject] public IEntityFilterService EntityFilterService { get; set; } = default!;
|
||||||
public IEntityFilterService EntityFilterService { get; set; } = default!;
|
|
||||||
|
|
||||||
readonly List<EntityModel> defaults = (from entity in EntityModel.GetList()
|
readonly List<EntityModel> defaults = (from entity in EntityModel.GetList()
|
||||||
where entity.IsSpeculative == false
|
where entity.IsSpeculative == false
|
||||||
|
|||||||
@@ -20,7 +20,9 @@
|
|||||||
</PaperComponent>
|
</PaperComponent>
|
||||||
|
|
||||||
<div style="margin-left: 8px">
|
<div style="margin-left: 8px">
|
||||||
<ButtonGroupComponent OnClick="choice => { EntityDisplayService.SetDisplayType(choice); }" Choice="@EntityDisplayService.GetDisplayType()" Choices="@EntityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
<ButtonGroupComponent OnClick="choice => { EntityDisplayService.SetDisplayType(choice); }"
|
||||||
|
Choice="@EntityDisplayService.GetDisplayType()"
|
||||||
|
Choices="@EntityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -61,8 +63,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Text { get; set; }
|
||||||
public string? Text { get; set; }
|
|
||||||
|
|
||||||
private EntityModel? _entity;
|
private EntityModel? _entity;
|
||||||
|
|
||||||
|
|||||||
@@ -49,10 +49,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; }
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string? StyleType { get; set; }
|
||||||
public string? StyleType { get; set; }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -33,18 +33,21 @@
|
|||||||
<b>- Energy: </b> @production.Energy
|
<b>- Energy: </b> @production.Energy
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (!production.DefensiveLayer.Equals(0))
|
@if (!production.DefensiveLayer.Equals(0))
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<b>- Shields:</b> @production.DefensiveLayer
|
<b>- Shields:</b> @production.DefensiveLayer
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.BuildTime != 0)
|
if (production.BuildTime != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<b>- BuildTime: </b> @production.BuildTime
|
<b>- BuildTime: </b> @production.BuildTime
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.Cooldown != 0)
|
if (production.Cooldown != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
@@ -68,7 +71,8 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Name:</b> <EntityLabelComponent EntityId="@spell.DataType"/>
|
<b>Name:</b>
|
||||||
|
<EntityLabelComponent EntityId="@spell.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Description:</b> @((MarkupString)info.Description)
|
<b>Description:</b> @((MarkupString)info.Description)
|
||||||
@@ -90,18 +94,21 @@
|
|||||||
<b> Energy: </b> @production.Energy
|
<b> Energy: </b> @production.Energy
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (!production.DefensiveLayer.Equals(0))
|
@if (!production.DefensiveLayer.Equals(0))
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<b>Shields:</b> @production.DefensiveLayer
|
<b>Shields:</b> @production.DefensiveLayer
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.BuildTime != 0)
|
if (production.BuildTime != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<b> BuildTime: </b> @production.BuildTime
|
<b> BuildTime: </b> @production.BuildTime
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.Cooldown != 0)
|
if (production.Cooldown != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
@@ -119,11 +126,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -26,38 +26,36 @@ else
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.entityHeader {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
gap: 4px;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 22px;
|
|
||||||
width: 100%;
|
|
||||||
margin-left: -6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entityHeaderText {
|
|
||||||
font-size: 2rem;
|
|
||||||
font-weight: 900;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
|
||||||
.entityHeader {
|
.entityHeader {
|
||||||
flex-direction: column;
|
display: flex;
|
||||||
justify-content: normal;
|
flex-direction: row;
|
||||||
margin-left: 4px;
|
gap: 4px;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 22px;
|
||||||
|
width: 100%;
|
||||||
|
margin-left: -6px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</style>
|
.entityHeaderText {
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) {
|
||||||
|
.entityHeader {
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: normal;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -110,17 +110,15 @@ else
|
|||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -23,10 +23,8 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -77,7 +77,8 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Name:</b> <EntityLabelComponent EntityId="@passive.DataType"/>
|
<b>Name:</b>
|
||||||
|
<EntityLabelComponent EntityId="@passive.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Description:</b> @((MarkupString)info.Description)
|
<b>Description:</b> @((MarkupString)info.Description)
|
||||||
@@ -130,11 +131,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -72,6 +72,7 @@
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (Supply != null)
|
@if (Supply != null)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
@@ -103,7 +104,8 @@
|
|||||||
<div>
|
<div>
|
||||||
|
|
||||||
<span>
|
<span>
|
||||||
<b>@requirement.Requirement.Replace("_", " "):</b> <EntityLabelComponent EntityId="@requirement.Id"/>
|
<b>@requirement.Requirement.Replace("_", " "):</b> <EntityLabelComponent
|
||||||
|
EntityId="@requirement.Id"/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -186,29 +188,27 @@
|
|||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.ProductionContainer {
|
.ProductionContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 32px;
|
gap: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.ProductionContainer {
|
.ProductionContainer {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
|
|
||||||
private EntityProductionModel Production => Entity!.Production();
|
private EntityProductionModel Production => Entity!.Production();
|
||||||
|
|||||||
@@ -24,11 +24,13 @@
|
|||||||
<b>- Pyre: </b>
|
<b>- Pyre: </b>
|
||||||
@production.Pyre
|
@production.Pyre
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.BuildTime != 0)
|
if (production.BuildTime != 0)
|
||||||
{
|
{
|
||||||
<b>- BuildTime: </b>
|
<b>- BuildTime: </b>
|
||||||
@production.BuildTime
|
@production.BuildTime
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.Cooldown != 0)
|
if (production.Cooldown != 0)
|
||||||
{
|
{
|
||||||
<b>- Cooldown: </b>
|
<b>- Cooldown: </b>
|
||||||
@@ -51,7 +53,8 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Name:</b> <EntityLabelComponent EntityId="@spell.DataType"/>
|
<b>Name:</b>
|
||||||
|
<EntityLabelComponent EntityId="@spell.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Description:</b> @((MarkupString)info.Description)
|
<b>Description:</b> @((MarkupString)info.Description)
|
||||||
@@ -64,11 +67,13 @@
|
|||||||
<b> Pyre: </b>
|
<b> Pyre: </b>
|
||||||
@production.Pyre
|
@production.Pyre
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.BuildTime != 0)
|
if (production.BuildTime != 0)
|
||||||
{
|
{
|
||||||
<b> BuildTime: </b>
|
<b> BuildTime: </b>
|
||||||
@production.BuildTime
|
@production.BuildTime
|
||||||
}
|
}
|
||||||
|
|
||||||
if (production.Cooldown != 0)
|
if (production.Cooldown != 0)
|
||||||
{
|
{
|
||||||
<b> Cooldown: </b>
|
<b> Cooldown: </b>
|
||||||
@@ -85,11 +90,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -151,30 +151,28 @@
|
|||||||
</div>
|
</div>
|
||||||
</EntityDisplayComponent>
|
</EntityDisplayComponent>
|
||||||
<style>
|
<style>
|
||||||
.statContainer {
|
.statContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 32px;
|
gap: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.statContainer {
|
.statContainer {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
|
|
||||||
private EntityVitalityModel Vitality => Entity!.Vitality();
|
private EntityVitalityModel Vitality => Entity!.Vitality();
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
var entity = EntityModel.Get(upgradeId.Id);
|
var entity = EntityModel.Get(upgradeId.Id);
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Name:</b> <EntityLabelComponent EntityId="@entity.DataType"/>
|
<b>Name:</b>
|
||||||
|
<EntityLabelComponent EntityId="@entity.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Description:</b> @entity.Info().Description
|
<b>Description:</b> @entity.Info().Description
|
||||||
@@ -36,29 +37,27 @@
|
|||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.upgradesContainer {
|
.upgradesContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 32px;
|
gap: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.upgradesContainer {
|
.upgradesContainer {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -22,12 +22,14 @@
|
|||||||
<EntityDisplayComponent Title="Vanguard">
|
<EntityDisplayComponent Title="Vanguard">
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Immortal:</b> <EntityLabelComponent EntityId="@immortal.DataType"/>
|
<b>Immortal:</b>
|
||||||
|
<EntityLabelComponent EntityId="@immortal.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
@if (!Vanguard.ReplaceId.Equals(""))
|
@if (!Vanguard.ReplaceId.Equals(""))
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<b>Replaces:</b> <EntityLabelComponent EntityId="@Vanguard.ReplaceId"></EntityLabelComponent>
|
<b>Replaces:</b>
|
||||||
|
<EntityLabelComponent EntityId="@Vanguard.ReplaceId"></EntityLabelComponent>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -37,14 +39,11 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
private EntityVanguardAddedModel? Vanguard => Entity?.VanguardAdded();
|
private EntityVanguardAddedModel? Vanguard => Entity?.VanguardAdded();
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -44,13 +44,16 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
<b>Name:</b> <EntityLabelComponent EntityId="@entity.DataType"/>
|
<b>Name:</b>
|
||||||
|
<EntityLabelComponent EntityId="@entity.DataType"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Replaces:</b> <EntityLabelComponent EntityId="@vanguard.ReplaceId"/>
|
<b>Replaces:</b>
|
||||||
|
<EntityLabelComponent EntityId="@vanguard.ReplaceId"/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<b>Built From:</b> <EntityLabelComponent EntityId="@productionBuilding"/>
|
<b>Built From:</b>
|
||||||
|
<EntityLabelComponent EntityId="@productionBuilding"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -60,11 +63,9 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -91,12 +91,14 @@
|
|||||||
<i>- Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
<i>- Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (data.MediumDamage != 0)
|
@if (data.MediumDamage != 0)
|
||||||
{
|
{
|
||||||
<span>
|
<span>
|
||||||
<i>- Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
<i>- Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (data.HeavyDamage != 0)
|
@if (data.HeavyDamage != 0)
|
||||||
{
|
{
|
||||||
<span>
|
<span>
|
||||||
@@ -188,12 +190,14 @@
|
|||||||
<i>Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
<i>Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (data.MediumDamage != 0)
|
@if (data.MediumDamage != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
<i>Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
<i>Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (data.HeavyDamage != 0)
|
@if (data.HeavyDamage != 0)
|
||||||
{
|
{
|
||||||
<div>
|
<div>
|
||||||
@@ -207,39 +211,37 @@
|
|||||||
</EntityDisplayComponent>
|
</EntityDisplayComponent>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.weaponsContainer {
|
.weaponsContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 32px;
|
gap: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.weaponsContainer {
|
.weaponsContainer {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.alternateDamage {
|
.alternateDamage {
|
||||||
margin-left: 18px;
|
margin-left: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.damageContainer {
|
.damageContainer {
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public EntityModel? Entity { get; set; }
|
||||||
public EntityModel? Entity { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter] public string StyleType { get; set; } = "Detailed";
|
||||||
public string StyleType { get; set; } = "Detailed";
|
|
||||||
|
|
||||||
private bool _isDynamicFormatting = false;
|
private bool _isDynamicFormatting;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
{
|
{
|
||||||
styleClass = "selected";
|
styleClass = "selected";
|
||||||
}
|
}
|
||||||
|
|
||||||
<button @onclick="@(e => OnChangeFaction(choice))"
|
<button @onclick="@(e => OnChangeFaction(choice))"
|
||||||
class="choiceButton @styleClass">
|
class="choiceButton @styleClass">
|
||||||
@(choice == DataType.Any
|
@(choice == DataType.Any
|
||||||
@@ -30,7 +31,9 @@
|
|||||||
{
|
{
|
||||||
styleClass = "selected";
|
styleClass = "selected";
|
||||||
}
|
}
|
||||||
<button class="choiceButton @styleClass" @onclick="@(e => OnChangeImmortal(choice))">@name</button>
|
|
||||||
|
<button class="choiceButton @styleClass"
|
||||||
|
@onclick="@(e => OnChangeImmortal(choice))">@name</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -44,10 +47,12 @@
|
|||||||
styleClass = "selected";
|
styleClass = "selected";
|
||||||
}
|
}
|
||||||
|
|
||||||
<button class="choiceButton @styleClass" @onclick="@(e => OnChangeEntity(choice))">@choice.Replace("_", " ")</button>
|
<button class="choiceButton @styleClass"
|
||||||
|
@onclick="@(e => OnChangeEntity(choice))">@choice.Replace("_", " ")</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<FormTextComponent Id="filterName" Label="Filter Name" Placeholder="Throne..." OnChange="@(e => EntityFilterService.EnterSearchText(e.Value!.ToString()!))"/>
|
<FormTextComponent Id="filterName" Label="Filter Name" Placeholder="Throne..."
|
||||||
|
OnChange="@(e => EntityFilterService.EnterSearchText(e.Value!.ToString()!))"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -99,118 +104,117 @@
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
.desktopFilters {
|
.desktopFilters {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
flex-direction: column;
|
|
||||||
justify-content: flex-start;
|
|
||||||
justify-items: flex-start;
|
|
||||||
top: 50px;
|
|
||||||
padding: 12px;
|
|
||||||
width: 100%;
|
|
||||||
left: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.desktopFiltersContainer {
|
|
||||||
width: 75%;
|
|
||||||
min-width: 1000px;
|
|
||||||
margin: auto;
|
|
||||||
display: flex;
|
|
||||||
gap: 16px;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: flex-start;
|
|
||||||
justify-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filtersContainer {
|
|
||||||
display: flex;
|
|
||||||
gap: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filterContainer {
|
|
||||||
display: flex;
|
|
||||||
background-color: var(--background);
|
|
||||||
gap: 2px;
|
|
||||||
margin-right: auto;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.choiceButton {
|
|
||||||
background-color: var(--primary);
|
|
||||||
color: white;
|
|
||||||
padding: 12px;
|
|
||||||
border: 1px solid var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.choiceButton:hover {
|
|
||||||
background-color: var(--primary-hover);
|
|
||||||
border-color: var(--primary-border-hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
.selected {
|
|
||||||
background-color: var(--secondary);
|
|
||||||
color: white;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selected:hover {
|
|
||||||
background-color: var(--secondary-hover);
|
|
||||||
border-color: var(--secondary-border-hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.filterContainer .choiceButton:first-child {
|
|
||||||
border-top-left-radius: 8px;
|
|
||||||
border-bottom-left-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.filterContainer .choiceButton:last-child {
|
|
||||||
border-top-right-radius: 8px;
|
|
||||||
border-bottom-right-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
|
||||||
.desktopNavContainer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@media only screen and (max-width: 480px) {
|
|
||||||
.filtersContainer {
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
justify-items: flex-start;
|
||||||
|
top: 50px;
|
||||||
|
padding: 12px;
|
||||||
|
width: 100%;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desktopFiltersContainer {
|
||||||
|
width: 75%;
|
||||||
|
min-width: 1000px;
|
||||||
|
margin: auto;
|
||||||
|
display: flex;
|
||||||
|
gap: 16px;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
justify-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filtersContainer {
|
||||||
|
display: flex;
|
||||||
|
gap: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.filterContainer {
|
.filterContainer {
|
||||||
flex-direction: column;
|
display: flex;
|
||||||
|
background-color: var(--background);
|
||||||
|
gap: 2px;
|
||||||
|
margin-right: auto;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.mobileFilters {
|
.choiceButton {
|
||||||
display: none;
|
background-color: var(--primary);
|
||||||
}
|
color: white;
|
||||||
|
padding: 12px;
|
||||||
|
border: 1px solid var(--primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.choiceButton:hover {
|
||||||
|
background-color: var(--primary-hover);
|
||||||
|
border-color: var(--primary-border-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selected {
|
||||||
|
background-color: var(--secondary);
|
||||||
|
color: white;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selected:hover {
|
||||||
|
background-color: var(--secondary-hover);
|
||||||
|
border-color: var(--secondary-border-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.filterContainer .choiceButton:first-child {
|
||||||
|
border-top-left-radius: 8px;
|
||||||
|
border-bottom-left-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.filterContainer .choiceButton:last-child {
|
||||||
|
border-top-right-radius: 8px;
|
||||||
|
border-bottom-right-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@media only screen and (max-width: 1025px) {
|
||||||
|
.desktopNavContainer {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@media only screen and (max-width: 480px) {
|
||||||
|
.filtersContainer {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filterContainer {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1024px) {
|
|
||||||
.mobileFilters {
|
.mobileFilters {
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.desktopFilters {
|
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.desktopSpacer {
|
@@media only screen and (max-width: 1024px) {
|
||||||
display: none;
|
.mobileFilters {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desktopFilters {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.desktopSpacer {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Inject]
|
[Inject] public IEntityFilterService EntityFilterService { get; set; } = default!;
|
||||||
public IEntityFilterService EntityFilterService { get; set; } = default!;
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,39 +24,39 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.docTitle {
|
.docTitle {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.docHeader {
|
.docHeader {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.docDates {
|
.docDates {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.docFooter {
|
.docFooter {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border: 1px solid gray;
|
border: 1px solid gray;
|
||||||
}
|
}
|
||||||
td {
|
|
||||||
padding: 8px;
|
td {
|
||||||
border: 1px solid gray;
|
padding: 8px;
|
||||||
}
|
border: 1px solid gray;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public DocContentModel DocContentModel { get; set; } = default!;
|
||||||
public DocContentModel DocContentModel { get; set; } = default!;
|
|
||||||
|
|
||||||
DocFrontMatterModel docFrontMatter = null!;
|
DocFrontMatterModel docFrontMatter = null!;
|
||||||
private string? content;
|
private string? content;
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
index++;
|
index++;
|
||||||
|
|
||||||
<div style="width: 0; height: @chart.ValueDisplayMax.ToString()px">
|
<div style="width: 0; height: @chart.ValueDisplayMax.ToString()px">
|
||||||
<div style="left: calc(-@width.ToString()px / 2); position: relative; border: 2px solid gray; border-radius:2px; width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
<div
|
||||||
|
style="left: calc(-@width.ToString()px / 2); position: relative; border: 2px solid gray; border-radius:2px; width: @chart.IntervalDisplayMax.ToString()px; height: @chart.ValueDisplayMax.ToString()px">
|
||||||
@foreach (var point in chart.Points)
|
@foreach (var point in chart.Points)
|
||||||
{
|
{
|
||||||
var xCoord = point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax);
|
var xCoord = point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax);
|
||||||
@@ -24,11 +25,12 @@
|
|||||||
if (show == player)
|
if (show == player)
|
||||||
{
|
{
|
||||||
<div style="position: absolute;
|
<div style="position: absolute;
|
||||||
bottom:@point.GetValue(highestAlloyPoint, chart.ValueDisplayMax)px;
|
bottom:@point.GetValue(highestAlloyPoint, chart.ValueDisplayMax)px;
|
||||||
left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px;
|
left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
height: 0px;">
|
height: 0px;">
|
||||||
<div style="width:1px; height: 1px; border-top-right-radius:10px; border-top-left-radius:10px; border: 2px solid @chart.ChartColor; background-color:@chart.ChartColor">
|
<div
|
||||||
|
style="width:1px; height: 1px; border-top-right-radius:10px; border-top-left-radius:10px; border: 2px solid @chart.ChartColor; background-color:@chart.ChartColor">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@@ -57,7 +59,7 @@
|
|||||||
private List<ChartModel> charts = new();
|
private List<ChartModel> charts = new();
|
||||||
|
|
||||||
|
|
||||||
float highestAlloyPoint = 0;
|
float highestAlloyPoint;
|
||||||
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
|
|||||||
@@ -44,12 +44,12 @@
|
|||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.differences {
|
.differences {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.differenceTitle {
|
.differenceTitle {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
@@ -62,13 +62,13 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private int StartingAdvantageAtTime = 0;
|
private int StartingAdvantageAtTime;
|
||||||
|
|
||||||
private int PeakAdvantageByAlloy = 0;
|
private int PeakAdvantageByAlloy;
|
||||||
private int PeakAdvantageAtTime = 0;
|
private int PeakAdvantageAtTime;
|
||||||
|
|
||||||
private int WorseningTime = 0;
|
private int WorseningTime;
|
||||||
private int MiracleTime = 0;
|
private int MiracleTime;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,8 +39,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public int ForPlayer { get; set; }
|
||||||
public int ForPlayer { get; set; }
|
|
||||||
|
|
||||||
private int TownHallCount => economyComparisonService.GetTownHallCount(ForPlayer);
|
private int TownHallCount => economyComparisonService.GetTownHallCount(ForPlayer);
|
||||||
private string ChartColor => economyComparisonService.GetColor(ForPlayer);
|
private string ChartColor => economyComparisonService.GetColor(ForPlayer);
|
||||||
|
|||||||
@@ -36,7 +36,11 @@
|
|||||||
<FormNumberComponent Min="1"
|
<FormNumberComponent Min="1"
|
||||||
Id="numberOfWorkersLostToHarass"
|
Id="numberOfWorkersLostToHarass"
|
||||||
Value="@((int)NumberOfWorkersLostToHarass)"
|
Value="@((int)NumberOfWorkersLostToHarass)"
|
||||||
OnChange="@(e => { NumberOfWorkersLostToHarass = int.Parse(e.Value!.ToString()!); Calculate();})">
|
OnChange="@(e =>
|
||||||
|
{
|
||||||
|
NumberOfWorkersLostToHarass = int.Parse(e.Value!.ToString()!);
|
||||||
|
Calculate();
|
||||||
|
})">
|
||||||
<FormLabelComponent>Number of workers lost to harass</FormLabelComponent>
|
<FormLabelComponent>Number of workers lost to harass</FormLabelComponent>
|
||||||
</FormNumberComponent>
|
</FormNumberComponent>
|
||||||
|
|
||||||
@@ -58,12 +62,14 @@
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var id = $"numberOfTownHallsExisting_{index}";
|
var id = $"numberOfTownHallsExisting_{index}";
|
||||||
<FormNumberComponent Min="0"
|
<FormNumberComponent Min="0"
|
||||||
Id="@id"
|
Id="@id"
|
||||||
Value="@((int)travelTime.Value)"
|
Value="@((int)travelTime.Value)"
|
||||||
OnChange="e => { OnTownHallTravelTimeChanged(e, travelTime); }">
|
OnChange="e => { OnTownHallTravelTimeChanged(e, travelTime); }">
|
||||||
<FormLabelComponent>Worker travel time from other base @(travelTime.Index + 1)</FormLabelComponent>
|
<FormLabelComponent>Worker travel time from other
|
||||||
|
base @(travelTime.Index + 1)</FormLabelComponent>
|
||||||
</FormNumberComponent>
|
</FormNumberComponent>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -110,7 +116,8 @@
|
|||||||
<b>
|
<b>
|
||||||
Number of workers lost to
|
Number of workers lost to
|
||||||
harass
|
harass
|
||||||
</b> to 6. This would determine a loss of <span id="exampleTotalAlloyLoss">@ExampleTotalAlloyLoss</span> alloy. Quite
|
</b> to 6. This would determine a loss of <span id="exampleTotalAlloyLoss">@ExampleTotalAlloyLoss</span>
|
||||||
|
alloy. Quite
|
||||||
the large number.
|
the large number.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
@@ -127,8 +134,10 @@
|
|||||||
<br/><br/>
|
<br/><br/>
|
||||||
If you were to set the <b>Number of townhalls you have</b> to 2, the calculator will consider worker
|
If you were to set the <b>Number of townhalls you have</b> to 2, the calculator will consider worker
|
||||||
transfer micro. Allowing you to cut the total cost by roughly
|
transfer micro. Allowing you to cut the total cost by roughly
|
||||||
<span id="exampleTotalAlloyLossDifference">@ExampleTotalAlloyLossDifference</span> alloy. However, that number isn't
|
<span id="exampleTotalAlloyLossDifference">@ExampleTotalAlloyLossDifference</span> alloy. However, that
|
||||||
entirely accurate, you are also going to have to bump up the <b>Worker travel time to alloy</b> to account for the time it takes the transferred workers to arrive at the decimated alloy line.
|
number isn't
|
||||||
|
entirely accurate, you are also going to have to bump up the <b>Worker travel time to alloy</b> to
|
||||||
|
account for the time it takes the transferred workers to arrive at the decimated alloy line.
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
Let's say it takes 10 seconds for workers to transfer from your second base. Let's enter that for the
|
Let's say it takes 10 seconds for workers to transfer from your second base. Let's enter that for the
|
||||||
second base travel time for the more accurate loss of
|
second base travel time for the more accurate loss of
|
||||||
@@ -136,7 +145,8 @@
|
|||||||
id="exampleTotalAlloyLossAccurate">
|
id="exampleTotalAlloyLossAccurate">
|
||||||
@ExampleTotalAlloyLossAccurate
|
@ExampleTotalAlloyLossAccurate
|
||||||
</span> alloy
|
</span> alloy
|
||||||
(saving you <span id="exampleTotalAlloyLossAccurateDifference">@ExampleTotalAlloyLossAccurateDifference</span> alloy.)
|
(saving you <span
|
||||||
|
id="exampleTotalAlloyLossAccurateDifference">@ExampleTotalAlloyLossAccurateDifference</span> alloy.)
|
||||||
<i>
|
<i>
|
||||||
Which is
|
Which is
|
||||||
much better than not transferring workers!
|
much better than not transferring workers!
|
||||||
@@ -153,15 +163,17 @@
|
|||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<div class="mathContainer">
|
<div class="mathContainer">
|
||||||
<div> =c*m+r*g*(t+l) + </div>
|
<div> =c*m+r*g*(t+l) +</div>
|
||||||
|
|
||||||
<MathLoopSumComponent>
|
<MathLoopSumComponent>
|
||||||
<LoopStart><i>x</i> =1</LoopStart>
|
<LoopStart><i>x</i> =1</LoopStart>
|
||||||
<LoopEnd>
|
<LoopEnd>
|
||||||
⌊
|
⌊
|
||||||
<MathDivisionComponent>
|
<MathDivisionComponent>
|
||||||
<Dividee>m</Dividee><Divider>a</Divider>
|
<Dividee>m</Dividee>
|
||||||
</MathDivisionComponent>⌋
|
<Divider>a</Divider>
|
||||||
|
</MathDivisionComponent>
|
||||||
|
⌋
|
||||||
</LoopEnd>
|
</LoopEnd>
|
||||||
<IndexSymbol>
|
<IndexSymbol>
|
||||||
<i>x</i>
|
<i>x</i>
|
||||||
@@ -172,7 +184,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
<div style="font-family:monospace;">
|
<div style="font-family:monospace;">
|
||||||
<div>c is CostOfWorker </div>
|
<div>c is CostOfWorker</div>
|
||||||
<div>m is NumberOfWorkersLostToHarass, <i>m for [M]otes</i></div>
|
<div>m is NumberOfWorkersLostToHarass, <i>m for [M]otes</i></div>
|
||||||
<div>a is NumberOfTownHallsExisting, <i>a for [A]cropolis</i></div>
|
<div>a is NumberOfTownHallsExisting, <i>a for [A]cropolis</i></div>
|
||||||
<div>r is m mod a is LeftOverWorkersToProduceCount()</div>
|
<div>r is m mod a is LeftOverWorkersToProduceCount()</div>
|
||||||
@@ -192,7 +204,8 @@
|
|||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
<br/>
|
<br/>
|
||||||
<LinkButtonComponent Href="https://git.jonathanmccaffrey.ca/JonathanMcCaffrey/IGP-Fan-Reference/src/branch/main/IGP/Pages/HarassCalculatorPage.razor#L226">
|
<LinkButtonComponent
|
||||||
|
Href="https://git.jonathanmccaffrey.ca/JonathanMcCaffrey/IGP-Fan-Reference/src/branch/main/IGP/Pages/HarassCalculatorPage.razor#L226">
|
||||||
View Here
|
View Here
|
||||||
</LinkButtonComponent>
|
</LinkButtonComponent>
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
@@ -222,6 +235,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
// Example calcs
|
// Example calcs
|
||||||
float ExampleTotalAlloyLoss => Calculate(
|
float ExampleTotalAlloyLoss => Calculate(
|
||||||
WorkerReplacementCost(6),
|
WorkerReplacementCost(6),
|
||||||
|
|||||||
@@ -25,12 +25,12 @@
|
|||||||
<ContentHighlightComponent Title="Build Calculator"
|
<ContentHighlightComponent Title="Build Calculator"
|
||||||
Description="Make a build!"
|
Description="Make a build!"
|
||||||
Href="/build-calculator"
|
Href="/build-calculator"
|
||||||
ImageHref="image/hero/Build.png" />
|
ImageHref="image/hero/Build.png"/>
|
||||||
|
|
||||||
<ContentHighlightComponent Title="Database"
|
<ContentHighlightComponent Title="Database"
|
||||||
Description="Review the units!"
|
Description="Review the units!"
|
||||||
Href="/database"
|
Href="/database"
|
||||||
ImageHref="image/hero/Database.png" />
|
ImageHref="image/hero/Database.png"/>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,13 +27,13 @@
|
|||||||
margin-right: 12px;
|
margin-right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.contentHighlight:hover {
|
.contentHighlight:hover {
|
||||||
background-color: var(--paper-hover);
|
background-color: var(--paper-hover);
|
||||||
border-color: var(--paper-border-hover);
|
border-color: var(--paper-border-hover);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
box-shadow: 0 4px 6px rgba(0,0,0,0.6);
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.6);
|
||||||
transform: translateY(-2px) scale(1.01);
|
transform: translateY(-2px) scale(1.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.contentHighlightTitle {
|
.contentHighlightTitle {
|
||||||
@@ -43,8 +43,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.contentHighlightImage {
|
.contentHighlightImage {
|
||||||
border: 1px solid rgba(0,0,0,0.5);
|
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||||
box-shadow: 2px 2px 2px rgba(0,0,0,0.5);
|
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
|
||||||
width: calc(100% - 32px);
|
width: calc(100% - 32px);
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
@@ -62,17 +62,13 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Href { get; set; } = default!;
|
||||||
public string Href { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Title { get; set; } = default!;
|
||||||
public string Title { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string Description { get; set; } = default!;
|
||||||
public string Description { get; set; } = default!;
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string ImageHref { get; set; } = default!;
|
||||||
public string ImageHref { get; set; } = default!;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,10 +19,16 @@
|
|||||||
What is this tool?
|
What is this tool?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
A tool to test your memory of unit stats. Look at the first unit given, and fill in the remaining stats based on how they should compare.
|
A tool to test your memory of unit stats. Look at the first unit given, and fill in the remaining stats
|
||||||
|
based on how they should compare.
|
||||||
|
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
For example, if the first unit you see is the Masked Hunter of range 400, do you remember the range of the Scepter? Are they the same? Does the Scepter have double the range of the Masked Hunter? Less range than it? Well, enter your guess and submit! <SpoilerTextComponent>The range is 200 longer, so if you remember that, you know you are going to need more than Masked Hunters to deal with hard to reach enemy Scepters.</SpoilerTextComponent>
|
For example, if the first unit you see is the Masked Hunter of range 400, do you remember the range of
|
||||||
|
the Scepter? Are they the same? Does the Scepter have double the range of the Masked Hunter? Less range
|
||||||
|
than it? Well, enter your guess and submit!
|
||||||
|
<SpoilerTextComponent>The range is 200 longer, so if you remember that, you know you are going to need
|
||||||
|
more than Masked Hunters to deal with hard to reach enemy Scepters.
|
||||||
|
</SpoilerTextComponent>
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
</InfoBodyComponent>
|
</InfoBodyComponent>
|
||||||
|
|
||||||
@@ -31,7 +37,8 @@
|
|||||||
Why is this tool here?
|
Why is this tool here?
|
||||||
</InfoQuestionComponent>
|
</InfoQuestionComponent>
|
||||||
<InfoAnswerComponent>
|
<InfoAnswerComponent>
|
||||||
It was just a tool to quickly develop for fun when I didn't want to cover something larger on the 02/27/2022 live coding stream.
|
It was just a tool to quickly develop for fun when I didn't want to cover something larger on the
|
||||||
|
02/27/2022 live coding stream.
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
It may get expanded upon later.
|
It may get expanded upon later.
|
||||||
</InfoAnswerComponent>
|
</InfoAnswerComponent>
|
||||||
|
|||||||
@@ -28,20 +28,20 @@
|
|||||||
.unitMemoryContainer {
|
.unitMemoryContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
.unitMemoryContainer.correct {
|
.unitMemoryContainer.correct {
|
||||||
border-color: green;
|
border-color: green;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.unitMemoryContainer.wrong {
|
.unitMemoryContainer.wrong {
|
||||||
border-color: red;
|
border-color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wrongAnswer {
|
.wrongAnswer {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
color: #ff2525;
|
color: #ff2525;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
background-color: rgba(0,0,0,0.4);
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
@@ -49,14 +49,13 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public MemoryEntityModel EntityMemory { get; set; } = default!;
|
||||||
public MemoryEntityModel EntityMemory { get; set; } = default!;
|
|
||||||
|
|
||||||
private List<MemoryQuestionModel> questions { get; set; } = default!;
|
private List<MemoryQuestionModel> questions { get; set; } = default!;
|
||||||
|
|
||||||
private bool hasBeenSubmitted = false;
|
private bool hasBeenSubmitted;
|
||||||
private bool isCorrect = false;
|
private bool isCorrect;
|
||||||
private bool isWrong = false;
|
private bool isWrong;
|
||||||
|
|
||||||
public int Guess { get; set; }
|
public int Guess { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
@@media only screen and (max-width: 1025px) {
|
@@media only screen and (max-width: 1025px) {
|
||||||
.noteContentContainer {
|
.noteContentContainer {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.noteContentName {
|
.noteContentName {
|
||||||
@@ -99,7 +99,7 @@ else
|
|||||||
background-color: var(--paper-hover);
|
background-color: var(--paper-hover);
|
||||||
border-color: var(--paper-border-hover);
|
border-color: var(--paper-border-hover);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
box-shadow: 0 4px 6px rgba(0,0,0,0.6);
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.6);
|
||||||
transform: translateY(-2px) scale(1.01);
|
transform: translateY(-2px) scale(1.01);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,20 +107,15 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href1 { get; set; }
|
||||||
public string? Href1 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href2 { get; set; }
|
||||||
public string? Href2 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href3 { get; set; }
|
||||||
public string? Href3 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href4 { get; set; }
|
||||||
public string? Href4 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href5 { get; set; }
|
||||||
public string? Href5 { get; set; }
|
|
||||||
|
|
||||||
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? "";
|
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? "";
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ else
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
<NoteComponent NoteContentModel="note"/>
|
<NoteComponent NoteContentModel="note"/>
|
||||||
}
|
}
|
||||||
</PaperComponent>
|
</PaperComponent>
|
||||||
@@ -43,7 +44,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 2em;
|
font-size: 2em;
|
||||||
margin-top: 0.67em;
|
margin-top: 0.67em;
|
||||||
margin-bottom: 0.67em;
|
margin-bottom: 0.67em;
|
||||||
@@ -63,7 +64,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
display: list-item;
|
display: list-item;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@@ -92,20 +93,15 @@ else
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href1 { get; set; }
|
||||||
public string? Href1 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href2 { get; set; }
|
||||||
public string? Href2 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href3 { get; set; }
|
||||||
public string? Href3 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href4 { get; set; }
|
||||||
public string? Href4 { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public string? Href5 { get; set; }
|
||||||
public string? Href5 { get; set; }
|
|
||||||
|
|
||||||
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? "";
|
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? "";
|
||||||
|
|
||||||
|
|||||||
@@ -24,35 +24,34 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.noteTitle {
|
.noteTitle {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.noteHeader {
|
.noteHeader {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.noteDates {
|
.noteDates {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.noteFooter {
|
.noteFooter {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter]
|
[Parameter] public NoteContentModel NoteContentModel { get; set; } = default!;
|
||||||
public NoteContentModel NoteContentModel { get; set; } = default!;
|
|
||||||
|
|
||||||
NoteFrontMatterModel noteFrontMatter = null!;
|
NoteFrontMatterModel noteFrontMatter = null!;
|
||||||
private string? content = null;
|
private string? content;
|
||||||
|
|
||||||
private string Filepath => $"content/notes/{NoteContentModel.Content}.md";
|
private string Filepath => $"content/notes/{NoteContentModel.Content}.md";
|
||||||
private string GitUrl => $"{Project.GitResourcesUrl}/{Filepath}";
|
private string GitUrl => $"{Project.GitResourcesUrl}/{Filepath}";
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user