Cleaned up and commented version.
This commit is contained in:
@@ -7,14 +7,16 @@ using System;
|
||||
using Oculus.Interaction;
|
||||
using System.IO;
|
||||
|
||||
// Dieses Script ist für die Aufnahme des Replays während des Trainingsdurchlaufs zuständig.
|
||||
|
||||
namespace GhostSystem
|
||||
{
|
||||
public class GhostRecorderBatch : MonoBehaviour
|
||||
{
|
||||
public string SceneId;
|
||||
public float SampleRate = 0.05f;
|
||||
public int BatchSize = 10;
|
||||
public float FlushInterval = 2f;
|
||||
public string SceneId; // SceneID zum Übergeben des Raumnamens an die Datenbank.
|
||||
public float SampleRate = 0.05f; // Entspricht einer Framerate von 20 FPS.
|
||||
public int BatchSize = 10; // Anzahl der Frames nach denen ein neuer Batch beginnt. Wird nicht mehr genutzt, da manueller Flush.
|
||||
public float FlushInterval = 2f; // Länge des Intervalls bis zum nächsten Flush. Wird nicht mehr genutzt, da manueller Flush.
|
||||
|
||||
public List<Transform> TrackedObjects;
|
||||
private int doorCount;
|
||||
@@ -41,8 +43,8 @@ namespace GhostSystem
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
SupabaseManager.OnSuperbaseReady += HandleSupabaseReady;
|
||||
RoomManager.OnSceneIdReady += HandleSceneIdReady;
|
||||
SupabaseManager.OnSuperbaseReady += HandleSupabaseReady; // Das Skript horcht nach den beiden Events, da eine Aufnahme in die Datenbank nur möglich sien soll,
|
||||
RoomManager.OnSceneIdReady += HandleSceneIdReady; // wenn die Szene komplett geladen und die Verbindung zu Supabase aufgebaut ist.
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
@@ -61,8 +63,8 @@ namespace GhostSystem
|
||||
supabaseReady = true;
|
||||
}
|
||||
|
||||
private void HandleSceneIdReady(string id, List<GameObject> doors, List<RecieveHeat> targets)
|
||||
{
|
||||
private void HandleSceneIdReady(string id, List<GameObject> doors, List<RecieveHeat> targets) // Die Szene muss komplett geladen sein, da mit dem Event die SceneID
|
||||
{ // übergeben wird.
|
||||
SceneId = id;
|
||||
sceneIdReady = true;
|
||||
if (SceneId == "Base")
|
||||
@@ -72,8 +74,8 @@ namespace GhostSystem
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (GameObject door in doors)
|
||||
{
|
||||
foreach (GameObject door in doors) // neben den Tracked Objects, die in jeder Szene gleich sind (Player-Root, Kopf, Hände, Augen), müssen die Türen jedes Raums
|
||||
{ // zu den Tracked Objects hinzugefügt werden. Nur so wird die Bewegung der Tür auch im Replay wiedergegeben.
|
||||
var rotator = door.GetComponentInChildren<OneGrabRotateTransformer>();
|
||||
if (rotator != null)
|
||||
{
|
||||
@@ -86,12 +88,12 @@ namespace GhostSystem
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!_isRecording) return;
|
||||
if (!_isRecording) return; // Code im Update wird nur ausgeführt, während die Aufnahme läuft.
|
||||
|
||||
_sampleTimer += Time.deltaTime;
|
||||
_flushTimer += Time.deltaTime;
|
||||
|
||||
if (_sampleTimer >= SampleRate)
|
||||
if (_sampleTimer >= SampleRate) // Es wird immer die Dauer bis zum nächsten Record-Frame runter gezählt und ein Sample aufgenommen.
|
||||
{
|
||||
_sampleTimer = 0f;
|
||||
RecordSample();
|
||||
@@ -107,11 +109,11 @@ namespace GhostSystem
|
||||
|
||||
private void RecordSample()
|
||||
{
|
||||
foreach (var obj in TrackedObjects)
|
||||
{
|
||||
foreach (var obj in TrackedObjects) // Ein Sample besteht aus einer Liste von FrameModels, die für den Zustand jedes getrackten Objekts zum aktuellen Zeitpunkt
|
||||
{ // erstellt werden.
|
||||
var frame = new GhostFrame(SceneId, obj.name, obj.position, obj.rotation);
|
||||
_frameBuffer.Add(FrameModel.FromGhostFrame(frame));
|
||||
}
|
||||
_frameBuffer.Add(FrameModel.FromGhostFrame(frame)); // Die Frames werden an den Buffer angehängt, um noch während der Aufnahme noch nciht so viele System-
|
||||
} // Ressourcen zu verbrauchen.
|
||||
}
|
||||
|
||||
private async UniTaskVoid FlushBatchAsync() // Die eigentliche Methode zum Hochladen eines Batches/leeren des Buffers.
|
||||
@@ -148,7 +150,7 @@ namespace GhostSystem
|
||||
}
|
||||
}
|
||||
|
||||
private async UniTask FallbackToOfflineAsync(List<FrameModel> batch) // Schreibt den Buffer in eine Datei, falls Upload nicht möglich
|
||||
private async UniTask FallbackToOfflineAsync(List<FrameModel> batch) // Schreibt den Buffer in eine Datei, falls Upload nicht möglich. Kann zu Rucklern führen.
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -165,7 +167,7 @@ namespace GhostSystem
|
||||
}
|
||||
}
|
||||
|
||||
public void StartRecording()
|
||||
public void StartRecording() // Wenn die Bedingungen erfüllt sind, startet diese Methode die Aufnahme. Sie kann von anderen Skripten aufgerufen werden.
|
||||
{
|
||||
if (!supabaseReady || !sceneIdReady) return;
|
||||
_isRecording = true;
|
||||
@@ -173,8 +175,8 @@ namespace GhostSystem
|
||||
Debug.Log($"Recording {SceneId}");
|
||||
}
|
||||
|
||||
public void StopRecording()
|
||||
{
|
||||
public void StopRecording() // Diese Methode stoppt die Aufnahme, löst ein entsprechendes Event aus, das abonniert werden kann und entfernt die Türen des aktuellen
|
||||
{ // Raums wieder aus der Liste der Tracked Objects.
|
||||
_isRecording = false;
|
||||
sceneIdReady = false;
|
||||
OnStopRecord?.Invoke();
|
||||
|
||||
Reference in New Issue
Block a user