1
0
mirror of synced 2024-09-24 03:18:27 +02:00

Add DifficultySettingArray handle and WebUI

This commit is contained in:
esuo1198 2023-09-18 18:54:02 +09:00
parent 05cdeb0dec
commit 4fedead174
6 changed files with 328 additions and 253 deletions

View File

@ -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; }

View File

@ -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 };

View File

@ -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,
@ -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();

View File

@ -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);
if (difficultySettingArray[i] >= 2)
{
difficultySettingArray[i] -= 1;
}
catch (JsonException e)
{
Logger.LogError(e, "Parsing difficulty played json data failed");
}
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);
}
}

View File

@ -46,9 +46,42 @@
}
</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.DifficultySettingStar" Label="Difficulty Setting Star">
@for (uint i = 0; i < DifficultySettingStarStrings.Length; i++)
{
var index = i;
<MudSelectItem Value="@i">@DifficultySettingStarStrings[index]</MudSelectItem>
}
</MudSelect>
<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>
<MudTabPanel Text="Costume">

View File

@ -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"),