68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
using Postgrest.Attributes;
|
|
using Postgrest.Models;
|
|
using UnityEngine;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
|
|
// Die Klasse FrameModel stellt das Gerüst für die Daten dar, die über den SupabaseManager an die Datenbank gesenden und von dort empfangen werden.
|
|
|
|
namespace GhostSystem
|
|
{
|
|
[Table("object_positions")]
|
|
public class FrameModel : BaseModel
|
|
{
|
|
|
|
[Column("user_id")]
|
|
public string UserId { get; set; }
|
|
|
|
[Column("scene_id")]
|
|
public string SceneId { get; set; }
|
|
|
|
[Column("object_id")]
|
|
public string ObjectId { get; set; }
|
|
|
|
[Column("timestamp")]
|
|
public string Timestamp { get; set; } // ISO 8601 string
|
|
|
|
[Column("position")]
|
|
public string PositionJson { get; set; } // stored as JSONB
|
|
|
|
[Column("rotation")]
|
|
public string RotationJson { get; set; } // stored as JSONB
|
|
|
|
public static FrameModel FromGhostFrame(GhostFrame frame)
|
|
{
|
|
return new FrameModel
|
|
{
|
|
UserId = SupabaseManager.instance.userId,
|
|
SceneId = frame.SceneId,
|
|
ObjectId = frame.ObjectId,
|
|
Timestamp = frame.Timestamp.ToString("o"), // "o" für ISO 8601
|
|
PositionJson = JsonConvert.SerializeObject(new Vector3Serializable
|
|
{
|
|
x = frame.Position.x,
|
|
y = frame.Position.y,
|
|
z = frame.Position.z,
|
|
}),
|
|
RotationJson = JsonConvert.SerializeObject(new QuaternionSerializable
|
|
{
|
|
x = frame.Rotation.x,
|
|
y = frame.Rotation.y,
|
|
z = frame.Rotation.z,
|
|
w = frame.Rotation.w
|
|
})
|
|
};
|
|
}
|
|
|
|
[JsonIgnore]
|
|
public DateTime TimestampParsed => DateTime.Parse(Timestamp).ToUniversalTime();
|
|
|
|
[JsonIgnore]
|
|
public Vector3 Position => JsonConvert.DeserializeObject<Vector3Serializable>(PositionJson).ToVector3();
|
|
[JsonIgnore]
|
|
public Quaternion Rotation => JsonConvert.DeserializeObject<QuaternionSerializable>(RotationJson).ToQuaternion();
|
|
|
|
}
|
|
}
|
|
|