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;
- SelectButton(buttonIndex)"
Color="@(Answers[buttonIndex].isSelected ? Color.Primary : Color.Default)">
@@ -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 @@
-
+