80 lines
2.8 KiB
C#
80 lines
2.8 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using EscapeRoomEngine.Engine.Runtime.Modules;
|
|
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
|
using UnityEngine;
|
|
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
|
|
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
|
|
|
|
namespace EscapeRoomEngine.Engine.Runtime.Measurements
|
|
{
|
|
public static class Measure
|
|
{
|
|
/// <summary>
|
|
/// Whether to store the taken measurements in the database. Disable for test runs.
|
|
/// </summary>
|
|
public static bool Store { get; set; }
|
|
|
|
private static Dictionary<int, PuzzleMeasurement> _runningMeasurements;
|
|
private static Session _currentSession;
|
|
|
|
public static float AverageTime(IEnumerable<PuzzleModuleDescription> puzzles) =>
|
|
puzzles.Sum(puzzle => PuzzleStorage.Instance.Load(puzzle).AverageTimeToSolve);
|
|
public static float AverageTime(PuzzleModuleDescription puzzle) =>
|
|
PuzzleStorage.Instance.Load(puzzle).AverageTimeToSolve;
|
|
public static float AverageTime(Room room) =>
|
|
room.puzzles.Sum(puzzle => AverageTime((PuzzleModuleDescription)puzzle.description));
|
|
|
|
public static void StartMeasuring(PuzzleModuleDescription puzzle)
|
|
{
|
|
_runningMeasurements[puzzle.Id] = new PuzzleMeasurement
|
|
{
|
|
TimeStarted = Time.time,
|
|
TimeSolved = Time.time
|
|
};
|
|
|
|
Logger.Log($"Started measuring {puzzle}", LogType.Measuring);
|
|
}
|
|
|
|
public static void Solve(PuzzleModuleDescription puzzle)
|
|
{
|
|
if (_currentSession == null)
|
|
{
|
|
throw new EngineException("Measuring session must be started before taking measurements.");
|
|
}
|
|
|
|
var measurement = _runningMeasurements[puzzle.Id];
|
|
|
|
if (Store)
|
|
{
|
|
PuzzleStorage.Instance.EndMeasurement(_currentSession, puzzle, measurement);
|
|
}
|
|
_runningMeasurements.Remove(puzzle.Id);
|
|
|
|
Logger.Log($"Solved {puzzle} with measurement {measurement}", LogType.Measuring);
|
|
}
|
|
|
|
public static void StartSession()
|
|
{
|
|
_currentSession = new Session();
|
|
|
|
Logger.Log($"Started {_currentSession}", LogType.Measuring);
|
|
}
|
|
|
|
public static void EndSession(float time)
|
|
{
|
|
if (Store)
|
|
{
|
|
PuzzleStorage.Instance.EndSession(_currentSession, time);
|
|
}
|
|
|
|
Logger.Log($"Ended {_currentSession}", LogType.Measuring);
|
|
}
|
|
|
|
public static void Clear()
|
|
{
|
|
_runningMeasurements = new Dictionary<int, PuzzleMeasurement>();
|
|
Store = true;
|
|
}
|
|
}
|
|
} |