diff --git a/code/VR Art Gallery/Assets/Scripts/Testing/EditMode/Cloud/Gallery.meta b/code/VR Art Gallery/Assets/Scripts/Testing/EditMode/Cloud/Gallery.meta new file mode 100644 index 00000000..35cb5c09 --- /dev/null +++ b/code/VR Art Gallery/Assets/Scripts/Testing/EditMode/Cloud/Gallery.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af8cfb953b24b7e4d856359d7848eea3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/code/VR Art Gallery/Assets/VRMPAssets/Prefabs/UIPrefabs/GalleryUI/HUD/ViewGalleryButton.prefab.meta b/code/VR Art Gallery/Assets/VRMPAssets/Prefabs/UIPrefabs/GalleryUI/HUD/ViewGalleryButton.prefab.meta new file mode 100644 index 00000000..5483b3eb --- /dev/null +++ b/code/VR Art Gallery/Assets/VRMPAssets/Prefabs/UIPrefabs/GalleryUI/HUD/ViewGalleryButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc3dfbd65e61a4047af11cfe8c3ea3af +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/code/VR Art Gallery/Assets/XR/Settings/OpenXR Package Settings.asset b/code/VR Art Gallery/Assets/XR/Settings/OpenXR Package Settings.asset index 1c12e5c6..099d7aa9 100644 --- a/code/VR Art Gallery/Assets/XR/Settings/OpenXR Package Settings.asset +++ b/code/VR Art Gallery/Assets/XR/Settings/OpenXR Package Settings.asset @@ -19,7 +19,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: cacheSize: 1048576 perThreadCacheSize: 51200 --- !u!114 &-9013704178778651535 @@ -41,7 +43,9 @@ MonoBehaviour: openxrExtensionStrings: XR_OCULUS_android_initialize_loader company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: targetDevices: - visibleName: Quest manifestName: quest @@ -59,14 +63,14 @@ MonoBehaviour: manifestName: quest3s enabled: 1 forceRemoveInternetPermission: 1 - symmetricProjection: 0 - foveatedRenderingApi: 0 + m_symmetricProjection: 0 + m_foveatedRenderingApi: 0 systemSplashScreen: {fileID: 0} - optimizeBufferDiscards: 1 + m_optimizeBufferDiscards: 1 lateLatchingMode: 0 lateLatchingDebug: 0 optimizeMultiviewRenderRegions: 0 - multiviewRenderRegionsOptimizationMode: 0 + m_multiviewRenderRegionsOptimizationMode: 0 m_hasMigratedMultiviewRenderRegions: 1 spacewarpMotionVectorTextureFormat: 0 --- !u!114 &-9001384425803860583 @@ -88,7 +92,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-8901900931313660571 MonoBehaviour: m_ObjectHideFlags: 0 @@ -108,7 +114,9 @@ MonoBehaviour: openxrExtensionStrings: XR_KHR_binding_modification XR_EXT_dpad_binding company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: forceThresholdLeft: 0.5 forceThresholdReleaseLeft: 0.4 centerRegionLeft: 0.5 @@ -141,7 +149,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-8360243297488312113 MonoBehaviour: m_ObjectHideFlags: 0 @@ -161,7 +171,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_palm_pose company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-8093895243448006267 MonoBehaviour: m_ObjectHideFlags: 0 @@ -181,7 +193,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-7979068470336633109 MonoBehaviour: m_ObjectHideFlags: 0 @@ -228,7 +242,9 @@ MonoBehaviour: XR_META_recommended_layer_resolution XR_EXT_local_floor ' company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-7808919447480185665 MonoBehaviour: m_ObjectHideFlags: 0 @@ -248,7 +264,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-7729431856913891028 MonoBehaviour: m_ObjectHideFlags: 0 @@ -270,7 +288,10 @@ MonoBehaviour: XR_META_vulkan_swapchain_create_info company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: + enableSubsampledLayout: 0 --- !u!114 &-7683200624125529703 MonoBehaviour: m_ObjectHideFlags: 0 @@ -291,7 +312,9 @@ MonoBehaviour: XR_META_vulkan_swapchain_create_info company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-7246329505210893428 MonoBehaviour: m_ObjectHideFlags: 0 @@ -311,7 +334,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_space_warp company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: m_UseRightHandedNDC: 0 --- !u!114 &-7166959036619122442 MonoBehaviour: @@ -332,7 +357,9 @@ MonoBehaviour: openxrExtensionStrings: XR_MSFT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-6746148815201299364 MonoBehaviour: m_ObjectHideFlags: 0 @@ -352,7 +379,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_hand_tracking_aim company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-5652437977838781621 MonoBehaviour: m_ObjectHideFlags: 0 @@ -372,7 +401,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-5307197123633945927 MonoBehaviour: m_ObjectHideFlags: 0 @@ -392,7 +423,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_eye_gaze_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-5031210318203430808 MonoBehaviour: m_ObjectHideFlags: 0 @@ -412,7 +445,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_performance_settings company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-4499269554590395740 MonoBehaviour: m_ObjectHideFlags: 0 @@ -432,7 +467,9 @@ MonoBehaviour: openxrExtensionStrings: XR_MSFT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-4163075078440519219 MonoBehaviour: m_ObjectHideFlags: 0 @@ -452,7 +489,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_tracking company: Unity priority: -100 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-4039723831258374526 MonoBehaviour: m_ObjectHideFlags: 0 @@ -472,7 +511,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_performance_settings company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3829224747516373810 MonoBehaviour: m_ObjectHideFlags: 0 @@ -492,7 +533,9 @@ MonoBehaviour: openxrExtensionStrings: 'XR_FB_foveation XR_FB_foveation_configuration XR_FB_foveation_vulkan ' company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3585934884514690276 MonoBehaviour: m_ObjectHideFlags: 0 @@ -512,7 +555,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_touch_controller_pro company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3437109905634941946 MonoBehaviour: m_ObjectHideFlags: 0 @@ -532,7 +577,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3372428654192485151 MonoBehaviour: m_ObjectHideFlags: 0 @@ -552,7 +599,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_eye_gaze_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3311705799989823825 MonoBehaviour: m_ObjectHideFlags: 0 @@ -572,7 +621,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_space_warp company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3261719417609329668 MonoBehaviour: m_ObjectHideFlags: 0 @@ -593,7 +644,9 @@ MonoBehaviour: XR_META_vulkan_swapchain_create_info company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-3106952540310038120 MonoBehaviour: m_ObjectHideFlags: 0 @@ -613,7 +666,9 @@ MonoBehaviour: openxrExtensionStrings: XR_META_touch_controller_plus company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-2916052940852304484 MonoBehaviour: m_ObjectHideFlags: 0 @@ -646,6 +701,7 @@ MonoBehaviour: - {fileID: -830801033180114590} - {fileID: 516638807908955489} - {fileID: -4163075078440519219} + customLoaderName: m_renderMode: 1 m_latencyOptimization: 0 m_autoColorSubmissionMode: 1 @@ -679,7 +735,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-2053598572320957723 MonoBehaviour: m_ObjectHideFlags: 0 @@ -699,7 +757,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_touch_controller_pro company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-1776440421019933078 MonoBehaviour: m_ObjectHideFlags: 0 @@ -719,7 +779,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_conformance_automation company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-1594368584909111455 MonoBehaviour: m_ObjectHideFlags: 0 @@ -739,7 +801,9 @@ MonoBehaviour: openxrExtensionStrings: XR_META_vulkan_swapchain_create_info company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-1264262302880360633 MonoBehaviour: m_ObjectHideFlags: 0 @@ -786,7 +850,9 @@ MonoBehaviour: XR_META_recommended_layer_resolution XR_EXT_local_floor ' company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-902117239244671484 MonoBehaviour: m_ObjectHideFlags: 0 @@ -806,7 +872,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: cacheSize: 1048576 perThreadCacheSize: 51200 --- !u!114 &-830801033180114590 @@ -828,7 +896,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &-799144910338680681 MonoBehaviour: m_ObjectHideFlags: 0 @@ -867,6 +937,7 @@ MonoBehaviour: - {fileID: -8419412448523754716} - {fileID: 3343423684907497491} - {fileID: 2375913543959002222} + customLoaderName: m_renderMode: 1 m_latencyOptimization: 0 m_autoColorSubmissionMode: 1 @@ -900,7 +971,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: cacheSize: 1048576 perThreadCacheSize: 51200 --- !u!114 &-185474913109636274 @@ -922,7 +995,9 @@ MonoBehaviour: openxrExtensionStrings: XR_KHR_binding_modification XR_EXT_dpad_binding company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: forceThresholdLeft: 0.5 forceThresholdReleaseLeft: 0.4 centerRegionLeft: 0.5 @@ -955,7 +1030,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_conformance_automation company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -993,7 +1070,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_palm_pose company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &516638807908955489 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1013,7 +1092,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_performance_settings company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &672443806498616051 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1033,7 +1114,9 @@ MonoBehaviour: openxrExtensionStrings: XR_META_touch_controller_plus company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &939373418795891485 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1053,7 +1136,9 @@ MonoBehaviour: openxrExtensionStrings: XR_UNITY_null_gfx XR_UNITY_android_present company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: ignoreValidationErrors: 0 --- !u!114 &1735821684298626679 MonoBehaviour: @@ -1074,7 +1159,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hp_mixed_reality_controller company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &2057586233521990727 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1094,7 +1181,9 @@ MonoBehaviour: openxrExtensionStrings: XR_MSFT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &2123424781130391193 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1114,7 +1203,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_conformance_automation company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &2375913543959002222 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1134,7 +1225,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_tracking company: Unity priority: -100 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &3209235803406858993 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1154,7 +1247,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hp_mixed_reality_controller company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &3233996788981779080 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1193,6 +1288,7 @@ MonoBehaviour: - {fileID: -9161148577253747680} - {fileID: -5031210318203430808} - {fileID: 8805819820171693453} + customLoaderName: m_renderMode: 1 m_latencyOptimization: 0 m_autoColorSubmissionMode: 1 @@ -1226,7 +1322,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &3343423684907497491 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1246,7 +1344,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_performance_settings company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &3394782548962979573 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1268,7 +1368,10 @@ MonoBehaviour: XR_META_vulkan_swapchain_create_info company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: + enableSubsampledLayout: 0 --- !u!114 &3865164587126139689 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1288,7 +1391,9 @@ MonoBehaviour: openxrExtensionStrings: 'XR_FB_foveation XR_FB_foveation_configuration XR_FB_foveation_vulkan ' company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &3939435393104891250 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1308,7 +1413,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &4507530484036100515 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1328,7 +1435,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &4790688419576402574 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1348,7 +1457,9 @@ MonoBehaviour: openxrExtensionStrings: XR_OCULUS_android_initialize_loader company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: targetQuest: 1 targetQuest2: 1 --- !u!114 &4980731172847938471 @@ -1370,7 +1481,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5580952549043511711 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1390,7 +1503,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_palm_pose company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5666893167340371960 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1410,7 +1525,9 @@ MonoBehaviour: openxrExtensionStrings: XR_META_touch_controller_plus company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5681266540976693553 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1425,6 +1542,7 @@ MonoBehaviour: m_EditorClassIdentifier: features: - {fileID: -4039723831258374526} + customLoaderName: m_renderMode: 1 m_latencyOptimization: 0 m_autoColorSubmissionMode: 1 @@ -1458,7 +1576,9 @@ MonoBehaviour: openxrExtensionStrings: XR_META_vulkan_swapchain_create_info company: Meta priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5802147566834247524 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1478,7 +1598,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5884598316370440491 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1498,7 +1620,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &5919399070564312567 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1518,7 +1642,9 @@ MonoBehaviour: openxrExtensionStrings: XR_UNITY_null_gfx XR_UNITY_android_present company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: ignoreValidationErrors: 0 --- !u!114 &6073691704626925967 MonoBehaviour: @@ -1539,7 +1665,9 @@ MonoBehaviour: openxrExtensionStrings: XR_KHR_binding_modification XR_EXT_dpad_binding company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: forceThresholdLeft: 0.5 forceThresholdReleaseLeft: 0.4 centerRegionLeft: 0.5 @@ -1572,7 +1700,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &6948044492930209007 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1592,7 +1722,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &7563837468939992655 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1612,7 +1744,9 @@ MonoBehaviour: openxrExtensionStrings: company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &7918203358245403155 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1632,7 +1766,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_touch_controller_pro company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &8356500788345464842 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1654,7 +1790,10 @@ MonoBehaviour: XR_META_vulkan_swapchain_create_info company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: + enableSubsampledLayout: 0 --- !u!114 &8599118427844513771 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1674,7 +1813,9 @@ MonoBehaviour: openxrExtensionStrings: XR_FB_hand_tracking_aim company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &8708900896755547445 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1694,7 +1835,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &8805819820171693453 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1714,7 +1857,9 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_hand_tracking company: Unity priority: -100 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: --- !u!114 &9011612072392039164 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1734,4 +1879,6 @@ MonoBehaviour: openxrExtensionStrings: XR_EXT_eye_gaze_interaction company: Unity priority: 0 + targetOpenXRApiVersion: required: 0 + customRuntimeLoaderName: diff --git a/code/VR Art Gallery/Packages/manifest.json b/code/VR Art Gallery/Packages/manifest.json index c7c394af..a53a3cb2 100644 --- a/code/VR Art Gallery/Packages/manifest.json +++ b/code/VR Art Gallery/Packages/manifest.json @@ -10,8 +10,8 @@ "com.unity.collab-proxy": "2.10.2", "com.unity.feature.development": "1.0.2", "com.unity.inputsystem": "1.14.2", - "com.unity.learn.iet-framework": "5.0.1", - "com.unity.mobile.android-logcat": "1.4.5", + "com.unity.learn.iet-framework": "5.0.2", + "com.unity.mobile.android-logcat": "1.4.6", "com.unity.multiplayer.center": "1.0.0", "com.unity.netcode.gameobjects": "2.7.0", "com.unity.nuget.newtonsoft-json": "3.2.2", @@ -25,11 +25,11 @@ "com.unity.services.relay": "1.2.0", "com.unity.services.vivox": "16.7.0", "com.unity.splines": "2.8.4", - "com.unity.transport": "2.5.3", - "com.unity.xr.hands": "1.5.1", + "com.unity.transport": "2.6.0", + "com.unity.xr.hands": "1.7.0", "com.unity.xr.interaction.toolkit": "3.2.2", "com.unity.xr.management": "4.5.3", - "com.unity.xr.openxr": "1.15.1", + "com.unity.xr.openxr": "1.16.0", "com.unity.modules.accessibility": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/code/VR Art Gallery/ProjectSettings/ProjectVersion.txt b/code/VR Art Gallery/ProjectSettings/ProjectVersion.txt index a64a8680..c31f18a1 100644 --- a/code/VR Art Gallery/ProjectSettings/ProjectVersion.txt +++ b/code/VR Art Gallery/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 6000.2.2f1 -m_EditorVersionWithRevision: 6000.2.2f1 (ea398eefe1c2) +m_EditorVersion: 6000.2.12f1 +m_EditorVersionWithRevision: 6000.2.12f1 (e89d5df0e333) diff --git a/uml/detailed sequence diagrams/artwork_persistence_flow.puml b/uml/detailed sequence diagrams/artwork_persistence_flow.puml new file mode 100644 index 00000000..ab60206f --- /dev/null +++ b/uml/detailed sequence diagrams/artwork_persistence_flow.puml @@ -0,0 +1,41 @@ +@startuml + + +title Sequence Diagram: Artwork Persistence Flow& Storage Sync + +actor User + +participant "PaintableSurfaceRT" as Surface +participant "UI / Save Menu" as UI +participant "SupabaseArtworkRepository" as ArtworkRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +database "Local Disk" as Disk +database "Supabase Storage" as Storage +database "Supabase Database" as DB + +== Serialization == +User -> UI: Click Save Artwork +UI -> Surface: SaveCanvasToPNG(fileName) +Surface -> Surface: Texture2D.ReadPixels(RenderTexture) +Surface -> Surface: tex.EncodeToPNG() +Surface -> Disk: File.WriteAllBytes(path) +Surface -> UI: Return localPath + +== Cloud Upload == +UI -> ArtworkRepo: CreateArtworkWithUploadAsync(artworkData, bytes) +ArtworkRepo -> ArtworkRepo: Generate Thumbnail (GenerateHalfSizePng) +ArtworkRepo -> SupabaseSDK: UploadObjectAsync(original) +SupabaseSDK -> Storage: POST /storage/v1/object/artwork-images +ArtworkRepo -> SupabaseSDK: UploadObjectAsync(thumbnail) +SupabaseSDK -> Storage: POST /storage/v1/object/artwork-images + +== Metadata Sync == +ArtworkRepo -> ArtworkRepo: Set image_url & thumbnail_url +ArtworkRepo -> SupabaseSDK: client.From().Insert(artwork) +SupabaseSDK -> DB: INSERT INTO artwork +DB -> SupabaseSDK: OK / Created Model +SupabaseSDK -> ArtworkRepo: Return Model +ArtworkRepo -> UI: Return Success +UI -> User: Display "Saved Selection" + +@enduml diff --git a/uml/detailed sequence diagrams/authentication_flow.puml b/uml/detailed sequence diagrams/authentication_flow.puml new file mode 100644 index 00000000..225694f5 --- /dev/null +++ b/uml/detailed sequence diagrams/authentication_flow.puml @@ -0,0 +1,40 @@ +@startuml + + +title Sequence Diagram: User Authentication & Role Management + +actor User +participant "AuthenticationUIController" as UI +participant "AuthenticationManager" as AuthManager +participant "SupabaseClientManager" as ClientManager +participant "SupabaseArtistRepository" as ArtistRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +database "Supabase Auth" as AuthDB +database "Supabase Database" as DB + +== Initialization == +AuthManager -> ClientManager: InitializeAsync() +ClientManager -> SupabaseSDK: Create Instance +AuthManager -> ArtistRepo: Create(SupabaseClientWrapper) + +== Login Flow == +User -> UI: Enter Credentials & Click Login +UI -> AuthManager: LoginUser(email, password) +AuthManager -> SupabaseSDK: client.Auth.SignIn(email, password) +SupabaseSDK -> AuthDB: Authenticate +AuthDB -> SupabaseSDK: Return Session +SupabaseSDK -> AuthManager: Return Session +AuthManager -> UI: Invoke OnUserLoggedIn + +== Role Fetching == +AuthManager -> ArtistRepo: GetArtistProfileAsync(userId) +ArtistRepo -> SupabaseSDK: client.From().Where(auth_user_id == userId).Single() +SupabaseSDK -> DB: Query Profile +DB -> SupabaseSDK: Profile Data +SupabaseSDK -> ArtistRepo: Return Profile +ArtistRepo -> AuthManager: Return Profile +AuthManager -> AuthManager: Determine Role (e.g. Artist) +AuthManager -> UI: Invoke OnUserRoleChanged(role) +UI -> User: Display Success & User Role + +@enduml diff --git a/uml/detailed sequence diagrams/gallery_spawning_flow.puml b/uml/detailed sequence diagrams/gallery_spawning_flow.puml new file mode 100644 index 00000000..bfd6e31e --- /dev/null +++ b/uml/detailed sequence diagrams/gallery_spawning_flow.puml @@ -0,0 +1,43 @@ +@startuml + + +title Sequence Diagram: Data-Driven Gallery Spawning + +actor User +participant "GameManager" as GM +participant "SupabaseGalleryRepository" as GalleryRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +participant "CanvasSpawner" as Spawner +participant "PaintableSurfaceRT" as Surface +database "Supabase Database" as DB + +== Gallery Data Fetch == +User -> GM: Entry to Gallery Scene +GM -> GM: LoadScene("Gallery") +GM -> GalleryRepo: GetGalleryAsync(galleryId) +GalleryRepo -> SupabaseSDK: client.From().Where(id == gid).Single() +SupabaseSDK -> DB: SELECT * FROM gallery +DB -> SupabaseSDK: Gallery Data (including artwork_ids) +SupabaseSDK -> GalleryRepo: Return Gallery Model +GalleryRepo -> GM: Return GalleryData + +== Artwork Path Fetch and Canvas Initialization == +GM -> GalleryRepo : GetArtworkPaths(galleryId) +activate GalleryRepo +GalleryRepo -> SupabaseSDK : Query artworks for gallery +SupabaseSDK -->> GalleryRepo : List of path metadata +GalleryRepo -->> GM : Dictionary +deactivate GalleryRepo + +loop for each slot in dictionary + GM -> SupabaseSDK : Download texture (image_url) + SupabaseSDK -->> GM : Byte array / Texture2D + GM -> Surface : SetBackground(texture) + activate Surface + Surface -> Surface : Graphics.Blit to RenderTexture + Surface -->> GM : Success + deactivate Surface +end + +GM -> GM: Notify "Gallery Ready" +@enduml diff --git a/uml/detailed sequence diagrams/gpu_painting_flow.puml b/uml/detailed sequence diagrams/gpu_painting_flow.puml new file mode 100644 index 00000000..3a49a8c3 --- /dev/null +++ b/uml/detailed sequence diagrams/gpu_painting_flow.puml @@ -0,0 +1,45 @@ +@startuml + + +title Sequence Diagram: GPU-Based Painting Flow (Blit Ping-Pong) +actor User +participant "XR Controller" as Controller +participant "XRPainterRayInput" as RayInput +participant "BrushToolState" as BrushState +participant "PaintableSurfaceRT" as Surface +participant "Graphics (GPU)" as GPU +participant "BrushBlit.shader" as Shader + +== Stroke Start == +User -> Controller: Pull Trigger +Controller -> RayInput: Action Triggered +RayInput -> RayInput: Physics.Raycast() +RayInput -> Surface: GetComponent() +RayInput -> Surface: TryPaintAt(uv) + +== Drawing Loop (Every Frame) == +loop while Trigger Held + User -> Controller: Move Position/Rotation + RayInput -> RayInput: Calculate Intersecting UV + RayInput -> BrushState: Get Current Brush (Color, Radius, Hardness) + RayInput -> Surface: PaintAt(uv, brushState) + + Surface -> Shader: Set Params (_BrushTex, _BrushColor, _BrushParams) + Surface -> GPU: Graphics.Blit(Buffer_A, Buffer_B, brushBlitMaterial) + + note right of GPU + Shader reads Buffer_A, + applies brush at UV, + outputs to Buffer_B. + end note + + GPU -> Surface: Blit Complete + Surface -> Surface: Swap Buffers (Buffer_A, Buffer_B) + Surface -> Surface: ApplyToRenderer(Buffer_A) + Surface -> GPU: Update Material _MainTex/_BaseMap +end + +== Stroke End == +User -> Controller: Release Trigger +RayInput -> RayInput: EndStroke() +@enduml diff --git a/uml/sequence diagrams/Create_GenAI_Art/image.png b/uml/sequence diagrams/Create_GenAI_Art/image.png deleted file mode 100644 index d39af3ff..00000000 Binary files a/uml/sequence diagrams/Create_GenAI_Art/image.png and /dev/null differ diff --git a/uml/sequence diagrams/Create_GenAI_Art/uml.txt b/uml/sequence diagrams/Create_GenAI_Art/uml.txt deleted file mode 100644 index 3db6fdb2..00000000 --- a/uml/sequence diagrams/Create_GenAI_Art/uml.txt +++ /dev/null @@ -1,41 +0,0 @@ -@startuml -title Use Case — Create GenAI Art - -actor User -participant "Controller/Input Manager" as Input -participant "HUD" as HUD -participant "Art Tools" as Tools -participant "Canvas" as Canvas -participant "Network Manager" as Net -participant "Event Logger" as Log - -User -> Input : Opens HUD and taps "Create GenAI Art" -Input -> HUD : Prompt keyboard pops up -HUD -> Input : User enters prompt -Input --> HUD : Prompt processed when "Generate" clicked on -Log --> Log: Log: GenAI.GenerateClicked -HUD -> Tools : "Generate" button changes to "Generating" -Log --> Log: Log: GenAI.RequestStarted -Tools -> Net : GenAI Model receives the prompt and starts generating the art -Net --> Tools : GenAI is ready -Log --> Log: Log: GenAI.ResultReady -Tools -> Canvas : GenAI art is attached to the canvas -Canvas --> Tools : Feedback received about ready image -Log --> Log: Log: GenAI.CanvasUpdated -Tools --> HUD : Art generation complete -HUD -> User : Displays generated artwork -Log --> Log: Log: GenAI.Displayed - -alt Save and Publish - User -> HUD : Taps "Save" then "Upload" - Log --> Log: Log: GenAI.SaveRequested - HUD -> Canvas : Exports current canvas image - Canvas --> HUD : Image is converted to an exportable format - Log --> Log: Log: GenAI.ExportReady - HUD -> Net : Uploads local file - Net --> HUD : Gives object URL - Log --> Log: Log: GenAI.UploadComplete - HUD -> User : Art published successfully - Log --> Log: Log: GenAI.Published -end -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/Sign_In/LogIn.png b/uml/sequence diagrams/Sign_In/LogIn.png deleted file mode 100644 index fb21db05..00000000 Binary files a/uml/sequence diagrams/Sign_In/LogIn.png and /dev/null differ diff --git a/uml/sequence diagrams/browse_and_join_gallery/image.png b/uml/sequence diagrams/browse_and_join_gallery/image.png deleted file mode 100644 index 266e5515..00000000 Binary files a/uml/sequence diagrams/browse_and_join_gallery/image.png and /dev/null differ diff --git a/uml/sequence diagrams/browse_and_join_gallery/uml.txt b/uml/sequence diagrams/browse_and_join_gallery/uml.txt deleted file mode 100644 index 0de67fb0..00000000 --- a/uml/sequence diagrams/browse_and_join_gallery/uml.txt +++ /dev/null @@ -1,68 +0,0 @@ -title Browse/Join Galleries - Full Flow - -' ============== ACTORS & COMPONENTS ============== -actor "User" as User -participant "Controller/Input Manager" as Ctrl -participant "HUD" as HUD -participant "Security Manager" as Sec -participant "Profile Manager" as Prof -participant "Network Manager" as Net -participant "Room Manager" as Room -participant "Collaboration/Communication" as Collab -participant "Canvas" as Canvas -participant "Event Logger" as Log - -' ============== TRIGGER ============== -User ->> Ctrl : Presses Join -Ctrl --> HUD: Open "Join a Gallery" -HUD ->> Sec: Is user authenticated? -Sec --> HUD: Session status (signed-in / guest) -Log --> Log: Log: HUD.OpenJoin - -' ============== LISTING/DIRECTORY ============== -alt Signed-in - HUD ->> Room: Fetch user galleries & workspaces - Room --> HUD: Gallery/workspace list - end - HUD ->> Net: Fetch public gallery directory - Net --> HUD: Public gallery list - - HUD --> User: Show: public list + "Enter Code" (+ personal/workspace if signed-in) - - User ->> Ctrl: Selects option - Ctrl --> HUD: Selects option (Public / Personal Workspace / Enter Code) - Log --> Log: Log: SelectionMade - - - ' ----- Flow C: Private Gallery via Join Code ----- - alt Private gallery (join code) - User ->> Ctrl: Enter code - Ctrl ->> HUD: Enter join code - HUD ->> Sec: Validate code (access control) - Sec ->> Net: Resolve galleryId from code - Net --> Sec: galleryId or error - Sec --> HUD: Validation result - end - - HUD ->> Net: Request join(galleryId) - Net ->> Room: Load room state - Room ->> Canvas: Load artworks for private gallery - Canvas --> Net: Asset refs/streams ready - Net --> HUD: Gallery session ready - HUD ->> Collab: Join presence/voice/text - Collab --> User: Presence/chat enabled - Log --> Log: Log: JoinedGallery (code) - - - ' ============== NOTES (Reqs, Pre/Post) ============== - ' note over Net, Collab - ' Requirements: stable internet • low-latency multi-user sync - ' end note - ' note over Sec - ' Private galleries require valid code/invite (authZ/authN) - ' end note - ' note over Room, Canvas - ' Postcondition: gallery/workspace rendered with artworks - ' end note - - @enduml \ No newline at end of file diff --git a/uml/sequence diagrams/browse_and_join_gallery/uml.wsd b/uml/sequence diagrams/browse_and_join_gallery/uml.wsd deleted file mode 100644 index 0de67fb0..00000000 --- a/uml/sequence diagrams/browse_and_join_gallery/uml.wsd +++ /dev/null @@ -1,68 +0,0 @@ -title Browse/Join Galleries - Full Flow - -' ============== ACTORS & COMPONENTS ============== -actor "User" as User -participant "Controller/Input Manager" as Ctrl -participant "HUD" as HUD -participant "Security Manager" as Sec -participant "Profile Manager" as Prof -participant "Network Manager" as Net -participant "Room Manager" as Room -participant "Collaboration/Communication" as Collab -participant "Canvas" as Canvas -participant "Event Logger" as Log - -' ============== TRIGGER ============== -User ->> Ctrl : Presses Join -Ctrl --> HUD: Open "Join a Gallery" -HUD ->> Sec: Is user authenticated? -Sec --> HUD: Session status (signed-in / guest) -Log --> Log: Log: HUD.OpenJoin - -' ============== LISTING/DIRECTORY ============== -alt Signed-in - HUD ->> Room: Fetch user galleries & workspaces - Room --> HUD: Gallery/workspace list - end - HUD ->> Net: Fetch public gallery directory - Net --> HUD: Public gallery list - - HUD --> User: Show: public list + "Enter Code" (+ personal/workspace if signed-in) - - User ->> Ctrl: Selects option - Ctrl --> HUD: Selects option (Public / Personal Workspace / Enter Code) - Log --> Log: Log: SelectionMade - - - ' ----- Flow C: Private Gallery via Join Code ----- - alt Private gallery (join code) - User ->> Ctrl: Enter code - Ctrl ->> HUD: Enter join code - HUD ->> Sec: Validate code (access control) - Sec ->> Net: Resolve galleryId from code - Net --> Sec: galleryId or error - Sec --> HUD: Validation result - end - - HUD ->> Net: Request join(galleryId) - Net ->> Room: Load room state - Room ->> Canvas: Load artworks for private gallery - Canvas --> Net: Asset refs/streams ready - Net --> HUD: Gallery session ready - HUD ->> Collab: Join presence/voice/text - Collab --> User: Presence/chat enabled - Log --> Log: Log: JoinedGallery (code) - - - ' ============== NOTES (Reqs, Pre/Post) ============== - ' note over Net, Collab - ' Requirements: stable internet • low-latency multi-user sync - ' end note - ' note over Sec - ' Private galleries require valid code/invite (authZ/authN) - ' end note - ' note over Room, Canvas - ' Postcondition: gallery/workspace rendered with artworks - ' end note - - @enduml \ No newline at end of file diff --git a/uml/sequence diagrams/collaborate/image.png b/uml/sequence diagrams/collaborate/image.png deleted file mode 100644 index 9a7cd331..00000000 Binary files a/uml/sequence diagrams/collaborate/image.png and /dev/null differ diff --git a/uml/sequence diagrams/collaborate/uml.txt b/uml/sequence diagrams/collaborate/uml.txt deleted file mode 100644 index 9d1c15bf..00000000 --- a/uml/sequence diagrams/collaborate/uml.txt +++ /dev/null @@ -1,44 +0,0 @@ -@startuml -actor User -participant "Controller/Input Manager" as Input -participant "HUD" as HUD -participant "Collaboration Manager" as Colab -participant "Security Manager" as Auth -participant "Network Manager" as Network -participant "Room Manager" as Room -participant "Art Tools" as Tools -participant "Canvas" as Canvas -participant "Event Logger" as Logger -== User joins a shared workspace == -User -> Input : selects join a workspace -Logger -> Logger: Log: Selects join workspace -Input -> HUD : displays code textbox -User -> Input : inputs code -Input -> HUD : submits code -Logger -> Logger: Log: Logs code -HUD -> Colab : validates code -Colab -> Auth : sends user info -Auth -> Colab : authenticates user -Colab -> Network : loads workspace instance -Logger -> Logger: Log: Logs workspace info -Network -> Room : loads workspace layout -Room -> Canvas : loads artworks -== User collaborates on a painting == -User -> Input : selects canvas -Logger -> Logger: Log: Logs input -Input -> Canvas : zooms in -User -> Input : picks up a tool -Input -> Tools : applies tool -Tools -> Canvas : updates canvas -Canvas -> Auth : authenticates update -== User messages user == -User -> Input : selects chat -Logger -> Logger: Log: Chat selected -Input -> HUD : displays chat -User -> Input : enters message -Input -> HUD : saves message -Logger -> Logger: Log: Message -HUD -> Auth : requests authentication -Auth -> HUD : authenticates message -HUD -> Colab : sends message -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/communicate/image.png b/uml/sequence diagrams/communicate/image.png deleted file mode 100644 index 0f099519..00000000 Binary files a/uml/sequence diagrams/communicate/image.png and /dev/null differ diff --git a/uml/sequence diagrams/communicate/uml.txt b/uml/sequence diagrams/communicate/uml.txt deleted file mode 100644 index 1049bc5b..00000000 --- a/uml/sequence diagrams/communicate/uml.txt +++ /dev/null @@ -1,43 +0,0 @@ -@startuml -actor UserA -actor UserB - -participant "Controller/Input Manager" as CIM -participant "HUD" as HUD -participant "Collaboration/Communication Manager" as CCM -participant "Network Manager" as NM -participant "Event Logger" as EL - -== Proximity Voice Chat Flow == -UserA -> CCM: Connects to local voice chat (initial volume=0) -UserA -> NM: Moves closer to UserB -NM -> CCM: Updates distance, adjusts UserA's voice volume for UserB -UserA -> CIM: Speaks (voice input) -CIM -> CCM: Forwards voice data (distance-based volume) -CCM -> NM: Broadcasts voice to UserB - -alt Leaving the chat -UserA -> NM: Leaves UserB's range (volume decreases) -CCM -> EL: Log proximity/volume event -EL -> EL : Log Mute Action -end - -== Public ChatBox Flow (Text) == -UserA -> HUD: Opens HUD -HUD -> CCM: Selects public chat -CCM -> NM: Get history -NM -> CCM: Returns messages -CCM -> HUD: Shows history -UserA -> CIM: Types message, clicks send -CIM -> CCM: Forwards message -CCM -> NM: Broadcasts to users -CCM -> EL: Log message event -EL -> EL: Log Mute Action - -== Private ChatBox Flow (Text) == -UserA -> HUD: Selects UserB for private chat -UserA -> CIM: Points at UserB, selects chat option -CIM -> CCM: Initiate private chat -CCM -> NM: Opens private chat channel -NM -> UserB: Delivers private chat message -@enduml diff --git a/uml/sequence diagrams/completeTutorial/completeTutorial.txt b/uml/sequence diagrams/completeTutorial/completeTutorial.txt deleted file mode 100644 index 67a5ec0d..00000000 --- a/uml/sequence diagrams/completeTutorial/completeTutorial.txt +++ /dev/null @@ -1,41 +0,0 @@ -@startuml - -actor User -participant "Controller/Input Manager" as Controller -participant "Tutorial Manager" as TutorialMgr -participant "Room Manager" as RoomMgr -participant "Event Logger" as Logger - -User -> Controller: Clicks 'Tutorial' option (HUD) -Logger -> Logger: Log: Tutorial clicked -Controller -> TutorialMgr: Start tutorial - -TutorialMgr -> User: Guides: "How to walk" -User -> Controller: Performs walking action -Controller -> TutorialMgr: Movement completed - -TutorialMgr -> User: Guides: "How to zoom in/out" -User -> Controller: Performs zoom action -Controller -> TutorialMgr: Zoom completed - -TutorialMgr -> User: Guides: "Painting features (color, save)" -User -> Controller: Performs painting action -Controller -> TutorialMgr: Painting completed - -TutorialMgr -> User: Guides: "Access and use the HUD" -User -> Controller: Opens/Explores HUD -Logger -> Logger: Log: HUD Opened -Controller -> TutorialMgr: HUD explored - -TutorialMgr -> RoomMgr: Tutorial finished -Logger -> Logger: Log: Tutorial finished -alt Signed-in User - RoomMgr -> RoomMgr: Load workspace - RoomMgr -> User: Places user in Workspace (Postcondition 1) -else Guest User - RoomMgr -> RoomMgr: Load default gallery - RoomMgr -> User: Places user in Default Gallery (Postcondition 2) -end - - -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/completeTutorial/image.png b/uml/sequence diagrams/completeTutorial/image.png deleted file mode 100644 index 65edecaf..00000000 Binary files a/uml/sequence diagrams/completeTutorial/image.png and /dev/null differ diff --git a/uml/sequence diagrams/create-3d-art/image.png b/uml/sequence diagrams/create-3d-art/image.png deleted file mode 100644 index e437359f..00000000 Binary files a/uml/sequence diagrams/create-3d-art/image.png and /dev/null differ diff --git a/uml/sequence diagrams/create-3d-art/uml.txt b/uml/sequence diagrams/create-3d-art/uml.txt deleted file mode 100644 index 87ce3b4a..00000000 --- a/uml/sequence diagrams/create-3d-art/uml.txt +++ /dev/null @@ -1,49 +0,0 @@ -@startuml -actor User -participant "Controller/Input Manager" as Input -participant "HUD Manager" as HUD -participant "Canvas/Platform Manager" as Canvas -participant "Art Tools Manager" as Tools -participant "Network Manager" as Network -participant "Event Logger" as Logger - -title Create 3D Art -User -> Input: clicks on a platform on the floor -Input -> Canvas: notify platform selection -Canvas -> HUD: confirm platform ready -Canvas -> Logger: log("PLATFORM_INITIALIZED", platformId) -Canvas -> HUD: zoom into platform view -HUD -> User: display empty surface - -== Choosing a Shape == -User -> HUD: chooses default shape (cube/sphere/cylinder/cone) -HUD -> Canvas: request shape creation -Canvas -> Tools: initialize default shape with properties -Tools -> Canvas: return shape object -Tools -> Logger: log("SHAPE_CREATED", shapeType, shapeId) -Canvas -> HUD: place shape at center of platform -HUD -> User: display shape on canvas - -== Choosing an Art Tool == -User -> Input: picks up an art tool -Input -> Tools: selects the art tool -Tools -> HUD: shows tool selection feedback -HUD -> User: tool selected confirmation - -alt Select Platform from HUD - User -> HUD: selects platform from HUD while in workspace - HUD -> Canvas: request and load platform selection - Canvas -> Network: fetch previously saved 3D art - Network -> Canvas: return saved art data - Canvas -> Logger: log("ART_RESTORED", platformId, objectCount) - HUD -> User: show previously saved 3D art on platform surface -end - -alt Change Art Tool - User -> Input: switches to different art tool - Input -> Tools: deactivate current tool, activate new tool - Tools -> Logger: log("TOOL_CHANGED", newTool) - Tools -> HUD: update tool selection indicator - HUD -> User: show new tool active -end -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/create_an_art_gallery/create_an_art_gallery.png b/uml/sequence diagrams/create_an_art_gallery/create_an_art_gallery.png deleted file mode 100644 index 46667389..00000000 Binary files a/uml/sequence diagrams/create_an_art_gallery/create_an_art_gallery.png and /dev/null differ diff --git a/uml/sequence diagrams/create_an_art_gallery/image.png b/uml/sequence diagrams/create_an_art_gallery/image.png new file mode 100644 index 00000000..58c51e35 Binary files /dev/null and b/uml/sequence diagrams/create_an_art_gallery/image.png differ diff --git a/uml/sequence diagrams/create_an_art_gallery/uml.txt b/uml/sequence diagrams/create_an_art_gallery/uml.txt index c0244784..43e1eb52 100644 --- a/uml/sequence diagrams/create_an_art_gallery/uml.txt +++ b/uml/sequence diagrams/create_an_art_gallery/uml.txt @@ -4,34 +4,35 @@ actor User participant "Input Manager" as Input participant "HUD Manager" as HUD participant "Room Manager" as Room -participant "Security Manager" as SM -participant "Event Logger" as Logger +participant "Auth Manager" as SM +/'participant "Event Logger" as Logger'/ -title Create an art gallery +title Create an art room == Basic Flow == User -> Input: clicks on HUD icon -Input -> Logger: log user event +/'Input -> Logger: log user event'/ Input -> HUD: requests HUD -User -> Input: clicks on create art gallery -Input -> Logger: log user event +User -> Input: clicks on create new room +/'Input -> Logger: log user event'/ +Input -> HUD: validates and sends event information to HUD +/'Input -> Logger: log user event'/ +HUD -> User: modal with options (room name, privacy type) is opened +User -> Input: Enters room's name and privacy type (public or private) +/'Input -> Logger: log user event'/ Input -> HUD: validates and sends event information to HUD -Input -> Logger: log user event -HUD -> User: modal with options (gallery name, privacy type) is opened -User -> Input: Enters gallery's name and privacy type (public or private) -Input -> Logger: log user event -Input -> HUD: validates and sends event information to HUD -HUD -> Room: requests a gallery with user information +HUD -> Room: requests a room with user information -== Alternative Flow 1 – Private Gallery == +== Alternative Flow 1 – Private Room == + +Room -> SM: creates a room and requests a security layer. +SM -> Room: encrypts the room to make it private +Room -> User: notifies creation of private room. -Room -> SM: creates a gallery and requests a security layer. -SM -> Room: encrypts the gallery to make it private -Room -> User: notifies creation of private gallery. -== Alternative Flow 2 – Public Gallery == +== Alternative Flow 2 – Public Room == -Room -> User: notifies creation of public gallery +Room -> User: notifies creation of public room -@enduml \ No newline at end of file +@enduml diff --git a/uml/sequence diagrams/customiseWorkspace/code.txt b/uml/sequence diagrams/customiseWorkspace/code.txt deleted file mode 100644 index ba1fe094..00000000 --- a/uml/sequence diagrams/customiseWorkspace/code.txt +++ /dev/null @@ -1,50 +0,0 @@ -@startuml -actor "Signed-in User" as User -participant HUD -participant "Input Manager" as Controller -participant "Room Manager" as RoomMgr -participant "Art Tools" as ArtTools - -User -> HUD: Selects 'Customize Workspace' option -activate HUD -HUD -> Controller: Opens workspace customization menu -deactivate HUD -activate Controller -Controller -> User: Shows customization options -deactivate Controller - -alt Change placement of art pieces - - User -> Controller: Selects "Change placement of art pieces" - activate Controller - Controller -> RoomMgr: Enter placement edit mode - deactivate Controller - activate RoomMgr - RoomMgr -> User: Enter "Gallery Edit Mode" - RoomMgr -> User: Can now move art pieces around - deactivate RoomMgr - -else Change Art Supplies - - User -> Controller: Selects "Change Art Supplies" - activate Controller - Controller -> ArtTools: Enter art supplies edit mode - deactivate Controller - activate ArtTools - ArtTools -> User: Enter "Gallery Edit Mode" - ArtTools -> User: Can now modify color palette - deactivate ArtTools - -else Change wall color - - User -> Controller: Selects "Change wall color" - activate Controller - Controller -> RoomMgr: Enter wall color edit mode - deactivate Controller - activate RoomMgr - RoomMgr -> User: Enter "Gallery Edit Mode" - RoomMgr -> User: Can now choose wall colors - deactivate RoomMgr - -end -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/customiseWorkspace/code.wsd b/uml/sequence diagrams/customiseWorkspace/code.wsd deleted file mode 100644 index cbcb1d38..00000000 --- a/uml/sequence diagrams/customiseWorkspace/code.wsd +++ /dev/null @@ -1,52 +0,0 @@ -@startuml - -actor "Signed-in User" as User -participant HUD -participant "Controller/Input Manager" as Controller -participant "Room Manager" as RoomMgr -participant "Art Tools" as ArtTools - -User -> HUD: Selects 'Customize Workspace' option -activate HUD -HUD -> Controller: Request: CustomizeWorkspaceOptions() -deactivate HUD -activate Controller -Controller -> User: Displays customization options -deactivate Controller - -alt Change placement of art pieces - - User -> Controller: Selects "Change placement of art pieces" - activate Controller - Controller -> RoomMgr: GalleryEdit(Placement) - deactivate Controller - activate RoomMgr - RoomMgr -> User: System: Enter "Gallery Edit Mode" - RoomMgr -> User: Grants ability to move art pieces - deactivate RoomMgr - -else Change Art Supplies - - User -> Controller: Selects "Change Art Supplies" - activate Controller - Controller -> ArtTools: GalleryEdit(ArtSupplies) - deactivate Controller - activate ArtTools - ArtTools -> User: System: Enter "Gallery Edit Mode" - ArtTools -> User: Grants ability to add/delete colors in palette - deactivate ArtTools - -else Change wall color - - User -> Controller: Selects "Change wall color" - activate Controller - Controller -> RoomMgr: GalleryEdit(WallColor) - deactivate Controller - activate RoomMgr - RoomMgr -> User: System: Enter "Gallery Edit Mode" - RoomMgr -> User: Grants ability to choose wall color - deactivate RoomMgr - -end - -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/customiseWorkspace/image.png b/uml/sequence diagrams/customiseWorkspace/image.png deleted file mode 100644 index fa639fb1..00000000 Binary files a/uml/sequence diagrams/customiseWorkspace/image.png and /dev/null differ diff --git a/uml/sequence diagrams/customise_gallery/code.txt b/uml/sequence diagrams/customise_gallery/code.txt deleted file mode 100644 index 1241c30b..00000000 --- a/uml/sequence diagrams/customise_gallery/code.txt +++ /dev/null @@ -1,47 +0,0 @@ -@startuml -actor User - -participant "HUD" as HUD -participant "Controller/Input Manager" as Input -participant "Room Manager" as Room -participant "Auth Manager" as Auth -participant "Art Tools Manager" as Tools -participant "Network Manager" as Network -participant "Event Logger" as Event - -User -> HUD : User selects "Customise gallery" -HUD -> Input : Listen to input -Input -> Auth : Check permissions - -alt User authorised - Auth -> Input : Reply with permissions - Input -> Room : Reply with permissions - - loop For each customisation - Room -> Tools : Initialise tools - Tools -> Room : Forward tools to display - Room -> HUD : Forward loaded workspace with tools - HUD -> User : Display workspace with tools - User -> Input : Select a tool - Input -> Room : Log selected tool - Room -> Tools : Request functionality - Tools -> Input : Provide functionality - Input -> HUD : Display tool functionality - User -> Input : Select action - Input -> Network : Save the action - - alt Log successful - Network -> Event : Saved - Network -> Room : Saved - else Log unsuccessful - Network -> Event : Unsaved - Network -> Room : Tool usage not saved - Room -> HUD : Saving error - HUD -> User : Display 'Error: Customisation not saved' - end - end -else User unauthorised - Auth -> HUD : Send failed request - HUD -> User : Display "Access not permitted" -end -@enduml diff --git a/uml/sequence diagrams/customise_gallery/code.wsd b/uml/sequence diagrams/customise_gallery/code.wsd deleted file mode 100644 index 1241c30b..00000000 --- a/uml/sequence diagrams/customise_gallery/code.wsd +++ /dev/null @@ -1,47 +0,0 @@ -@startuml -actor User - -participant "HUD" as HUD -participant "Controller/Input Manager" as Input -participant "Room Manager" as Room -participant "Auth Manager" as Auth -participant "Art Tools Manager" as Tools -participant "Network Manager" as Network -participant "Event Logger" as Event - -User -> HUD : User selects "Customise gallery" -HUD -> Input : Listen to input -Input -> Auth : Check permissions - -alt User authorised - Auth -> Input : Reply with permissions - Input -> Room : Reply with permissions - - loop For each customisation - Room -> Tools : Initialise tools - Tools -> Room : Forward tools to display - Room -> HUD : Forward loaded workspace with tools - HUD -> User : Display workspace with tools - User -> Input : Select a tool - Input -> Room : Log selected tool - Room -> Tools : Request functionality - Tools -> Input : Provide functionality - Input -> HUD : Display tool functionality - User -> Input : Select action - Input -> Network : Save the action - - alt Log successful - Network -> Event : Saved - Network -> Room : Saved - else Log unsuccessful - Network -> Event : Unsaved - Network -> Room : Tool usage not saved - Room -> HUD : Saving error - HUD -> User : Display 'Error: Customisation not saved' - end - end -else User unauthorised - Auth -> HUD : Send failed request - HUD -> User : Display "Access not permitted" -end -@enduml diff --git a/uml/sequence diagrams/customise_gallery/sequence_diagram.png b/uml/sequence diagrams/customise_gallery/sequence_diagram.png deleted file mode 100644 index f4da431a..00000000 Binary files a/uml/sequence diagrams/customise_gallery/sequence_diagram.png and /dev/null differ diff --git a/uml/sequence diagrams/customise_gallery/updated.png b/uml/sequence diagrams/customise_gallery/updated.png deleted file mode 100644 index 190d5c04..00000000 Binary files a/uml/sequence diagrams/customise_gallery/updated.png and /dev/null differ diff --git a/uml/sequence diagrams/delete_account/code.txt b/uml/sequence diagrams/delete_account/code.txt deleted file mode 100644 index 93e20a35..00000000 --- a/uml/sequence diagrams/delete_account/code.txt +++ /dev/null @@ -1,38 +0,0 @@ -@startuml -actor User - -participant "HUD" as HUD -participant "Controller/Input Manager" as Input -participant "Auth Manager" as Auth -participant "Profile Manager" as Profile -participant "Room Manager" as Room -participant "Network Manager" as Network -participant "Event Logger" as Event - -User -> HUD : Select "Delete Account" -HUD -> Input : Button "Delete Account" clicked -Input -> Auth : Check permissions -Auth -> Input : Reply with permissions - -alt Permission granted -Input -> Profile : Request deletion of the account -Profile -> Network : Delete information - -alt Account deleted -Network -> Event : Log deletion action -Network -> Room : Load default gallery -Room -> HUD : Change room view -HUD -> User: Display new room -else Account not deleted -Network -> Event : Log deletion attempt -Network -> Input : Unsuccessful attempt -Input -> HUD : Forward error -HUD -> User : Display "Account was not deleted" -end - -else Permission denied -Input -> HUD : Deny request -HUD -> User : Display "Deletion not allowed" -end - -@enduml diff --git a/uml/sequence diagrams/delete_account/image.png b/uml/sequence diagrams/delete_account/image.png deleted file mode 100644 index 6c39777f..00000000 Binary files a/uml/sequence diagrams/delete_account/image.png and /dev/null differ diff --git a/uml/sequence diagrams/implementation/artwork_persistence_flow.puml b/uml/sequence diagrams/implementation/artwork_persistence_flow.puml new file mode 100644 index 00000000..ab60206f --- /dev/null +++ b/uml/sequence diagrams/implementation/artwork_persistence_flow.puml @@ -0,0 +1,41 @@ +@startuml + + +title Sequence Diagram: Artwork Persistence Flow& Storage Sync + +actor User + +participant "PaintableSurfaceRT" as Surface +participant "UI / Save Menu" as UI +participant "SupabaseArtworkRepository" as ArtworkRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +database "Local Disk" as Disk +database "Supabase Storage" as Storage +database "Supabase Database" as DB + +== Serialization == +User -> UI: Click Save Artwork +UI -> Surface: SaveCanvasToPNG(fileName) +Surface -> Surface: Texture2D.ReadPixels(RenderTexture) +Surface -> Surface: tex.EncodeToPNG() +Surface -> Disk: File.WriteAllBytes(path) +Surface -> UI: Return localPath + +== Cloud Upload == +UI -> ArtworkRepo: CreateArtworkWithUploadAsync(artworkData, bytes) +ArtworkRepo -> ArtworkRepo: Generate Thumbnail (GenerateHalfSizePng) +ArtworkRepo -> SupabaseSDK: UploadObjectAsync(original) +SupabaseSDK -> Storage: POST /storage/v1/object/artwork-images +ArtworkRepo -> SupabaseSDK: UploadObjectAsync(thumbnail) +SupabaseSDK -> Storage: POST /storage/v1/object/artwork-images + +== Metadata Sync == +ArtworkRepo -> ArtworkRepo: Set image_url & thumbnail_url +ArtworkRepo -> SupabaseSDK: client.From().Insert(artwork) +SupabaseSDK -> DB: INSERT INTO artwork +DB -> SupabaseSDK: OK / Created Model +SupabaseSDK -> ArtworkRepo: Return Model +ArtworkRepo -> UI: Return Success +UI -> User: Display "Saved Selection" + +@enduml diff --git a/uml/sequence diagrams/implementation/authentication_flow.puml b/uml/sequence diagrams/implementation/authentication_flow.puml new file mode 100644 index 00000000..225694f5 --- /dev/null +++ b/uml/sequence diagrams/implementation/authentication_flow.puml @@ -0,0 +1,40 @@ +@startuml + + +title Sequence Diagram: User Authentication & Role Management + +actor User +participant "AuthenticationUIController" as UI +participant "AuthenticationManager" as AuthManager +participant "SupabaseClientManager" as ClientManager +participant "SupabaseArtistRepository" as ArtistRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +database "Supabase Auth" as AuthDB +database "Supabase Database" as DB + +== Initialization == +AuthManager -> ClientManager: InitializeAsync() +ClientManager -> SupabaseSDK: Create Instance +AuthManager -> ArtistRepo: Create(SupabaseClientWrapper) + +== Login Flow == +User -> UI: Enter Credentials & Click Login +UI -> AuthManager: LoginUser(email, password) +AuthManager -> SupabaseSDK: client.Auth.SignIn(email, password) +SupabaseSDK -> AuthDB: Authenticate +AuthDB -> SupabaseSDK: Return Session +SupabaseSDK -> AuthManager: Return Session +AuthManager -> UI: Invoke OnUserLoggedIn + +== Role Fetching == +AuthManager -> ArtistRepo: GetArtistProfileAsync(userId) +ArtistRepo -> SupabaseSDK: client.From().Where(auth_user_id == userId).Single() +SupabaseSDK -> DB: Query Profile +DB -> SupabaseSDK: Profile Data +SupabaseSDK -> ArtistRepo: Return Profile +ArtistRepo -> AuthManager: Return Profile +AuthManager -> AuthManager: Determine Role (e.g. Artist) +AuthManager -> UI: Invoke OnUserRoleChanged(role) +UI -> User: Display Success & User Role + +@enduml diff --git a/uml/sequence diagrams/implementation/gallery_spawning_flow.puml b/uml/sequence diagrams/implementation/gallery_spawning_flow.puml new file mode 100644 index 00000000..bfd6e31e --- /dev/null +++ b/uml/sequence diagrams/implementation/gallery_spawning_flow.puml @@ -0,0 +1,43 @@ +@startuml + + +title Sequence Diagram: Data-Driven Gallery Spawning + +actor User +participant "GameManager" as GM +participant "SupabaseGalleryRepository" as GalleryRepo +participant "Supabase.Client (SDK)" as SupabaseSDK +participant "CanvasSpawner" as Spawner +participant "PaintableSurfaceRT" as Surface +database "Supabase Database" as DB + +== Gallery Data Fetch == +User -> GM: Entry to Gallery Scene +GM -> GM: LoadScene("Gallery") +GM -> GalleryRepo: GetGalleryAsync(galleryId) +GalleryRepo -> SupabaseSDK: client.From().Where(id == gid).Single() +SupabaseSDK -> DB: SELECT * FROM gallery +DB -> SupabaseSDK: Gallery Data (including artwork_ids) +SupabaseSDK -> GalleryRepo: Return Gallery Model +GalleryRepo -> GM: Return GalleryData + +== Artwork Path Fetch and Canvas Initialization == +GM -> GalleryRepo : GetArtworkPaths(galleryId) +activate GalleryRepo +GalleryRepo -> SupabaseSDK : Query artworks for gallery +SupabaseSDK -->> GalleryRepo : List of path metadata +GalleryRepo -->> GM : Dictionary +deactivate GalleryRepo + +loop for each slot in dictionary + GM -> SupabaseSDK : Download texture (image_url) + SupabaseSDK -->> GM : Byte array / Texture2D + GM -> Surface : SetBackground(texture) + activate Surface + Surface -> Surface : Graphics.Blit to RenderTexture + Surface -->> GM : Success + deactivate Surface +end + +GM -> GM: Notify "Gallery Ready" +@enduml diff --git a/uml/sequence diagrams/implementation/gpu_painting_flow.puml b/uml/sequence diagrams/implementation/gpu_painting_flow.puml new file mode 100644 index 00000000..3a49a8c3 --- /dev/null +++ b/uml/sequence diagrams/implementation/gpu_painting_flow.puml @@ -0,0 +1,45 @@ +@startuml + + +title Sequence Diagram: GPU-Based Painting Flow (Blit Ping-Pong) +actor User +participant "XR Controller" as Controller +participant "XRPainterRayInput" as RayInput +participant "BrushToolState" as BrushState +participant "PaintableSurfaceRT" as Surface +participant "Graphics (GPU)" as GPU +participant "BrushBlit.shader" as Shader + +== Stroke Start == +User -> Controller: Pull Trigger +Controller -> RayInput: Action Triggered +RayInput -> RayInput: Physics.Raycast() +RayInput -> Surface: GetComponent() +RayInput -> Surface: TryPaintAt(uv) + +== Drawing Loop (Every Frame) == +loop while Trigger Held + User -> Controller: Move Position/Rotation + RayInput -> RayInput: Calculate Intersecting UV + RayInput -> BrushState: Get Current Brush (Color, Radius, Hardness) + RayInput -> Surface: PaintAt(uv, brushState) + + Surface -> Shader: Set Params (_BrushTex, _BrushColor, _BrushParams) + Surface -> GPU: Graphics.Blit(Buffer_A, Buffer_B, brushBlitMaterial) + + note right of GPU + Shader reads Buffer_A, + applies brush at UV, + outputs to Buffer_B. + end note + + GPU -> Surface: Blit Complete + Surface -> Surface: Swap Buffers (Buffer_A, Buffer_B) + Surface -> Surface: ApplyToRenderer(Buffer_A) + Surface -> GPU: Update Material _MainTex/_BaseMap +end + +== Stroke End == +User -> Controller: Release Trigger +RayInput -> RayInput: EndStroke() +@enduml diff --git a/uml/sequence diagrams/interact_with_an_art_piece/Interact_With_Art_Piece.png b/uml/sequence diagrams/interact_with_an_art_piece/Interact_With_Art_Piece.png new file mode 100644 index 00000000..74d784e8 Binary files /dev/null and b/uml/sequence diagrams/interact_with_an_art_piece/Interact_With_Art_Piece.png differ diff --git a/uml/sequence diagrams/interact_with_an_art_piece/uml.txt b/uml/sequence diagrams/interact_with_an_art_piece/uml.txt index 8b27deea..3b57c398 100644 --- a/uml/sequence diagrams/interact_with_an_art_piece/uml.txt +++ b/uml/sequence diagrams/interact_with_an_art_piece/uml.txt @@ -5,49 +5,21 @@ participant "HUD" as HUD participant "Room Manager" as Room participant "Canvas" as Canvas participant "Network Manager" as Network -participant "Event Logger" as Logger -title Interact with an Art Piece +title Interact with an Art Piece (Swap) -User -> Input: walks up to an art piece (threshold reached) -Input -> Room: notifies proximity event -Room -> HUD: highlight nearby art piece -HUD -> User: art piece highlighted (interaction mode available) - -User -> Input: selects the highlighted art piece -Input -> Room: confirm art piece selection -Room -> Canvas: request art piece details (metadata, available interactions) -Canvas -> Network: fetch metadata / related media -Network -> Canvas: send art data and multimedia -Canvas -> HUD: display interaction options (zoom, rotate, info, etc.) -HUD -> User: shows options to interact with the art piece - -User -> Input: selects an interaction option (e.g., zoom/rotate/show info) -Input -> Canvas: send chosen command -Canvas -> Room: update art display according to user action -Room -> HUD: render visual change or playback multimedia -HUD -> User: updated art interaction view -Canvas -> Logger: log user interaction - -alt Selection via Controller - User -> Input: uses controller pointer to select art piece - Input -> Room: confirm art piece selection - Room -> HUD: highlight and enter interaction mode -end +User -> Input: uses controller pointer to select art piece +HUD -> User: Choose art to swap with +Input -> Room: confirm arts pieces selection +Room -> Canvas: request arts pieces details +Canvas -> Network: fetch arts pieces data (ID,gallery slot,path) +Network -> Canvas: send arts pieces data +Canvas -> Room: update arts pieces display according to users action and re-render alt Network Failure Canvas -> Network: request art data Network --> Canvas: error / timeout Canvas -> HUD: show error notification ("Unable to load art details") - HUD -> Logger: log network error -end - -alt Exit Interaction Mode - User -> Input: exits interaction mode - Input -> Room: notify exit event - Room -> HUD: revert to free-move mode - HUD -> User: normal navigation restored - Room -> Logger: log exit interaction end -@enduml +@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/review_submission_req/image.png b/uml/sequence diagrams/review_submission_req/image.png deleted file mode 100644 index e86340aa..00000000 Binary files a/uml/sequence diagrams/review_submission_req/image.png and /dev/null differ diff --git a/uml/sequence diagrams/review_submission_req/uml.txt b/uml/sequence diagrams/review_submission_req/uml.txt deleted file mode 100644 index 926c636c..00000000 --- a/uml/sequence diagrams/review_submission_req/uml.txt +++ /dev/null @@ -1,65 +0,0 @@ -@startuml -title Review a Submission Request - -actor "Signed-in User" as User -participant "HUD" as HUD -participant "Security Manager" as Sec -participant "Profile Manager" as Prof -participant "Network Manager" as Net -participant "Room Manager" as Room -participant "Canvas" as Canvas -participant "Collaboration/Communication" as Collab -participant "Event Logger" as Log -actor "Artist (Submitter)" as Artist - -' ============== TRIGGER ============== -User ->> HUD: Click "Review" on submission notification -HUD ->> Sec: Verify session/auth -Sec --> HUD: Auth OK (user owns gallery) -Log --> Log: Log: SubmissionReview.Open - -' ============== LOAD SUBMISSION DETAILS ============== -HUD ->> Room: Get pending submission details (submissionId) -Room ->> Canvas: Fetch artwork preview/meta (title, artists, desc) -Canvas --> Room: Artwork meta + preview ref -Room --> HUD: Submission details -HUD --> User: Show artwork, title, artists, description\nShow Accept / Reject buttons -Log --> Log: Log: SubmissionReview.DetailsShown - -' ============== DECISION BRANCH ============== -alt User clicks "Accept" - HUD ->> HUD: Prompt message textbox for feedback - User ->> HUD: Enter acceptance message + Send - Log --> Log: Log: SubmissionReview.AcceptClicked - - ' Apply change to gallery - HUD ->> Room: Approve submission(submissionId) - Room ->> Canvas: Add artwork to gallery (place/slot, metadata) - Canvas --> Room: Added OK (asset id / placement) - Room ->> Net: Broadcast gallery update (artwork added) - Net --> HUD: Update gallery view (new artwork visible) - Log --> Log: Log: SubmissionReview.ArtworkAdded - - ' Notify artist - HUD ->> Collab: Send acceptance message to artist - Collab --> Artist: Notification: Submission accepted + feedback - Log --> Log: Log: SubmissionReview.AcceptanceNotified - - HUD --> User: Confirmation: Artwork added to your gallery -else User clicks "Reject" - HUD ->> HUD: Prompt message textbox for feedback - User ->> HUD: Enter rejection message + Send - Log --> Log: Log: SubmissionReview.RejectClicked - - ' Mark as rejected (no gallery change) - HUD ->> Room: Reject submission(submissionId) - Room --> HUD: Marked rejected - Log --> Log: Log: SubmissionReview.MarkedRejected - - ' Notify artist - HUD ->> Collab: Send rejection notice + feedback - Collab --> Artist: Notification: Submission rejected + feedback - HUD --> User: Confirmation: Rejection sent to artist -end - -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/review_submission_req/uml.wsd b/uml/sequence diagrams/review_submission_req/uml.wsd deleted file mode 100644 index 53a9117c..00000000 --- a/uml/sequence diagrams/review_submission_req/uml.wsd +++ /dev/null @@ -1,93 +0,0 @@ -@startuml -title Review a Submission Request - -actor "Signed-in User" as User -participant "HUD" as HUD -participant "Security Manager" as Sec -participant "Profile Manager" as Prof -participant "Network Manager" as Net -participant "Room Manager (incl. submissions)" as Room -participant "Canvas (Artwork Loader/Store)" as Canvas -participant "Collaboration/Communication" as Collab -participant "Event Logger" as Log -actor "Artist (Submitter)" as Artist - -' ============== TRIGGER ============== -User ->> HUD: Click "Review" on submission notification -HUD ->> Sec: Verify session/auth -Sec --> HUD: Auth OK (user owns gallery) -Log --> Log: Log: SubmissionReview.Open - -' ============== LOAD SUBMISSION DETAILS ============== -HUD ->> Room: Get pending submission details (submissionId) -Room ->> Canvas: Fetch artwork preview/meta (title, artists, desc) -Canvas --> Room: Artwork meta + preview ref -Room --> HUD: Submission details -HUD --> User: Show artwork, title, artists, description\nShow Accept / Reject buttons -Log --> Log: Log: SubmissionReview.DetailsShown - -' ============== DECISION BRANCH ============== -alt User clicks "Accept" - HUD ->> HUD: Prompt message textbox for feedback - User ->> HUD: Enter acceptance message + Send - Log --> Log: Log: SubmissionReview.AcceptClicked - - ' Apply change to gallery - HUD ->> Room: Approve submission(submissionId) - Room ->> Canvas: Add artwork to gallery (place/slot, metadata) - Canvas --> Room: Added OK (asset id / placement) - Room ->> Net: Broadcast gallery update (artwork added) - Net --> HUD: Update gallery view (new artwork visible) - Log --> Log: Log: SubmissionReview.ArtworkAdded - - ' Notify artist - HUD ->> Collab: Send acceptance message to artist - Collab --> Artist: Notification: Submission accepted + feedback - Log --> Log: Log: SubmissionReview.AcceptanceNotified - - HUD --> User: Confirmation: Artwork added to your gallery -else User clicks "Reject" - HUD ->> HUD: Prompt message textbox for feedback - User ->> HUD: Enter rejection message + Send - Log --> Log: Log: SubmissionReview.RejectClicked - - ' Mark as rejected (no gallery change) - HUD ->> Room: Reject submission(submissionId) - Room --> HUD: Marked rejected - Log --> Log: Log: SubmissionReview.MarkedRejected - - ' Notify artist - HUD ->> Collab: Send rejection notice + feedback - Collab --> Artist: Notification: Submission rejected + feedback - HUD --> User: Confirmation: Rejection sent to artist -end - -' ============== POST INTERACTION (COMMON) ============== -par UI Refresh - HUD ->> Room: Refresh pending submissions list - Room --> HUD: Updated queue -else Telemetry - Log --> Log: Log: SubmissionReview.Completed -end - -' ============== NOTES ============== -note over HUD -Trigger: Notification on gallery page indicates a pending submission. -User clicks "Review". -end note - -note over Sec -Precondition: A user (artist) has submitted artwork to this gallery. -Only signed-in owners can review. -end note - -note over Collab -Special Requirement: Notification system for requests and feedback. -end note - -note over Room, Canvas -Postconditions (Accept): Artwork is added to the gallery. -Postconditions (Reject): Artwork not added; artist receives feedback. -end note - -@enduml diff --git a/uml/sequence diagrams/signoff/Screenshot_2025-11-03_13-55-03.png b/uml/sequence diagrams/signoff/Screenshot_2025-11-03_13-55-03.png deleted file mode 100644 index 6737683d..00000000 Binary files a/uml/sequence diagrams/signoff/Screenshot_2025-11-03_13-55-03.png and /dev/null differ diff --git a/uml/sequence diagrams/signoff/signoff.png b/uml/sequence diagrams/signoff/signoff.png deleted file mode 100644 index 09eacd4a..00000000 Binary files a/uml/sequence diagrams/signoff/signoff.png and /dev/null differ diff --git a/uml/sequence diagrams/signoff/signoff.txt b/uml/sequence diagrams/signoff/signoff.txt deleted file mode 100644 index 01bb14df..00000000 --- a/uml/sequence diagrams/signoff/signoff.txt +++ /dev/null @@ -1,13 +0,0 @@ -@startuml -actor user -participant "controller/input manager" as input -participant "hud" as hud -participant "Security Manager" as auth -participant "Even Logger" as log - -user -> input : user opens hud -input -> hud : user selects sign off -log -> log : logs the sign off activity. -hud -> auth : triggers the action to log off -auth -> user : Sends a message and logs off -@enduml diff --git a/uml/sequence diagrams/signup/signup.png b/uml/sequence diagrams/signup/signup.png deleted file mode 100644 index 115dc618..00000000 Binary files a/uml/sequence diagrams/signup/signup.png and /dev/null differ diff --git a/uml/sequence diagrams/signup/signup.puml b/uml/sequence diagrams/signup/signup.puml deleted file mode 100644 index 1eaf6250..00000000 --- a/uml/sequence diagrams/signup/signup.puml +++ /dev/null @@ -1,17 +0,0 @@ -@startuml -actor User -participant "Controller/Input Manager" as Input -participant "HUD" as HUD -participant "Profile Manager" as UserMgr -participant "Security Manager" as Auth -participant "Room Manager" as Room -participant "Event Logger" as Log -User -> Input : User inputs credentials -Input -> HUD : Forwards credentials -Log -> Log : Logs all the actions -HUD -> UserMgr: Creates a user -log -> log : Logs the user interaction -UserMgr -> Auth : Registers user -log -> log : Logs the system crud operation -Auth -> Room : Loads default gallery -@enduml diff --git a/uml/sequence diagrams/submit_an_art_piece/submit_an_art_piece.png b/uml/sequence diagrams/submit_an_art_piece/submit_an_art_piece.png deleted file mode 100644 index 54cdb1bf..00000000 Binary files a/uml/sequence diagrams/submit_an_art_piece/submit_an_art_piece.png and /dev/null differ diff --git a/uml/sequence diagrams/submit_an_art_piece/uml.txt b/uml/sequence diagrams/submit_an_art_piece/uml.txt deleted file mode 100644 index f164d101..00000000 --- a/uml/sequence diagrams/submit_an_art_piece/uml.txt +++ /dev/null @@ -1,19 +0,0 @@ -@startuml -actor User -participant "Controller/Input Manager" as Input -participant "HUD" as HUD -participant "Room Manager" as Room -participant "Auth Manager" as Auth - -User -> Input: clicks on submit on a art piece -Input -> HUD: interacts -HUD -> Auth: sends user info to authenticate -Auth -> HUD: sends auth status -HUD -> Room: calls to display galleries -Room -> HUD: displays galleries -HUD -> User: sees the galleries -User -> Input: clicks on gallery they want to submit to -Input -> HUD: sends gallery info -HUD -> Room: submits the art piece to selected gallery - -@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/uml.puml b/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/uml.puml new file mode 100644 index 00000000..69a45caa --- /dev/null +++ b/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/uml.puml @@ -0,0 +1,63 @@ +@startuml +title Browse/Join Rooms + +' ============== ACTORS & COMPONENTS ============== +actor "User" as User +participant "Controller/Input Manager" as Ctrl +participant "HUD" as HUD +participant "Network Manager" as Net +participant "Voice Chat" as Voice + +' ============== TRIGGER ============== +User ->> Ctrl : Opens Join Room +Ctrl ->> HUD : Open "Join a Room" + +' ============== LISTING ============== +HUD ->> Net : Poll live public rooms +Net --> HUD : Live room list + +HUD --> User : Show: live public room list\n+ "Enter Code" input\n+ "Create Room" button + +User ->> Ctrl : Selects option + +' ============== FLOW A: Public Room from list ============ +alt Flow A — Join public room (from list) + User ->> Ctrl : Taps a room from list + Ctrl ->> HUD : Join selected room + HUD ->> Net : Join room + Net --> HUD : Status: Connecting… + + Net ->> Net : Start client + Net --> HUD : Connected + + HUD ->> Voice : Join voice channel + Voice --> User : Voice/chat active + +' ============== FLOW B: Join via Code ============ +else Flow B — Join via room code + User ->> Ctrl : Enters room code + Ctrl ->> HUD : Submit join code + HUD ->> Net : Join room by code + + alt Code valid / room found + Net ->> Net : Set up relay + Net ->> Net : Start client + Net --> HUD : Connected + + HUD ->> Voice : Join voice channel + Voice --> User : Voice/chat active + + else Code invalid / room not found + Net --> HUD : Room not found + HUD --> User : Show error: "Room not found.\nPlease try a new code." + end + +' ============== FLOW C: Create Room ============ +else Flow C — Create room + User ->> Ctrl : Taps "Create Room" + Ctrl ->> HUD : Navigate to Create Room + HUD --> User : [See: Create Room use case] + +end + +@enduml diff --git a/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/workflow.png b/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/workflow.png new file mode 100644 index 00000000..ddf50163 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Browse_And_Join_Gallery/workflow.png differ diff --git a/uml/sequence diagrams/use_cases/Collaborate/uml.puml b/uml/sequence diagrams/use_cases/Collaborate/uml.puml new file mode 100644 index 00000000..49b5922d --- /dev/null +++ b/uml/sequence diagrams/use_cases/Collaborate/uml.puml @@ -0,0 +1,94 @@ +@startuml +title Sequence Diagram: Collaborate + +actor User +participant "ControllerInput Manager" as Input +participant "HUD" as HUD +participant "Collaboration Manager" as Colab +participant "Security Manager" as Auth +participant "Network Manager" as Network +participant "Room Manager" as Room +participant "CanvasSpawner" as Spawner +participant "CanvasBrushSpawner" as BrushSpawner +participant "Art Tools (BrushToolState)" as Tools +participant "Canvas (PaintableSurfaceRT)" as Canvas +participant "CanvasStrokeSyncNgo" as StrokeSync +participant "Event Logger" as Logger + +== User Joins a Shared Workspace == +User -> Input: Selects "Join a workspace" +Logger -> Logger: Log SelectsJoinWorkspace +Input -> HUD: Display code textbox +User -> Input: Inputs code +Input -> HUD: Submits code +Logger -> Logger: Log code +HUD -> Colab: Validates code +Colab -> Auth: Sends user info +Auth --> Colab: Authenticates user +Colab -> Network: Load workspace instance +Logger -> Logger: Log workspace info +Network -> Room: Load workspace layout +Room -> Canvas: Load artworks (SetBackground → Graphics.Blit to RenderTexture) + +== Brush & Canvas Spawn (on workspace load) == +Room -> Spawner: SpawnWorkspaceServerRpc(pos, rot) +activate Spawner +Spawner -> Spawner: Instantiate workspace prefab +Spawner -> Spawner: NetworkObject.Spawn() +Spawner -> BrushSpawner: SpawnBrush() +BrushSpawner -> BrushSpawner: Instantiate paintbrush prefab at canvas offset +BrushSpawner -> Network: NetworkObject.Spawn() — brush visible to all clients +deactivate Spawner + +== User Collaborates on a Painting == +User -> Input: Selects canvas (walks up / ray points) +Logger -> Logger: Log canvas selected +Input -> Canvas: Zoom in (enter draw mode) + +User -> Input: Picks up brush (XR grab) +Input -> Tools: BrushGrabState.OnGrabbed() +Tools -> BrushSpawner: RequestReplacementBrushServerRpc() — spawn replacement for others +Tools -> HUD: Show current brush color/radius + +loop While trigger held (every frame) + User -> Input: Pull trigger, move controller + Input -> Input: Physics.Raycast() → hit.textureCoord (UV) + Input -> Tools: GetHeldBrushToolState() → BrushState (color, radius, hardness) + Input -> StrokeSync: LocalStrokeBegin(strokeId, brushState) [first frame] + Input -> Canvas: TryPaintAt(uv, brushState) + Canvas -> Canvas: Graphics.Blit(BufferA → BufferB, brushBlitMaterial) + Canvas -> Canvas: Swap buffers (ping-pong) + Canvas -> Canvas: ApplyToRenderer(BufferA) + Input -> StrokeSync: LocalStrokePoints(strokeId, encodedUVs) + StrokeSync -> Network: BroadcastStroke RPC to all clients + Network --> Canvas: Remote clients paint same stroke +end + +User -> Input: Release trigger +Input -> StrokeSync: LocalStrokeEnd(strokeId) +StrokeSync -> Network: Finalise stroke sync + +== User Saves Artwork == +User -> HUD: Click Save Artwork +HUD -> Canvas: SaveCanvasToPNG(fileName) +Canvas -> Canvas: Texture2D.ReadPixels(RenderTexture) +Canvas -> Canvas: tex.EncodeToPNG() +Canvas --> HUD: Return localPath + +note over StrokeSync, Network + CanvasStrokeSyncNgo handles all NGO RPCs. + No per-stroke auth call — auth happens at join time. + BrushRespawnOnGrab auto-despawns idle brushes after timeout. +end note + +== User Messages Another User == +User -> Input: Selects chat +Logger -> Logger: Log Chat selected +Input -> HUD: Display chat +User -> Input: Enters message +Input -> HUD: Saves message +Logger -> Logger: Log Message +HUD -> Colab: Send message +Colab -> Network: Broadcast to room + +@enduml diff --git a/uml/sequence diagrams/use_cases/Collaborate/workflow.png b/uml/sequence diagrams/use_cases/Collaborate/workflow.png new file mode 100644 index 00000000..d4cd0533 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Collaborate/workflow.png differ diff --git a/uml/sequence diagrams/use_cases/Communicate/uml.puml b/uml/sequence diagrams/use_cases/Communicate/uml.puml new file mode 100644 index 00000000..b84ecd8e --- /dev/null +++ b/uml/sequence diagrams/use_cases/Communicate/uml.puml @@ -0,0 +1,39 @@ +@startuml +actor User + +participant "Controllers" as Input +participant "On-Screen Notifications" as HUD +participant "Unity Vivox SDK" as CCM +participant "Network Services" as NM + + +== Voice Chat == + +User -> NM : Authenticate and join session +NM --> CCM : Voice access granted +CCM -> NM : Join Voice channel +CCM -> HUD : Show "Connected to Voice" message + +loop While moving + User -> Input : Move or turn head + Input -> CCM : Send new head position + CCM -> NM : Update voice location +end + +alt Muting self + User -> HUD : Press Mute in Menu + HUD -> CCM : Turn off microphone + CCM -> NM : Tell network to stop sending audio + CCM -> HUD : Show "Mic: OFF" + +end + +== Public Text Chat == + +User -> HUD : Type message in the UI chat box +HUD -> CCM : Submit message locally +CCM -> NM : Send message to server +NM -> NM : Add to master message list +NM --> CCM : Broadcast to all other users +CCM -> HUD : Display message on everyone's screen +@enduml diff --git a/uml/sequence diagrams/use_cases/Communicate/workflow.png b/uml/sequence diagrams/use_cases/Communicate/workflow.png new file mode 100644 index 00000000..6c10f569 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Communicate/workflow.png differ diff --git a/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/image.png b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/image.png new file mode 100644 index 00000000..df41d455 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/image.png differ diff --git a/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/uml.puml b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/uml.puml new file mode 100644 index 00000000..43e1eb52 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/uml.puml @@ -0,0 +1,38 @@ + +@startuml +actor User +participant "Input Manager" as Input +participant "HUD Manager" as HUD +participant "Room Manager" as Room +participant "Auth Manager" as SM +/'participant "Event Logger" as Logger'/ + +title Create an art room + +== Basic Flow == + +User -> Input: clicks on HUD icon +/'Input -> Logger: log user event'/ +Input -> HUD: requests HUD +User -> Input: clicks on create new room +/'Input -> Logger: log user event'/ +Input -> HUD: validates and sends event information to HUD +/'Input -> Logger: log user event'/ +HUD -> User: modal with options (room name, privacy type) is opened +User -> Input: Enters room's name and privacy type (public or private) +/'Input -> Logger: log user event'/ +Input -> HUD: validates and sends event information to HUD +HUD -> Room: requests a room with user information + +== Alternative Flow 1 – Private Room == + +Room -> SM: creates a room and requests a security layer. +SM -> Room: encrypts the room to make it private +Room -> User: notifies creation of private room. + + +== Alternative Flow 2 – Public Room == + +Room -> User: notifies creation of public room + +@enduml diff --git a/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/workflow.png b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/workflow.png new file mode 100644 index 00000000..95a0e171 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Create_an_Art_Gallery/workflow.png differ diff --git a/uml/sequence diagrams/use_cases/Interact_with_an_Art_Piece/uml.puml b/uml/sequence diagrams/use_cases/Interact_with_an_Art_Piece/uml.puml new file mode 100644 index 00000000..42da1353 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Interact_with_an_Art_Piece/uml.puml @@ -0,0 +1,82 @@ +@startuml +title Sequence Diagram: Interact with an Art Piece + +actor User +participant "ControllerInput Manager" as Input +participant "HUD" as HUD +participant "Room Manager" as Room +participant "Canvas (PaintableSurfaceRT)" as Canvas +participant "SupabaseArtworkRepository" as ArtworkRepo +participant "Supabase SDK" as SDK +participant "Network Manager" as Network +participant "Event Logger" as Logger + +database "Supabase Storage" as Storage +database "Supabase Database" as DB + +== Proximity Detection == +User -> Input: Walks up to an art piece (threshold reached) +Input -> Room: Notifies proximity event +Room -> HUD: Highlight nearby art piece +HUD -> User: Art piece highlighted — interaction mode available + +== Art Piece Selection == +User -> Input: Selects the highlighted art piece +Input -> Room: Confirm art piece selection +Room -> ArtworkRepo: GetArtworkPaths(artworkId) +activate ArtworkRepo +ArtworkRepo -> SDK: Query artworks WHERE id = artworkId +SDK -> DB: SELECT image_url, thumbnail_url FROM artwork +DB --> SDK: Artwork metadata +SDK --> ArtworkRepo: Return path metadata +ArtworkRepo --> Room: Return (image_url, thumbnail_url) +deactivate ArtworkRepo + +Room -> SDK: Download texture (image_url) +SDK -> Storage: GET /storage/v1/object/artwork-images +Storage --> SDK: Byte array +SDK --> Room: Texture2D + +Room -> Canvas: SetBackground(texture) +activate Canvas +Canvas -> Canvas: Graphics.Blit(texture → RenderTexture, ping-pong) +Canvas --> Room: Success +deactivate Canvas + +Canvas -> HUD: Display interaction options (zoom, rotate, info, etc.) +HUD -> User: Shows interaction options + +== Interaction == +User -> Input: Selects an interaction option (e.g. zoom / rotate / show info) +Input -> Canvas: Send chosen command +Canvas -> Room: Update art display according to user action +Room -> HUD: Render visual change or playback multimedia +HUD -> User: Updated art interaction view +Canvas -> Logger: Log user interaction + +alt Selection via Controller + User -> Input: Uses controller pointer to select art piece + Input -> Room: Confirm art piece selection + Room -> HUD: Highlight and enter interaction mode +end + +alt Network / Storage Failure + SDK --> Room: Error / timeout + Room -> HUD: Show error notification "Unable to load art details" + HUD -> Logger: Log network error +end + +alt Exit Interaction Mode + User -> Input: Exits interaction mode + Input -> Room: Notify exit event + Room -> HUD: Revert to free-move mode + HUD -> User: Normal navigation restored + Room -> Logger: Log exit interaction +end + +note over ArtworkRepo, Storage + Artwork textures are fetched from Supabase Storage + and seeded into PaintableSurfaceRT via Graphics.Blit. + DisplayOnly mode — painting is disabled during viewing. +end note +@enduml diff --git a/uml/sequence diagrams/interact_with_an_art_piece/image.png b/uml/sequence diagrams/use_cases/Interact_with_an_Art_Piece/workflow.png similarity index 100% rename from uml/sequence diagrams/interact_with_an_art_piece/image.png rename to uml/sequence diagrams/use_cases/Interact_with_an_Art_Piece/workflow.png diff --git a/uml/sequence diagrams/use_cases/Sign_In/signIn.png b/uml/sequence diagrams/use_cases/Sign_In/signIn.png new file mode 100644 index 00000000..0e77a488 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Sign_In/signIn.png differ diff --git a/uml/sequence diagrams/use_cases/Sign_In/uml.puml b/uml/sequence diagrams/use_cases/Sign_In/uml.puml new file mode 100644 index 00000000..0dc10969 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Sign_In/uml.puml @@ -0,0 +1,51 @@ +@startuml +title Sign In + +actor "User" as User +participant "Controller/Input Manager" as Input +participant "HUD" as HUD +participant "Authentication UI" as AuthUI +participant "Authentication Manager" as AuthMgr +participant "Supabase Client" as Supa +participant "Game Manager" as GameMgr + + +alt Already authenticated + AuthMgr --> AuthUI : User logged in + AuthUI --> User : Hide auth UI + +else Not authenticated + AuthUI --> User : Show login panel + + User ->> AuthUI : Enter email + password + AuthUI ->> AuthUI : Validate input + + alt Validation fails + AuthUI --> User : Log error message + + else Validation passes + AuthUI ->> AuthMgr : Login + + AuthMgr ->> Supa : Sign in + Supa --> AuthMgr : Session + User + + alt Sign in failed + AuthMgr --> AuthUI : Error + AuthUI --> User : Log error message + + else Sign in succeeded + AuthMgr --> AuthUI : Logged in + AuthMgr --> GameMgr : Logged in event + GameMgr ->> GameMgr : Update auth state + AuthUI --> User : Hide auth UI + GameMgr ->> User : Load gallery + end + end +end + +@enduml + + + + + diff --git a/uml/sequence diagrams/use_cases/Sign_Off/uml.puml b/uml/sequence diagrams/use_cases/Sign_Off/uml.puml new file mode 100644 index 00000000..3af2c63d --- /dev/null +++ b/uml/sequence diagrams/use_cases/Sign_Off/uml.puml @@ -0,0 +1,37 @@ +@startuml +title Sign Off + +actor User as User +participant "Controller/Input Manager" as Input +participant "HUD" as HUD +participant "AuthenticationUI" as AuthUI +participant "AuthenticationManager" as AuthMgr +participant "SupabaseClient\n(via SupabaseClientManager)" as Supa +participant "Event Logger" as Log + +User -> Input : Opens HUD +Input -> HUD : Show HUD +HUD -> AuthUI : Display authenticated panel +AuthUI -> User : Show "Logout" button + +User -> AuthUI : Clicks Logout +AuthUI -> AuthUI : ShowLoadingPanel() +AuthUI -> AuthMgr : LogoutUser() +Log -> Log : Log sign-off activity + +AuthMgr -> Supa : Auth.SignOut() + +alt Sign out failed + Supa --> AuthMgr : Exception + AuthMgr -> AuthMgr : OnAuthenticationError?.Invoke("Logout failed") + AuthUI -> AuthUI : HandleAuthenticationError() + AuthUI -> User : Show error message +else Sign out succeeded + Supa --> AuthMgr : OK + AuthMgr -> AuthMgr : CurrentSession = null\nOnUserLoggedOut?.Invoke() + Log -> Log : Log user signed out + AuthUI -> AuthUI : HandleUserLoggedOut() + AuthUI -> AuthUI : ShowLoginPanel()\n[shows door object if configured] + AuthUI -> User : Display Login panel +end +@enduml diff --git a/uml/sequence diagrams/use_cases/Sign_Off/workflow.png b/uml/sequence diagrams/use_cases/Sign_Off/workflow.png new file mode 100644 index 00000000..cb8a179a Binary files /dev/null and b/uml/sequence diagrams/use_cases/Sign_Off/workflow.png differ diff --git a/uml/sequence diagrams/use_cases/Sign_Up/signUp.png b/uml/sequence diagrams/use_cases/Sign_Up/signUp.png new file mode 100644 index 00000000..38312b76 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Sign_Up/signUp.png differ diff --git a/uml/sequence diagrams/use_cases/Sign_Up/uml.puml b/uml/sequence diagrams/use_cases/Sign_Up/uml.puml new file mode 100644 index 00000000..126b4c11 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Sign_Up/uml.puml @@ -0,0 +1,59 @@ +@startuml +title Sign Up + +actor "User" as User +participant "Controller/Input Manager" as Input +participant "HUD" as HUD +participant "Authentication UI" as AuthUI +participant "Authentication Manager" as AuthMgr +participant "Supabase Client" as Supa +participant "Artist Repository" as ArtistRepo + + +alt Already authenticated + AuthMgr --> AuthUI : User logged in + AuthUI --> User : Hide auth UI + +else Not authenticated + AuthUI --> User : Show login panel + + User ->> AuthUI : Clicks "Register" + AuthUI --> User : Show register panel + + User ->> AuthUI : Enter email, password, username + AuthUI ->> AuthUI : Validate input + + alt Validation fails + AuthUI --> User : Log error message + + else Validation passes + AuthUI ->> AuthMgr : Register + + AuthMgr ->> Supa : Sign up + Supa --> AuthMgr : Session + User + + alt Sign up failed + AuthMgr --> AuthUI : Error + AuthUI --> User : Log serror message + AuthUI --> User : Show register panel + + else Sign up succeeded + AuthMgr ->> ArtistRepo : Create artist profile + ArtistRepo ->> Supa : Insert into artists table + + alt Profile creation failed + ArtistRepo --> AuthMgr : false + AuthMgr --> AuthUI : Success (profile warning logged) + else Profile created + ArtistRepo --> AuthMgr : true + AuthMgr --> AuthUI : Success + end + + AuthUI --> User : Show login panel + end + end +end + +@enduml + + diff --git a/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.png b/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.png new file mode 100644 index 00000000..5c547297 Binary files /dev/null and b/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.png differ diff --git a/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.puml b/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.puml new file mode 100644 index 00000000..41ffa781 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Work_on_Artwork/Work_On_Artwork.puml @@ -0,0 +1,82 @@ +@startuml +title Work on Artwork + +' ============== ACTORS & COMPONENTS ============== +actor "User" as User +participant "Controller/Input Manager" as Ctrl +participant "HUD" as HUD +participant "Artwork Session / Network Manager" as Net +participant "Brush Tool State" as Brush +participant "Canvas Stroke Sync" as StrokeSync +participant "Canvas" as Canvas +participant "Authentication Manager" as Auth +participant "Artwork Repository / Supabase" as Cloud + +' ============== TRIGGER ============== +User ->> HUD : Request "Create Room" +HUD ->> Net : Create or join room/workspace +User ->> HUD : Request "Create Canvas" + +' ============== ENTRY ============== + +Net --> HUD : Status: Connecting... +Net ->> Net : Start host/client session +Net --> HUD : Connected +HUD --> User : Workspace opened +' ============== ENTRY ============== +HUD -> Net : requests creation of workspace in room +Net --> HUD : status: Connecting... +Net -> Net : start host/client session +Net --> HUD : Connected +HUD --> User : workspace opened + +' ============== WORKFLOW A: Paint on artwork ============ +alt Flow A — Draw on artwork + User ->> Ctrl : Grabs brush and presses draw + Ctrl ->> Brush : Get current brush state + Brush --> Ctrl : Colour / radius / hardness + + Ctrl ->> Canvas : Raycast hit on artwork surface + + alt Synced collaborative artwork + Ctrl ->> StrokeSync : Begin local stroke + StrokeSync ->> StrokeSync : Send stroke begin over network + + loop While drawing + Ctrl ->> Canvas : Apply local paint at UV + Ctrl ->> StrokeSync : Send stroke points + StrokeSync ->> StrokeSync : Broadcast stroke points + StrokeSync ->> Canvas : Apply synced paint ops + end + + User ->> Ctrl : Releases draw input + Ctrl ->> StrokeSync : End local stroke + StrokeSync ->> StrokeSync : Send stroke end over network + + else Local-only artwork + loop While drawing + Ctrl ->> Canvas : Apply local paint at UV + end + end + +' ============== WORKFLOW B: Upload artwork ============ +else Flow B — Upload artwork to cloud + User ->> Ctrl : Clicks "Upload Artwork" + Ctrl ->> HUD : Request upload + HUD ->> Auth : Check authentication state + + alt User logged in + Auth --> HUD : Authenticated + HUD ->> Canvas : Export artwork image + Canvas --> HUD : Image data / file path + HUD ->> Cloud : Create artwork record + upload image + Cloud --> HUD : Upload success + HUD --> User : Show success: "Artwork uploaded" + + else User not logged in + Auth --> HUD : Not authenticated + HUD --> User : Show error: "Log in or sign up to upload artwork." + end +end + +@enduml \ No newline at end of file diff --git a/uml/sequence diagrams/use_cases/Work_on_Artwork/uml.puml b/uml/sequence diagrams/use_cases/Work_on_Artwork/uml.puml new file mode 100644 index 00000000..6dc47cd9 --- /dev/null +++ b/uml/sequence diagrams/use_cases/Work_on_Artwork/uml.puml @@ -0,0 +1,45 @@ +@startuml +actor User +participant "Controller/Input Manager" as Input +participant "HUD" as HUD +participant "Network Manager" as Net +participant "Art Tools" as Tools +participant "Canvas" as Canvas +participant "Security Manager" as Auth +participant "Event Logger" as Logger + +== Session Entry == +Canvas -> Auth : requests authentication +Auth -> Canvas : authenticates session + +== Canvas Selection == +User -> Input : selects canvas +Input -> Canvas : zooms in +Logger -> Logger : Log: Canvas selected + +== Brush Pickup (Physical/Networked) == +User -> Input : physically grabs brush (XR grab) +Input -> Net : RequestReplacementBrush (ServerRpc) +Net -> Tools : spawns replacement brush for all clients +Logger -> Logger : Log: Brush grabbed + +== Painting (Stroke-Synced) == +User -> Input : draws on canvas +Input -> Tools : begin stroke (LocalStrokeBegin) +Tools -> Net : sync stroke points (LocalStrokePoints) +Net -> Canvas : updates canvas for all clients +Logger -> Logger : Log: Canvas updated + +== Color Selection (Optional) == +alt User changes brush color + User -> Input : grabs color bucket / cycles presets + Input -> Tools : updates BrushToolState color + Tools -> Canvas : next stroke uses new color +end + +== Exit == +User -> Input : clicks exit +Logger -> Logger : Log: Canvas exited +Input -> HUD : exits canvas +Input -> Canvas : unzooms +@enduml diff --git a/uml/sequence diagrams/use_cases/Work_on_Artwork/workflow.png b/uml/sequence diagrams/use_cases/Work_on_Artwork/workflow.png new file mode 100644 index 00000000..cac2d24d Binary files /dev/null and b/uml/sequence diagrams/use_cases/Work_on_Artwork/workflow.png differ diff --git a/uml/sequence diagrams/work on artwork/image.png b/uml/sequence diagrams/work on artwork/image.png deleted file mode 100644 index 869f479a..00000000 Binary files a/uml/sequence diagrams/work on artwork/image.png and /dev/null differ diff --git a/uml/sequence diagrams/work on artwork/work.txt b/uml/sequence diagrams/work on artwork/work.txt deleted file mode 100644 index 7fc563b7..00000000 --- a/uml/sequence diagrams/work on artwork/work.txt +++ /dev/null @@ -1,28 +0,0 @@ -@startuml -actor User -participant "Controller/Input Manager" as Input -participant "HUD" as HUD -participant "Canvas" as Canvas -participant "Art Tools" as Tools -participant "Security Manager" as Auth -participant "Event Logger" as Logger -User -> Input : selects canvas -Input -> Canvas : zooms in -Logger -> Logger: Log: Canvas selected -User -> Input : picks up tool -Input -> Tools : applies tool -Tools -> Canvas : updates canvas -Logger -> Logger: Log: Canvas updated -alt User clicks undo -User -> Input: interacts with undo tool -Input -> Tools: registers interaction -Tools -> Canvas: undoes last stored change -Logger -> Logger: Log: Change undone -end -Canvas -> Auth : requests authentication -Auth -> Canvas: authenticates change -User -> Input : clicks exit -Logger -> Logger: Log: Canvas exited -Input -> HUD : exits canvas -Input -> Canvas : unzooms -@enduml \ No newline at end of file diff --git a/uml/technical_architecture/uml.txt b/uml/technical_architecture/uml.puml similarity index 100% rename from uml/technical_architecture/uml.txt rename to uml/technical_architecture/uml.puml