65 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
|