EinmaleinsTrainer/ViewModels/ResultViewModel.cs
Naoriel Sa' Rocí 4a4fb54143 Added first code.
Signed-off-by: Naoriel Sa' Rocí <naoriel@sa-roci.de>
2026-03-30 02:26:31 +02:00

65 lines
1.8 KiB
C#

using System;
using System.Reactive;
using System.Reactive.Linq;
using EinmaleinsTrainer.Models;
using ReactiveUI;
namespace EinmaleinsTrainer.ViewModels;
public class ResultViewModel : ViewModelBase
{
public string Text { get; private set;} = "";
public string TimeRequiredText { get; private set;} = "";
public bool ShowTimeRequired => !string.IsNullOrEmpty(TimeRequiredText);
private ResultModel _model = new();
public void Init(ResultModel result)
{
double percent = result.Score * 1.0 / result.Total;
if (percent > 0.9)
{
Text = $"🎉 {result.Score} von {result.Total} richtig!";
}
else if (percent > 0.5)
{
Text = $"👍 {result.Score} von {result.Total} richtig.";
}
else if (percent > 0.25)
{
Text = $"🤨 {result.Score} von {result.Total} richtig.";
}
else if (percent > 0.0)
{
Text = $"😑 {result.Score} von {result.Total} richtig.";
}
else
{
Text = $"😭 {result.Score} von {result.Total} richtig.";
}
if (result.TimeRequired != null)
{
int SecondsRequired = (int)Math.Round(result.TimeRequired.Value.TotalSeconds, 0, MidpointRounding.AwayFromZero);
TimeRequiredText = $"In {SecondsRequired} s gelöst.";
}
else
{
TimeRequiredText = "";
}
_model = result;
}
public ReactiveCommand<Unit, ResultModel> RestartCommand { get; }
public ResultViewModel()
{
RestartCommand = ReactiveCommand.Create(
execute: () =>
{
return _model;
},
canExecute: Observable.Return(true).ObserveOn(RxApp.MainThreadScheduler),
outputScheduler: RxApp.MainThreadScheduler);
}
}