PuzzleMeasurement, add Realm, door ExitedFrom event
This commit is contained in:
82
Assets/Engine/Runtime/Measurements/PuzzleStorage.cs
Normal file
82
Assets/Engine/Runtime/Measurements/PuzzleStorage.cs
Normal 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user