PuzzleMeasurement, add Realm, door ExitedFrom event

This commit is contained in:
2022-12-05 18:11:00 +01:00
parent 5449283e5d
commit b776e6744e
34 changed files with 344 additions and 63 deletions

View File

@@ -0,0 +1,82 @@
using EscapeRoomEngine.Engine.Runtime.Modules;
using Realms;
using UnityEngine;
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
namespace EscapeRoomEngine.Engine.Runtime.Measurements
{
public class PuzzleStorage : MonoBehaviour
{
public static PuzzleStorage Instance
{
get
{
if (_foundStorage == null)
{
_foundStorage = FindObjectOfType<PuzzleStorage>();
}
return _foundStorage;
}
}
private static PuzzleStorage _foundStorage;
[SerializeField]
private string databasePath = "measurements.realm";
private Realm _realm;
private void OnEnable()
{
_realm = Realm.GetInstance(databasePath);
}
private void Start()
{
Logger.Log($"Using realm database at {_realm.Config.DatabasePath}", LogType.Measuring);
}
private void OnDisable()
{
_realm?.Dispose();
}
public Puzzle New(PuzzleModuleDescription puzzle)
{
Puzzle created = null;
_realm.Write(() =>
{
created = _realm.Add(new Puzzle(puzzle));
});
return created;
}
public Puzzle LoadOrNew(PuzzleModuleDescription puzzle) =>
_realm.Find<Puzzle>(puzzle.Id) ?? New(puzzle);
public Puzzle Load(PuzzleModuleDescription puzzle) =>
_realm.Find<Puzzle>(puzzle.Id);
public void Delete(PuzzleModuleDescription puzzle)
{
var found = Load(puzzle);
if (found != null)
{
_realm.Write(() => _realm.Remove(found));
}
}
public void EndMeasurement(PuzzleModuleDescription puzzle, PuzzleMeasurement measurement)
{
var found = LoadOrNew(puzzle);
_realm.Write(() =>
{
measurement.TimeSolved = Time.time;
found.Measurements.Add(measurement);
});
}
}
}