feat(Database) Direct database/Throne links now work in the database. Added a Detailed/Plain view button
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
<div class="groupButtonContainerContainer">
|
||||
<div class="groupButtonContainer">
|
||||
@foreach (var choice in Choices) {
|
||||
var styleClass = "";
|
||||
if (choice.Equals(Choice)) {
|
||||
styleClass = "selected";
|
||||
}
|
||||
<button @onclick="@(e => OnChangeChoice(choice))" class="groupChoiceButton @styleClass">@choice</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
|
||||
.groupButtonContainerContainer {
|
||||
margin: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
justify-items: flex-start;
|
||||
}
|
||||
.groupButtonContainer {
|
||||
display: flex;
|
||||
background-color: var(--background);
|
||||
gap: 2px;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.groupChoiceButton {
|
||||
background-color: var(--primary);
|
||||
color: white;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--primary);
|
||||
}
|
||||
|
||||
.groupChoiceButton: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);
|
||||
}
|
||||
|
||||
|
||||
.groupButtonContainer .groupChoiceButton:first-child {
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
}
|
||||
|
||||
|
||||
.groupButtonContainer .groupChoiceButton:last-child {
|
||||
border-top-right-radius: 8px;
|
||||
border-bottom-right-radius: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Choice { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public List<string> Choices { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> OnClick { get; set; }
|
||||
|
||||
|
||||
protected override void OnInitialized() { }
|
||||
|
||||
void OnChangeChoice(string choice)
|
||||
{
|
||||
Choice = choice;
|
||||
OnClick.InvokeAsync(choice);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -27,19 +27,17 @@
|
||||
</div>
|
||||
<div class="dialogContent">
|
||||
<CascadingValue Value="@entity">
|
||||
<CascadingValue Value="@refresh">
|
||||
<EntityVanguardAddedComponent ></EntityVanguardAddedComponent>
|
||||
<EntityInfoComponent ></EntityInfoComponent>
|
||||
<EntityVanguardsComponent ></EntityVanguardsComponent>
|
||||
<EntityProductionComponent ></EntityProductionComponent>
|
||||
<EntityStatsComponent ></EntityStatsComponent>
|
||||
<EntityMechanicsComponent ></EntityMechanicsComponent>
|
||||
<EntityPassivesComponent ></EntityPassivesComponent>
|
||||
<EntityPyreSpellsComponent ></EntityPyreSpellsComponent>
|
||||
<EntityUpgradesComponent ></EntityUpgradesComponent>
|
||||
<EntityWeaponsComponent ></EntityWeaponsComponent>
|
||||
<EntityAbilitiesComponent ></EntityAbilitiesComponent>
|
||||
</CascadingValue>
|
||||
<EntityVanguardAddedComponent />
|
||||
<EntityInfoComponent />
|
||||
<EntityVanguardsComponent />
|
||||
<EntityProductionComponent />
|
||||
<EntityStatsComponent />
|
||||
<EntityMechanicsComponent />
|
||||
<EntityPassivesComponent />
|
||||
<EntityPyreSpellsComponent />
|
||||
<EntityUpgradesComponent />
|
||||
<EntityWeaponsComponent />
|
||||
<EntityAbilitiesComponent />
|
||||
</CascadingValue>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
@implements IDisposable
|
||||
|
||||
@inject IEntityDisplayService entityDisplayService
|
||||
|
||||
<LayoutLargeContentComponent>
|
||||
<WebsiteTitleComponent>Database</WebsiteTitleComponent>
|
||||
|
||||
@@ -15,6 +17,10 @@
|
||||
</FormDisplayComponent>
|
||||
</PaperComponent>
|
||||
|
||||
<div style="margin-left: 8px">
|
||||
<ButtonGroupComponent OnClick="((choice => { entityDisplayService.SetDisplayType(choice); }))" Choice="@entityDisplayService.GetDisplayType()" Choices="@entityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
||||
</div>
|
||||
|
||||
<PaperComponent>
|
||||
<EntityFilterComponent></EntityFilterComponent>
|
||||
|
||||
@@ -22,8 +28,10 @@
|
||||
<div class="databaseItems">
|
||||
@foreach (var entity in searches) {
|
||||
<CascadingValue Value="entity">
|
||||
<CascadingValue Value="@entityDisplayService.GetDisplayType()">
|
||||
<EntityViewComponent></EntityViewComponent>
|
||||
</CascadingValue>
|
||||
</CascadingValue>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
@@ -91,6 +99,13 @@
|
||||
border-bottom: 4px solid var(--accent);
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.databaseInfoContainer {
|
||||
display: flex;
|
||||
gap: 24px;
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@@ -118,10 +133,12 @@
|
||||
RefreshFactionSearch();
|
||||
|
||||
EntityFilterService.Subscribe(OnChange);
|
||||
entityDisplayService.Subscribe(StateHasChanged);
|
||||
}
|
||||
|
||||
void IDisposable.Dispose() {
|
||||
EntityFilterService.Subscribe(OnChange);
|
||||
EntityFilterService.Unsubscribe(OnChange);
|
||||
entityDisplayService.Unsubscribe(StateHasChanged);
|
||||
}
|
||||
|
||||
void OnChange(EntityFilterEvent filterEntityEvent) {
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
@layout PageLayout
|
||||
|
||||
@page "/database/{text}"
|
||||
|
||||
@inject IEntityDisplayService entityDisplayService
|
||||
|
||||
@implements IDisposable
|
||||
|
||||
<LayoutLargeContentComponent>
|
||||
|
||||
<PaperComponent>
|
||||
<FormDisplayComponent Label="Patch">
|
||||
<Display>
|
||||
Game Patch: @EntityModel.GameVersion
|
||||
</Display>
|
||||
</FormDisplayComponent>
|
||||
</PaperComponent>
|
||||
|
||||
<div style="margin-left: 8px">
|
||||
<ButtonGroupComponent OnClick="((choice => { entityDisplayService.SetDisplayType(choice); }))" Choice="@entityDisplayService.GetDisplayType()" Choices="@entityDisplayService.DefaultChoices()"></ButtonGroupComponent>
|
||||
</div>
|
||||
|
||||
|
||||
@if (entity == null)
|
||||
{
|
||||
<div>Invalid entity name entered: @Text</div>
|
||||
<div>No such entity. Did you mean <b>"Throne"</b>?</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<PaperComponent>
|
||||
<CascadingValue Value="entity">
|
||||
<CascadingValue Value="@entityDisplayService.GetDisplayType()">
|
||||
|
||||
<EntityViewComponent></EntityViewComponent>
|
||||
</CascadingValue>
|
||||
</CascadingValue>
|
||||
|
||||
</PaperComponent>
|
||||
}
|
||||
|
||||
</LayoutLargeContentComponent>
|
||||
|
||||
|
||||
<style>
|
||||
.databaseInfoContainer {
|
||||
display: flex;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string? Text { get; set; }
|
||||
|
||||
private EntityModel? entity = null;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
|
||||
entityDisplayService.Subscribe(StateHasChanged);
|
||||
|
||||
foreach (var e in DATA.Get().Values)
|
||||
{
|
||||
if (e.Info().Name.Equals(Text))
|
||||
{
|
||||
entity = e;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IDisposable.Dispose() {
|
||||
entityDisplayService.Unsubscribe(StateHasChanged);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,8 +3,6 @@
|
||||
|
||||
<div class="enititiesContainer @isVanguard">
|
||||
<EntityHeaderComponent></EntityHeaderComponent>
|
||||
|
||||
<CascadingValue Value="@Entity">
|
||||
<div class="entityPartsContainer">
|
||||
<EntityVanguardAddedComponent></EntityVanguardAddedComponent>
|
||||
<EntityInfoComponent></EntityInfoComponent>
|
||||
@@ -18,7 +16,6 @@
|
||||
<EntityWeaponsComponent></EntityWeaponsComponent>
|
||||
<EntityAbilitiesComponent></EntityAbilitiesComponent>
|
||||
</div>
|
||||
</CascadingValue>
|
||||
</div>
|
||||
}
|
||||
|
||||
@@ -52,4 +49,7 @@
|
||||
@code {
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
public string? StyleType { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,52 @@
|
||||
@if (Entity.IdAbilities().Count > 0) {
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@foreach (var idAbility in Entity.IdAbilities()) {
|
||||
var spell = EntityModel.Get(idAbility.Id);
|
||||
|
||||
var info = spell.Info();
|
||||
var production = spell.Production();
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<b>Ability Name:</b> @spell.Info().Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Description:</b> @((MarkupString)info.Description)
|
||||
</div>
|
||||
|
||||
@if (!info.Notes.Trim().Equals("")) {
|
||||
<div>
|
||||
<b>- Notes:</b> @((MarkupString)info.Notes)
|
||||
</div>
|
||||
}
|
||||
|
||||
<div>
|
||||
@if (production != null) {
|
||||
if (production.Energy != 0) {
|
||||
<div>
|
||||
<b>- Energy: </b> @production.Energy
|
||||
</div>
|
||||
}
|
||||
if (production.BuildTime != 0) {
|
||||
<div>
|
||||
<b>- BuildTime: </b> @production.BuildTime
|
||||
</div>
|
||||
}
|
||||
if (production.Cooldown != 0) {
|
||||
<div>
|
||||
<b>- Cooldown: </b> @production.Cooldown
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<EntityDisplayComponent Title="Abilities">
|
||||
@foreach (var idAbility in Entity.IdAbilities()) {
|
||||
var spell = EntityModel.Get(idAbility.Id);
|
||||
@@ -42,6 +90,8 @@
|
||||
</div>
|
||||
}
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -50,5 +100,8 @@
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
|
||||
}
|
||||
@@ -1,18 +1,30 @@
|
||||
<div class="entityHeader">
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
<div><b>@Entity?.Info().Name</b>
|
||||
@if (Entity?.Info().Descriptive != DescriptiveType.None)
|
||||
{
|
||||
<span>, @Entity?.Info().Descriptive.Replace("_", " ")</span>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="entityHeader">
|
||||
<div class="entityHeaderText">
|
||||
@Entity.Info().Name
|
||||
@Entity?.Info().Name
|
||||
</div>
|
||||
<div style="font-size:1.4rem;">
|
||||
<b>@Entity.EntityType.Replace("_", " ")</b>
|
||||
@if (Entity.Info().Descriptive != DescriptiveType.None) {
|
||||
<b>@Entity?.EntityType.Replace("_", " ")</b>
|
||||
@if (Entity?.Info().Descriptive != DescriptiveType.None)
|
||||
{
|
||||
<span>
|
||||
<b>:</b> @Entity.Info().Descriptive.Replace("_", " ")
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
<style>
|
||||
.entityHeader {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -36,11 +48,15 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
}
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
<EntityDisplayComponent Title="Info">
|
||||
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@if (Entity.Info().Description != "") {
|
||||
<div>
|
||||
<b>Description:</b> @((MarkupString)Entity.Info().Description)
|
||||
@@ -40,9 +42,54 @@
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
else
|
||||
{
|
||||
<EntityDisplayComponent Title="Info">
|
||||
@if (Entity.Info().Description != "") {
|
||||
<div>
|
||||
<b>Description:</b> @((MarkupString)Entity.Info().Description)
|
||||
</div>
|
||||
}
|
||||
|
||||
<style>
|
||||
@if (Entity.Info().Notes != "") {
|
||||
<div>
|
||||
<b>Notes:</b> @((MarkupString)Entity.Info().Notes)
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
<div class="infoDisplayContainer">
|
||||
<div>
|
||||
@if (Entity.Faction() != null) {
|
||||
<div>
|
||||
<b>Faction:</b> @Entity.Faction().Faction
|
||||
</div>
|
||||
}
|
||||
@if (Entity.Tier() != null) {
|
||||
<div>
|
||||
<b>Tier:</b> @Entity.Tier().Tier
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@if (Entity.Hotkey() != null) {
|
||||
<div>
|
||||
<div>
|
||||
<b>Hotkey Group:</b> @Entity.Hotkey().HotkeyGroup
|
||||
</div>
|
||||
<div>
|
||||
<b>Hotkey:</b> @Entity.Hotkey().Hotkey
|
||||
</div>
|
||||
<div>
|
||||
<b>Hold Space:</b> @(Entity.Hotkey().HoldSpace ? "Yes" : "No")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
|
||||
<style>
|
||||
.infoDisplayContainer {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
@@ -55,10 +102,16 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -24,4 +24,7 @@
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,4 +1,49 @@
|
||||
@if (Entity.IdPassives().Count > 0) {
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@foreach (var idPassive in Entity.IdPassives()) {
|
||||
var passive = EntityModel.Get(idPassive.Id);
|
||||
|
||||
var info = passive.Info();
|
||||
|
||||
var production = passive.Production();
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<b>Name:</b> @info.Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Description:</b> @((MarkupString)info.Description)
|
||||
</div>
|
||||
|
||||
@if (!info.Notes.Trim().Equals("")) {
|
||||
|
||||
<div>
|
||||
<b>- Description:</b> @((MarkupString)info.Notes)
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@if (production != null) {
|
||||
<div>
|
||||
@if (production.Pyre != 0) {
|
||||
<div>
|
||||
<b>- Pyre:</b> @production.Pyre
|
||||
</div>
|
||||
}
|
||||
@if (production.Cooldown != 0) {
|
||||
<div>
|
||||
<b>- Cooldown:</b> @production.Cooldown.ToString()s
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<EntityDisplayComponent Title="Passives">
|
||||
@foreach (var idPassive in Entity.IdPassives()) {
|
||||
var passive = EntityModel.Get(idPassive.Id);
|
||||
@@ -11,13 +56,13 @@
|
||||
<div>
|
||||
<b>Name:</b> <EntityLabelComponent EntityId="@passive.DataType"/>
|
||||
</div>
|
||||
<div style="max-width: 600px;">
|
||||
<div>
|
||||
<b>Description:</b> @((MarkupString)info.Description)
|
||||
</div>
|
||||
|
||||
@if (!info.Notes.Trim().Equals("")) {
|
||||
|
||||
<div style="max-width: 600px;">
|
||||
<div>
|
||||
<b>Description:</b> @((MarkupString)info.Notes)
|
||||
</div>
|
||||
}
|
||||
@@ -39,6 +84,8 @@
|
||||
}
|
||||
}
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -47,4 +94,8 @@
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,4 +1,82 @@
|
||||
@if (@Production != null || Supply != null || Requirements.Count > 0) {
|
||||
@if (Production != null || Supply != null || Requirements.Count > 0) {
|
||||
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@if (Requirements.Count() > 0) {
|
||||
<div>
|
||||
@foreach (var requirement in Requirements)
|
||||
{
|
||||
var replaced = DATA.Get()[requirement.DataType];
|
||||
<div>
|
||||
|
||||
<span>
|
||||
<b>@requirement.Requirement.Replace("_", " "):</b> @replaced.Info().Name
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (Production != null && (!Production.Alloy.Equals(0)
|
||||
|| !Production.Ether.Equals(0)
|
||||
|| !Production.BuildTime.Equals(0)
|
||||
|| !Production.Cooldown.Equals(0))) {
|
||||
<div>
|
||||
@if (!Production.Alloy.Equals(0)) {
|
||||
<div>
|
||||
<b>Alloy:</b> @Production.Alloy
|
||||
</div>
|
||||
}
|
||||
@if (!Production.Ether.Equals(0)) {
|
||||
<div>
|
||||
<b>Ether:</b> @Production.Ether
|
||||
</div>
|
||||
}
|
||||
@if (!Production.Pyre.Equals(0)) {
|
||||
<div>
|
||||
<b>Pyre:</b> @Production.Pyre
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (!Production.BuildTime.Equals(0)) {
|
||||
<div>
|
||||
<b>Build Time:</b> @Production.BuildTime.ToString()s
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (!Production.Energy.Equals(0)) {
|
||||
<div>
|
||||
<b>Energy:</b> @Production.Energy
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (!Production.Cooldown.Equals(0)) {
|
||||
<div>
|
||||
<b>Cooldown:</b> @Production.Cooldown.ToString()s
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
@if (Supply != null) {
|
||||
<div>
|
||||
@if (!Supply.Grants.Equals(0)) {
|
||||
<div>
|
||||
<b>Grants:</b> @Supply.Grants
|
||||
</div>
|
||||
}
|
||||
@if (!Supply.Takes.Equals(0)) {
|
||||
<div>
|
||||
<b>Takes:</b> @Supply.Takes Supply
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
|
||||
<EntityDisplayComponent Title="Production">
|
||||
<div class="ProductionContainer">
|
||||
@if (Requirements.Count() > 0) {
|
||||
@@ -71,9 +149,9 @@
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
<style>
|
||||
|
||||
<style>
|
||||
.ProductionContainer {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
@@ -87,12 +165,19 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
|
||||
private EntityProductionModel Production => Entity.Production();
|
||||
private List<EntityRequirementModel> Requirements => Entity.Requirements();
|
||||
private EntitySupplyModel Supply => Entity.Supply();
|
||||
|
||||
@@ -1,4 +1,42 @@
|
||||
@if (Entity.IdPyreSpells().Count > 0) {
|
||||
@if (Entity.IdPyreSpells().Count > 0)
|
||||
{
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@foreach (var pyreSpell in Entity.IdPyreSpells()) {
|
||||
var spell = EntityModel.Get(pyreSpell.Id);
|
||||
|
||||
var info = spell.Info();
|
||||
var production = spell.Production();
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<b>Spell Name:</b> @spell.Info().Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Description:</b> @((MarkupString)info.Description)
|
||||
</div>
|
||||
<div>
|
||||
@if (production != null) {
|
||||
if (production.Pyre != 0) {
|
||||
<b>- Pyre: </b>
|
||||
@production.Pyre
|
||||
}
|
||||
if (production.BuildTime != 0) {
|
||||
<b>- BuildTime: </b>
|
||||
@production.BuildTime
|
||||
}
|
||||
if (production.Cooldown != 0) {
|
||||
<b>- Cooldown: </b>
|
||||
@production.Cooldown
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<EntityDisplayComponent Title="Pyre Spells">
|
||||
@foreach (var pyreSpell in Entity.IdPyreSpells()) {
|
||||
var spell = EntityModel.Get(pyreSpell.Id);
|
||||
@@ -32,6 +70,8 @@
|
||||
</div>
|
||||
}
|
||||
</EntityDisplayComponent>
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,4 +80,8 @@
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,5 +1,66 @@
|
||||
|
||||
@if (Vitality != null || Movement != null) {
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@if (Vitality != null) {
|
||||
<div>
|
||||
@if (!Vitality.DefenseLayer.Equals(0)) {
|
||||
<div>
|
||||
<b>Shield:</b> @Vitality.DefenseLayer
|
||||
</div>
|
||||
}
|
||||
@if (!Vitality.Health.Equals(0)) {
|
||||
<div>
|
||||
<b>Health:</b> @Vitality.Health
|
||||
</div>
|
||||
}
|
||||
@if (!Vitality.Energy.Equals(0)) {
|
||||
<div>
|
||||
<b>Energy:</b> @Vitality.Energy
|
||||
</div>
|
||||
}
|
||||
@if (Vitality.Armor != "") {
|
||||
<div>
|
||||
<b>Armor:</b> @Vitality.Armor
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (Vitality.IsEtheric) {
|
||||
<div>
|
||||
<b> + Etheric</b>
|
||||
</div>
|
||||
}
|
||||
@if (Vitality.IsStructure) {
|
||||
<div>
|
||||
<b> + Structure</b>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (Movement != null) {
|
||||
<div>
|
||||
@if (!Movement.Speed.Equals(0)) {
|
||||
<div>
|
||||
<b>Speed:</b> @Movement.Speed
|
||||
</div>
|
||||
}
|
||||
else {
|
||||
<div>
|
||||
<b>Speed:</b> Immobile
|
||||
</div>
|
||||
}
|
||||
<div>
|
||||
<b>Move Type:</b> @Movement.Movement
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
<EntityDisplayComponent Title="Stats">
|
||||
<div class="statContainer">
|
||||
@if (Vitality != null) {
|
||||
@@ -58,9 +119,7 @@
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
<style>
|
||||
<style>
|
||||
.statContainer {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
@@ -74,10 +133,20 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@code {
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
|
||||
private EntityVitalityModel Vitality => Entity.Vitality();
|
||||
private EntityMovementModel Movement => Entity.Movement();
|
||||
}
|
||||
@@ -1,4 +1,21 @@
|
||||
@if (Entity.IdUpgrades().Count > 0) {
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@foreach (var upgradeId in Entity.IdUpgrades()) {
|
||||
var entity = EntityModel.Get(upgradeId.Id);
|
||||
<div>
|
||||
<div>
|
||||
<b>Upgrade Name:</b> @entity.Info().Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Description:</b> @entity.Info().Description
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<EntityDisplayComponent Title="Upgrades">
|
||||
<div class="upgradesContainer">
|
||||
@foreach (var upgradeId in Entity.IdUpgrades()) {
|
||||
@@ -14,9 +31,9 @@
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
<style>
|
||||
|
||||
<style>
|
||||
.upgradesContainer {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
@@ -29,10 +46,18 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,31 +1,46 @@
|
||||
@{
|
||||
var vanguard = Entity.VanguardAdded();
|
||||
|
||||
var isNull = Entity.VanguardAdded() == null ? "null" : "not null";
|
||||
}
|
||||
|
||||
@if (vanguard != null) {
|
||||
var immortalId = Entity.VanguardAdded().ImmortalId;
|
||||
@if (Vanguard != null) {
|
||||
var immortalId = Vanguard.ImmortalId;
|
||||
var immortal = DATA.Get()[immortalId];
|
||||
|
||||
var replaced = DATA.Get()[Vanguard.ReplaceId];
|
||||
|
||||
<EntityDisplayComponent Title="Vanguard">
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
<div>
|
||||
<b>Immortal:</b> @immortal.Info().Name
|
||||
</div>
|
||||
@if (!Vanguard.ReplaceId.Equals("")) {
|
||||
<div>
|
||||
<b>Replaces:</b> @replaced.Info().Name
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<EntityDisplayComponent Title="Vanguard">
|
||||
<div>
|
||||
<div>
|
||||
<b>Immortal:</b> <EntityLabelComponent EntityId="@immortal.DataType"/>
|
||||
</div>
|
||||
@if (!Entity.VanguardAdded().ReplaceId.Equals("")) {
|
||||
@if (!Vanguard.ReplaceId.Equals("")) {
|
||||
<div>
|
||||
<b>Replaces:</b> <EntityLabelComponent EntityId="@Entity.VanguardAdded().ReplaceId"></EntityLabelComponent>
|
||||
<b>Replaces:</b> <EntityLabelComponent EntityId="@Vanguard.ReplaceId"></EntityLabelComponent>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
}
|
||||
|
||||
@code {
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
private EntityVanguardAddedModel? Vanguard => Entity?.VanguardAdded();
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -1,4 +1,34 @@
|
||||
@if (Entity.IdVanguards().Count > 0) {
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
@foreach (var data in Entity.IdVanguards()) {
|
||||
var entity = EntityModel.Get(data.Id);
|
||||
|
||||
var requirements = entity.Requirements();
|
||||
var vanguardAdded = entity.VanguardAdded();
|
||||
var replaced = DATA.Get()[vanguardAdded.ReplaceId];
|
||||
var immortal = DATA.Get()[vanguardAdded.ImmortalId];
|
||||
|
||||
|
||||
var productionBuilding = (from building in requirements
|
||||
where building.Requirement == RequirementType.Production_Building
|
||||
select building).First().DataType;
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<b>Name:</b> @entity.Info().Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Replaces:</b> @replaced.Info().Name
|
||||
</div>
|
||||
<div>
|
||||
<b>- Built From:</b> @immortal.Info().Name
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<EntityDisplayComponent Title="Vanguards">
|
||||
@foreach (var data in Entity.IdVanguards()) {
|
||||
var entity = EntityModel.Get(data.Id);
|
||||
@@ -22,6 +52,9 @@
|
||||
</div>
|
||||
}
|
||||
</EntityDisplayComponent>
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@code {
|
||||
@@ -29,4 +62,8 @@
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,34 +1,146 @@
|
||||
@if (Entity.Weapons().Count > 0) {
|
||||
@if (Entity.Weapons().Count > 0)
|
||||
{
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
foreach (var data in Entity.Weapons())
|
||||
{
|
||||
index++;
|
||||
|
||||
<div>
|
||||
<div>
|
||||
<div class="damageContainer">
|
||||
<div>
|
||||
<b>Weapon @index</b>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<b>- Damage:</b> @data.Damage
|
||||
</div>
|
||||
@if (data.LightDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>- vs Light: @data.LightDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.MediumDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>- vs Medium: @data.MediumDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.HeavyDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>- vs Heavy: @data.HeavyDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.EthericDamageBonus != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>- vs Etheric +@data.EthericDamageBonus</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.StructureDamageBonus != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>- vs Structure: +@data.StructureDamageBonus</i>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<b>- Range:</b> @data.Range
|
||||
</div>
|
||||
@if (data.SecondsBetweenAttacks > 0)
|
||||
{
|
||||
<div>
|
||||
<b>- AttacksPerSecond:</b> @(1 / data.SecondsBetweenAttacks)
|
||||
</div>
|
||||
<div>
|
||||
- (or <b>SecondsBetweenAttacks:</b> @data.SecondsBetweenAttacks)
|
||||
</div>
|
||||
}
|
||||
else if (data.AttacksPerSecond > 0)
|
||||
{
|
||||
<div>
|
||||
<b>- AttacksPerSecond:</b> @data.AttacksPerSecond
|
||||
</div>
|
||||
<div>
|
||||
- (or <b>SecondsBetweenAttacks:</b> @(1 / data.AttacksPerSecond))
|
||||
</div>
|
||||
}
|
||||
|
||||
<div>
|
||||
<b>- Targets:</b> @data.Targets
|
||||
</div>
|
||||
@if (data.AttacksPerSecond != 0)
|
||||
{
|
||||
<span>
|
||||
<b>- DPS:</b> @(Math.Round(data.Damage * data.AttacksPerSecond))
|
||||
</span>
|
||||
@if (data.LightDamage != 0)
|
||||
{
|
||||
<span>
|
||||
<i>- Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
}
|
||||
@if (data.MediumDamage != 0)
|
||||
{
|
||||
<span>
|
||||
<i>- Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
}
|
||||
@if (data.HeavyDamage != 0)
|
||||
{
|
||||
<span>
|
||||
<i>- Heavy DPS: @(Math.Round(data.HeavyDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
<EntityDisplayComponent Title="Weapons">
|
||||
<div class="weaponsContainer">
|
||||
@foreach (var data in Entity.Weapons()) {
|
||||
@foreach (var data in Entity.Weapons())
|
||||
{
|
||||
<div>
|
||||
<div>
|
||||
<div class="damageContainer">
|
||||
<div>
|
||||
<b>Damage:</b> @data.Damage
|
||||
</div>
|
||||
@if (data.LightDamage != 0) {
|
||||
@if (data.LightDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>vs Light: @data.LightDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.MediumDamage != 0) {
|
||||
@if (data.MediumDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>vs Medium: @data.MediumDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.HeavyDamage != 0) {
|
||||
@if (data.HeavyDamage != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>vs Heavy: @data.HeavyDamage</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.EthericDamageBonus != 0) {
|
||||
@if (data.EthericDamageBonus != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>vs Etheric +@data.EthericDamageBonus</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.StructureDamageBonus != 0) {
|
||||
@if (data.StructureDamageBonus != 0)
|
||||
{
|
||||
<div class="alternateDamage">
|
||||
<i>vs Structure: +@data.StructureDamageBonus</i>
|
||||
</div>
|
||||
@@ -38,7 +150,8 @@
|
||||
<div>
|
||||
<b>Range:</b> @data.Range
|
||||
</div>
|
||||
@if (data.SecondsBetweenAttacks > 0) {
|
||||
@if (data.SecondsBetweenAttacks > 0)
|
||||
{
|
||||
<div>
|
||||
<b>AttacksPerSecond:</b> @(1 / data.SecondsBetweenAttacks)
|
||||
</div>
|
||||
@@ -46,7 +159,8 @@
|
||||
(or <b>SecondsBetweenAttacks:</b> @data.SecondsBetweenAttacks)
|
||||
</div>
|
||||
}
|
||||
else if (data.AttacksPerSecond > 0) {
|
||||
else if (data.AttacksPerSecond > 0)
|
||||
{
|
||||
<div>
|
||||
<b>AttacksPerSecond:</b> @data.AttacksPerSecond
|
||||
</div>
|
||||
@@ -58,33 +172,36 @@
|
||||
<div>
|
||||
<b>Targets:</b> @data.Targets
|
||||
</div>
|
||||
@if (data.AttacksPerSecond != 0) {
|
||||
<span>
|
||||
@if (data.AttacksPerSecond != 0)
|
||||
{
|
||||
<div>
|
||||
<b>DPS:</b> @(Math.Round(data.Damage * data.AttacksPerSecond))
|
||||
</span>
|
||||
@if (data.LightDamage != 0) {
|
||||
<span>
|
||||
<i>L: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
</div>
|
||||
@if (data.LightDamage != 0)
|
||||
{
|
||||
<div>
|
||||
<i>Light DPS: @(Math.Round(data.LightDamage * data.AttacksPerSecond))</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.MediumDamage != 0) {
|
||||
<span>
|
||||
<i>M: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
@if (data.MediumDamage != 0)
|
||||
{
|
||||
<div>
|
||||
<i>Medium DPS: @(Math.Round(data.MediumDamage * data.AttacksPerSecond))</i>
|
||||
</div>
|
||||
}
|
||||
@if (data.HeavyDamage != 0) {
|
||||
<span>
|
||||
<i>H: @(Math.Round(data.HeavyDamage * data.AttacksPerSecond))</i>
|
||||
</span>
|
||||
@if (data.HeavyDamage != 0)
|
||||
{
|
||||
<div>
|
||||
<i>Heavy DPS: @(Math.Round(data.HeavyDamage * data.AttacksPerSecond))</i>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</EntityDisplayComponent>
|
||||
}
|
||||
|
||||
<style>
|
||||
<style>
|
||||
.weaponsContainer {
|
||||
display: flex;
|
||||
gap: 32px;
|
||||
@@ -106,9 +223,16 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -4,7 +4,8 @@
|
||||
@using Markdig
|
||||
@implements IDisposable
|
||||
|
||||
@page "/docs"
|
||||
@page "/docs/{text?}"
|
||||
|
||||
|
||||
@if (!DocumentationService.IsLoaded())
|
||||
{
|
||||
@@ -119,6 +120,9 @@ else
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string? Text { get; set; }
|
||||
|
||||
string selectedSection = "All";
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
||||
@@ -13,6 +13,7 @@ using Services;
|
||||
using Services.Immortal;
|
||||
using Services.Website;
|
||||
using Services.Development;
|
||||
using IEntityDisplayService = Services.IEntityDisplayService;
|
||||
|
||||
var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
||||
builder.Logging.SetMinimumLevel(LogLevel.Warning);
|
||||
@@ -33,6 +34,9 @@ builder.Services.AddSingleton<ITimingService, TimingService>();
|
||||
builder.Services.AddSingleton<IMemoryTesterService, MemoryTesterService>();
|
||||
builder.Services.AddSingleton<IEntityFilterService, EntityFilterService>();
|
||||
|
||||
builder.Services.AddSingleton<IEntityDisplayService, EntityDisplayService>();
|
||||
|
||||
|
||||
builder.Services.AddSingleton(new HttpClient {
|
||||
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Model.Immortal.Entity.Data;
|
||||
using Model.Immortal.Entity.Parts;
|
||||
using Model.Immortal.Types;
|
||||
using YamlDotNet.Serialization;
|
||||
|
||||
namespace Model.Immortal.Entity;
|
||||
|
||||
@@ -28,6 +28,13 @@ public class EntityModel {
|
||||
IsSpeculative = isSpeculative;
|
||||
}
|
||||
|
||||
public string AsYaml() {
|
||||
var stringBuilder = new StringBuilder();
|
||||
var serializer = new Serializer();
|
||||
stringBuilder.AppendLine(serializer.Serialize(this));
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
public string DataType { get; set; }
|
||||
|
||||
// TODO Serilization currently being used for build orders
|
||||
@@ -71,6 +78,8 @@ public class EntityModel {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static List<EntityModel> GetList() {
|
||||
if (entityModels == null) entityModels = DATA.Get().Values.ToList();
|
||||
|
||||
|
||||
@@ -13,5 +13,6 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="YamlDotNet" Version="11.2.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -190,10 +190,23 @@ public interface IEntityFilterService {
|
||||
public void Unsubscribe(EntityFilterAction action);
|
||||
}
|
||||
|
||||
|
||||
public interface IEntityService {
|
||||
public List<EntityModel> GetEntities();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public interface IEntityDisplayService
|
||||
{
|
||||
public List<string> DefaultChoices();
|
||||
|
||||
public string GetDisplayType();
|
||||
public void SetDisplayType(string displayType);
|
||||
public void Subscribe(Action action);
|
||||
public void Unsubscribe(Action action);
|
||||
}
|
||||
|
||||
public interface IImmortalSelectionService {
|
||||
public string GetFactionType();
|
||||
public string GetImmortalType();
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using Model.Immortal.Types;
|
||||
|
||||
namespace Services.Immortal;
|
||||
|
||||
public class EntityDisplayService : IEntityDisplayService {
|
||||
private string displayType = "Detailed";
|
||||
private event Action _onChange;
|
||||
|
||||
public List<string> DefaultChoices()
|
||||
{
|
||||
return new List<string>() { "Detailed", "Plain" };
|
||||
}
|
||||
|
||||
public void Subscribe(Action action) {
|
||||
_onChange += action;
|
||||
}
|
||||
|
||||
public void Unsubscribe(Action action) {
|
||||
_onChange -= action;
|
||||
}
|
||||
|
||||
private void NotifyDataChanged() {
|
||||
_onChange?.Invoke();
|
||||
}
|
||||
|
||||
public Action OnChange() {
|
||||
return _onChange;
|
||||
}
|
||||
|
||||
public string GetDisplayType()
|
||||
{
|
||||
return displayType;
|
||||
}
|
||||
|
||||
public void SetDisplayType(string displayType)
|
||||
{
|
||||
this.displayType = displayType;
|
||||
NotifyDataChanged();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user