Files
CydandClaude Opus 4.8 548550b312 Initial commit: TeslaSuite monorepo (TeslaConsole + TeslaLauncher)
Co-locate the two cockpit-pod projects into a single repository:

- Console/  : TeslaConsole, the net48 WinForms operator console (decompiled
              reconstruction) plus its differential + catalog test suite.
- Launcher/ : TeslaLauncher, the net6 pod-side Service + Agent rewrite.

Adds a combined TeslaSuite.sln, root README documenting the shared wire
contract (and its current duplication, the main follow-up), and a root
.gitignore. Histories were not preserved per request; this is a fresh start
from the current working state of both projects.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 14:43:28 -05:00

102 lines
2.6 KiB
C#

using System;
namespace TeslaConsole.RedPlanet;
internal class RPMissionRecorder
{
private RPMissionResults mMissionResults;
private bool mStartSet;
public RPMissionRecorder(RPMission mission)
{
mMissionResults = new RPMissionResults(mission);
}
public void SetMissionStart()
{
if (mStartSet)
{
throw new InvalidOperationException();
}
mMissionResults.mMissionStart = DateTime.Now;
mStartSet = true;
}
private void ValidatePlayer(RPPlayer player, string param)
{
if (player == null)
{
throw new ArgumentNullException(param);
}
foreach (RPPlayer player2 in mMissionResults.Mission.Players)
{
if (player2 == player)
{
return;
}
}
throw new ArgumentException(param);
}
private TimeSpan GetMissionTime()
{
if (!mStartSet)
{
return TimeSpan.Zero;
}
return DateTime.Now - mMissionResults.mMissionStart;
}
public void PlayerScored(RPPlayer reportingPlayer)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
TimeSpan missionTime = GetMissionTime();
mMissionResults.mEvents.Add(new ScoredEvent(reportingPlayer, missionTime));
}
public void PlayerKilled(RPPlayer reportingPlayer, RPPlayer killer)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
ValidatePlayer(killer, "killer");
TimeSpan missionTime = GetMissionTime();
mMissionResults.mEvents.Add(new KilledEvent(reportingPlayer, missionTime, killer));
}
public void PlayerBoost(RPPlayer reportingPlayer, int boosterOn)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
TimeSpan missionTime = GetMissionTime();
mMissionResults.mEvents.Add(new BoostEvent(reportingPlayer, missionTime, boosterOn));
}
public void PlayerScoreUpdate(RPPlayer reportingPlayer, int score)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
TimeSpan missionTime = GetMissionTime();
mMissionResults.mEvents.Add(new ScoreUpdateEvent(reportingPlayer, missionTime, score));
}
public void PlayerDamaged(RPPlayer reportingPlayer, RPPlayer damager, int damageLoss, int pointsTransfered)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
ValidatePlayer(damager, "damager");
TimeSpan missionTime = GetMissionTime();
mMissionResults.mEvents.Add(new DamagedEvent(reportingPlayer, missionTime, damager, damageLoss, pointsTransfered));
}
public void PlayerFinalScore(RPPlayer reportingPlayer, int finalScore)
{
ValidatePlayer(reportingPlayer, "reportingPlayer");
mMissionResults.mFinalScores.Add(reportingPlayer, finalScore);
}
public RPMissionResults EndMission(TimeSpan missionLength)
{
mMissionResults.mActuallMissionTime = missionLength;
RPMissionResults result = mMissionResults;
mMissionResults = null;
return result;
}
}