phase 2
This commit is contained in:
@@ -17,7 +17,8 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements
|
||||
|
||||
public float TotalTimeSpentOnPuzzle => Measurements.Sum(measurement => measurement.Time);
|
||||
public float AverageTimeToSolve => Measurements.Count > 0 ? TotalTimeSpentOnPuzzle / Measurements.Count : 0f;
|
||||
|
||||
public NormalDistribution Distribution => new(TimesAsSamples());
|
||||
|
||||
[UsedImplicitly]
|
||||
public Puzzle() {}
|
||||
public Puzzle(PuzzleModuleDescription puzzle)
|
||||
@@ -25,6 +26,23 @@ namespace EscapeRoomEngine.Engine.Runtime.Measurements
|
||||
ID = puzzle.Id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Estimate how long a player in the given percentile will take to solve this puzzle.
|
||||
/// </summary>
|
||||
public float EstimateTimeToSolve(float percentile) => Distribution.InverseCumulative(percentile);
|
||||
|
||||
private float[] TimesAsSamples()
|
||||
{
|
||||
var samples = new float[Measurements.Count];
|
||||
|
||||
for (var i = 0; i < Measurements.Count; i++)
|
||||
{
|
||||
samples[i] = Measurements[i].Time;
|
||||
}
|
||||
|
||||
return samples;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Engine.Theme.GetPuzzle(ID)}: avg. {AverageTimeToSolve.ToTimeSpan():m':'ss} ({string.Join(", ", Measurements)})";
|
||||
|
||||
Reference in New Issue
Block a user