Jack 4d94fbf54f
All checks were successful
Build and push image / Build (push) Successful in 49s
i live in spain but the S is silent
2023-09-28 00:53:27 +01:00

87 lines
3.5 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ksBroadcastingNetwork;
using ksBroadcastingNetwork.Structs;
namespace ksBroadcastingTestClient.Broadcasting
{
public class SessionInfoViewModel : KSObservableObject
{
public TimeSpan SessionTime { get => Get<TimeSpan>(); private set => Set(value); }
public string SessionTimeDisplay { get => Get<string>(); private set => Set(value); }
public string RemainingTime { get => Get<string>(); private set => Set(value); }
public string TrackDisplayName { get => Get<string>(); private set => Set(value); }
public SessionPhase Phase { get => Get<SessionPhase>(); private set => Set(value); }
public RaceSessionType SessionType { get => Get<RaceSessionType>(); private set => Set(value); }
public string TimeOfDayInfo { get => Get<string>(); private set => Set(value); }
public string TempInfo { get => Get<string>(); private set => Set(value); }
public string RainInfo { get => Get<string>(); private set => Set(value); }
public string CloudInfo { get => Get<string>(); private set => Set(value); }
internal void RegisterNewClient(ACCUdpRemoteClient newClient)
{
if (newClient.MsRealtimeUpdateInterval > 0)
{
// This client will send realtime updates, we should listen
newClient.MessageHandler.OnTrackDataUpdate += MessageHandler_OnTrackDataUpdate;
newClient.MessageHandler.OnRealtimeUpdate += MessageHandler_OnRealtimeUpdate;
}
}
private void MessageHandler_OnRealtimeUpdate(string sender, RealtimeUpdate update)
{
SessionTime = update.SessionTime;
SessionTimeDisplay = SessionTime.ToString("hh\\:mm\\:ss");
if(update.SessionEndTime.TotalMilliseconds < 0)
{
RemainingTime = "∞";
}
else
{
var remaining = update.SessionEndTime - update.SessionTime;
if (update.SessionTime.TotalMilliseconds < 0)
RemainingTime = "00:00";
else if (remaining.TotalHours > 2)
RemainingTime = $"{remaining.TotalHours:F0}h";
else if (remaining.TotalMinutes > 60)
RemainingTime = $"{remaining.TotalMinutes:F0}m";
else
RemainingTime = $"{remaining.TotalMinutes:2,F0}:{remaining.Seconds,2}";
}
Phase = update.Phase;
SessionType = update.SessionType;
TimeOfDayInfo = update.TimeOfDay.ToString("hh\\:mm");
if (update.Clouds < 0.2)
CloudInfo = "Sunny";
else if (update.Clouds < 0.40)
CloudInfo = "Light clouds";
else if(update.Clouds < 0.65)
CloudInfo = "Cloudy";
else
CloudInfo = "World's end";
TempInfo = $"{CloudInfo} {update.AmbientTemp} °C - Track {update.TrackTemp} °C";
if (update.RainLevel < 0.1 && update.Wetness < 0.1)
RainInfo = $"Clear";
else
RainInfo = $"{update.RainLevel:P0} rain, {update.Wetness:P0} wet";
}
private void MessageHandler_OnTrackDataUpdate(string sender, TrackData trackUpdate)
{
TrackDisplayName = trackUpdate.TrackName;
}
}
}