Skip to content

Commit bb38d2c

Browse files
committed
Actually running validations
1 parent 5b0c091 commit bb38d2c

14 files changed

+89
-13
lines changed

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/AndKeyFrameCriteriaEvaluator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ namespace RegressionGames.StateRecorder.BotSegments
66
{
77
public static class AndKeyFrameCriteriaEvaluator
88
{
9-
public static bool Matched(bool firstSegment, int segmentNumber, bool botActionCompleted, KeyFrameCriteria criteria)
9+
public static bool Matched(bool firstSegment, int segmentNumber, bool botActionCompleted, bool validationsCompleted, KeyFrameCriteria criteria)
1010
{
1111
if (criteria.data is AndKeyFrameCriteriaData { criteriaList: not null } andCriteria)
1212
{
1313
try
1414
{
15-
return KeyFrameEvaluator.Evaluator.MatchedHelper(firstSegment, segmentNumber, botActionCompleted, BooleanCriteria.And, andCriteria.criteriaList);
15+
return KeyFrameEvaluator.Evaluator.MatchedHelper(firstSegment, segmentNumber, botActionCompleted, validationsCompleted, BooleanCriteria.And, andCriteria.criteriaList);
1616
}
1717
catch (Exception)
1818
{

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/BotSegmentsPlaybackController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ private void EvaluateBotSegments()
490490
nextBotSegmentIndex == 0,
491491
nextBotSegment.Replay_SegmentNumber,
492492
nextBotSegment.Replay_ActionCompleted,
493+
nextBotSegment.Replay_ValidationsCompleted,
493494
nextBotSegment.endCriteria
494495
);
495496

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/JsonConverters/KeyFrameCriteriaJsonConverter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
4343
case KeyFrameCriteriaType.ActionComplete:
4444
data = jObject["data"].ToObject<ActionCompleteKeyFrameCriteriaData>(serializer);
4545
break;
46+
case KeyFrameCriteriaType.ValidationsComplete:
47+
data = jObject["data"].ToObject<ValidationsCompleteKeyFrameCriteriaData>(serializer);
48+
break;
4649
case KeyFrameCriteriaType.CVObjectDetection:
4750
data = jObject["data"].ToObject<CVObjectDetectionKeyFrameCriteriaData>(serializer);
4851
break;

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/KeyFrameEvaluator.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ public void PersistPriorFrameStatus()
8181
/**
8282
* <summary>Publicly callable.. caches the statuses of the last passed key frame for computing delta counts from</summary>
8383
*/
84-
public bool Matched(bool firstSegment, int segmentNumber, bool botActionCompleted, List<KeyFrameCriteria> criteriaList)
84+
public bool Matched(bool firstSegment, int segmentNumber, bool botActionCompleted, bool validationsCompleted, List<KeyFrameCriteria> criteriaList)
8585
{
8686
_newUnmatchedCriteria.Clear();
87-
bool matched = MatchedHelper(firstSegment, segmentNumber, botActionCompleted, BooleanCriteria.And, criteriaList);
87+
bool matched = MatchedHelper(firstSegment, segmentNumber, botActionCompleted, validationsCompleted, BooleanCriteria.And, criteriaList);
8888
if (matched)
8989
{
9090
CVTextCriteriaEvaluator.Cleanup(segmentNumber);
@@ -106,7 +106,7 @@ public bool Matched(bool firstSegment, int segmentNumber, bool botActionComplete
106106
/**
107107
* <summary>Only to be called internally by KeyFrameEvaluator. firstSegment represents if this is the first segment in the current pass's list of segments to evaluate</summary>
108108
*/
109-
internal bool MatchedHelper(bool firstSegment, int segmentNumber, bool botActionCompleted, BooleanCriteria andOr, List<KeyFrameCriteria> criteriaList)
109+
internal bool MatchedHelper(bool firstSegment, int segmentNumber, bool botActionCompleted, bool validationsCompleted, BooleanCriteria andOr, List<KeyFrameCriteria> criteriaList)
110110
{
111111
var objectFinders = Object.FindObjectsByType<ObjectFinder>(FindObjectsSortMode.None);
112112
var currentFrameCount = Time.frameCount;
@@ -194,6 +194,13 @@ internal bool MatchedHelper(bool firstSegment, int segmentNumber, bool botAction
194194
return false;
195195
}
196196
break;
197+
case KeyFrameCriteriaType.ValidationsComplete:
198+
if (!validationsCompleted)
199+
{
200+
_newUnmatchedCriteria.Add("Waiting for validations to complete...");
201+
return false;
202+
}
203+
break;
197204
}
198205
}
199206

@@ -368,7 +375,7 @@ internal bool MatchedHelper(bool firstSegment, int segmentNumber, bool botAction
368375
for (var j = 0; j < orCount; j++)
369376
{
370377
var orEntry = orsToMatch[j];
371-
var m = OrKeyFrameCriteriaEvaluator.Matched(firstSegment, segmentNumber, botActionCompleted, orEntry);
378+
var m = OrKeyFrameCriteriaEvaluator.Matched(firstSegment, segmentNumber, botActionCompleted, validationsCompleted, orEntry);
372379
if (m)
373380
{
374381
if (andOr == BooleanCriteria.Or)
@@ -394,7 +401,7 @@ internal bool MatchedHelper(bool firstSegment, int segmentNumber, bool botAction
394401
for (var j = 0; j < andCount; j++)
395402
{
396403
var andEntry = andsToMatch[j];
397-
var m = AndKeyFrameCriteriaEvaluator.Matched(firstSegment, segmentNumber, botActionCompleted, andEntry);
404+
var m = AndKeyFrameCriteriaEvaluator.Matched(firstSegment, segmentNumber, botActionCompleted, validationsCompleted, andEntry);
398405
if (m)
399406
{
400407
if (andOr == BooleanCriteria.Or)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Text;
3+
using RegressionGames.StateRecorder.JsonConverters;
4+
5+
namespace RegressionGames.StateRecorder.BotSegments.Models.BotCriteria
6+
{
7+
[Serializable]
8+
public class ValidationsCompleteKeyFrameCriteriaData : IKeyFrameCriteriaData
9+
{
10+
public int apiVersion = SdkApiVersion.VERSION_11;
11+
public float timeout = 0.0f;
12+
13+
public void WriteToStringBuilder(StringBuilder stringBuilder)
14+
{
15+
stringBuilder.Append("{\"apiVersion\":");
16+
IntJsonConverter.WriteToStringBuilder(stringBuilder, apiVersion);
17+
stringBuilder.Append(",\"timeout\":");
18+
StringJsonConverter.WriteToStringBuilder(stringBuilder, timeout.ToString());
19+
stringBuilder.Append("}");
20+
}
21+
22+
public override string ToString()
23+
{
24+
StringBuilder sb = new StringBuilder(100);
25+
WriteToStringBuilder(sb);
26+
return sb.ToString();
27+
}
28+
29+
public int EffectiveApiVersion()
30+
{
31+
return apiVersion;
32+
}
33+
}
34+
}

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/Models/BotCriteria/ValidationsCompleteKeyFrameCriteriaData.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/Models/BotSegment.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ public class BotSegment
7171
// Replay only - tracks if we have completed the action for this bot segment
7272
// returns true if botAction.IsCompleted || botAction.IsCompleted==null && Replay_Matched
7373
public bool Replay_ActionCompleted => botAction == null || (botAction.IsCompleted ?? Replay_Matched);
74+
75+
// Replay only - true if we have completed the validations for this bot segment
76+
public bool Replay_ValidationsCompleted => validations.Count == 0 || validations.All(v => v.HasSetAllResults());
7477

7578
public void OnGUI(Dictionary<long, ObjectStatus> currentTransforms, Dictionary<long, ObjectStatus> currentEntities)
7679
{
@@ -142,6 +145,8 @@ public void PauseAction()
142145

143146
public void ProcessValidation()
144147
{
148+
// Go through each validation and process them. If they have not been started yet, this will also
149+
// start them.
145150
foreach (var validation in validations)
146151
{
147152
validation.ProcessValidation(Replay_SegmentNumber);

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/Models/IRGSegmentValidationData.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,17 @@ public interface IRGSegmentValidationData
3939
*/
4040
public void ResetResults();
4141

42+
/**
43+
* Returns true if there are no "UNKNOWN" validations.
44+
*/
45+
public bool HasSetAllResults();
46+
4247
/**
4348
* Returns all results for this particular validation. In some
4449
* cases, this can be a set of results rather than just a single
4550
* result.
4651
*/
47-
public SegmentValidationResultContainer GetResults();
52+
public SegmentValidationResultSetContainer GetResults();
4853

4954
public void WriteToStringBuilder(StringBuilder stringBuilder);
5055

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/Models/KeyFrameCriteriaType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public enum KeyFrameCriteriaType
1111
CVImage,
1212
ActionComplete,
1313
CVObjectDetection,
14+
ValidationsComplete
1415

1516
//FUTURE
1617
//Path,

src/gg.regression.unity.bots/Runtime/Scripts/StateRecorder/BotSegments/Models/SegmentValidation.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@ public class SegmentValidation
2323
public void PrepareValidation(int segmentNumber)
2424
{
2525
data.PrepareValidation(segmentNumber);
26+
_hasStarted = true;
2627
}
2728

2829
// called once per frame
2930
public void ProcessValidation(int segmentNumber)
3031
{
32+
if (!_hasStarted)
33+
{
34+
PrepareValidation(segmentNumber);
35+
}
3136
data.ProcessValidation(segmentNumber);
3237
}
3338

@@ -59,6 +64,11 @@ public void ReplayReset()
5964
data.ResetResults();
6065
}
6166

67+
public bool HasSetAllResults()
68+
{
69+
return data.HasSetAllResults();
70+
}
71+
6272
public void WriteToStringBuilder(StringBuilder stringBuilder)
6373
{
6474
stringBuilder.Append("{\"type\":");

0 commit comments

Comments
 (0)