From 43d6b3ac38b4d15bb30235a2fa6f9a0a0cc85228 Mon Sep 17 00:00:00 2001 From: Ashley Stanton-Nurse Date: Tue, 23 Jan 2024 13:37:26 -0800 Subject: [PATCH 1/2] [REG-1587] Several tidy-ups before release (#6) * move 'view recordings' from context menu to a button * dont destroy on load * move availableBots to OverlayMenu * snapshot rate/only save on changes integrated into editor * add active scene to snapshot * add descriptions to state * make stop all button work * manual recording --- .../Assets/Scenes/MainMenu.unity | 292 ++++--- .../Assets/Prefabs/AutomationUIOverlay.prefab | 732 +++++++++++++++++- .../Editor/AutomationRecorderEditor.cs | 46 ++ .../{Runtime => Editor}/EditorUtilities.cs | 0 .../Automation/AutomationController.cs | 16 +- .../Runtime/Automation/AutomationEntity.cs | 54 +- .../Runtime/Discovery/EntityDiscoverer.cs | 18 + .../Runtime/Discovery/UIElementDiscoverer.cs | 20 +- .../Runtime/Recording/AutomationRecorder.cs | 74 +- .../Runtime/Recording/FrameSnapshot.cs | 118 +-- .../Runtime/Recording/RecorderWorker.cs | 17 +- .../Runtime/Recording/RecordingInfo.cs | 8 +- .../Runtime/Recording/RecordingSession.cs | 16 +- .../Runtime/RegressionGamesJsonFormat.cs | 12 +- .../Runtime/UI/OverlayMenu.cs | 85 +- 15 files changed, 1231 insertions(+), 277 deletions(-) create mode 100644 src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs rename src/gg.regression.unity.testing/{Runtime => Editor}/EditorUtilities.cs (100%) diff --git a/samples/RegressionGames.Unity.Samples.BossRoom/Assets/Scenes/MainMenu.unity b/samples/RegressionGames.Unity.Samples.BossRoom/Assets/Scenes/MainMenu.unity index fdb2545..00c1346 100644 --- a/samples/RegressionGames.Unity.Samples.BossRoom/Assets/Scenes/MainMenu.unity +++ b/samples/RegressionGames.Unity.Samples.BossRoom/Assets/Scenes/MainMenu.unity @@ -236,6 +236,63 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &558413513 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1365509991} + m_Modifications: + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9102931413897359214, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + propertyPath: m_Name + value: UI Element Discoverer + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} --- !u!1 &775006346 GameObject: m_ObjectHideFlags: 0 @@ -365,63 +422,68 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 078016714dfe43544bec491cb00fa469, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1001 &1417670203 +--- !u!1001 &1365509990 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: - m_TransformParent: {fileID: 1782097060} + m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 5756155928033506571, guid: 51000bb6e98f8490da0c727627912430, type: 3} + propertyPath: m_Name + value: Automation Controller + objectReference: {fileID: 0} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_RootOrder - value: 0 + value: 1 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7251586715107205044, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 9102931413897359214, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} - propertyPath: m_Name - value: UI Element Discoverer - objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 0dbf2887e9ac64971b46d2cee19621da, type: 3} + m_SourcePrefab: {fileID: 100100000, guid: 51000bb6e98f8490da0c727627912430, type: 3} +--- !u!4 &1365509991 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + m_PrefabInstance: {fileID: 1365509990} + m_PrefabAsset: {fileID: 0} --- !u!1 &1428455896 GameObject: m_ObjectHideFlags: 0 @@ -586,84 +648,111 @@ MonoBehaviour: m_ShadowLayerMask: 1 m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} ---- !u!1001 &1782097059 +--- !u!1001 &1724692687 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 1791510578999917186, guid: 51000bb6e98f8490da0c727627912430, type: 3} - propertyPath: availableBots.Array.size - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1791510578999917186, guid: 51000bb6e98f8490da0c727627912430, type: 3} - propertyPath: availableBots.Array.data[0] - value: - objectReference: {fileID: 2263835764165809147, guid: cc55d9a0603764feaab6ec07edba0e80, type: 3} - - target: {fileID: 5756155928033506571, guid: 51000bb6e98f8490da0c727627912430, type: 3} - propertyPath: m_Name - value: Automation Controller + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_Pivot.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_RootOrder - value: 1 + value: 2 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} + - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6528849027478110110, guid: 51000bb6e98f8490da0c727627912430, type: 3} - propertyPath: m_Enabled + - target: {fileID: 2112976670597586734, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: m_Name + value: RegressionGames UI Overlay + objectReference: {fileID: 0} + - target: {fileID: 7698302943537031124, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: availableBots.Array.size value: 1 objectReference: {fileID: 0} - - target: {fileID: 6528849027478110110, guid: 51000bb6e98f8490da0c727627912430, type: 3} - propertyPath: snapshotRate + - target: {fileID: 7698302943537031124, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} + propertyPath: availableBots.Array.data[0] + value: + objectReference: {fileID: 2263835764165809147, guid: cc55d9a0603764feaab6ec07edba0e80, type: 3} + - target: {fileID: 1791510578999917186, guid: 51000bb6e98f8490da0c727627912430, type: 3} + propertyPath: availableBots.Array.size value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 51000bb6e98f8490da0c727627912430, type: 3} ---- !u!4 &1782097060 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 6183782300198770710, guid: 51000bb6e98f8490da0c727627912430, type: 3} - m_PrefabInstance: {fileID: 1782097059} - m_PrefabAsset: {fileID: 0} + m_SourcePrefab: {fileID: 100100000, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} --- !u!1001 &1838009163 PrefabInstance: m_ObjectHideFlags: 0 @@ -871,103 +960,6 @@ MonoBehaviour: m_ShadowLayerMask: 1 m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} ---- !u!1001 &1916675512 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_Pivot.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_Pivot.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 922587998651755810, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2112976670597586734, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} - propertyPath: m_Name - value: RegressionGames UI Overlay - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 31f59ce7ace824cefa5b0898b02bde9e, type: 3} --- !u!1 &2059237618 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1039067170141175843, guid: 2ecb76f53a4cb994eb9a7c9d30aa68ec, type: 3} diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab index e7deed3..e91ac8e 100644 --- a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab +++ b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab @@ -510,13 +510,15 @@ RectTransform: m_Children: - {fileID: 4166502597001255289} - {fileID: 8517976964532620353} + - {fileID: 54300771319633709} + - {fileID: 5578094982054500980} m_Father: {fileID: 79758708357021487} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: -15} - m_SizeDelta: {x: 300, y: 30} + m_SizeDelta: {x: 300, y: 70} m_Pivot: {x: 1, y: 1} --- !u!1 &841294554154280020 GameObject: @@ -1234,6 +1236,11 @@ MonoBehaviour: botListRoot: {fileID: 8935377145966792234} botListEntryPrefab: {fileID: 7521977320760550747, guid: 26ea560b8554d4c93a150b276b8ba6c8, type: 3} nextBotDropdown: {fileID: 6170958243685975978} + recordButton: {fileID: 590096121768360137} + stopRecordingButton: {fileID: 7850780395078983416} + activeRecordingText: {fileID: 4162554419346896232} + availableBots: [] + dontDestroyOnLoad: 1 --- !u!1 &2351678533587064278 GameObject: m_ObjectHideFlags: 0 @@ -1310,6 +1317,143 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2609898800142458388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 685705139112668217} + - component: {fileID: 66622186995538865} + - component: {fileID: 559500631396320185} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &685705139112668217 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609898800142458388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 54300771319633709} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &66622186995538865 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609898800142458388} + m_CullTransparentMesh: 1 +--- !u!114 &559500631396320185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609898800142458388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Record + +' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 65dbdc6066cd147148a43dcda4f3db72, type: 2} + m_sharedMaterial: {fileID: 5049960194168288241, guid: 65dbdc6066cd147148a43dcda4f3db72, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &2646897586684459038 GameObject: m_ObjectHideFlags: 0 @@ -1567,6 +1711,178 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!1 &2746830302693416798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5578094982054500980} + - component: {fileID: 6624428447272349087} + - component: {fileID: 3510920158231645137} + - component: {fileID: 7850780395078983416} + m_Layer: 0 + m_Name: Stop Recording Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &5578094982054500980 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2746830302693416798} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7263963422753502464} + m_Father: {fileID: 2498676064412855904} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 145, y: 30} + m_Pivot: {x: 1, y: 0} +--- !u!222 &6624428447272349087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2746830302693416798} + m_CullTransparentMesh: 1 +--- !u!114 &3510920158231645137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2746830302693416798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7850780395078983416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2746830302693416798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.5764706, g: 0, b: 0, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3510920158231645137} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7698302943537031124} + m_TargetAssemblyTypeName: RegressionGames.Unity.UI.OverlayMenu, RegressionGames.Unity + m_MethodName: OnStopRecordingClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2830005019463968551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6980687786775557897} + m_Layer: 0 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6980687786775557897 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2830005019463968551} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5137324711093105735} + - {fileID: 2952284536930445046} + m_Father: {fileID: 79758708357021487} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 570, y: 70} + m_Pivot: {x: 0, y: 1} --- !u!1 &3607023646969454214 GameObject: m_ObjectHideFlags: 0 @@ -1683,6 +1999,141 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4368399437827336757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2952284536930445046} + - component: {fileID: 4188711788661569822} + - component: {fileID: 4162554419346896232} + m_Layer: 0 + m_Name: Active Recording Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2952284536930445046 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368399437827336757} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6980687786775557897} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!222 &4188711788661569822 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368399437827336757} + m_CullTransparentMesh: 1 +--- !u!114 &4162554419346896232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4368399437827336757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Active Recording: ' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &4923303111653572628 GameObject: m_ObjectHideFlags: 0 @@ -1818,6 +2269,140 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4944789668560911328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 54300771319633709} + - component: {fileID: 3911901263990404971} + - component: {fileID: 3718233089309853738} + - component: {fileID: 590096121768360137} + m_Layer: 0 + m_Name: Start Recording Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &54300771319633709 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944789668560911328} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 685705139112668217} + m_Father: {fileID: 2498676064412855904} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 145, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!222 &3911901263990404971 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944789668560911328} + m_CullTransparentMesh: 1 +--- !u!114 &3718233089309853738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944789668560911328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &590096121768360137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4944789668560911328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0, g: 0.5764706, b: 0, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3718233089309853738} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7698302943537031124} + m_TargetAssemblyTypeName: RegressionGames.Unity.UI.OverlayMenu, RegressionGames.Unity + m_MethodName: OnStartRecordingClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &5773284098655040110 GameObject: m_ObjectHideFlags: 0 @@ -1982,13 +2567,13 @@ RectTransform: - {fileID: 1312325964946490104} - {fileID: 217473772360689220} - {fileID: 591223055253638297} - m_Father: {fileID: 79758708357021487} + m_Father: {fileID: 6980687786775557897} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -15} - m_SizeDelta: {x: -315, y: 30} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} m_Pivot: {x: 0, y: 1} --- !u!222 &6708820081420698558 CanvasRenderer: @@ -2110,7 +2695,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 5137324711093105735} + - {fileID: 6980687786775557897} - {fileID: 2498676064412855904} - {fileID: 518872348567761840} m_Father: {fileID: 5039448861903916184} @@ -2197,6 +2782,141 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7552929043118834554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7263963422753502464} + - component: {fileID: 5850793095906158493} + - component: {fileID: 8491207707755475172} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7263963422753502464 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7552929043118834554} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5578094982054500980} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &5850793095906158493 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7552929043118834554} + m_CullTransparentMesh: 1 +--- !u!114 &8491207707755475172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7552929043118834554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Stop Rec + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 65dbdc6066cd147148a43dcda4f3db72, type: 2} + m_sharedMaterial: {fileID: 5049960194168288241, guid: 65dbdc6066cd147148a43dcda4f3db72, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &8098900304240769496 GameObject: m_ObjectHideFlags: 0 @@ -2233,7 +2953,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: -55} + m_SizeDelta: {x: 0, y: -85} m_Pivot: {x: 0, y: 0} --- !u!1 &8391434556645818400 GameObject: diff --git a/src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs b/src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs new file mode 100644 index 0000000..1ddb78d --- /dev/null +++ b/src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs @@ -0,0 +1,46 @@ +using RegressionGames.Unity.Recording; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace RegressionGames.Unity +{ + [CustomEditor(typeof(AutomationRecorder))] + public class AutomationRecorderEditor: Editor + { + public override VisualElement CreateInspectorGUI() + { + var myInspector = new VisualElement(); + + myInspector.Add(new PropertyField(serializedObject.FindProperty("recordingDirectory"),"Recording Directory")); + myInspector.Add(new PropertyField(serializedObject.FindProperty("snapshotRate"),"Snapshot Rate")); + myInspector.Add(new PropertyField(serializedObject.FindProperty("saveSnapshotsOnlyWhenChanged"), + "Only Save Changes")); + myInspector.Add(new Button(() => + { + var recorder = (AutomationRecorder) target; + var recordingDir = recorder.GetRecordingDirectory(); + if(string.IsNullOrEmpty(recordingDir)) + { + EditorUtility.DisplayDialog( + "No Recording Directory", + "The AutomationRecorder component does not have a recording directory specified.", + "OK"); + return; + } + + // Open the directory + EditorUtilities.OpenFileBrowser(recordingDir); + }) + { + text = "View recordings...", + style = + { + marginTop = 10, + } + }); + + return myInspector; + } + } +} diff --git a/src/gg.regression.unity.testing/Runtime/EditorUtilities.cs b/src/gg.regression.unity.testing/Editor/EditorUtilities.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/EditorUtilities.cs rename to src/gg.regression.unity.testing/Editor/EditorUtilities.cs diff --git a/src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs b/src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs index 6f2621f..b33e902 100644 --- a/src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs +++ b/src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs @@ -16,16 +16,24 @@ public class AutomationController: MonoBehaviour // For now though, we'll implement those finders by iterating the list, until we have a need to optimize. private readonly List m_Entities = new(); - [Tooltip("Bots that can be spawned in the scene by this controller.")] - public Bot[] availableBots; - [HideInInspector] public AutomationRecorder automationRecorder; + [Tooltip("If true, the controller will automatically set 'DontDestroyOnLoad' on itself when spawned.")] + public bool dontDestroyOnLoad = true; + public IReadOnlyList Entities => m_Entities; public Bot[] GetAllBots() => GetComponentsInChildren(includeInactive: true); + private void Awake() + { + if (dontDestroyOnLoad) + { + DontDestroyOnLoad(this.gameObject); + } + } + public Bot Spawn(Bot bot) { var spawned = Instantiate(bot, transform); @@ -37,8 +45,6 @@ public Bot Spawn(Bot bot) public void RegisterEntity(AutomationEntity entity) { - // We need to wrap the entity in a proxy that allows us to monitor what's going on with it. - entity.SetAutomationController(this); m_Entities.Add(entity); } diff --git a/src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs b/src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs index 8d512bf..da34f56 100644 --- a/src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs +++ b/src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs @@ -18,8 +18,6 @@ internal interface IAutomationEntityWithComponent /// public abstract class AutomationEntity { - internal AutomationController AutomationController; - /// /// The unique ID of this entity. /// @@ -30,6 +28,12 @@ public abstract class AutomationEntity /// public string Name { get; } + /// + /// A user-visible type name for the entity, to allow for easier identification. + /// By default, this is the .NET type name of the entity. + /// + public virtual string Type => GetType().FullName; + /// /// Gets a description of what the entity represents. /// This can be provided to a language model or other tool to help it understand what the action does. @@ -54,12 +58,7 @@ protected AutomationEntity(int id, string name, string description) // TODO: This API has similar problems to the existing RGState APIs (multiple dictionaries, lots of allocations, etc.) // Once the refactor of the RGState mechanism lands in the main SDK we can use that to inform how this can evolve. // This is an IEnumerable instead of an IReadOnlyDictionary because it's much more efficient when all you're doing is dumping the state to a file. - public virtual IEnumerable> GetState() => Enumerable.Empty>(); - - internal void SetAutomationController(AutomationController controller) - { - AutomationController = controller; - } + public virtual IEnumerable GetState() => Enumerable.Empty(); } public abstract class AutomationEntity : AutomationEntity, IAutomationEntityWithComponent where T : Component @@ -68,6 +67,12 @@ public abstract class AutomationEntity : AutomationEntity, IAutomationEntityW public T Component => m_Component; + /// + /// A user-visible type name for the entity, to allow for easier identification. + /// By default, this is the .NET type name of the component. + /// + public override string Type => typeof(T).FullName; + Component IAutomationEntityWithComponent.Component => m_Component; protected AutomationEntity(T component, string description) : base(component.transform.GetInstanceID(), @@ -126,17 +131,48 @@ protected AutomationAction(string name, string description, AutomationEntity ent public void Activate() { - m_LastActivation = new(Time.frameCount); + MarkActivated(); Execute(); } + protected void MarkActivated() + { + m_LastActivation = new(Time.frameCount); + } + /// /// Activates this action. /// protected abstract void Execute(); } + public struct AutomationStateProperty + { + /// + /// The name of the state property. + /// + public string name; + + /// + /// A description of what the state property represents. + /// + public string description; + + /// + /// The value of the state property. + /// + public object value; + + public AutomationStateProperty(string name, string description, object value) + { + this.name = name; + this.description = description; + this.value = value; + } + } + // TODO: Capture arguments here. + // TODO: Capture "activators" here, i.e. who actually activated the action (a Bot, a user action, etc.) [Serializable] public struct AutomationActionActivation { diff --git a/src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs b/src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs index 976e719..81919ca 100644 --- a/src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs +++ b/src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs @@ -2,6 +2,7 @@ using System.Linq; using RegressionGames.Unity.Automation; using UnityEngine; +using UnityEngine.SceneManagement; namespace RegressionGames.Unity.Discovery { @@ -13,6 +14,23 @@ protected override void Awake() { base.Awake(); + // Detect scene changes and re-discover entities. + SceneManager.activeSceneChanged += (_, _) => RediscoverEntities(); + + // Discover entities in the current scene. + RediscoverEntities(); + } + + protected virtual void RediscoverEntities() + { + // Unregister existing entities + foreach (var entity in m_Entities) + { + AutomationController.UnregisterEntity(entity); + } + m_Entities.Clear(); + + // Discover new entities foreach (var entity in DiscoverEntities()) { RegisterEntity(entity); diff --git a/src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs b/src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs index 4fa5952..2daca9f 100644 --- a/src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs +++ b/src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs @@ -38,11 +38,11 @@ public UIGroupEntity(CanvasGroup canvasGroup): base(canvasGroup, $"A canvas grou { } - public override IEnumerable> GetState() + public override IEnumerable GetState() { - yield return new("alpha", Component.alpha); - yield return new("interactable", Component.interactable); - yield return new("blocksRaycasts", Component.blocksRaycasts); + yield return new("alpha", "The opacity of the element, from 0.0 (transparent) to 1.0 (fully opaque).", Component.alpha); + yield return new("interactable", "Indicates if the element is interactable.", Component.interactable); + yield return new("blocksRaycasts", "Indicates if the element blocks raycasts from the mouse pointer.", Component.blocksRaycasts); } } @@ -60,6 +60,11 @@ public UISelectableEntity(Selectable selectable): base(selectable, UIUtils.Descr } Actions = actions; } + + public override IEnumerable GetState() + { + yield return new ("interactable", "Indicates if the element is interactable.", Component.IsInteractable()); + } } class UIClickAction : AutomationAction @@ -71,6 +76,13 @@ public UIClickAction(Selectable selectable, AutomationEntity entity): base("Clic { m_Selectable = selectable; m_Log = Logger.For(typeof(UIClickAction).FullName); + + if (selectable is Button b) + { + // This may double-mark the button as activated, but that's fine. + // By doing this, we capture clicks that weren't caused by the bot. + b.onClick.AddListener(MarkActivated); + } } public override bool CanActivateThisFrame() => m_Selectable.IsInteractable(); diff --git a/src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs b/src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs index 9aba656..13ca3df 100644 --- a/src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs +++ b/src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs @@ -2,8 +2,8 @@ using System.Collections; using System.Collections.Generic; using System.IO; +using System.Linq; using RegressionGames.Unity.Automation; -using UnityEditor; using UnityEngine; namespace RegressionGames.Unity.Recording @@ -45,17 +45,20 @@ public void RequestScreenshot(int delayInFrames = 0) m_ScreenshotRequests.Add(Time.frameCount + delayInFrames); } - public RecordingSession StartRecordingSession(string name) + public RecordingSession StartRecordingSession(string name, string title) { + // Make the name file-safe + name = string.Join("_", name.Split(Path.GetInvalidFileNameChars())); + // Generate a session ID for this recording. var sessionId = Guid.NewGuid(); var sessionDirectory = Path.Combine( GetRecordingDirectory(), - sessionId.ToString("N")); + $"{name}.{sessionId:N}"); var archivePath = Path.Combine( GetRecordingDirectory(), - $"{sessionId:N}.rgrec.zip"); - var session = new RecordingSession(this, sessionId, name, sessionDirectory, archivePath, saveSnapshotsOnlyWhenChanged); + $"{name}.{sessionId:N}.rgrec.zip"); + var session = new RecordingSession(this, sessionId, name, title, sessionDirectory, archivePath, saveSnapshotsOnlyWhenChanged); m_Log.Info($"Starting recording session {sessionId:N}. Recording to {sessionDirectory}"); m_ActiveSessions.Add(session); return session; @@ -115,10 +118,8 @@ IEnumerator RecordFrame() yield break; } - // Create a frame snapshot - var snapshot = FrameSnapshot.Create( - FrameInfo.ForCurrentFrame(), - AutomationController.Entities); + // Build the frame snapshot + var snapshot = BuildFrameSnapshot(); // Take a screenshot if someone requested it. var screenshotBytes = TakeScreenshotIfRequested(); @@ -130,6 +131,42 @@ IEnumerator RecordFrame() } } + private FrameSnapshot BuildFrameSnapshot() + { + // Builds a frame snapshot, and also takes actions based on things that happened in this snapshot. + // For example, as we build the snapshot we track if any actions were activated and if they were, we request a screenshot next frame. + + var entities = new List(); + var anyActionActivatedThisFrame = false; + foreach(var entity in AutomationController.Entities) + { + var actions = new List(); + foreach (var (name, action) in entity.Actions.OrderBy(p => p.Key)) + { + anyActionActivatedThisFrame |= action.ActivatedThisFrame; + actions.Add(ActionSnapshot.Create(action)); + } + + var states = entity.GetState() + .OrderBy(s => s.name) + .Select(s => new KeyValuePair(s.name, new(s.value, s.description))) + .ToList(); + + entities.Add(new(entity.Id, entity.Name, entity.Type, entity.Description, actions, states)); + } + + if (anyActionActivatedThisFrame) + { + // If any action was activated this frame, we want to take a screenshot next frame. + RequestScreenshot(1); + } + + return new FrameSnapshot( + FrameInfo.ForCurrentFrame(), + SceneInfo.ForCurrentScene(), + entities); + } + private byte[] TakeScreenshotIfRequested() { if (m_ScreenshotRequests.Remove(Time.frameCount)) @@ -152,24 +189,5 @@ internal void StopSession(RecordingSession session) { m_ActiveSessions.Remove(session); } - -#if UNITY_EDITOR - [ContextMenu("Open Recording Directory")] - public void OpenRecordingsDirectory() - { - var recordingDir = GetRecordingDirectory(); - if(string.IsNullOrEmpty(recordingDir)) - { - EditorUtility.DisplayDialog( - "No Recording Directory", - "The AutomationRecorder component in the active scene does not have a recording directory specified.", - "OK"); - return; - } - - // Open the directory - EditorUtilities.OpenFileBrowser(recordingDir); - } -#endif } } diff --git a/src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs b/src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs index 5f81323..37ade9d 100644 --- a/src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs +++ b/src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs @@ -3,6 +3,7 @@ using System.Linq; using RegressionGames.Unity.Automation; using UnityEngine; +using UnityEngine.SceneManagement; namespace RegressionGames.Unity.Recording { @@ -11,11 +12,14 @@ namespace RegressionGames.Unity.Recording /// This snapshot is not coupled to the live game objects and can be stored safely between frames. /// [Serializable] - public class FrameSnapshot: IEquatable + public class FrameSnapshot { /// A containing basic information about the frame. public FrameInfo frame; + /// A containing information about the active scene. + public SceneInfo activeScene; + /// A list of objects representing the state of each entity in the game. public List entities; @@ -23,45 +27,55 @@ public class FrameSnapshot: IEquatable /// A snapshot of the state of all entities in the game. /// /// A representing the current frame. + /// A representing the active scene. /// A list of objects representing the state of each entity in the game. - public FrameSnapshot(FrameInfo frame, List entities) + public FrameSnapshot(FrameInfo frame, SceneInfo activeScene, List entities) { this.frame = frame; + this.activeScene = activeScene; this.entities = entities; } /// - /// Creates a representing the current state of the game. + /// Compares this snapshot to another snapshot and returns a boolean indicating if this snapshot has changed since the other snapshot. + /// This comparison ignores the field, because it is expected that the frame will always change. /// - /// A representing the current frame. - /// The objects in the game. - /// A that can be stored safely between frames. - public static FrameSnapshot Create(FrameInfo frame, IEnumerable entities) + /// The to compare against. + /// A boolean indicating if this snapshot has changes compared to the provided snapshot. + public bool HasChangesFrom(FrameSnapshot other) { - // Make sure we always store the entities in the same order, it makes it easier to compare snapshots. - var entitySnapshots = entities.Select(EntitySnapshot.Create).OrderBy(s => s.id).ToList(); - return new(frame, entitySnapshots); + return !Equals(activeScene, other.activeScene) || + !Enumerable.SequenceEqual(entities, other.entities); } + } - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != this.GetType()) return false; - return Equals((FrameSnapshot) obj); - } + [Serializable] + public struct SceneInfo : IEquatable + { + /// + /// The name of the scene. + /// + public string name; - public bool Equals(FrameSnapshot other) - { - if (ReferenceEquals(null, other)) return false; - if (ReferenceEquals(this, other)) return true; - return frame.Equals(other.frame) && entities.SequenceEqual(other.entities); - } + /// + /// The path to the scene file. + /// + public string path; - public override int GetHashCode() + public static SceneInfo ForCurrentScene() => Create(SceneManager.GetActiveScene()); + + private static SceneInfo Create(Scene scene) { - return HashCode.Combine(frame, entities); + return new() + { + name = scene.name, + path = scene.path, + }; } + + public bool Equals(SceneInfo other) => name == other.name && path == other.path; + public override bool Equals(object obj) => obj is SceneInfo other && Equals(other); + public override int GetHashCode() => HashCode.Combine(name, path); } [Serializable] @@ -134,6 +148,9 @@ public class EntitySnapshot: IEquatable /// The name of the entity. public string name; + /// The type of the entity. + public string type; + /// A description of the entity. public string description; @@ -141,7 +158,7 @@ public class EntitySnapshot: IEquatable public List actions; /// The raw state values for this entity. - public List> state; + public List> state; /// /// A snapshot of the state of a single entity in the game. @@ -153,42 +170,19 @@ public class EntitySnapshot: IEquatable /// The raw state values for this entity. public EntitySnapshot(int id, string name, + string type, string description, List actions, - List> state) + List> state) { this.id = id; this.name = name; + this.type = type; this.description = description; this.actions = actions; this.state = state; } - /// - /// Creates a representing the current state of the entity. - /// - /// The to snapshot. - /// An that can be stored safely between frames. - public static EntitySnapshot Create(AutomationEntity entity) - { - // Make sure we always store the actions and state in the same order, it makes it easier to compare snapshots. - var actionSnapshots = entity.Actions.Values - .Select(ActionSnapshot.Create) - .OrderBy(s => s.name) - .ToList(); - - var stateSnapshots = entity.GetState() - .OrderBy(s => s.Key) - .ToList(); - - return new( - entity.Id, - entity.Name, - entity.Description, - actionSnapshots, - stateSnapshots); - } - public bool Equals(EntitySnapshot other) { if (ReferenceEquals(null, other)) return false; @@ -210,6 +204,26 @@ public override int GetHashCode() } } + [Serializable] + public struct StateSnapshot + { + /// + /// The value of the state property. + /// + public object value; + + /// + /// A description of the state property. + /// + public string description; + + public StateSnapshot(object value, string description) + { + this.value = value; + this.description = description; + } + } + /// /// A snapshot of the state of a single action on an entity in the game. diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs b/src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs index 811a684..54a4c2e 100644 --- a/src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs +++ b/src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs @@ -1,17 +1,14 @@ using System; using System.Collections.Concurrent; using System.IO; -using System.Linq; using System.Threading; using System.Threading.Tasks; -using Newtonsoft.Json; -using UnityEngine; namespace RegressionGames.Unity.Recording { internal class RecorderWorker { - private readonly string m_SessionId; + private readonly RecordingInfo m_Info; private readonly string m_SessionName; private readonly string m_SessionDirectory; private readonly bool m_SaveOnlyOnChanged; @@ -23,10 +20,9 @@ internal class RecorderWorker public bool IsRunning => !m_StopRequested.IsCancellationRequested; - public RecorderWorker(string sessionId, string sessionName, string sessionDirectory, bool saveOnlyOnChanged) + public RecorderWorker(RecordingInfo info, string sessionDirectory, bool saveOnlyOnChanged) { - m_SessionId = sessionId; - m_SessionName = sessionName; + m_Info = info; m_SessionDirectory = sessionDirectory; m_SaveOnlyOnChanged = saveOnlyOnChanged; @@ -43,7 +39,7 @@ public RecorderWorker(string sessionId, string sessionName, string sessionDirect } }) { - Name = GetType().FullName + Name = $"{GetType().FullName} - Session {info.id}", }; m_StopRequested = new CancellationTokenSource(); } @@ -79,8 +75,7 @@ void Main() } // Record the recording metadata file - var info = RecordingInfo.Create(m_SessionId, m_SessionName); - var infoJson = RegressionGamesJsonFormat.Serialize(info); + var infoJson = RegressionGamesJsonFormat.Serialize(m_Info); var infoPath = Path.Combine(m_SessionDirectory, "recording.json"); File.WriteAllText(infoPath, infoJson); @@ -132,7 +127,7 @@ private bool ShouldSaveSnapshot(FrameRecordAction action) return true; } - return !m_LastSnapshot.entities.SequenceEqual(action.Snapshot.entities); + return action.Snapshot.HasChangesFrom(m_LastSnapshot); } internal class FrameRecordAction diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs b/src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs index eb5d214..7b19df9 100644 --- a/src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs +++ b/src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs @@ -38,12 +38,18 @@ public struct RecordingInfo /// public string startTime; - public static RecordingInfo Create(string id, string name) + /// + /// The title of the recording session. + /// + public string title; + + public static RecordingInfo Create(string id, string name, string title) { return new() { id = id, name = name, + title = title, version = 1, machineName = Environment.MachineName, userName = Environment.UserName, diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs b/src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs index 066cc30..825b746 100644 --- a/src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs +++ b/src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs @@ -1,6 +1,8 @@ using System; +using System.IO; using System.IO.Compression; -using UnityEngine.Windows; +using System.Linq; +using File = UnityEngine.Windows.File; namespace RegressionGames.Unity.Recording { @@ -11,6 +13,7 @@ public class RecordingSession private readonly AutomationRecorder m_Recorder; private readonly Guid m_Id; private readonly string m_Name; + private readonly string m_Title; private readonly string m_Directory; private readonly string m_ArchivePath; private bool m_RecordingSaved; @@ -20,6 +23,11 @@ public class RecordingSession /// public Guid Id => m_Id; + /// + /// Gets the name of the recording session. + /// + public string Name => m_Name; + /// /// Gets the directory in which data from the recording is being written. /// When the recording has stopped, this directory may be deleted and the data moved to . @@ -37,17 +45,19 @@ public class RecordingSession /// public bool IsRecording => m_RecorderWorker.IsRunning; - internal RecordingSession(AutomationRecorder recorder, Guid id, string name, string directory, string archivePath, bool saveOnlyOnChanged) + internal RecordingSession(AutomationRecorder recorder, Guid id, string name, string title, string directory, string archivePath, bool saveOnlyOnChanged) { m_Log = Logger.For(typeof(RecordingSession).FullName); m_Recorder = recorder; m_Id = id; m_Name = name; + m_Title = title; m_Directory = directory; m_ArchivePath = archivePath; // Spawn the recorder background thread. - m_RecorderWorker = new RecorderWorker(m_Id.ToString("N"), m_Name, m_Directory, saveOnlyOnChanged); + var recordingInfo = RecordingInfo.Create(m_Id.ToString("N"), name, title); + m_RecorderWorker = new RecorderWorker(recordingInfo, m_Directory, saveOnlyOnChanged); m_RecorderWorker.Start(); } diff --git a/src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs b/src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs index e7f3f87..4962d42 100644 --- a/src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs +++ b/src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using RegressionGames.Unity.Recording; namespace RegressionGames.Unity { @@ -16,7 +17,7 @@ private static JsonSerializerSettings CreateJsonSerializerSettings() Formatting = Formatting.Indented, ContractResolver = new CamelCasePropertyNamesContractResolver(), }; - settings.Converters.Add(new ListOfKeyValuePairsConverter()); + settings.Converters.Add(new ListOfKeyValuePairsConverter()); return settings; } @@ -31,11 +32,14 @@ public static T Deserialize(string json) } } - class ListOfKeyValuePairsConverter : JsonConverter + /// + /// Serializes a as a JSON object. + /// + class ListOfKeyValuePairsConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - var list = (List>) value; + var list = (List>) value; writer.WriteStartObject(); foreach (var (key, val) in list) { @@ -52,7 +56,7 @@ public override object ReadJson( throw new NotImplementedException(); } - public override bool CanConvert(Type objectType) => objectType == typeof(List>); + public override bool CanConvert(Type objectType) => objectType == typeof(List>); public override bool CanRead => false; } diff --git a/src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs b/src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs index 95ac807..4d47d5d 100644 --- a/src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs +++ b/src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs @@ -6,6 +6,7 @@ using TMPro; using UnityEditor; using UnityEngine; +using UnityEngine.UI; namespace RegressionGames.Unity.UI { @@ -17,17 +18,42 @@ internal class OverlayMenu: MonoBehaviour private readonly Dictionary m_BotListEntries = new(); private readonly Dictionary m_RecordingSessionsByBotInstance = new(); private readonly Logger m_Log; + private RecordingSession m_ManualRecordingSession; + [HideInInspector] public GameObject overlayPanel; + [HideInInspector] public GameObject botListRoot; + [HideInInspector] public GameObject botListEntryPrefab; + [HideInInspector] public TMP_Dropdown nextBotDropdown; + [HideInInspector] + public Button recordButton; + [HideInInspector] + public Button stopRecordingButton; + [HideInInspector] + public TMP_Text activeRecordingText; + + [Tooltip("Bots that can be spawned in the scene from this UI.")] + public Bot[] availableBots; + + [Tooltip("If true, the UI overlay will automatically set 'DontDestroyOnLoad' on itself when spawned.")] + public bool dontDestroyOnLoad = true; public OverlayMenu() { m_Log = Logger.For(this); } + private void Awake() + { + if (dontDestroyOnLoad) + { + DontDestroyOnLoad(this.gameObject); + } + } + private void Start() { // Hide to start with. @@ -45,6 +71,29 @@ public void OnCloseButtonClick() overlayPanel.SetActive(false); } + public void OnStartRecordingClick() + { + if(m_ManualRecordingSession != null) + { + return; + } + + var automationRecorder = FindObjectOfType(); + m_ManualRecordingSession = automationRecorder.StartRecordingSession("manual", "Manual Session"); + overlayPanel.SetActive(false); + } + + public void OnStopRecordingClick() + { + if(m_ManualRecordingSession == null) + { + return; + } + + m_ManualRecordingSession.Stop(); + m_ManualRecordingSession = null; + } + public void OnStartBotClick() { var automationController = GetAutomationController(); @@ -53,7 +102,7 @@ public void OnStartBotClick() return; } - var bot = automationController.availableBots[nextBotDropdown.value]; + var bot = availableBots[nextBotDropdown.value]; if (bot == null) { return; @@ -69,7 +118,7 @@ public void OnStartBotClick() if (automationRecorder != null && !m_RecordingSessionsByBotInstance.ContainsKey(botInstance.InstanceId)) { var date = DateTimeOffset.Now.ToString("s"); - var session = automationRecorder.StartRecordingSession($"Auto-Recording for Bot {botInstance.InstanceId} at {date}"); + var session = automationRecorder.StartRecordingSession(bot.name, $"Auto-Recording for Bot {botInstance.InstanceId} at {date}"); m_RecordingSessionsByBotInstance.Add(botInstance.InstanceId, session); } @@ -77,6 +126,20 @@ public void OnStartBotClick() overlayPanel.SetActive(false); } + public void OnStopAllBotsClick() + { + var automationController = GetAutomationController(); + if (automationController == null) + { + return; + } + + foreach (var bot in automationController.GetAllBots()) + { + StopBot(bot); + } + } + public void StopBot(Bot bot) { if (m_RecordingSessionsByBotInstance.TryGetValue(bot.InstanceId, out var session)) @@ -133,11 +196,11 @@ private void UpdateUI() } // Build a list of available bots - var availableBots = automationController.availableBots + var availableBotOptions = availableBots .Select(b => new TMP_Dropdown.OptionData(b.name)) .OrderBy(s => s) .ToList(); - nextBotDropdown.options = availableBots; + nextBotDropdown.options = availableBotOptions; // Update the list of active bots var bots = automationController.GetAllBots(); @@ -178,6 +241,20 @@ private void UpdateUI() var position = new Vector3(0f, rt.rect.height * -i, 0f); entries[i].transform.localPosition = position; } + + if (m_ManualRecordingSession != null) + { + stopRecordingButton.gameObject.SetActive(true); + recordButton.gameObject.SetActive(false); + activeRecordingText.gameObject.SetActive(true); + activeRecordingText.text = $"Recording: {m_ManualRecordingSession.Name}.{m_ManualRecordingSession.Id:N}"; + } + else + { + stopRecordingButton.gameObject.SetActive(false); + recordButton.gameObject.SetActive(true); + activeRecordingText.gameObject.SetActive(false); + } } private AutomationController GetAutomationController() From b2fef146f0098e30d0e32768cdf7321862e61537 Mon Sep 17 00:00:00 2001 From: Ashley Stanton-Nurse Date: Wed, 24 Jan 2024 10:11:05 -0800 Subject: [PATCH 2/2] [REG-1596] Add '.meta' files and fix prefab links and logo import settings (#8) * add '.meta' files * move scripts to 'Assets/Scripts' * more meta files * re-add Monkey Bot to UI Overlay prefab * set logo images to Sprite mode --- src/UnityHostGame/.gitignore | 3 + src/UnityHostGame/Assets/Scenes.meta | 8 ++ .../Assets/Scenes/SampleScene.unity.meta | 7 + src/gg.regression.unity.testing/.gitignore | 3 + .../Assets/Fonts.meta | 8 ++ .../Assets/Fonts/Regression SDF.asset.meta | 8 ++ .../Assets/Fonts/Regression.ttf.meta | 22 ++++ .../Assets/Prefabs.meta | 8 ++ .../Prefabs/ActiveBotListEntry.prefab.meta | 7 + .../Prefabs/AutomationController.prefab.meta | 7 + .../Assets/Prefabs/AutomationUIOverlay.prefab | 3 +- .../Prefabs/AutomationUIOverlay.prefab.meta | 7 + .../Assets/Prefabs/MonkeyBot.prefab.meta | 7 + .../Prefabs/UIElementDiscoverer.prefab.meta | 7 + .../Assets/Scripts.meta | 8 ++ .../Assets/Scripts/Editor.meta | 8 ++ .../Editor/AutomationRecorderEditor.cs | 0 .../Editor/AutomationRecorderEditor.cs.meta | 11 ++ .../Scripts}/Editor/CreateGameObjectMenus.cs | 0 .../Editor/CreateGameObjectMenus.cs.meta | 11 ++ .../Scripts}/Editor/EditorUtilities.cs | 0 .../Scripts/Editor/EditorUtilities.cs.meta | 11 ++ .../RegressionGames.Unity.Editor.asmdef | 0 .../RegressionGames.Unity.Editor.asmdef.meta | 7 + .../Assets/Scripts/Runtime.meta | 8 ++ .../Assets/Scripts/Runtime/Automation.meta | 8 ++ .../Runtime/Automation/Automatable.cs | 0 .../Runtime/Automation/Automatable.cs.meta | 11 ++ .../Runtime/Automation/AutomationBehavior.cs | 0 .../Automation/AutomationBehavior.cs.meta | 11 ++ .../Automation/AutomationController.cs | 0 .../Automation/AutomationController.cs.meta | 11 ++ .../Runtime/Automation/AutomationEntity.cs | 0 .../Automation/AutomationEntity.cs.meta | 11 ++ .../Scripts}/Runtime/Automation/Bot.cs | 0 .../Scripts/Runtime/Automation/Bot.cs.meta | 11 ++ .../Runtime/Automation/BotConfiguration.cs | 0 .../Automation/BotConfiguration.cs.meta | 11 ++ .../Scripts}/Runtime/Automation/BotState.cs | 0 .../Runtime/Automation/BotState.cs.meta | 11 ++ .../Scripts}/Runtime/Automation/MonkeyBot.cs | 0 .../Runtime/Automation/MonkeyBot.cs.meta | 11 ++ .../Assets/Scripts/Runtime/Discovery.meta | 8 ++ .../Runtime/Discovery/EntityDiscoverer.cs | 0 .../Discovery/EntityDiscoverer.cs.meta | 11 ++ .../Runtime/Discovery/UIElementDiscoverer.cs | 0 .../Discovery/UIElementDiscoverer.cs.meta | 11 ++ .../Scripts}/Runtime/EmptyDictionary.cs | 0 .../Scripts/Runtime/EmptyDictionary.cs.meta | 11 ++ .../{ => Assets/Scripts}/Runtime/Logger.cs | 0 .../Assets/Scripts/Runtime/Logger.cs.meta | 11 ++ .../Assets/Scripts/Runtime/Recording.meta | 8 ++ .../Runtime/Recording/AutomationRecorder.cs | 0 .../Recording/AutomationRecorder.cs.meta | 11 ++ .../Runtime/Recording/FrameSnapshot.cs | 0 .../Runtime/Recording/FrameSnapshot.cs.meta | 11 ++ .../Runtime/Recording/IAutomationObserver.cs | 0 .../Recording/IAutomationObserver.cs.meta | 11 ++ .../Runtime/Recording/RecorderWorker.cs | 0 .../Runtime/Recording/RecorderWorker.cs.meta | 11 ++ .../Runtime/Recording/RecordingInfo.cs | 0 .../Runtime/Recording/RecordingInfo.cs.meta | 11 ++ .../Runtime/Recording/RecordingSession.cs | 0 .../Recording/RecordingSession.cs.meta | 11 ++ .../Runtime/RegressionGames.Unity.asmdef | 0 .../Runtime/RegressionGames.Unity.asmdef.meta | 7 + .../Runtime/RegressionGamesJsonFormat.cs | 0 .../Runtime/RegressionGamesJsonFormat.cs.meta | 11 ++ .../Scripts}/Runtime/TMProHelper.cs | 0 .../Scripts/Runtime/TMProHelper.cs.meta | 11 ++ .../Assets/Scripts/Runtime/UI.meta | 8 ++ .../Scripts}/Runtime/UI/BotListEntry.cs | 0 .../Scripts/Runtime/UI/BotListEntry.cs.meta | 11 ++ .../Scripts}/Runtime/UI/IconPulser.cs | 0 .../Scripts/Runtime/UI/IconPulser.cs.meta | 11 ++ .../Scripts}/Runtime/UI/OverlayMenu.cs | 0 .../Scripts/Runtime/UI/OverlayMenu.cs.meta | 11 ++ .../{ => Assets/Scripts}/Runtime/UIUtils.cs | 0 .../Assets/Scripts/Runtime/UIUtils.cs.meta | 11 ++ .../Assets/Textures.meta | 8 ++ .../Assets/Textures/RG_Logo.png.meta | 123 ++++++++++++++++++ .../Assets/Textures/ui_ptag_glow.png.meta | 123 ++++++++++++++++++ 82 files changed, 725 insertions(+), 1 deletion(-) create mode 100644 src/UnityHostGame/Assets/Scenes.meta create mode 100644 src/UnityHostGame/Assets/Scenes/SampleScene.unity.meta create mode 100644 src/gg.regression.unity.testing/Assets/Fonts.meta create mode 100644 src/gg.regression.unity.testing/Assets/Fonts/Regression SDF.asset.meta create mode 100644 src/gg.regression.unity.testing/Assets/Fonts/Regression.ttf.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs/ActiveBotListEntry.prefab.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs/AutomationController.prefab.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs/MonkeyBot.prefab.meta create mode 100644 src/gg.regression.unity.testing/Assets/Prefabs/UIElementDiscoverer.prefab.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Editor.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Editor/AutomationRecorderEditor.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Editor/CreateGameObjectMenus.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Editor/EditorUtilities.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Editor/RegressionGames.Unity.Editor.asmdef (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/Automatable.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/AutomationBehavior.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/AutomationController.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/AutomationEntity.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/Bot.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/BotConfiguration.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/BotState.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Automation/MonkeyBot.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Discovery/EntityDiscoverer.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Discovery/UIElementDiscoverer.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/EmptyDictionary.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Logger.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/AutomationRecorder.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/FrameSnapshot.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/IAutomationObserver.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/RecorderWorker.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/RecordingInfo.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/Recording/RecordingSession.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/RegressionGames.Unity.asmdef (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/RegressionGamesJsonFormat.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/TMProHelper.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs.meta create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/UI/BotListEntry.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/UI/IconPulser.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/UI/OverlayMenu.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs.meta rename src/gg.regression.unity.testing/{ => Assets/Scripts}/Runtime/UIUtils.cs (100%) create mode 100644 src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs.meta create mode 100644 src/gg.regression.unity.testing/Assets/Textures.meta create mode 100644 src/gg.regression.unity.testing/Assets/Textures/RG_Logo.png.meta create mode 100644 src/gg.regression.unity.testing/Assets/Textures/ui_ptag_glow.png.meta diff --git a/src/UnityHostGame/.gitignore b/src/UnityHostGame/.gitignore index 7a5cd83..bcdda6a 100644 --- a/src/UnityHostGame/.gitignore +++ b/src/UnityHostGame/.gitignore @@ -14,6 +14,9 @@ # They also could contain extremely sensitive data /[Mm]emoryCaptures/ +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + # Recordings can get excessive in size /[Rr]ecordings/ diff --git a/src/UnityHostGame/Assets/Scenes.meta b/src/UnityHostGame/Assets/Scenes.meta new file mode 100644 index 0000000..83c741b --- /dev/null +++ b/src/UnityHostGame/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ea315d0fd7389c41b19996891e99ae3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnityHostGame/Assets/Scenes/SampleScene.unity.meta b/src/UnityHostGame/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/src/UnityHostGame/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/.gitignore b/src/gg.regression.unity.testing/.gitignore index 7a5cd83..bcdda6a 100644 --- a/src/gg.regression.unity.testing/.gitignore +++ b/src/gg.regression.unity.testing/.gitignore @@ -14,6 +14,9 @@ # They also could contain extremely sensitive data /[Mm]emoryCaptures/ +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + # Recordings can get excessive in size /[Rr]ecordings/ diff --git a/src/gg.regression.unity.testing/Assets/Fonts.meta b/src/gg.regression.unity.testing/Assets/Fonts.meta new file mode 100644 index 0000000..22f28fb --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1983e68f025144a9ab87ccce0717b78b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Fonts/Regression SDF.asset.meta b/src/gg.regression.unity.testing/Assets/Fonts/Regression SDF.asset.meta new file mode 100644 index 0000000..f896760 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Fonts/Regression SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65dbdc6066cd147148a43dcda4f3db72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Fonts/Regression.ttf.meta b/src/gg.regression.unity.testing/Assets/Fonts/Regression.ttf.meta new file mode 100644 index 0000000..314a4c3 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Fonts/Regression.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5cba57193c0b64144a35d45f2f46a624 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontNames: + - Liberation Sans + fallbackFontReferences: + - {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs.meta b/src/gg.regression.unity.testing/Assets/Prefabs.meta new file mode 100644 index 0000000..9dc2c20 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ffb570f2db3845d7a42dfba944a6d14 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/ActiveBotListEntry.prefab.meta b/src/gg.regression.unity.testing/Assets/Prefabs/ActiveBotListEntry.prefab.meta new file mode 100644 index 0000000..e9ac130 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs/ActiveBotListEntry.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26ea560b8554d4c93a150b276b8ba6c8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationController.prefab.meta b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationController.prefab.meta new file mode 100644 index 0000000..0ff7181 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationController.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 51000bb6e98f8490da0c727627912430 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab index e91ac8e..a6f66c6 100644 --- a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab +++ b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab @@ -1239,7 +1239,8 @@ MonoBehaviour: recordButton: {fileID: 590096121768360137} stopRecordingButton: {fileID: 7850780395078983416} activeRecordingText: {fileID: 4162554419346896232} - availableBots: [] + availableBots: + - {fileID: 2263835764165809147, guid: cc55d9a0603764feaab6ec07edba0e80, type: 3} dontDestroyOnLoad: 1 --- !u!1 &2351678533587064278 GameObject: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab.meta b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab.meta new file mode 100644 index 0000000..4a691c7 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs/AutomationUIOverlay.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 31f59ce7ace824cefa5b0898b02bde9e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/MonkeyBot.prefab.meta b/src/gg.regression.unity.testing/Assets/Prefabs/MonkeyBot.prefab.meta new file mode 100644 index 0000000..c1345b5 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs/MonkeyBot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cc55d9a0603764feaab6ec07edba0e80 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Prefabs/UIElementDiscoverer.prefab.meta b/src/gg.regression.unity.testing/Assets/Prefabs/UIElementDiscoverer.prefab.meta new file mode 100644 index 0000000..141850a --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Prefabs/UIElementDiscoverer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0dbf2887e9ac64971b46d2cee19621da +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts.meta b/src/gg.regression.unity.testing/Assets/Scripts.meta new file mode 100644 index 0000000..e9443c7 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54bcbceeb837c41a59dcd1f608b4cdb9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Editor.meta b/src/gg.regression.unity.testing/Assets/Scripts/Editor.meta new file mode 100644 index 0000000..65842f7 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 311838ff725be48039121bcd326f86a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs b/src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs similarity index 100% rename from src/gg.regression.unity.testing/Editor/AutomationRecorderEditor.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs.meta new file mode 100644 index 0000000..1da8523 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Editor/AutomationRecorderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61b3db66bd11f4f25bd26a6f7f056075 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Editor/CreateGameObjectMenus.cs b/src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs similarity index 100% rename from src/gg.regression.unity.testing/Editor/CreateGameObjectMenus.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs.meta new file mode 100644 index 0000000..987b0e7 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Editor/CreateGameObjectMenus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a2bd0a526fdd4bcbb411ab96fecac0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Editor/EditorUtilities.cs b/src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs similarity index 100% rename from src/gg.regression.unity.testing/Editor/EditorUtilities.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs.meta new file mode 100644 index 0000000..67f4bc7 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Editor/EditorUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c972b7d26491f4bdaa0f9037d3dfbabc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Editor/RegressionGames.Unity.Editor.asmdef b/src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef similarity index 100% rename from src/gg.regression.unity.testing/Editor/RegressionGames.Unity.Editor.asmdef rename to src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef.meta b/src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef.meta new file mode 100644 index 0000000..00e9fbd --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Editor/RegressionGames.Unity.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eedbeb5bc758e446891cd51d0a0dc6a9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime.meta new file mode 100644 index 0000000..47ad7c0 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47cfd4bab51ec48da83a19e129a9070c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation.meta new file mode 100644 index 0000000..ff071c3 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 581f33bd44c84a5dbc1738132cc76b6c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/Automatable.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/Automatable.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs.meta new file mode 100644 index 0000000..ca5aa58 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Automatable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 972b94e3e2de4f7ba88e9be2138dfc01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/AutomationBehavior.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/AutomationBehavior.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs.meta new file mode 100644 index 0000000..2309e72 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationBehavior.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ecc5fc63e4e43ab82f6d5ba3dac7f7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/AutomationController.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs.meta new file mode 100644 index 0000000..7abf6ef --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9867fd31e1bb243e6a87bb827a34f701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/AutomationEntity.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs.meta new file mode 100644 index 0000000..2f048fa --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/AutomationEntity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: daee64ee1b4c243df913c86dbc3bd8e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/Bot.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/Bot.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs.meta new file mode 100644 index 0000000..d19e543 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/Bot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d662bc5976b4664b3f2983370f8307 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/BotConfiguration.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/BotConfiguration.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs.meta new file mode 100644 index 0000000..4ed6454 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28fb320361844749b391cd65858be0c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/BotState.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/BotState.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs.meta new file mode 100644 index 0000000..47e74a2 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/BotState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d01c00d7da24b8aaf846c252d665b61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Automation/MonkeyBot.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Automation/MonkeyBot.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs.meta new file mode 100644 index 0000000..931a426 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Automation/MonkeyBot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc75fe97428b84d3388c98b7509cac62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery.meta new file mode 100644 index 0000000..9429aca --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7d19307eec44248b439f97c011f6fcc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Discovery/EntityDiscoverer.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs.meta new file mode 100644 index 0000000..7e5a661 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/EntityDiscoverer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38aedc7549160469c9471576c4bc6ce7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Discovery/UIElementDiscoverer.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs.meta new file mode 100644 index 0000000..ccc1d3d --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Discovery/UIElementDiscoverer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19c4a37715b9e4cd89b682de126347ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/EmptyDictionary.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/EmptyDictionary.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs.meta new file mode 100644 index 0000000..3ed6b72 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/EmptyDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fc0603f12c694cc8afcdcf7845f21cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Logger.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Logger.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs.meta new file mode 100644 index 0000000..8e69266 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Logger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36e409b5058414a4c8a42a4e3ee61aae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording.meta new file mode 100644 index 0000000..3df7a5c --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 143d10cc7def41b881b4666c6de120d8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/AutomationRecorder.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs.meta new file mode 100644 index 0000000..9cd4beb --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/AutomationRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cc6acc11d1e4bb780ccc75eb3fc8e8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/FrameSnapshot.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs.meta new file mode 100644 index 0000000..a967a05 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/FrameSnapshot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 886bb6b9093a48a789dc0d556cd93c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/IAutomationObserver.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/IAutomationObserver.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs.meta new file mode 100644 index 0000000..f284732 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/IAutomationObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dd1330c02b364368988675be62d0930 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/RecorderWorker.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs.meta new file mode 100644 index 0000000..7ce90ea --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecorderWorker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c3c2d399a40463faa17a0aec4e05c2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/RecordingInfo.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs.meta new file mode 100644 index 0000000..8d21ce2 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4fad65b3ba84e769d0f33dc31d74139 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/Recording/RecordingSession.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs.meta new file mode 100644 index 0000000..45639ad --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/Recording/RecordingSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0799c3388cb43c191357f00ed2a699a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/RegressionGames.Unity.asmdef b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef similarity index 100% rename from src/gg.regression.unity.testing/Runtime/RegressionGames.Unity.asmdef rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef.meta new file mode 100644 index 0000000..ce5896c --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGames.Unity.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cab264bfcb84340f58599f4e280b95f5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/RegressionGamesJsonFormat.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs.meta new file mode 100644 index 0000000..fb2875a --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/RegressionGamesJsonFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1e9e3c87a56407d87170ffa83366b46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/TMProHelper.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/TMProHelper.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs.meta new file mode 100644 index 0000000..8025c33 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/TMProHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b8881b5bfc094778b364e85e9e23c90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI.meta new file mode 100644 index 0000000..6395005 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e20862423d542de84a57f6a03457357 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/UI/BotListEntry.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/UI/BotListEntry.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs.meta new file mode 100644 index 0000000..69cbf77 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/BotListEntry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7d6ff909c2e49ad858cd48a8a1c8726 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/UI/IconPulser.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/UI/IconPulser.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs.meta new file mode 100644 index 0000000..07505c5 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/IconPulser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d90bd19025b41a399e85601c74639a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/UI/OverlayMenu.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs.meta new file mode 100644 index 0000000..52d6746 --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UI/OverlayMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0980368f32e74f1e8e06dc5b112ee75a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Runtime/UIUtils.cs b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs similarity index 100% rename from src/gg.regression.unity.testing/Runtime/UIUtils.cs rename to src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs diff --git a/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs.meta b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs.meta new file mode 100644 index 0000000..5726acc --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Scripts/Runtime/UIUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9a70d0037ea42179ec1c0752a7fb86f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Textures.meta b/src/gg.regression.unity.testing/Assets/Textures.meta new file mode 100644 index 0000000..d9b8d0a --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d74c60e59e9cf4d00a8f0c0a9c54aef6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Textures/RG_Logo.png.meta b/src/gg.regression.unity.testing/Assets/Textures/RG_Logo.png.meta new file mode 100644 index 0000000..ad56ddf --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Textures/RG_Logo.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 7d4a9845bf1544376802d0e931c6a771 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/gg.regression.unity.testing/Assets/Textures/ui_ptag_glow.png.meta b/src/gg.regression.unity.testing/Assets/Textures/ui_ptag_glow.png.meta new file mode 100644 index 0000000..d11941c --- /dev/null +++ b/src/gg.regression.unity.testing/Assets/Textures/ui_ptag_glow.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 8d0557cbee83a4282b0be3be58ac58ee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: