Add DifficultySettingArray handle and WebUI
This commit is contained in:
parent
05cdeb0dec
commit
4fedead174
@ -10,6 +10,12 @@ public class UserSetting
|
||||
|
||||
public bool IsDisplayDanOnNamePlate { get; set; }
|
||||
|
||||
public uint DifficultySettingCourse { get; set; }
|
||||
|
||||
public uint DifficultySettingStar { get; set; }
|
||||
|
||||
public uint DifficultySettingSort { get; set; }
|
||||
|
||||
public bool IsVoiceOn { get; set; }
|
||||
|
||||
public bool IsSkipOn { get; set; }
|
||||
|
@ -1,10 +1,33 @@
|
||||
using System.Text.Json;
|
||||
using GameDatabase.Entities;
|
||||
using GameDatabase.Entities;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace TaikoLocalServer.Common.Utils;
|
||||
|
||||
public static class JsonHelper
|
||||
{
|
||||
public static uint[] GetUIntArrayFromJson(string data, int length, ILogger logger, string fieldName)
|
||||
{
|
||||
var array = new uint[length];
|
||||
try
|
||||
{
|
||||
array = JsonSerializer.Deserialize<uint[]>(data);
|
||||
}
|
||||
catch (JsonException e)
|
||||
{
|
||||
logger.LogError(e, "Parsing {FieldName} json data failed", fieldName);
|
||||
}
|
||||
|
||||
if (array != null && array.Length >= length)
|
||||
{
|
||||
return array;
|
||||
}
|
||||
|
||||
logger.LogWarning($"{fieldName} is null or length less than {length}!");
|
||||
array = new uint[length];
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
public static List<uint> GetCostumeDataFromUserData(UserDatum userData, ILogger logger)
|
||||
{
|
||||
var costumeData = new List<uint> { 0, 0, 0, 0, 0 };
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System.Text.Json;
|
||||
using SharedProject.Models;
|
||||
using SharedProject.Models;
|
||||
using SharedProject.Utils;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace TaikoLocalServer.Controllers.Api;
|
||||
|
||||
@ -25,6 +25,8 @@ public class UserSettingsController : BaseController<UserSettingsController>
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var difficultySettingArray = JsonHelper.GetUIntArrayFromJson(user.DifficultySettingArray, 3, Logger, nameof(user.DifficultySettingArray));
|
||||
|
||||
var costumeData = JsonHelper.GetCostumeDataFromUserData(user, Logger);
|
||||
|
||||
var costumeUnlockData = JsonHelper.GetCostumeUnlockDataFromUserData(user, Logger);
|
||||
@ -34,6 +36,9 @@ public class UserSettingsController : BaseController<UserSettingsController>
|
||||
AchievementDisplayDifficulty = user.AchievementDisplayDifficulty,
|
||||
IsDisplayAchievement = user.DisplayAchievement,
|
||||
IsDisplayDanOnNamePlate = user.DisplayDan,
|
||||
DifficultySettingCourse = difficultySettingArray[0],
|
||||
DifficultySettingStar = difficultySettingArray[1],
|
||||
DifficultySettingSort = difficultySettingArray[2],
|
||||
IsVoiceOn = user.IsVoiceOn,
|
||||
IsSkipOn = user.IsSkipOn,
|
||||
NotesPosition = user.NotesPosition,
|
||||
@ -48,9 +53,9 @@ public class UserSettingsController : BaseController<UserSettingsController>
|
||||
Face = costumeData[3],
|
||||
Puchi = costumeData[4],
|
||||
UnlockedKigurumi = costumeUnlockData[0],
|
||||
UnlockedHead = costumeUnlockData[1],
|
||||
UnlockedBody = costumeUnlockData[2],
|
||||
UnlockedFace = costumeUnlockData[3],
|
||||
UnlockedHead = costumeUnlockData[1],
|
||||
UnlockedBody = costumeUnlockData[2],
|
||||
UnlockedFace = costumeUnlockData[3],
|
||||
UnlockedPuchi = costumeUnlockData[4],
|
||||
BodyColor = user.ColorBody,
|
||||
FaceColor = user.ColorFace,
|
||||
@ -78,10 +83,18 @@ public class UserSettingsController : BaseController<UserSettingsController>
|
||||
userSetting.Puchi,
|
||||
};
|
||||
|
||||
var difficultySettings = new List<uint>
|
||||
{
|
||||
userSetting.DifficultySettingCourse,
|
||||
userSetting.DifficultySettingStar,
|
||||
userSetting.DifficultySettingSort
|
||||
};
|
||||
|
||||
user.IsSkipOn = userSetting.IsSkipOn;
|
||||
user.IsVoiceOn = userSetting.IsVoiceOn;
|
||||
user.DisplayAchievement = userSetting.IsDisplayAchievement;
|
||||
user.DisplayDan = userSetting.IsDisplayDanOnNamePlate;
|
||||
user.DifficultySettingArray = JsonSerializer.Serialize(difficultySettings);
|
||||
user.NotesPosition = userSetting.NotesPosition;
|
||||
user.SelectedToneId = userSetting.ToneId;
|
||||
user.AchievementDisplayDifficulty = userSetting.AchievementDisplayDifficulty;
|
||||
@ -94,7 +107,6 @@ public class UserSettingsController : BaseController<UserSettingsController>
|
||||
user.ColorLimb = userSetting.LimbColor;
|
||||
user.CostumeData = JsonSerializer.Serialize(costumes);
|
||||
|
||||
|
||||
await userDatumService.UpdateUserDatum(user);
|
||||
|
||||
return NoContent();
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System.Buffers.Binary;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Buffers.Binary;
|
||||
using System.Text.Json;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TaikoLocalServer.Settings;
|
||||
using Throw;
|
||||
|
||||
@ -111,25 +111,16 @@ public class UserDataController : BaseController<UserDataController>
|
||||
var defaultOptions = new byte[2];
|
||||
BinaryPrimitives.WriteInt16LittleEndian(defaultOptions, userData.OptionSetting);
|
||||
|
||||
var difficultyPlayedArray = Array.Empty<uint>();
|
||||
try
|
||||
var difficultySettingArray = JsonHelper.GetUIntArrayFromJson(userData.DifficultySettingArray, 3, Logger, nameof(userData.DifficultySettingArray));
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
difficultyPlayedArray = JsonSerializer.Deserialize<uint[]>(userData.DifficultyPlayedArray);
|
||||
}
|
||||
catch (JsonException e)
|
||||
{
|
||||
Logger.LogError(e, "Parsing difficulty played json data failed");
|
||||
if (difficultySettingArray[i] >= 2)
|
||||
{
|
||||
difficultySettingArray[i] -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
var difficultySettingArray = Array.Empty<uint>();
|
||||
try
|
||||
{
|
||||
difficultySettingArray = JsonSerializer.Deserialize<uint[]>(userData.DifficultySettingArray);
|
||||
}
|
||||
catch (JsonException e)
|
||||
{
|
||||
Logger.LogError(e, "Parsing difficulty setting json data failed");
|
||||
}
|
||||
var difficultyPlayedArray = JsonHelper.GetUIntArrayFromJson(userData.DifficultyPlayedArray, 3, Logger, nameof(userData.DifficultyPlayedArray));
|
||||
|
||||
var response = new UserDataResponse
|
||||
{
|
||||
@ -144,24 +135,16 @@ public class UserDataController : BaseController<UserDataController>
|
||||
NotesPosition = userData.NotesPosition,
|
||||
IsVoiceOn = userData.IsVoiceOn,
|
||||
IsSkipOn = userData.IsSkipOn,
|
||||
DifficultySettingCourse = difficultySettingArray[0],
|
||||
DifficultySettingStar = difficultySettingArray[1],
|
||||
DifficultySettingSort = difficultySettingArray[2],
|
||||
DifficultyPlayedCourse = difficultyPlayedArray[0],
|
||||
DifficultyPlayedStar = difficultyPlayedArray[1],
|
||||
DifficultyPlayedSort = difficultyPlayedArray[2],
|
||||
IsChallengecompe = false,
|
||||
SongRecentCnt = (uint)recentSongs.Length
|
||||
};
|
||||
|
||||
if (difficultyPlayedArray is { Length: >= 3 })
|
||||
{
|
||||
response.DifficultyPlayedCourse = difficultyPlayedArray[0];
|
||||
response.DifficultyPlayedStar = difficultyPlayedArray[1];
|
||||
response.DifficultyPlayedSort = difficultyPlayedArray[2];
|
||||
}
|
||||
|
||||
if (difficultySettingArray is { Length: >= 3 })
|
||||
{
|
||||
response.DifficultySettingCourse = difficultySettingArray[0];
|
||||
response.DifficultySettingStar = difficultySettingArray[1];
|
||||
response.DifficultySettingSort = difficultySettingArray[2];
|
||||
}
|
||||
|
||||
return Ok(response);
|
||||
}
|
||||
}
|
@ -11,204 +11,237 @@
|
||||
@if (response is not null)
|
||||
{
|
||||
<MudGrid Class="my-4 pb-10">
|
||||
<MudItem xs="12" md="8">
|
||||
<MudPaper Elevation="0" Outlined="true">
|
||||
<MudTabs Rounded="true" Border="true" PanelClass="pa-8">
|
||||
<MudTabPanel Text="Profile">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Profile Options</h2>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudPaper Elevation="0" Outlined="true">
|
||||
<MudTabs Rounded="true" Border="true" PanelClass="pa-8">
|
||||
<MudTabPanel Text="Profile">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Profile Options</h2>
|
||||
|
||||
<MudTextField @bind-Value="@response.MyDonName" Label="Name"></MudTextField>
|
||||
<MudTextField @bind-Value="@response.MyDonName" Label="Name"></MudTextField>
|
||||
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudTextField @bind-Value="@response.Title" Label="Title"/>
|
||||
<MudButton Color="Color.Primary" Class="mt-1" Size="Size.Small" OnClick="@((e)=>OpenChooseTitleDialog())">
|
||||
Select a Title
|
||||
</MudButton>
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="4">
|
||||
<MudSelect @bind-Value="@response.TitlePlateId" Label="Title Plate">
|
||||
@for (uint i = 0; i < 8; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@TitlePlateStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
|
||||
<MudSelect @bind-Value="@response.AchievementDisplayDifficulty"
|
||||
Label="Achievement Panel Difficulty">
|
||||
@foreach (var item in Enum.GetValues<Difficulty>())
|
||||
{
|
||||
<MudSelectItem Value="@item"/>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSwitch @bind-Checked="@response.IsDisplayAchievement" Label="Display Achievement Panel" Color="Color.Primary"/>
|
||||
<MudSwitch @bind-Checked="@response.IsDisplayDanOnNamePlate" Label="Display Dan Rank on Name Plate" Color="Color.Primary"/>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Costume">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Costume Options</h2>
|
||||
<MudGrid>
|
||||
<MudItem xs="12">
|
||||
<MudStack Spacing="4" Class="mb-8">
|
||||
<MudSelect @bind-Value="@response.Head" Label="Head">
|
||||
@for (var i = 0; i < Constants.COSTUME_HEAD_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetHeadTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Body" Label="Body">
|
||||
@for (var i = 0; i < Constants.COSTUME_BODY_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetBodyTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Face" Label="Face">
|
||||
@for (var i = 0; i < Constants.COSTUME_FACE_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetFaceTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Kigurumi" Label="Kigurumi">
|
||||
@for (var i = 0; i < Constants.COSTUME_KIGURUMI_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetKigurumiTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Puchi" Label="Puchi">
|
||||
@for (var i = 0; i < Constants.COSTUME_PUCHI_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetPuchiTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudStack>
|
||||
|
||||
<MudStack Row="true">
|
||||
<MudSelect @bind-Value="@response.BodyColor" Label="Body Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudTextField @bind-Value="@response.Title" Label="Title" />
|
||||
<MudButton Color="Color.Primary" Class="mt-1" Size="Size.Small" OnClick="@((e)=>OpenChooseTitleDialog())">
|
||||
Select a Title
|
||||
</MudButton>
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="4">
|
||||
<MudSelect @bind-Value="@response.TitlePlateId" Label="Title Plate">
|
||||
@for (uint i = 0; i < 8; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
<MudSelectItem Value="@i">@TitlePlateStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.FaceColor" Label="Face Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.LimbColor" Label="Limb Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
|
||||
<MudTabPanel Text="Song Options">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Song Options</h2>
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="4">
|
||||
<MudStack Spacing="4">
|
||||
<MudSwitch @bind-Checked="@response.PlaySetting.IsVanishOn" Label="Vanish" Color="Color.Primary"/>
|
||||
<MudSwitch @bind-Checked="@response.PlaySetting.IsInverseOn" Label="Inverse" Color="Color.Primary"/>
|
||||
<MudSwitch @bind-Checked="@response.IsSkipOn" Label="Give Up" Color="Color.Primary"/>
|
||||
<MudSwitch @bind-Checked="@response.IsVoiceOn" Label="Voice" Color="Color.Primary"/>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudStack Spacing="4">
|
||||
<MudSelect @bind-Value="@response.PlaySetting.Speed" Label="Speed">
|
||||
@for (uint i = 0; i < 15; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@SpeedStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.AchievementDisplayDifficulty"
|
||||
Label="Achievement Panel Difficulty">
|
||||
@foreach (var item in Enum.GetValues<Difficulty>())
|
||||
{
|
||||
<MudSelectItem Value="@item" />
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.PlaySetting.RandomType"
|
||||
Label="Random">
|
||||
@foreach (var item in Enum.GetValues<RandomType>())
|
||||
{
|
||||
<MudSelectItem Value="@item"/>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="4">
|
||||
<MudStack Spacing="4">
|
||||
<MudSwitch @bind-Checked="@response.IsDisplayAchievement" Label="Display Achievement Panel" Color="Color.Primary" />
|
||||
<MudSwitch @bind-Checked="@response.IsDisplayDanOnNamePlate" Label="Display Dan Rank on Name Plate" Color="Color.Primary" />
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudStack Spacing="4">
|
||||
<MudSelect @bind-Value="@response.DifficultySettingCourse" Label="Difficulty Setting Course">
|
||||
@for (uint i = 0; i < DifficultySettingCourseStrings.Length; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@DifficultySettingCourseStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.ToneId" Label="Tone">
|
||||
@for (uint i = 0; i < 19; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@ToneStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.DifficultySettingStar" Label="Difficulty Setting Star">
|
||||
@for (uint i = 0; i < DifficultySettingStarStrings.Length; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@DifficultySettingStarStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSlider Class="mb-8" @bind-Value="@response.NotesPosition" Size="Size.Medium" Min="-5" Max="5" Step="1" TickMarks="true" TickMarkLabels="@NotePositionStrings">
|
||||
<MudText Typo="Typo.caption">Notes Position</MudText>
|
||||
</MudSlider>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudSelect @bind-Value="@response.DifficultySettingSort" Label="Difficulty Setting Sort">
|
||||
@for (uint i = 0; i < DifficultySettingSortStrings.Length; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@DifficultySettingSortStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudItem md="4" xs="12" Class="py-4 px-8">
|
||||
<MudStack Style="top:100px" Class="sticky">
|
||||
<MudButton Disabled="@isSavingOptions"
|
||||
OnClick="SaveOptions"
|
||||
Variant="Variant.Filled"
|
||||
Color="Color.Primary">
|
||||
@if (isSavingOptions)
|
||||
{
|
||||
<MudProgressCircular Class="ms-n1" Size="Size.Small" Indeterminate="true"/>
|
||||
<MudText Class="ms-2">Saving...</MudText>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudIcon Icon="@Icons.Filled.Save" Class="mx-2"></MudIcon>
|
||||
<MudText>Save</MudText>
|
||||
}
|
||||
</MudButton>
|
||||
</MudStack>
|
||||
<MudTabPanel Text="Costume">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Costume Options</h2>
|
||||
<MudGrid>
|
||||
<MudItem xs="12">
|
||||
<MudStack Spacing="4" Class="mb-8">
|
||||
<MudSelect @bind-Value="@response.Head" Label="Head">
|
||||
@for (var i = 0; i < Constants.COSTUME_HEAD_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetHeadTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
</MudItem>
|
||||
<MudSelect @bind-Value="@response.Body" Label="Body">
|
||||
@for (var i = 0; i < Constants.COSTUME_BODY_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetBodyTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Face" Label="Face">
|
||||
@for (var i = 0; i < Constants.COSTUME_FACE_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetFaceTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Kigurumi" Label="Kigurumi">
|
||||
@for (var i = 0; i < Constants.COSTUME_KIGURUMI_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetKigurumiTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.Puchi" Label="Puchi">
|
||||
@for (var i = 0; i < Constants.COSTUME_PUCHI_MAX; i++)
|
||||
{
|
||||
var index = (uint)i;
|
||||
var costumeTitle = GameDataService.GetPuchiTitle(index);
|
||||
<MudSelectItem Value="@index">@index - @costumeTitle</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudStack>
|
||||
|
||||
<MudStack Row="true">
|
||||
<MudSelect @bind-Value="@response.BodyColor" Label="Body Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.FaceColor" Label="Face Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect @bind-Value="@response.LimbColor" Label="Limb Color">
|
||||
@for (uint i = 0; i < Constants.COSTUME_COLOR_MAX; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@index">
|
||||
<div class="color-box" style=@($"background: {CostumeColors[index]}")></div>
|
||||
@index
|
||||
</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
|
||||
<MudTabPanel Text="Song Options">
|
||||
<MudStack Spacing="4">
|
||||
<h2>Song Options</h2>
|
||||
<MudGrid>
|
||||
<MudItem xs="12" md="4">
|
||||
<MudStack Spacing="4">
|
||||
<MudSwitch @bind-Checked="@response.PlaySetting.IsVanishOn" Label="Vanish" Color="Color.Primary" />
|
||||
<MudSwitch @bind-Checked="@response.PlaySetting.IsInverseOn" Label="Inverse" Color="Color.Primary" />
|
||||
<MudSwitch @bind-Checked="@response.IsSkipOn" Label="Give Up" Color="Color.Primary" />
|
||||
<MudSwitch @bind-Checked="@response.IsVoiceOn" Label="Voice" Color="Color.Primary" />
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="8">
|
||||
<MudStack Spacing="4">
|
||||
<MudSelect @bind-Value="@response.PlaySetting.Speed" Label="Speed">
|
||||
@for (uint i = 0; i < 15; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@SpeedStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.PlaySetting.RandomType"
|
||||
Label="Random">
|
||||
@foreach (var item in Enum.GetValues<RandomType>())
|
||||
{
|
||||
<MudSelectItem Value="@item" />
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSelect @bind-Value="@response.ToneId" Label="Tone">
|
||||
@for (uint i = 0; i < 19; i++)
|
||||
{
|
||||
var index = i;
|
||||
<MudSelectItem Value="@i">@ToneStrings[index]</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
|
||||
<MudSlider Class="mb-8" @bind-Value="@response.NotesPosition" Size="Size.Medium" Min="-5" Max="5" Step="1" TickMarks="true" TickMarkLabels="@NotePositionStrings">
|
||||
<MudText Typo="Typo.caption">Notes Position</MudText>
|
||||
</MudSlider>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
<MudItem md="4" xs="12" Class="py-4 px-8">
|
||||
<MudStack Style="top:100px" Class="sticky">
|
||||
<MudButton Disabled="@isSavingOptions"
|
||||
OnClick="SaveOptions"
|
||||
Variant="Variant.Filled"
|
||||
Color="Color.Primary">
|
||||
@if (isSavingOptions)
|
||||
{
|
||||
<MudProgressCircular Class="ms-n1" Size="Size.Small" Indeterminate="true" />
|
||||
<MudText Class="ms-2">Saving...</MudText>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudIcon Icon="@Icons.Filled.Save" Class="mx-2"></MudIcon>
|
||||
<MudText>Save</MudText>
|
||||
}
|
||||
</MudButton>
|
||||
</MudStack>
|
||||
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
}
|
@ -50,6 +50,24 @@ public partial class Profile
|
||||
"AI 1", "AI 2", "AI 3", "AI 4"
|
||||
};
|
||||
|
||||
private static readonly string[] DifficultySettingCourseStrings =
|
||||
{
|
||||
"None", "Set up each time",
|
||||
"Easy", "Normal", "Hard", "Oni", "Ura Oni"
|
||||
};
|
||||
|
||||
private static readonly string[] DifficultySettingStarStrings =
|
||||
{
|
||||
"None", "Set up each time",
|
||||
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
|
||||
};
|
||||
|
||||
private static readonly string[] DifficultySettingSortStrings =
|
||||
{
|
||||
"None", "Set up each time", "Default",
|
||||
"Not cleared", "Not Full Combo", "Not Donderful Combo"
|
||||
};
|
||||
|
||||
private readonly List<BreadcrumbItem> breadcrumbs = new()
|
||||
{
|
||||
new BreadcrumbItem("Cards", href: "/Cards"),
|
||||
|
Loading…
Reference in New Issue
Block a user