diff --git a/CCharLearn/Client/Program.cs b/CCharLearn/Client/Program.cs index dc336f6..bcb7048 100644 --- a/CCharLearn/Client/Program.cs +++ b/CCharLearn/Client/Program.cs @@ -10,6 +10,7 @@ namespace CCharLearn { public class Program { + public static int CCharsLeft = 0; public static Action UpdateUiEvent; @@ -24,7 +25,7 @@ namespace CCharLearn { config.SnackbarConfiguration.ShowTransitionDuration = 100; config.SnackbarConfiguration.HideTransitionDuration = 100; - config.SnackbarConfiguration.VisibleStateDuration = 5000; + config.SnackbarConfiguration.VisibleStateDuration = 3000; config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.TopCenter; }); builder.Services.AddBlazoredLocalStorage(); diff --git a/CCharLearn/Pages/Index.razor b/CCharLearn/Pages/Index.razor index d3f1f5a..07839ad 100644 --- a/CCharLearn/Pages/Index.razor +++ b/CCharLearn/Pages/Index.razor @@ -14,7 +14,7 @@ } - + @((!continueDataExists) ? "Start learning!" : "Start new!") @if (continueDataExists) @@ -27,7 +27,7 @@ - + } @@ -35,14 +35,20 @@ - + + + Modifiers: + + + + - + @if (Charecters != null) { - - + + @@ -90,18 +96,30 @@ bool continueDataExists = false; int continueCharectersLeft = -1; - private bool isEasyMode; + private bool ignoreTone; - public bool IsEasyMode + public bool IgnoreTone { - get { return isEasyMode; } + get { return ignoreTone; } set { - isEasyMode = value; - SetEasyMode(); + ignoreTone = value; + SetIgnoreTone(); } } + private bool useChangingFonts; + + public bool UseChangingFonts + { + get { return useChangingFonts; } + set + { + useChangingFonts = value; + SetChangingFonts(); + } + } + protected async override Task OnInitializedAsync() @@ -109,6 +127,8 @@ if (await localStorage.ContainKeyAsync("Normalized_chunk_001.json")) isSavedLocally = true; + continueDataExists = await localStorage.ContainKeyAsync("ContinueData"); + SelectedChunk(); StateHasChanged(); } @@ -151,9 +171,14 @@ StateHasChanged(); } - async void SetEasyMode() + async void SetIgnoreTone() { - await localStorage.SetItemAsync("EasyMode", isEasyMode); + await localStorage.SetItemAsync("IgnoreTone", ignoreTone); + } + + async void SetChangingFonts() + { + await localStorage.SetItemAsync("ChangingFonts", UseChangingFonts); } async Task LoadAllChunksIntoLocalStorage() @@ -205,7 +230,7 @@ { if (firstRender) { - continueDataExists = await localStorage.ContainKeyAsync("ContinueData"); + } if (continueDataExists) @@ -213,9 +238,14 @@ continueCharectersLeft = await localStorage.GetItemAsync("ContinueCharectersLeft"); } - if (await localStorage.ContainKeyAsync("EasyMode")) + if (await localStorage.ContainKeyAsync("IgnoreTone")) { - isEasyMode = await localStorage.GetItemAsync("EasyMode"); + ignoreTone = await localStorage.GetItemAsync("IgnoreTone"); + } + + if (await localStorage.ContainKeyAsync("ChangingFonts")) + { + UseChangingFonts = await localStorage.GetItemAsync("ChangingFonts"); } } } \ No newline at end of file diff --git a/CCharLearn/Pages/Learn.razor b/CCharLearn/Pages/Learn.razor index fdf9354..29a8701 100644 --- a/CCharLearn/Pages/Learn.razor +++ b/CCharLearn/Pages/Learn.razor @@ -42,7 +42,14 @@ @if (!Answers.Any(x => x == null)) { -

@GetDisplayChar()

+ if (useChagingFonts) + { +

@GetDisplayChar()

+ } + else + { +

@GetDisplayChar()

+ } }
@@ -55,7 +62,7 @@ @for (int i = 0; i < Answers.Length; i++) { int buttonIndex = i; - @@ -80,21 +87,39 @@ { Submit } - @if (isEasyMode) + @if (ignoreTone) { • Easy mode enabled } + @if (useChagingFonts) + { + • Changing fonts enabled + }
+@*Used to load all fonts into memory instead of loading from http each time*@ +@if (useChagingFonts && !hasLoadedFontsToMemory) +{ + @for (int i = 0; i < extraFonts.Length; i++) + { +

i

+ } +} + @code { bool isSavedLocally = false; - bool isEasyMode = false; + bool ignoreTone = false; bool selectedCorrect = false; + bool useChagingFonts = false; + string? currentFont = null; + string[] extraFonts = { "HanyiSentyRubber", "mini-jian-caocuyuan", "myoungheihk", "UnboundedSans", "wt064", "XiaolaiSC-Regular", "chinese1", "chinese2" }; + bool hasLoadedFontsToMemory = false; + public Answer[] Answers = new Answer[4]; public void SelectButton(int selectedIndex) { @@ -129,9 +154,14 @@ protected override async Task OnInitializedAsync() { Program.UpdateUiEvent += OnUiUpdate; - if (await localStorage.ContainKeyAsync("EasyMode")) + if (await localStorage.ContainKeyAsync("IgnoreTone")) { - isEasyMode = await localStorage.GetItemAsync("EasyMode"); + ignoreTone = await localStorage.GetItemAsync("IgnoreTone"); + } + + if (await localStorage.ContainKeyAsync("ChangingFonts")) + { + useChagingFonts = await localStorage.GetItemAsync("ChangingFonts"); } bool continueLast = @@ -148,13 +178,21 @@ await LoadCharectersFromChunk(); } - if (isEasyMode) + if (ignoreTone) DontSkipTheseCChar.ForEach(x => x.cchar.pinyin = x.cchar.pinyin.Unidecode()); + if (useChagingFonts) + { + ChangeFont(); + } + Program.CCharsLeft = DontSkipTheseCChar.Count; Program.InvokeUiUpdate(); GenerateQuestion(); + + await Task.Delay(100); + hasLoadedFontsToMemory = true; } async Task LoadCharectersFromChunk() @@ -234,6 +272,12 @@ navigator.NavigateTo(""); } + async void ChangeFont() + { + int randomIndex = Random.Shared.Next(0, extraFonts.Length); + currentFont = extraFonts[randomIndex]; + } + async void Submit() { bool isCorrect = Answers.Any(x => x.isCorrect && x.isSelected); @@ -244,6 +288,7 @@ { Snackbar.Add($"Definition: {correctCChar.definition}", Severity.Success, config => { config.VisibleStateDuration = 1000; }); increaseCCharStat(GetCorrectCCharStats(), StatType.NumOfCorrects); + ChangeFont(); } else { @@ -272,7 +317,18 @@ await SaveContinueData(); - GenerateQuestion(); + if (isCorrect) + { + GenerateQuestion(); + } + else + { + foreach (var anwser in Answers) + { + anwser.isSelected = false; + } + StateHasChanged(); + } } async Task SaveContinueData() @@ -363,7 +419,7 @@ public void ShowMeaning() { - Snackbar.Add($"Definition: {GetCorrectCChar().definition}", Severity.Info); + Snackbar.Add($"Definition: {GetCorrectCChar().definition}", Severity.Info, conf => conf.VisibleStateDuration = 1000); } public void ShowPinyin() @@ -378,7 +434,7 @@ if (firstRender) { // Gets chinese voice on windows or iphone. - this.SpeechVoice = ((IEnumerable)(await this.SpeechSynthesis.GetVoicesAsync())).FirstOrDefault(v => v.Name.Contains("Yaoyao") || v.Name.Contains("Ting-Ting")); + this.SpeechVoice = ((IEnumerable)(await this.SpeechSynthesis.GetVoicesAsync())).FirstOrDefault(v => v.Name.Contains("Yaoyao") || v.Name.Contains("Ting-Ting") || v.Name.ToLower().Contains("cn")); this.StateHasChanged(); } } @@ -387,7 +443,7 @@ { if (SpeechVoice == null) { - Snackbar.Add("Couldn't play sound", Severity.Error); + Snackbar.Add("Couldn't play sound.\nLikely reason: Chinese speech not installed", Severity.Error); return; } diff --git a/CCharLearn/Pages/Learn.razor.css b/CCharLearn/Pages/Learn.razor.css new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/CCharLearn/Pages/Learn.razor.css @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/CCharLearn/wwwroot/css/app.css b/CCharLearn/wwwroot/css/app.css index 37dfb60..4a85e01 100644 --- a/CCharLearn/wwwroot/css/app.css +++ b/CCharLearn/wwwroot/css/app.css @@ -96,4 +96,46 @@ a, .btn-link { } .loading-progress-text:after { content: var(--blazor-load-percentage-text, "Loading"); - } \ No newline at end of file + } + +@font-face { + font-family: 'HanyiSentyRubber'; + src: url(../fonts/HanyiSentyRubber.ttf) format('truetype'); +} + +@font-face { + font-family: 'mini-jian-caocuyuan'; + src: url(../fonts/mini-jian-caocuyuan.ttf) format('truetype'); +} + +@font-face { + font-family: 'myoungheihk'; + src: url(../fonts/myoungheihk.ttf) format('truetype'); +} + +@font-face { + font-family: 'UnboundedSans'; + src: url(../fonts/UnboundedSans.ttf) format('truetype'); +} + +@font-face { + font-family: 'wt064'; + src: url(../fonts/wt064.ttf) format('truetype'); +} + +@font-face { + font-family: 'XiaolaiSC-Regular'; + src: url(../fonts/XiaolaiSC-Regular.ttf) format('truetype'); +} + +/*优设标题黑*/ +@font-face { + font-family: 'chinese1'; + src: url(../fonts/chinese1.ttf) format('truetype'); +} + +/*站酷仓耳渔阳体*/ +@font-face { + font-family: 'chinese2'; + src: url(../fonts/chinese2.ttf) format('truetype'); +} \ No newline at end of file diff --git a/CCharLearn/wwwroot/fonts/HanyiSentyRubber.ttf b/CCharLearn/wwwroot/fonts/HanyiSentyRubber.ttf new file mode 100644 index 0000000..df3f929 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/HanyiSentyRubber.ttf differ diff --git a/CCharLearn/wwwroot/fonts/UnboundedSans.ttf b/CCharLearn/wwwroot/fonts/UnboundedSans.ttf new file mode 100644 index 0000000..1ed1755 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/UnboundedSans.ttf differ diff --git a/CCharLearn/wwwroot/fonts/XiaolaiSC-Regular.ttf b/CCharLearn/wwwroot/fonts/XiaolaiSC-Regular.ttf new file mode 100644 index 0000000..82e28f4 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/XiaolaiSC-Regular.ttf differ diff --git a/CCharLearn/wwwroot/fonts/chinese1.ttf b/CCharLearn/wwwroot/fonts/chinese1.ttf new file mode 100644 index 0000000..3729151 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/chinese1.ttf differ diff --git a/CCharLearn/wwwroot/fonts/chinese2.ttf b/CCharLearn/wwwroot/fonts/chinese2.ttf new file mode 100644 index 0000000..027535f Binary files /dev/null and b/CCharLearn/wwwroot/fonts/chinese2.ttf differ diff --git a/CCharLearn/wwwroot/fonts/mini-jian-caocuyuan.ttf b/CCharLearn/wwwroot/fonts/mini-jian-caocuyuan.ttf new file mode 100644 index 0000000..8919b7f Binary files /dev/null and b/CCharLearn/wwwroot/fonts/mini-jian-caocuyuan.ttf differ diff --git a/CCharLearn/wwwroot/fonts/myoungheihk.ttf b/CCharLearn/wwwroot/fonts/myoungheihk.ttf new file mode 100644 index 0000000..3483fd9 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/myoungheihk.ttf differ diff --git a/CCharLearn/wwwroot/fonts/wt064.ttf b/CCharLearn/wwwroot/fonts/wt064.ttf new file mode 100644 index 0000000..075f994 Binary files /dev/null and b/CCharLearn/wwwroot/fonts/wt064.ttf differ diff --git a/CCharLearn/wwwroot/index.html b/CCharLearn/wwwroot/index.html index fc45e07..423b62c 100644 --- a/CCharLearn/wwwroot/index.html +++ b/CCharLearn/wwwroot/index.html @@ -31,7 +31,7 @@ - +