فهرست منبع

initial commit

Axel Nordh 6 ماه پیش
کامیت
30c627ef8c
77فایلهای تغییر یافته به همراه17048 افزوده شده و 0 حذف شده
  1. 26 0
      .gitignore
  2. BIN
      .vs/HotelTycoon/DesignTimeBuild/.dtbcache.v2
  3. BIN
      .vs/HotelTycoon/FileContentIndex/f5f09abe-a1bf-4d19-8bd8-261c5569567c.vsidx
  4. BIN
      .vs/HotelTycoon/v17/.futdcache.v2
  5. 12 0
      .vs/HotelTycoon/v17/DocumentLayout.json
  6. BIN
      .vs/ProjectEvaluation/hoteltycoon.metadata.v8.bin
  7. BIN
      .vs/ProjectEvaluation/hoteltycoon.projects.v8.bin
  8. BIN
      .vs/ProjectEvaluation/hoteltycoon.strings.v8.bin
  9. 5 0
      .vscode/extensions.json
  10. 10 0
      .vscode/launch.json
  11. 60 0
      .vscode/settings.json
  12. 1057 0
      Assets/InputSystem_Actions.inputactions
  13. 34 0
      Assets/Readme.asset
  14. 110 0
      Assets/Resources/UI/BuildingInterface.uss
  15. 16 0
      Assets/Resources/UI/BuildingInterface.uxml
  16. 631 0
      Assets/Scenes/MainScene.unity
  17. 305 0
      Assets/Scripts/Bootstrap/HotelTycoonBootstrap.cs
  18. 266 0
      Assets/Scripts/Building/InitialRoomSetup.cs
  19. 1566 0
      Assets/Scripts/Building/NewRoomBuilder.cs
  20. 1480 0
      Assets/Scripts/Building/RoomBuilder.cs
  21. 184 0
      Assets/Scripts/Camera/CameraController.cs
  22. 485 0
      Assets/Scripts/Facilities/FacilityManager.cs
  23. 495 0
      Assets/Scripts/Guests/Guest.cs
  24. 212 0
      Assets/Scripts/Managers/GameManager.cs
  25. 421 0
      Assets/Scripts/Managers/HotelManager.cs
  26. 480 0
      Assets/Scripts/Managers/StaffManager.cs
  27. 557 0
      Assets/Scripts/Staff/Staff.cs
  28. 353 0
      Assets/Scripts/Systems/HotelRatingSystem.cs
  29. 247 0
      Assets/Scripts/UI/BuildingUIController.cs
  30. 284 0
      Assets/Scripts/UI/GuestInfoUI.cs
  31. 46 0
      Assets/Scripts/UI/PanelSettings.asset
  32. 309 0
      Assets/Scripts/UI/UIController.cs
  33. 86 0
      Assets/Scripts/Utils/PrefabCreator.cs
  34. 982 0
      Assets/Settings/DefaultVolumeProfile.asset
  35. 135 0
      Assets/Settings/Mobile_RPAsset.asset
  36. 52 0
      Assets/Settings/Mobile_Renderer.asset
  37. 135 0
      Assets/Settings/PC_RPAsset.asset
  38. 95 0
      Assets/Settings/PC_Renderer.asset
  39. 159 0
      Assets/Settings/SampleSceneProfile.asset
  40. 261 0
      Assets/Settings/UniversalRenderPipelineGlobalSettings.asset
  41. BIN
      Assets/TutorialInfo/Icons/URP.png
  42. 654 0
      Assets/TutorialInfo/Layout.wlt
  43. 242 0
      Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs
  44. 16 0
      Assets/TutorialInfo/Scripts/Readme.cs
  45. 1 0
      Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss
  46. 126 0
      Assets/UI/BuildingInterface.uss
  47. 16 0
      Assets/UI/BuildingInterface.uxml
  48. 47 0
      Packages/manifest.json
  49. 465 0
      Packages/packages-lock.json
  50. 19 0
      ProjectSettings/AudioManager.asset
  51. 6 0
      ProjectSettings/ClusterInputManager.asset
  52. 36 0
      ProjectSettings/DynamicsManager.asset
  53. 13 0
      ProjectSettings/EditorBuildSettings.asset
  54. 48 0
      ProjectSettings/EditorSettings.asset
  55. 70 0
      ProjectSettings/GraphicsSettings.asset
  56. 487 0
      ProjectSettings/InputManager.asset
  57. 35 0
      ProjectSettings/MemorySettings.asset
  58. 7 0
      ProjectSettings/MultiplayerManager.asset
  59. 91 0
      ProjectSettings/NavMeshAreas.asset
  60. 43 0
      ProjectSettings/PackageManagerSettings.asset
  61. 56 0
      ProjectSettings/Physics2DSettings.asset
  62. 7 0
      ProjectSettings/PresetManager.asset
  63. 930 0
      ProjectSettings/ProjectSettings.asset
  64. 2 0
      ProjectSettings/ProjectVersion.txt
  65. 134 0
      ProjectSettings/QualitySettings.asset
  66. 121 0
      ProjectSettings/SceneTemplateSettings.json
  67. 18 0
      ProjectSettings/ShaderGraphSettings.asset
  68. 76 0
      ProjectSettings/TagManager.asset
  69. 9 0
      ProjectSettings/TimeManager.asset
  70. 15 0
      ProjectSettings/URPProjectSettings.asset
  71. 36 0
      ProjectSettings/UnityConnectSettings.asset
  72. 12 0
      ProjectSettings/VFXManager.asset
  73. 8 0
      ProjectSettings/VersionControlSettings.asset
  74. 10 0
      ProjectSettings/XRSettings.asset
  75. 30 0
      UserSettings/EditorUserSettings.asset
  76. 1605 0
      UserSettings/Layouts/default-6000.dwlt
  77. 1 0
      UserSettings/Search.settings

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+# ---> Unity
+/[Ll]ibrary/
+/[Tt]emp/
+/[Oo]bj/
+/[Bb]uild/
+
+# Autogenerated VS/MD solution and project files
+*.csproj
+*.unityproj
+*.sln
+*.suo
+*.tmp
+*.user
+*.userprefs
+*.pidb
+*.booproj
+
+# Unity3D generated meta files
+*.pidb.meta
+
+# Unity3D Generated File On Crash Reports
+sysinfo.txt
+
+# Egna addons
+*.log
+*.meta

BIN
.vs/HotelTycoon/DesignTimeBuild/.dtbcache.v2


BIN
.vs/HotelTycoon/FileContentIndex/f5f09abe-a1bf-4d19-8bd8-261c5569567c.vsidx


BIN
.vs/HotelTycoon/v17/.futdcache.v2


+ 12 - 0
.vs/HotelTycoon/v17/DocumentLayout.json

@@ -0,0 +1,12 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\Axel-PC\\HotelTycoon\\",
+  "Documents": [],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": []
+    }
+  ]
+}

BIN
.vs/ProjectEvaluation/hoteltycoon.metadata.v8.bin


BIN
.vs/ProjectEvaluation/hoteltycoon.projects.v8.bin


BIN
.vs/ProjectEvaluation/hoteltycoon.strings.v8.bin


+ 5 - 0
.vscode/extensions.json

@@ -0,0 +1,5 @@
+{
+    "recommendations": [
+      "visualstudiotoolsforunity.vstuc"
+    ]
+}

+ 10 - 0
.vscode/launch.json

@@ -0,0 +1,10 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Attach to Unity",
+            "type": "vstuc",
+            "request": "attach"
+        }
+     ]
+}

+ 60 - 0
.vscode/settings.json

@@ -0,0 +1,60 @@
+{
+    "files.exclude": {
+        "**/.DS_Store": true,
+        "**/.git": true,
+        "**/.vs": true,
+        "**/.gitmodules": true,
+        "**/.vsconfig": true,
+        "**/*.booproj": true,
+        "**/*.pidb": true,
+        "**/*.suo": true,
+        "**/*.user": true,
+        "**/*.userprefs": true,
+        "**/*.unityproj": true,
+        "**/*.dll": true,
+        "**/*.exe": true,
+        "**/*.pdf": true,
+        "**/*.mid": true,
+        "**/*.midi": true,
+        "**/*.wav": true,
+        "**/*.gif": true,
+        "**/*.ico": true,
+        "**/*.jpg": true,
+        "**/*.jpeg": true,
+        "**/*.png": true,
+        "**/*.psd": true,
+        "**/*.tga": true,
+        "**/*.tif": true,
+        "**/*.tiff": true,
+        "**/*.3ds": true,
+        "**/*.3DS": true,
+        "**/*.fbx": true,
+        "**/*.FBX": true,
+        "**/*.lxo": true,
+        "**/*.LXO": true,
+        "**/*.ma": true,
+        "**/*.MA": true,
+        "**/*.obj": true,
+        "**/*.OBJ": true,
+        "**/*.asset": true,
+        "**/*.cubemap": true,
+        "**/*.flare": true,
+        "**/*.mat": true,
+        "**/*.meta": true,
+        "**/*.prefab": true,
+        "**/*.unity": true,
+        "build/": true,
+        "Build/": true,
+        "Library/": true,
+        "library/": true,
+        "obj/": true,
+        "Obj/": true,
+        "Logs/": true,
+        "logs/": true,
+        "ProjectSettings/": true,
+        "UserSettings/": true,
+        "temp/": true,
+        "Temp/": true
+    },
+    "dotnet.defaultSolution": "HotelTycoon.sln"
+}

+ 1057 - 0
Assets/InputSystem_Actions.inputactions

@@ -0,0 +1,1057 @@
+{
+    "name": "InputSystem_Actions",
+    "maps": [
+        {
+            "name": "Player",
+            "id": "df70fa95-8a34-4494-b137-73ab6b9c7d37",
+            "actions": [
+                {
+                    "name": "Move",
+                    "type": "Value",
+                    "id": "351f2ccd-1f9f-44bf-9bec-d62ac5c5f408",
+                    "expectedControlType": "Vector2",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": true
+                },
+                {
+                    "name": "Look",
+                    "type": "Value",
+                    "id": "6b444451-8a00-4d00-a97e-f47457f736a8",
+                    "expectedControlType": "Vector2",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": true
+                },
+                {
+                    "name": "Attack",
+                    "type": "Button",
+                    "id": "6c2ab1b8-8984-453a-af3d-a3c78ae1679a",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Interact",
+                    "type": "Button",
+                    "id": "852140f2-7766-474d-8707-702459ba45f3",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "Hold",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Crouch",
+                    "type": "Button",
+                    "id": "27c5f898-bc57-4ee1-8800-db469aca5fe3",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Jump",
+                    "type": "Button",
+                    "id": "f1ba0d36-48eb-4cd5-b651-1c94a6531f70",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Previous",
+                    "type": "Button",
+                    "id": "2776c80d-3c14-4091-8c56-d04ced07a2b0",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Next",
+                    "type": "Button",
+                    "id": "b7230bb6-fc9b-4f52-8b25-f5e19cb2c2ba",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Sprint",
+                    "type": "Button",
+                    "id": "641cd816-40e6-41b4-8c3d-04687c349290",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                }
+            ],
+            "bindings": [
+                {
+                    "name": "",
+                    "id": "978bfe49-cc26-4a3d-ab7b-7d7a29327403",
+                    "path": "<Gamepad>/leftStick",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "WASD",
+                    "id": "00ca640b-d935-4593-8157-c05846ea39b3",
+                    "path": "Dpad",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "",
+                    "action": "Move",
+                    "isComposite": true,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "up",
+                    "id": "e2062cb9-1b15-46a2-838c-2f8d72a0bdd9",
+                    "path": "<Keyboard>/w",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "up",
+                    "id": "8180e8bd-4097-4f4e-ab88-4523101a6ce9",
+                    "path": "<Keyboard>/upArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "320bffee-a40b-4347-ac70-c210eb8bc73a",
+                    "path": "<Keyboard>/s",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "1c5327b5-f71c-4f60-99c7-4e737386f1d1",
+                    "path": "<Keyboard>/downArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc",
+                    "path": "<Keyboard>/a",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "2e46982e-44cc-431b-9f0b-c11910bf467a",
+                    "path": "<Keyboard>/leftArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400",
+                    "path": "<Keyboard>/d",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "77bff152-3580-4b21-b6de-dcd0c7e41164",
+                    "path": "<Keyboard>/rightArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "",
+                    "id": "1635d3fe-58b6-4ba9-a4e2-f4b964f6b5c8",
+                    "path": "<XRController>/{Primary2DAxis}",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "3ea4d645-4504-4529-b061-ab81934c3752",
+                    "path": "<Joystick>/stick",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Move",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "c1f7a91b-d0fd-4a62-997e-7fb9b69bf235",
+                    "path": "<Gamepad>/rightStick",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Look",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "8c8e490b-c610-4785-884f-f04217b23ca4",
+                    "path": "<Pointer>/delta",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse;Touch",
+                    "action": "Look",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "3e5f5442-8668-4b27-a940-df99bad7e831",
+                    "path": "<Joystick>/{Hatswitch}",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Look",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91",
+                    "path": "<Gamepad>/buttonWest",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "05f6913d-c316-48b2-a6bb-e225f14c7960",
+                    "path": "<Mouse>/leftButton",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "886e731e-7071-4ae4-95c0-e61739dad6fd",
+                    "path": "<Touchscreen>/primaryTouch/tap",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Touch",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "ee3d0cd2-254e-47a7-a8cb-bc94d9658c54",
+                    "path": "<Joystick>/trigger",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "8255d333-5683-4943-a58a-ccb207ff1dce",
+                    "path": "<XRController>/{PrimaryAction}",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "b3c1c7f0-bd20-4ee7-a0f1-899b24bca6d7",
+                    "path": "<Keyboard>/enter",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Attack",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "cbac6039-9c09-46a1-b5f2-4e5124ccb5ed",
+                    "path": "<Keyboard>/2",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Next",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "e15ca19d-e649-4852-97d5-7fe8ccc44e94",
+                    "path": "<Gamepad>/dpad/right",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Next",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "f2e9ba44-c423-42a7-ad56-f20975884794",
+                    "path": "<Keyboard>/leftShift",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Sprint",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "8cbb2f4b-a784-49cc-8d5e-c010b8c7f4e6",
+                    "path": "<Gamepad>/leftStickPress",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Sprint",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "d8bf24bf-3f2f-4160-a97c-38ec1eb520ba",
+                    "path": "<XRController>/trigger",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "Sprint",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "eb40bb66-4559-4dfa-9a2f-820438abb426",
+                    "path": "<Keyboard>/space",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Jump",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "daba33a1-ad0c-4742-a909-43ad1cdfbeb6",
+                    "path": "<Gamepad>/buttonSouth",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Jump",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "603f3daf-40bd-4854-8724-93e8017f59e3",
+                    "path": "<XRController>/secondaryButton",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "Jump",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "1534dc16-a6aa-499d-9c3a-22b47347b52a",
+                    "path": "<Keyboard>/1",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Previous",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "25060bbd-a3a6-476e-8fba-45ae484aad05",
+                    "path": "<Gamepad>/dpad/left",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Previous",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "1c04ea5f-b012-41d1-a6f7-02e963b52893",
+                    "path": "<Keyboard>/e",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Interact",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "b3f66d0b-7751-423f-908b-a11c5bd95930",
+                    "path": "<Gamepad>/buttonNorth",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Interact",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "4f4649ac-64a8-4a73-af11-b3faef356a4d",
+                    "path": "<Gamepad>/buttonEast",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Gamepad",
+                    "action": "Crouch",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "36e52cba-0905-478e-a818-f4bfcb9f3b9a",
+                    "path": "<Keyboard>/c",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Crouch",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                }
+            ]
+        },
+        {
+            "name": "UI",
+            "id": "272f6d14-89ba-496f-b7ff-215263d3219f",
+            "actions": [
+                {
+                    "name": "Navigate",
+                    "type": "PassThrough",
+                    "id": "c95b2375-e6d9-4b88-9c4c-c5e76515df4b",
+                    "expectedControlType": "Vector2",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Submit",
+                    "type": "Button",
+                    "id": "7607c7b6-cd76-4816-beef-bd0341cfe950",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Cancel",
+                    "type": "Button",
+                    "id": "15cef263-9014-4fd5-94d9-4e4a6234a6ef",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "Point",
+                    "type": "PassThrough",
+                    "id": "32b35790-4ed0-4e9a-aa41-69ac6d629449",
+                    "expectedControlType": "Vector2",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": true
+                },
+                {
+                    "name": "Click",
+                    "type": "PassThrough",
+                    "id": "3c7022bf-7922-4f7c-a998-c437916075ad",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": true
+                },
+                {
+                    "name": "RightClick",
+                    "type": "PassThrough",
+                    "id": "44b200b1-1557-4083-816c-b22cbdf77ddf",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "MiddleClick",
+                    "type": "PassThrough",
+                    "id": "dad70c86-b58c-4b17-88ad-f5e53adf419e",
+                    "expectedControlType": "Button",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "ScrollWheel",
+                    "type": "PassThrough",
+                    "id": "0489e84a-4833-4c40-bfae-cea84b696689",
+                    "expectedControlType": "Vector2",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "TrackedDevicePosition",
+                    "type": "PassThrough",
+                    "id": "24908448-c609-4bc3-a128-ea258674378a",
+                    "expectedControlType": "Vector3",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                },
+                {
+                    "name": "TrackedDeviceOrientation",
+                    "type": "PassThrough",
+                    "id": "9caa3d8a-6b2f-4e8e-8bad-6ede561bd9be",
+                    "expectedControlType": "Quaternion",
+                    "processors": "",
+                    "interactions": "",
+                    "initialStateCheck": false
+                }
+            ],
+            "bindings": [
+                {
+                    "name": "Gamepad",
+                    "id": "809f371f-c5e2-4e7a-83a1-d867598f40dd",
+                    "path": "2DVector",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "",
+                    "action": "Navigate",
+                    "isComposite": true,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "up",
+                    "id": "14a5d6e8-4aaf-4119-a9ef-34b8c2c548bf",
+                    "path": "<Gamepad>/leftStick/up",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "up",
+                    "id": "9144cbe6-05e1-4687-a6d7-24f99d23dd81",
+                    "path": "<Gamepad>/rightStick/up",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "2db08d65-c5fb-421b-983f-c71163608d67",
+                    "path": "<Gamepad>/leftStick/down",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "58748904-2ea9-4a80-8579-b500e6a76df8",
+                    "path": "<Gamepad>/rightStick/down",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "8ba04515-75aa-45de-966d-393d9bbd1c14",
+                    "path": "<Gamepad>/leftStick/left",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "712e721c-bdfb-4b23-a86c-a0d9fcfea921",
+                    "path": "<Gamepad>/rightStick/left",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "fcd248ae-a788-4676-a12e-f4d81205600b",
+                    "path": "<Gamepad>/leftStick/right",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "1f04d9bc-c50b-41a1-bfcc-afb75475ec20",
+                    "path": "<Gamepad>/rightStick/right",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "",
+                    "id": "fb8277d4-c5cd-4663-9dc7-ee3f0b506d90",
+                    "path": "<Gamepad>/dpad",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Gamepad",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "Joystick",
+                    "id": "e25d9774-381c-4a61-b47c-7b6b299ad9f9",
+                    "path": "2DVector",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "",
+                    "action": "Navigate",
+                    "isComposite": true,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "up",
+                    "id": "3db53b26-6601-41be-9887-63ac74e79d19",
+                    "path": "<Joystick>/stick/up",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "0cb3e13e-3d90-4178-8ae6-d9c5501d653f",
+                    "path": "<Joystick>/stick/down",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "0392d399-f6dd-4c82-8062-c1e9c0d34835",
+                    "path": "<Joystick>/stick/left",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "942a66d9-d42f-43d6-8d70-ecb4ba5363bc",
+                    "path": "<Joystick>/stick/right",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Joystick",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "Keyboard",
+                    "id": "ff527021-f211-4c02-933e-5976594c46ed",
+                    "path": "2DVector",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "",
+                    "action": "Navigate",
+                    "isComposite": true,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "up",
+                    "id": "563fbfdd-0f09-408d-aa75-8642c4f08ef0",
+                    "path": "<Keyboard>/w",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "up",
+                    "id": "eb480147-c587-4a33-85ed-eb0ab9942c43",
+                    "path": "<Keyboard>/upArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "2bf42165-60bc-42ca-8072-8c13ab40239b",
+                    "path": "<Keyboard>/s",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "down",
+                    "id": "85d264ad-e0a0-4565-b7ff-1a37edde51ac",
+                    "path": "<Keyboard>/downArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "74214943-c580-44e4-98eb-ad7eebe17902",
+                    "path": "<Keyboard>/a",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "left",
+                    "id": "cea9b045-a000-445b-95b8-0c171af70a3b",
+                    "path": "<Keyboard>/leftArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "8607c725-d935-4808-84b1-8354e29bab63",
+                    "path": "<Keyboard>/d",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "right",
+                    "id": "4cda81dc-9edd-4e03-9d7c-a71a14345d0b",
+                    "path": "<Keyboard>/rightArrow",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Navigate",
+                    "isComposite": false,
+                    "isPartOfComposite": true
+                },
+                {
+                    "name": "",
+                    "id": "9e92bb26-7e3b-4ec4-b06b-3c8f8e498ddc",
+                    "path": "*/{Submit}",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR",
+                    "action": "Submit",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "82627dcc-3b13-4ba9-841d-e4b746d6553e",
+                    "path": "*/{Cancel}",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse;Gamepad;Touch;Joystick;XR",
+                    "action": "Cancel",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "c52c8e0b-8179-41d3-b8a1-d149033bbe86",
+                    "path": "<Mouse>/position",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Point",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "e1394cbc-336e-44ce-9ea8-6007ed6193f7",
+                    "path": "<Pen>/position",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "Point",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "5693e57a-238a-46ed-b5ae-e64e6e574302",
+                    "path": "<Touchscreen>/touch*/position",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Touch",
+                    "action": "Point",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "4faf7dc9-b979-4210-aa8c-e808e1ef89f5",
+                    "path": "<Mouse>/leftButton",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Click",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "8d66d5ba-88d7-48e6-b1cd-198bbfef7ace",
+                    "path": "<Pen>/tip",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "Click",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "47c2a644-3ebc-4dae-a106-589b7ca75b59",
+                    "path": "<Touchscreen>/touch*/press",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Touch",
+                    "action": "Click",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "bb9e6b34-44bf-4381-ac63-5aa15d19f677",
+                    "path": "<XRController>/trigger",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "Click",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "38c99815-14ea-4617-8627-164d27641299",
+                    "path": "<Mouse>/scroll",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": ";Keyboard&Mouse",
+                    "action": "ScrollWheel",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "4c191405-5738-4d4b-a523-c6a301dbf754",
+                    "path": "<Mouse>/rightButton",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "RightClick",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "24066f69-da47-44f3-a07e-0015fb02eb2e",
+                    "path": "<Mouse>/middleButton",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "Keyboard&Mouse",
+                    "action": "MiddleClick",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "7236c0d9-6ca3-47cf-a6ee-a97f5b59ea77",
+                    "path": "<XRController>/devicePosition",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "TrackedDevicePosition",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                },
+                {
+                    "name": "",
+                    "id": "23e01e3a-f935-4948-8d8b-9bcac77714fb",
+                    "path": "<XRController>/deviceRotation",
+                    "interactions": "",
+                    "processors": "",
+                    "groups": "XR",
+                    "action": "TrackedDeviceOrientation",
+                    "isComposite": false,
+                    "isPartOfComposite": false
+                }
+            ]
+        }
+    ],
+    "controlSchemes": [
+        {
+            "name": "Keyboard&Mouse",
+            "bindingGroup": "Keyboard&Mouse",
+            "devices": [
+                {
+                    "devicePath": "<Keyboard>",
+                    "isOptional": false,
+                    "isOR": false
+                },
+                {
+                    "devicePath": "<Mouse>",
+                    "isOptional": false,
+                    "isOR": false
+                }
+            ]
+        },
+        {
+            "name": "Gamepad",
+            "bindingGroup": "Gamepad",
+            "devices": [
+                {
+                    "devicePath": "<Gamepad>",
+                    "isOptional": false,
+                    "isOR": false
+                }
+            ]
+        },
+        {
+            "name": "Touch",
+            "bindingGroup": "Touch",
+            "devices": [
+                {
+                    "devicePath": "<Touchscreen>",
+                    "isOptional": false,
+                    "isOR": false
+                }
+            ]
+        },
+        {
+            "name": "Joystick",
+            "bindingGroup": "Joystick",
+            "devices": [
+                {
+                    "devicePath": "<Joystick>",
+                    "isOptional": false,
+                    "isOR": false
+                }
+            ]
+        },
+        {
+            "name": "XR",
+            "bindingGroup": "XR",
+            "devices": [
+                {
+                    "devicePath": "<XRController>",
+                    "isOptional": false,
+                    "isOR": false
+                }
+            ]
+        }
+    ]
+}

+ 34 - 0
Assets/Readme.asset

@@ -0,0 +1,34 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fcf7219bab7fe46a1ad266029b2fee19, type: 3}
+  m_Name: Readme
+  m_EditorClassIdentifier: 
+  icon: {fileID: 2800000, guid: 727a75301c3d24613a3ebcec4a24c2c8, type: 3}
+  title: URP Empty Template
+  sections:
+  - heading: Welcome to the Universal Render Pipeline
+    text: This template includes the settings and assets you need to start creating with the Universal Render Pipeline.
+    linkText: 
+    url:
+  - heading: URP Documentation
+    text:
+    linkText: Read more about URP
+    url: https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@latest
+  - heading: Forums
+    text:
+    linkText: Get answers and support
+    url: https://forum.unity.com/forums/universal-render-pipeline.383/
+  - heading: Report bugs
+    text:
+    linkText: Submit a report
+    url: https://unity3d.com/unity/qa/bug-reporting
+  loadedLayout: 1

+ 110 - 0
Assets/Resources/UI/BuildingInterface.uss

@@ -0,0 +1,110 @@
+/* Building Interface Styles */
+
+.building-panel {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    min-width: 200px;
+    background-color: rgba(0, 0, 0, 0.8);
+    border-radius: 10px;
+    padding: 15px;
+    border-left-color: rgb(255, 255, 255);
+    border-right-color: rgb(255, 255, 255);
+    border-top-color: rgb(255, 255, 255);
+    border-bottom-color: rgb(255, 255, 255);
+    border-top-width: 2px;
+    border-right-width: 2px;
+    border-bottom-width: 2px;
+    border-left-width: 2px;
+}
+
+.panel-title {
+    font-size: 18px;
+    color: rgb(255, 255, 255);
+    -unity-font-style: bold;
+    margin-bottom: 10px;
+    -unity-text-align: middle-center;
+}
+
+.button-container {
+    flex-direction: column;
+    margin-bottom: 15px;
+}
+
+.build-button {
+    margin-bottom: 8px;
+    min-height: 35px;
+    font-size: 14px;
+    border-radius: 5px;
+    border-width: 2px;
+    -unity-font-style: bold;
+    transition-duration: 0.2s;
+}
+
+.wall-button {
+    background-color: rgb(100, 150, 100);
+    border-color: rgb(150, 200, 150);
+    color: rgb(255, 255, 255);
+}
+
+.wall-button:hover {
+    background-color: rgb(120, 170, 120);
+    border-color: rgb(180, 230, 180);
+}
+
+.wall-button.active {
+    background-color: rgb(150, 200, 150);
+    border-color: rgb(200, 255, 200);
+}
+
+.door-button {
+    background-color: rgb(150, 100, 100);
+    border-color: rgb(200, 150, 150);
+    color: rgb(255, 255, 255);
+}
+
+.door-button:hover {
+    background-color: rgb(170, 120, 120);
+    border-color: rgb(230, 180, 180);
+}
+
+.door-button.active {
+    background-color: rgb(200, 150, 150);
+    border-color: rgb(255, 200, 200);
+}
+
+.normal-button {
+    background-color: rgb(100, 100, 150);
+    border-color: rgb(150, 150, 200);
+    color: rgb(255, 255, 255);
+}
+
+.normal-button:hover {
+    background-color: rgb(120, 120, 170);
+    border-color: rgb(180, 180, 230);
+}
+
+.normal-button.active {
+    background-color: rgb(150, 150, 200);
+    border-color: rgb(200, 200, 255);
+}
+
+.status-container {
+    flex-direction: column;
+    border-top-width: 1px;
+    border-top-color: rgba(255, 255, 255, 0.3);
+    padding-top: 10px;
+}
+
+.status-label {
+    font-size: 14px;
+    color: rgb(200, 255, 200);
+    -unity-font-style: bold;
+    margin-bottom: 5px;
+}
+
+.instruction-label {
+    font-size: 12px;
+    color: rgb(200, 200, 200);
+    white-space: normal;
+}

+ 16 - 0
Assets/Resources/UI/BuildingInterface.uxml

@@ -0,0 +1,16 @@
+<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False">
+    <Style src="project://database/Assets/UI/BuildingInterface.uss?fileID=7433441132597879392&amp;guid=REPLACE_GUID&amp;type=3#BuildingInterface" />
+    <ui:VisualElement name="BuildingPanel" class="building-panel">
+        <ui:Label text="Building Tools" display-tooltip-when-elided="true" name="Title" class="panel-title" />
+        <ui:VisualElement name="ButtonContainer" class="button-container">
+            <ui:Button text="Create Walls" display-tooltip-when-elided="true" name="WallModeButton" class="build-button wall-button" />
+            <ui:Button text="Create Doors" display-tooltip-when-elided="true" name="DoorModeButton" class="build-button door-button" />
+            <ui:Button text="Create Entrance" display-tooltip-when-elided="true" name="EntranceModeButton" class="build-button entrance-button" />
+            <ui:Button text="Normal Mode" display-tooltip-when-elided="true" name="NormalModeButton" class="build-button normal-button" />
+        </ui:VisualElement>
+        <ui:VisualElement name="StatusContainer" class="status-container">
+            <ui:Label text="Mode: Normal" display-tooltip-when-elided="true" name="StatusLabel" class="status-label" />
+            <ui:Label text="Click a button to start building" display-tooltip-when-elided="true" name="InstructionLabel" class="instruction-label" />
+        </ui:VisualElement>
+    </ui:VisualElement>
+</ui:UXML>

+ 631 - 0
Assets/Scenes/MainScene.unity

@@ -0,0 +1,631 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 10
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 13
+  m_BakeOnSceneLoad: 0
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 256
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 1
+    m_PVRDenoiserTypeDirect: 1
+    m_PVRDenoiserTypeIndirect: 1
+    m_PVRDenoiserTypeAO: 1
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+  m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 3
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    buildHeightMesh: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &330585543
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 330585546}
+  - component: {fileID: 330585545}
+  - component: {fileID: 330585544}
+  - component: {fileID: 330585547}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &330585544
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 330585543}
+  m_Enabled: 1
+--- !u!20 &330585545
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 330585543}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_Iso: 200
+  m_ShutterSpeed: 0.005
+  m_Aperture: 16
+  m_FocusDistance: 10
+  m_FocalLength: 50
+  m_BladeCount: 5
+  m_Curvature: {x: 2, y: 11}
+  m_BarrelClipping: 0.25
+  m_Anamorphism: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &330585546
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 330585543}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &330585547
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 330585543}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_RenderShadows: 1
+  m_RequiresDepthTextureOption: 2
+  m_RequiresOpaqueTextureOption: 2
+  m_CameraType: 0
+  m_Cameras: []
+  m_RendererIndex: -1
+  m_VolumeLayerMask:
+    serializedVersion: 2
+    m_Bits: 1
+  m_VolumeTrigger: {fileID: 0}
+  m_VolumeFrameworkUpdateModeOption: 2
+  m_RenderPostProcessing: 1
+  m_Antialiasing: 0
+  m_AntialiasingQuality: 2
+  m_StopNaN: 0
+  m_Dithering: 0
+  m_ClearDepth: 1
+  m_AllowXRRendering: 1
+  m_AllowHDROutput: 1
+  m_UseScreenCoordOverride: 0
+  m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
+  m_RequiresDepthTexture: 0
+  m_RequiresColorTexture: 0
+  m_Version: 2
+  m_TaaSettings:
+    m_Quality: 3
+    m_FrameInfluence: 0.1
+    m_JitterScale: 1
+    m_MipBias: 0
+    m_VarianceClampScale: 0.9
+    m_ContrastAdaptiveSharpening: 0
+--- !u!1 &410087039
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 410087041}
+  - component: {fileID: 410087040}
+  - component: {fileID: 410087042}
+  m_Layer: 0
+  m_Name: Directional Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &410087040
+Light:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410087039}
+  m_Enabled: 1
+  serializedVersion: 11
+  m_Type: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Intensity: 2
+  m_Range: 10
+  m_SpotAngle: 30
+  m_InnerSpotAngle: 21.80208
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 2
+    m_Resolution: -1
+    m_CustomResolution: -1
+    m_Strength: 1
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+    m_CullingMatrixOverride:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_UseCullingMatrixOverride: 0
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingLayerMask: 1
+  m_Lightmapping: 4
+  m_LightShadowCasterMode: 0
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 5000
+  m_UseColorTemperature: 1
+  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_UseBoundingSphereOverride: 0
+  m_UseViewFrustumForShadowCasterCull: 1
+  m_ForceVisible: 0
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+  m_LightUnit: 1
+  m_LuxAtDistance: 1
+  m_EnableSpotReflector: 1
+--- !u!4 &410087041
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410087039}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &410087042
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410087039}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Version: 3
+  m_UsePipelineSettings: 1
+  m_AdditionalLightsShadowResolutionTier: 2
+  m_LightLayerMask: 1
+  m_RenderingLayers: 1
+  m_CustomShadowLayers: 0
+  m_ShadowLayerMask: 1
+  m_ShadowRenderingLayers: 1
+  m_LightCookieSize: {x: 1, y: 1}
+  m_LightCookieOffset: {x: 0, y: 0}
+  m_SoftShadowQuality: 1
+--- !u!1 &832575517
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 832575519}
+  - component: {fileID: 832575518}
+  m_Layer: 0
+  m_Name: Global Volume
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &832575518
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 832575517}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IsGlobal: 1
+  priority: 0
+  blendDistance: 0
+  weight: 1
+  sharedProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2}
+--- !u!4 &832575519
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 832575517}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1068104321
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1068104323}
+  - component: {fileID: 1068104322}
+  m_Layer: 0
+  m_Name: HotelBootstrap
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1068104322
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1068104321}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 41ebf26b31ee3c442b90f8da904f6204, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  autoSetupScene: 1
+  createMainCamera: 1
+  createUI: 1
+  createNavMesh: 1
+  gameManagerPrefab: {fileID: 0}
+  hotelManagerPrefab: {fileID: 0}
+  staffManagerPrefab: {fileID: 0}
+  facilityManagerPrefab: {fileID: 0}
+  ratingSystemPrefab: {fileID: 0}
+--- !u!4 &1068104323
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1068104321}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1183227479
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1183227481}
+  - component: {fileID: 1183227480}
+  m_Layer: 0
+  m_Name: GameManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1183227480
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1183227479}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a90c9c3f64768a4a8decde7ce4b3ae5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  normalSpeed: 1
+  fastSpeed: 2
+  ultraSpeed: 4
+  currentGameState: 0
+  hasEntrance: 0
+  hasReception: 0
+  canOpenHotel: 0
+  speedText: {fileID: 0}
+  gameStateText: {fileID: 0}
+--- !u!4 &1183227481
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1183227479}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1459143524
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1459143526}
+  - component: {fileID: 1459143525}
+  - component: {fileID: 1459143528}
+  - component: {fileID: 1459143527}
+  m_Layer: 0
+  m_Name: BuildingUI
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1459143525
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1459143524}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_PanelSettings: {fileID: 11400000, guid: 09a1e0c9ea0e2d4469245fb1005f1967, type: 2}
+  m_ParentUI: {fileID: 0}
+  sourceAsset: {fileID: 9197481963319205126, guid: efc5a025555fd2541ab6bfe11a8151c6, type: 3}
+  m_SortingOrder: 10
+  m_WorldSpaceSizeMode: 1
+  m_WorldSpaceWidth: 1920
+  m_WorldSpaceHeight: 1080
+--- !u!4 &1459143526
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1459143524}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -0.07655592, y: -1.0778626, z: 4.8192105}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1459143527
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1459143524}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 59870999a02325243a11139a800d6d04, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  uiDocument: {fileID: 1459143525}
+  roomBuilder: {fileID: 1459143528}
+--- !u!114 &1459143528
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1459143524}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3de20efaa71037a49842b71634b827e1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  wallPrefab: {fileID: 0}
+  wallPointPrefab: {fileID: 0}
+  doorOpeningPrefab: {fileID: 0}
+  wallHeight: 3
+  wallThickness: 0.2
+  doorWidth: 1.5
+  doorHeight: 2.5
+  snapDistance: 1
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+  m_ObjectHideFlags: 0
+  m_Roots:
+  - {fileID: 330585546}
+  - {fileID: 410087041}
+  - {fileID: 832575519}
+  - {fileID: 1183227481}
+  - {fileID: 1068104323}
+  - {fileID: 1459143526}

+ 305 - 0
Assets/Scripts/Bootstrap/HotelTycoonBootstrap.cs

@@ -0,0 +1,305 @@
+using Unity.AI.Navigation;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UnityEngine.UI;
+
+public class HotelTycoonBootstrap : MonoBehaviour
+{
+    [Header("Scene Setup")]
+    [SerializeField] private bool autoSetupScene = true;
+    [SerializeField] private bool createMainCamera = true;
+    [SerializeField] private bool createUI = true;
+    [SerializeField] private bool createNavMesh = true;
+
+    [Header("Game Objects")]
+    [SerializeField] private GameObject gameManagerPrefab;
+    [SerializeField] private GameObject hotelManagerPrefab;
+    [SerializeField] private GameObject staffManagerPrefab;
+    [SerializeField] private GameObject facilityManagerPrefab;
+    [SerializeField] private GameObject ratingSystemPrefab;
+
+    private void Awake()
+    {
+        if (autoSetupScene)
+        {
+            SetupScene();
+        }
+    }
+
+    private void SetupScene()
+    {
+        Debug.Log("Setting up Hotel Tycoon scene...");
+
+        CreateEssentialManagers();
+
+        if (createMainCamera)
+            SetupMainCamera();
+
+        if (createUI)
+            SetupBasicUI();
+
+        if (createNavMesh)
+            SetupNavMeshSurfaces();
+
+        CreateInitialRoomSetup();
+        CreateRoomBuilder();
+
+        Debug.Log("Hotel Tycoon scene setup complete!");
+    }
+
+    #region Manager Creation
+    private void CreateEssentialManagers()
+    {
+        // Create GameManager
+        if (GameManager.Instance == null)
+        {
+            CreateManager("GameManager", gameManagerPrefab, typeof(GameManager));
+        }
+
+        // Create HotelManager
+        if (HotelManager.Instance == null)
+        {
+            CreateManager("HotelManager", hotelManagerPrefab, typeof(HotelManager));
+        }
+
+        // Create StaffManager
+        if (StaffManager.Instance == null)
+        {
+            CreateManager("StaffManager", staffManagerPrefab, typeof(StaffManager));
+        }
+
+        // Create FacilityManager
+        if (FacilityManager.Instance == null)
+        {
+            CreateManager("FacilityManager", facilityManagerPrefab, typeof(FacilityManager));
+        }
+
+        // Create Rating System
+        if (HotelRatingSystem.Instance == null)
+        {
+            CreateManager("HotelRatingSystem", ratingSystemPrefab, typeof(HotelRatingSystem));
+        }
+    }
+
+    private void CreateManager(string name, GameObject prefab, System.Type componentType)
+    {
+        GameObject manager;
+
+        if (prefab != null)
+        {
+            manager = Instantiate(prefab);
+            manager.name = name;
+        }
+        else
+        {
+            manager = new GameObject(name);
+            manager.AddComponent(componentType);
+        }
+
+        DontDestroyOnLoad(manager);
+        Debug.Log($"Created {name}");
+    }
+    #endregion
+
+    #region Camera Setup
+    private void SetupMainCamera()
+    {
+        Camera existingCamera = Camera.main;
+
+        if (existingCamera != null)
+        {
+            // Add camera controller to existing camera
+            if (existingCamera.GetComponent<CameraController>() == null)
+            {
+                existingCamera.gameObject.AddComponent<CameraController>();
+            }
+        }
+        else
+        {
+            // Create new camera
+            GameObject cameraObj = new GameObject("Main Camera");
+            Camera camera = cameraObj.AddComponent<Camera>();
+            cameraObj.AddComponent<AudioListener>();
+            cameraObj.AddComponent<CameraController>();
+            cameraObj.tag = "MainCamera";
+
+            // Position camera for good hotel view
+            cameraObj.transform.position = new Vector3(0, 15f, -20f);
+            cameraObj.transform.rotation = Quaternion.Euler(45f, 0f, 0f);
+        }
+
+        Debug.Log("Main camera setup complete");
+    }
+    #endregion
+
+    #region UI Setup
+    private void SetupBasicUI()
+    {
+        // Create Canvas if it doesn't exist
+        Canvas existingCanvas = FindObjectOfType<Canvas>();
+
+        if (existingCanvas == null)
+        {
+            GameObject canvasObj = new GameObject("Canvas");
+            Canvas canvas = canvasObj.AddComponent<Canvas>();
+            canvas.renderMode = RenderMode.ScreenSpaceOverlay;
+            canvasObj.AddComponent<CanvasScaler>();
+            canvasObj.AddComponent<UnityEngine.UI.GraphicRaycaster>();
+
+            // Create Event System if needed
+            if (FindObjectOfType<UnityEngine.EventSystems.EventSystem>() == null)
+            {
+                GameObject eventSystemObj = new GameObject("EventSystem");
+                eventSystemObj.AddComponent<UnityEngine.EventSystems.EventSystem>();
+                eventSystemObj.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>();
+            }
+        }
+
+        // Create UI Controllers
+        CreateUIController();
+        CreateGuestInfoUI();
+
+        Debug.Log("Basic UI setup complete");
+    }
+
+    private void CreateUIController()
+    {
+        if (FindObjectOfType<UIController>() == null)
+        {
+            GameObject uiControllerObj = new GameObject("UI Controller");
+            uiControllerObj.AddComponent<UIController>();
+        }
+    }
+
+    private void CreateGuestInfoUI()
+    {
+        if (FindObjectOfType<GuestInfoUI>() == null)
+        {
+            GameObject guestInfoObj = new GameObject("Guest Info UI");
+            guestInfoObj.AddComponent<GuestInfoUI>();
+        }
+    }
+    #endregion
+
+    #region NavMesh Setup
+    private void SetupNavMeshSurfaces()
+    {
+        // Create a ground plane for navigation
+        GameObject ground = GameObject.Find("Ground");
+        if (ground == null)
+        {
+            ground = GameObject.CreatePrimitive(PrimitiveType.Plane);
+            ground.name = "Ground";
+
+            // Only set tag if it exists, otherwise skip
+            try
+            {
+                ground.tag = "Ground";
+            }
+            catch (UnityException)
+            {
+                Debug.LogWarning("Ground tag not defined in Tags and Layers. Create it in Project Settings > Tags and Layers if needed.");
+            }
+
+            ground.transform.position = Vector3.zero;
+            ground.transform.localScale = new Vector3(20f, 1f, 20f);
+
+            // Make it less visible but keep for navigation
+            Renderer groundRenderer = ground.GetComponent<Renderer>();
+            groundRenderer.material.color = new Color(0.8f, 0.8f, 0.8f, 0.5f);
+        }
+
+        // Note: For NavMesh to work properly, you need to:
+        // 1. Install Unity NavMesh Components package (Window > Package Manager > Unity Registry > AI Navigation)
+        // 2. Or manually bake NavMesh through Window > AI > Navigation
+        Debug.Log("NavMesh setup: Go to Window > AI > Navigation and click 'Bake' to create NavMesh for AI agents.");
+        Debug.Log("NavMesh surfaces setup complete - manual baking required");
+    }
+    #endregion
+
+    #region Game Object Setup
+    private void CreateInitialRoomSetup()
+    {
+        if (FindObjectOfType<InitialRoomSetup>() == null)
+        {
+            GameObject initialRoomObj = new GameObject("Initial Room Setup");
+            initialRoomObj.AddComponent<InitialRoomSetup>();
+
+            Debug.Log("Created Initial Room Setup");
+        }
+    }
+
+    private void CreateRoomBuilder()
+    {
+        // Remove old RoomBuilder if it exists
+        RoomBuilder oldBuilder = FindFirstObjectByType<RoomBuilder>();
+        if (oldBuilder != null)
+        {
+            DestroyImmediate(oldBuilder.gameObject);
+        }
+
+        // Create new building system
+        if (FindFirstObjectByType<NewRoomBuilder>() == null)
+        {
+            GameObject roomBuilderObj = new GameObject("New Room Builder");
+            NewRoomBuilder newBuilder = roomBuilderObj.AddComponent<NewRoomBuilder>();
+
+            // Create UI Controller for building interface
+            GameObject uiObj = new GameObject("Building UI Controller");
+            BuildingUIController uiController = uiObj.AddComponent<BuildingUIController>();
+
+            // Add UIDocument component for the new UI
+            UIDocument uiDocument = uiObj.AddComponent<UIDocument>();
+
+            // Connect the UI to the builder
+            uiController.roomBuilder = newBuilder;
+            uiController.uiDocument = uiDocument;
+
+            Debug.Log("Created New Room Builder with UI");
+        }
+    }
+    #endregion
+
+    #region Debug and Validation
+    private void OnValidate()
+    {
+        // Validate that essential components are present
+        ValidateScene();
+    }
+
+    private void ValidateScene()
+    {
+        if (autoSetupScene)
+        {
+            if (FindObjectOfType<GameManager>() == null && gameManagerPrefab == null)
+            {
+                Debug.LogWarning("No GameManager found and no prefab assigned!");
+            }
+        }
+    }
+
+    [ContextMenu("Setup Scene Manually")]
+    public void SetupSceneManually()
+    {
+        SetupScene();
+    }
+
+    [ContextMenu("Validate Scene Setup")]
+    public void ValidateSceneSetup()
+    {
+        Debug.Log("=== Hotel Tycoon Scene Validation ===");
+
+        Debug.Log($"GameManager: {(GameManager.Instance != null ? "✓" : "✗")}");
+        Debug.Log($"HotelManager: {(HotelManager.Instance != null ? "✓" : "✗")}");
+        Debug.Log($"StaffManager: {(StaffManager.Instance != null ? "✓" : "✗")}");
+        Debug.Log($"FacilityManager: {(FacilityManager.Instance != null ? "✓" : "✗")}");
+        Debug.Log($"RatingSystem: {(HotelRatingSystem.Instance != null ? "✓" : "✗")}");
+        Debug.Log($"Camera Controller: {(FindObjectOfType<CameraController>() != null ? "✓" : "✗")}");
+        Debug.Log($"UI Controller: {(FindObjectOfType<UIController>() != null ? "✓" : "✗")}");
+        Debug.Log($"Room Builder: {(FindObjectOfType<RoomBuilder>() != null ? "✓" : "✗")}");
+        Debug.Log($"Initial Room Setup: {(FindObjectOfType<InitialRoomSetup>() != null ? "✓" : "✗")}");
+
+        Debug.Log("=== Validation Complete ===");
+    }
+    #endregion
+}

+ 266 - 0
Assets/Scripts/Building/InitialRoomSetup.cs

@@ -0,0 +1,266 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+public class InitialRoomSetup : MonoBehaviour
+{
+    [Header("Starting Room Settings")]
+    [SerializeField] private Vector3 startingRoomSize = new Vector3(20f, 3f, 15f);
+    [SerializeField] private Vector3 startingRoomPosition = Vector3.zero;
+    [SerializeField] private Material wallMaterial;
+    [SerializeField] private float wallThickness = 0.2f;
+
+    [Header("Ground/Floor")]
+    [SerializeField] private bool createFloor = true;
+    [SerializeField] private Material floorMaterial;
+
+    private List<GameObject> initialRoomWalls = new List<GameObject>();
+    private GameObject floorObject;
+
+    private void Start()
+    {
+        CreateInitialRoom();
+        CreateNavigationSurface();
+    }
+
+    private void CreateInitialRoom()
+    {
+        Vector3 center = startingRoomPosition;
+        float width = startingRoomSize.x;
+        float height = startingRoomSize.y;
+        float depth = startingRoomSize.z;
+
+        // Calculate wall positions
+        Vector3[] wallPositions = new Vector3[]
+        {
+            center + new Vector3(0, height/2, depth/2),      // North wall
+            center + new Vector3(0, height/2, -depth/2),     // South wall
+            center + new Vector3(width/2, height/2, 0),      // East wall
+            center + new Vector3(-width/2, height/2, 0)      // West wall
+        };
+
+        Vector3[] wallScales = new Vector3[]
+        {
+            new Vector3(width, height, wallThickness),       // North wall
+            new Vector3(width, height, wallThickness),       // South wall
+            new Vector3(wallThickness, height, depth),       // East wall
+            new Vector3(wallThickness, height, depth)        // West wall
+        };
+
+        string[] wallNames = { "North Wall", "South Wall", "East Wall", "West Wall" };
+
+        // Create walls
+        for (int i = 0; i < wallPositions.Length; i++)
+        {
+            GameObject wall = CreateWall(wallPositions[i], wallScales[i], wallNames[i]);
+            wall.tag = "Wall";
+            initialRoomWalls.Add(wall);
+        }
+
+        // Create floor
+        if (createFloor)
+        {
+            CreateFloor(center, width, depth);
+        }
+
+        Debug.Log("Initial hotel room created successfully");
+    }
+
+    private GameObject CreateWall(Vector3 position, Vector3 scale, string name)
+    {
+        GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        wall.name = name;
+        wall.transform.position = position;
+        wall.transform.localScale = scale;
+        wall.tag = "Wall";
+
+        // Apply material
+        if (wallMaterial != null)
+        {
+            wall.GetComponent<Renderer>().material = wallMaterial;
+        }
+        else
+        {
+            // Default wall color
+            wall.GetComponent<Renderer>().material.color = Color.gray;
+        }
+
+        // Ensure collider is set up for navigation obstacles
+        Collider wallCollider = wall.GetComponent<Collider>();
+        wallCollider.isTrigger = false;
+
+        // Add to initial room parent for organization
+        wall.transform.SetParent(this.transform);
+
+        return wall;
+    }
+
+    private void CreateFloor(Vector3 center, float width, float depth)
+    {
+        floorObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        floorObject.name = "Hotel Floor";
+
+        // Position floor slightly below ground level
+        floorObject.transform.position = center + new Vector3(0, -0.05f, 0);
+        floorObject.transform.localScale = new Vector3(width, 0.1f, depth);
+
+        // Apply floor material
+        if (floorMaterial != null)
+        {
+            floorObject.GetComponent<Renderer>().material = floorMaterial;
+        }
+        else
+        {
+            floorObject.GetComponent<Renderer>().material.color = Color.white;
+        }
+
+        // Set up collider for walking surface
+        Collider floorCollider = floorObject.GetComponent<Collider>();
+        floorCollider.isTrigger = false;
+
+        floorObject.transform.SetParent(this.transform);
+    }
+
+    private void CreateNavigationSurface()
+    {
+        // Create a larger ground plane for navigation if one doesn't exist
+        GameObject existingGround = GameObject.Find("Ground");
+        if (existingGround == null)
+        {
+            GameObject ground = GameObject.CreatePrimitive(PrimitiveType.Plane);
+            ground.name = "Ground";
+
+            // Only set tag if it exists
+            try
+            {
+                ground.tag = "Ground";
+            }
+            catch (UnityException)
+            {
+                Debug.LogWarning("Ground tag not defined. Skipping tag assignment.");
+            }
+
+            ground.transform.position = Vector3.zero;
+            ground.transform.localScale = new Vector3(10f, 1f, 10f); // Large navigation area
+
+            // Make ground invisible but keep collider for navigation
+            Renderer groundRenderer = ground.GetComponent<Renderer>();
+            groundRenderer.enabled = false;
+
+            ground.transform.SetParent(this.transform);
+        }
+    }
+
+    #region Public Methods for Room Management
+    public void AddEntranceToInitialRoom(Vector3 entrancePosition)
+    {
+        // Find the closest wall and create an entrance
+        GameObject closestWall = FindClosestWall(entrancePosition);
+        if (closestWall != null)
+        {
+            CreateEntrance(closestWall, entrancePosition);
+
+            if (GameManager.Instance != null)
+            {
+                GameManager.Instance.SetEntrance(true);
+            }
+        }
+    }
+
+    private GameObject FindClosestWall(Vector3 position)
+    {
+        GameObject closest = null;
+        float closestDistance = float.MaxValue;
+
+        foreach (GameObject wall in initialRoomWalls)
+        {
+            if (wall == null) continue;
+
+            float distance = Vector3.Distance(wall.transform.position, position);
+            if (distance < closestDistance)
+            {
+                closestDistance = distance;
+                closest = wall;
+            }
+        }
+
+        return closest;
+    }
+
+    private void CreateEntrance(GameObject wall, Vector3 entrancePosition)
+    {
+        // Create entrance by splitting the wall
+        Transform wallTransform = wall.transform;
+        Vector3 wallScale = wallTransform.localScale;
+        Vector3 wallPosition = wallTransform.position;
+
+        // For simplicity, create a gap in the center of the wall
+        float gapWidth = 2f;
+
+        // Determine if it's a north/south wall or east/west wall
+        bool isNorthSouthWall = Mathf.Abs(wallScale.x) > Mathf.Abs(wallScale.z);
+
+        if (isNorthSouthWall)
+        {
+            // Split horizontally
+            float leftWidth = (wallScale.x - gapWidth) / 2f;
+
+            if (leftWidth > 0.5f)
+            {
+                // Left piece
+                GameObject leftWall = Instantiate(wall);
+                leftWall.name = wall.name + " (Left)";
+                leftWall.transform.position = wallPosition + new Vector3(-gapWidth / 2f - leftWidth / 2f, 0, 0);
+                leftWall.transform.localScale = new Vector3(leftWidth, wallScale.y, wallScale.z);
+
+                // Right piece
+                GameObject rightWall = Instantiate(wall);
+                rightWall.name = wall.name + " (Right)";
+                rightWall.transform.position = wallPosition + new Vector3(gapWidth / 2f + leftWidth / 2f, 0, 0);
+                rightWall.transform.localScale = new Vector3(leftWidth, wallScale.y, wallScale.z);
+
+                initialRoomWalls.Add(leftWall);
+                initialRoomWalls.Add(rightWall);
+            }
+        }
+        else
+        {
+            // Split vertically
+            float frontDepth = (wallScale.z - gapWidth) / 2f;
+
+            if (frontDepth > 0.5f)
+            {
+                // Front piece
+                GameObject frontWall = Instantiate(wall);
+                frontWall.name = wall.name + " (Front)";
+                frontWall.transform.position = wallPosition + new Vector3(0, 0, -gapWidth / 2f - frontDepth / 2f);
+                frontWall.transform.localScale = new Vector3(wallScale.x, wallScale.y, frontDepth);
+
+                // Back piece
+                GameObject backWall = Instantiate(wall);
+                backWall.name = wall.name + " (Back)";
+                backWall.transform.position = wallPosition + new Vector3(0, 0, gapWidth / 2f + frontDepth / 2f);
+                backWall.transform.localScale = new Vector3(wallScale.x, wallScale.y, frontDepth);
+
+                initialRoomWalls.Add(frontWall);
+                initialRoomWalls.Add(backWall);
+            }
+        }
+
+        // Remove original wall
+        initialRoomWalls.Remove(wall);
+        DestroyImmediate(wall);
+
+        Debug.Log("Entrance created in initial room");
+    }
+
+    public Vector3 GetRoomCenter()
+    {
+        return startingRoomPosition;
+    }
+
+    public Vector3 GetRoomSize()
+    {
+        return startingRoomSize;
+    }
+    #endregion
+}

+ 1566 - 0
Assets/Scripts/Building/NewRoomBuilder.cs

@@ -0,0 +1,1566 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+public class NewRoomBuilder : MonoBehaviour
+{
+    [Header("Prefabs")]
+    public GameObject wallPrefab;
+    public GameObject wallPointPrefab;
+    public GameObject doorOpeningPrefab;
+
+    [Header("Settings")]
+    public float wallHeight = 3f;
+    public float wallThickness = 0.2f;
+    public float doorWidth = 1.5f;
+    public float doorHeight = 2.5f;
+    public float snapDistance = 1f; // Distance for snapping to existing points
+
+    private Camera playerCamera;
+    private BuildingUIController.BuildingMode currentMode = BuildingUIController.BuildingMode.Normal;
+
+    // Wall creation state
+    private bool isCreatingWall = false;
+    private Vector3 wallStartPoint;
+    private GameObject previewWall;
+    private LineRenderer previewLine;
+
+    // Available angles (in degrees)
+    private readonly float[] snapAngles = { 0f, 45f, 90f, 135f, 180f, 225f, 270f, 315f };
+
+    // Wall storage
+    private List<GameObject> walls = new List<GameObject>();
+
+    // Door preview
+    private GameObject doorPreview;
+    private GameObject hoveredWall;
+
+    // Snap indicators
+    private GameObject snapIndicator;
+    private GameObject currentSnapPoint;
+
+    private void Start()
+    {
+        // Try multiple ways to find the camera
+        playerCamera = Camera.main;
+        if (playerCamera == null)
+        {
+            playerCamera = FindFirstObjectByType<Camera>();
+            Debug.LogWarning($"Camera.main was null, found camera: {playerCamera?.name ?? "NONE"}");
+        }
+
+        if (playerCamera == null)
+        {
+            Debug.LogError("No camera found! Wall detection will not work.");
+        }
+        else
+        {
+            Debug.Log($"Using camera: {playerCamera.name} at {playerCamera.transform.position}");
+        }
+
+        CreatePreviewLine();
+        CreateDoorPreview();
+        CreateSnapIndicator();
+
+        // Ensure we have prefabs
+        EnsurePrefabsExist();
+
+        // Fix any existing walls that might not be tagged properly
+        FixExistingWallTags();
+    }
+
+    private void FixExistingWallTags()
+    {
+        // First, look for walls that are already properly tagged (from InitialRoomSetup)
+        GameObject[] existingWalls = GameObject.FindGameObjectsWithTag("Wall");
+        Debug.Log($"Found {existingWalls.Length} objects already tagged as 'Wall'");
+
+        foreach (GameObject wall in existingWalls)
+        {
+            if (!walls.Contains(wall))
+            {
+                walls.Add(wall);
+                Debug.Log($"Added existing tagged wall to tracking: {wall.name} - Scale: {wall.transform.localScale}");
+            }
+        }
+
+        // If we found properly tagged walls, we're done
+        if (existingWalls.Length > 0)
+        {
+            Debug.Log($"Successfully found and added {existingWalls.Length} pre-tagged walls from InitialRoomSetup");
+            return;
+        }
+
+        // Fallback: Look for objects that should be walls but aren't tagged yet
+        GameObject[] allObjects = FindObjectsByType<GameObject>(FindObjectsSortMode.None);
+        int fixedWalls = 0;
+
+        Debug.Log($"No pre-tagged walls found. Scanning {allObjects.Length} objects for potential walls...");
+
+        foreach (GameObject obj in allObjects)
+        {
+            // Skip door components and other non-wall objects
+            if (obj.name.Contains("Post") || obj.name.Contains("Beam") || obj.name.Contains("Door") ||
+                obj.name.Contains("Mat") || obj.name.Contains("Entrance") || obj.name.Contains("Frame"))
+            {
+                continue;
+            }
+
+            // Look for specific wall naming patterns from InitialRoomSetup
+            bool isInitialRoomWall = obj.name.Contains("North Wall") || obj.name.Contains("South Wall") ||
+                                   obj.name.Contains("East Wall") || obj.name.Contains("West Wall");
+
+            // Also check for other wall patterns
+            bool isWallObject = obj.name.Contains("Wall") ||
+                               obj.name.Contains("wall") ||
+                               obj.name.StartsWith("Room") ||
+                               obj.name.Contains("Interior");
+
+            if ((isInitialRoomWall || isWallObject) && !obj.CompareTag("Wall"))
+            {
+                // Additional check: make sure it has a collider (walls should have colliders)
+                if (obj.GetComponent<Collider>() != null || obj.GetComponentInChildren<Collider>() != null)
+                {
+                    Debug.Log($"Found untagged wall: {obj.name} - Scale: {obj.transform.localScale}, Position: {obj.transform.position}");
+
+                    obj.tag = "Wall";
+                    fixedWalls++;
+                    Debug.Log($"Fixed wall tag for: {obj.name}");
+
+                    // Also add it to our walls list
+                    if (!walls.Contains(obj))
+                    {
+                        walls.Add(obj);
+                        Debug.Log($"Added newly tagged wall to tracking: {obj.name}");
+                    }
+                }
+            }
+        }
+
+        if (fixedWalls > 0)
+        {
+            Debug.Log($"Fixed {fixedWalls} existing walls that weren't properly tagged");
+        }
+        else
+        {
+            Debug.Log("No walls found at all. This might indicate InitialRoomSetup hasn't run or there's a scene setup issue.");
+
+            // Debug: List some objects to see what's in the scene
+            Debug.Log("Sample objects in scene:");
+            for (int i = 0; i < Mathf.Min(20, allObjects.Length); i++)
+            {
+                if (allObjects[i].name.Contains("Wall") || allObjects[i].name.Contains("wall") ||
+                    allObjects[i].transform.localScale.y > 2f)
+                {
+                    Debug.Log($"  Potential wall: {allObjects[i].name} - Scale: {allObjects[i].transform.localScale} - Tag: {allObjects[i].tag}");
+                }
+            }
+        }
+    }
+
+    private void EnsurePrefabsExist()
+    {
+        // Create basic prefabs if they don't exist
+        if (wallPrefab == null)
+        {
+            wallPrefab = CreateWallPrefab();
+            Debug.Log("Created wall prefab dynamically");
+        }
+
+        if (wallPointPrefab == null)
+        {
+            wallPointPrefab = CreateWallPointPrefab();
+            Debug.Log("Created wall point prefab dynamically");
+        }
+
+        if (doorOpeningPrefab == null)
+        {
+            doorOpeningPrefab = CreateDoorOpeningPrefab();
+            Debug.Log("Created door opening prefab dynamically");
+        }
+    }
+
+    #region Prefab Creation
+
+    private GameObject CreateWallPrefab()
+    {
+        // Create a parent GameObject for the wall
+        GameObject wall = new GameObject("Wall_Prefab");
+
+        // Add a cube as child for the visual representation
+        GameObject wallMesh = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        wallMesh.name = "WallMesh";
+        wallMesh.transform.SetParent(wall.transform);
+        wallMesh.transform.localPosition = Vector3.zero;
+        wallMesh.transform.localRotation = Quaternion.identity;
+        wallMesh.transform.localScale = Vector3.one;
+
+        // Set up the wall material
+        Renderer renderer = wallMesh.GetComponent<Renderer>();
+        Material wallMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+
+        // Set up proper wall color - light gray/beige
+        wallMaterial.color = new Color(0.9f, 0.9f, 0.8f); // Light beige/cream color
+
+        // Make sure it's not metallic and has proper smoothness
+        wallMaterial.SetFloat("_Metallic", 0.0f);
+        wallMaterial.SetFloat("_Smoothness", 0.2f);
+
+        renderer.material = wallMaterial;
+
+        // Ensure the wall has a collider for door placement detection
+        BoxCollider collider = wallMesh.GetComponent<BoxCollider>();
+        if (collider == null)
+        {
+            collider = wallMesh.AddComponent<BoxCollider>();
+        }
+
+        wall.tag = "Wall";
+
+        // Don't destroy this object, keep it for instantiation
+        DontDestroyOnLoad(wall);
+        wall.SetActive(false); // Hide the template
+
+        return wall;
+    }
+    private GameObject CreateWallPointPrefab()
+    {
+        // Create a parent GameObject for the wall point
+        GameObject point = new GameObject("WallPoint_Prefab");
+
+        // Add a sphere as child for the visual representation
+        GameObject pointMesh = GameObject.CreatePrimitive(PrimitiveType.Sphere);
+        pointMesh.name = "PointMesh";
+        pointMesh.transform.SetParent(point.transform);
+        pointMesh.transform.localPosition = Vector3.zero;
+        pointMesh.transform.localRotation = Quaternion.identity;
+        pointMesh.transform.localScale = Vector3.one * 0.2f;
+
+        Renderer renderer = pointMesh.GetComponent<Renderer>();
+        Material pointMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+
+        // Set up bright red color for wall points
+        pointMaterial.color = Color.red;
+        pointMaterial.SetFloat("_Metallic", 0.0f);
+        pointMaterial.SetFloat("_Smoothness", 0.8f); // Make it a bit shinier for visibility
+
+        renderer.material = pointMaterial;
+
+        // Remove collider to prevent interference
+        Collider collider = pointMesh.GetComponent<Collider>();
+        if (collider != null) DestroyImmediate(collider);
+
+        DontDestroyOnLoad(point);
+        point.SetActive(false); // Hide the template
+
+        return point;
+    }
+
+    private GameObject CreateDoorOpeningPrefab()
+    {
+        // Create a parent GameObject for the door frame (visible part)
+        GameObject door = new GameObject("DoorOpening_Prefab");
+
+        // Create door frame - just the frame, not a solid door
+        GameObject doorFrame = new GameObject("DoorFrame");
+        doorFrame.transform.SetParent(door.transform);
+
+        // Create frame components: left post, right post, top beam
+        // Posts should be positioned at ground level with proper Y positioning
+        CreateDoorFramePost(doorFrame, "LeftPost", new Vector3(-doorWidth / 2f, doorHeight / 2f, 0f));
+        CreateDoorFramePost(doorFrame, "RightPost", new Vector3(doorWidth / 2f, doorHeight / 2f, 0f));
+        CreateDoorFrameBeam(doorFrame, "TopBeam", new Vector3(0f, doorHeight - 0.1f, 0f));
+
+        door.tag = "Door";
+        DontDestroyOnLoad(door);
+
+        return door;
+    }
+
+    private void CreateDoorFramePost(GameObject parent, string name, Vector3 position)
+    {
+        GameObject post = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        post.name = name;
+        post.transform.SetParent(parent.transform);
+        post.transform.localPosition = position;
+        post.transform.localScale = new Vector3(0.1f, doorHeight, 0.2f); // Thin post
+
+        Renderer renderer = post.GetComponent<Renderer>();
+        Material frameMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        frameMaterial.color = new Color(0.4f, 0.2f, 0.1f); // Brown wood
+        frameMaterial.SetFloat("_Metallic", 0.0f);
+        frameMaterial.SetFloat("_Smoothness", 0.3f);
+        renderer.material = frameMaterial;
+    }
+
+    private void CreateDoorFrameBeam(GameObject parent, string name, Vector3 position)
+    {
+        GameObject beam = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        beam.name = name;
+        beam.transform.SetParent(parent.transform);
+        beam.transform.localPosition = position;
+        beam.transform.localScale = new Vector3(doorWidth + 0.2f, 0.2f, 0.2f); // Wide beam across top
+
+        Renderer renderer = beam.GetComponent<Renderer>();
+        Material frameMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        frameMaterial.color = new Color(0.4f, 0.2f, 0.1f); // Brown wood
+        frameMaterial.SetFloat("_Metallic", 0.0f);
+        frameMaterial.SetFloat("_Smoothness", 0.3f);
+        renderer.material = frameMaterial;
+    }
+
+    #endregion
+
+    #region Main Update Loop
+
+    private void Update()
+    {
+        switch (currentMode)
+        {
+            case BuildingUIController.BuildingMode.CreatingWalls:
+                HandleWallCreation();
+                break;
+
+            case BuildingUIController.BuildingMode.CreatingDoors:
+                HandleDoorPlacement();
+                break;
+
+            case BuildingUIController.BuildingMode.CreatingEntrance:
+                HandleEntranceCreation();
+                break;
+
+            default:
+                HandleNormalMode();
+                HideAllPreviews();
+                break;
+        }
+    }
+
+    public void SetBuildingMode(BuildingUIController.BuildingMode mode)
+    {
+        // Cancel any current wall creation
+        if (isCreatingWall)
+        {
+            CancelWallCreation();
+        }
+
+        currentMode = mode;
+        HideAllPreviews();
+
+        Debug.Log($"Building mode changed to: {mode}");
+    }
+
+    #endregion
+
+    #region Normal Mode
+
+    private void HandleNormalMode()
+    {
+        // In normal mode, allow deletion of entrances with right-click
+        if (Input.GetMouseButtonDown(1)) // Right click
+        {
+            Vector3 mousePos = GetMouseWorldPosition();
+            CheckForEntranceDeletion(mousePos);
+        }
+    }
+
+    private void CheckForEntranceDeletion(Vector3 mousePos)
+    {
+        Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
+
+        if (Physics.Raycast(ray, out RaycastHit hit, 1000f))
+        {
+            GameObject hitObj = hit.collider.gameObject;
+
+            // Check if we hit an entrance or entrance component
+            GameObject entranceToDelete = null;
+
+            if (hitObj.CompareTag("Entrance"))
+            {
+                entranceToDelete = hitObj;
+            }
+            else if (hitObj.transform.parent != null && hitObj.transform.parent.CompareTag("Entrance"))
+            {
+                entranceToDelete = hitObj.transform.parent.gameObject;
+            }
+
+            if (entranceToDelete != null)
+            {
+                Debug.Log($"Deleting entrance: {entranceToDelete.name}");
+                DestroyImmediate(entranceToDelete);
+
+                // Note: The wall segments around the entrance will remain
+                // This creates a permanent opening where the entrance was
+            }
+        }
+    }
+
+    #endregion
+
+    #region Wall Creation
+
+    private void HandleWallCreation()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+
+        if (Input.GetMouseButtonDown(0)) // Left click
+        {
+            if (!isCreatingWall)
+            {
+                // Start creating a wall
+                StartWallCreation(mousePos);
+            }
+            else
+            {
+                // Finish creating the wall
+                FinishWallCreation(mousePos);
+            }
+        }
+        else if (Input.GetMouseButtonDown(1)) // Right click
+        {
+            // Cancel wall creation
+            if (isCreatingWall)
+            {
+                CancelWallCreation();
+            }
+        }
+
+        // Update preview while creating wall
+        if (isCreatingWall)
+        {
+            UpdateWallPreview(mousePos);
+        }
+    }
+
+    private void StartWallCreation(Vector3 startPoint)
+    {
+        // Snap to nearby existing points
+        Vector3 snappedStart = SnapToNearbyPoint(startPoint);
+
+        wallStartPoint = snappedStart;
+        isCreatingWall = true;
+
+        // Show preview
+        if (previewLine != null)
+        {
+            previewLine.enabled = true;
+        }
+
+        Debug.Log($"Started wall creation at: {wallStartPoint}");
+    }
+
+    private void UpdateWallPreview(Vector3 currentMousePos)
+    {
+        if (!isCreatingWall || previewLine == null) return;
+
+        // Calculate snapped end point
+        Vector3 snappedEndPoint = SnapToAngle(wallStartPoint, currentMousePos);
+        Vector3 finalSnappedPoint = SnapToNearbyPoint(snappedEndPoint);
+
+        // Show snap indicator if we're snapping to something
+        if (Vector3.Distance(finalSnappedPoint, snappedEndPoint) > 0.1f)
+        {
+            ShowSnapIndicator(finalSnappedPoint);
+        }
+        else
+        {
+            HideSnapIndicator();
+        }
+
+        // Update preview line
+        previewLine.SetPosition(0, wallStartPoint);
+        previewLine.SetPosition(1, finalSnappedPoint);
+    }
+
+    private void ShowSnapIndicator(Vector3 position)
+    {
+        if (snapIndicator != null)
+        {
+            snapIndicator.transform.position = position;
+            snapIndicator.SetActive(true);
+        }
+    }
+
+    private void HideSnapIndicator()
+    {
+        if (snapIndicator != null)
+        {
+            snapIndicator.SetActive(false);
+        }
+    }
+
+    private void FinishWallCreation(Vector3 endPoint)
+    {
+        if (!isCreatingWall) return;
+
+        // Calculate snapped end point
+        Vector3 snappedEndPoint = SnapToAngle(wallStartPoint, endPoint);
+        snappedEndPoint = SnapToNearbyPoint(snappedEndPoint);
+
+        // Create the actual wall
+        CreateWall(wallStartPoint, snappedEndPoint);
+
+        // Reset state
+        isCreatingWall = false;
+        if (previewLine != null)
+        {
+            previewLine.enabled = false;
+        }
+
+        Debug.Log($"Created wall from {wallStartPoint} to {snappedEndPoint}");
+    }
+
+    private void CancelWallCreation()
+    {
+        isCreatingWall = false;
+        if (previewLine != null)
+        {
+            previewLine.enabled = false;
+        }
+
+        Debug.Log("Wall creation cancelled");
+    }
+
+    private Vector3 SnapToAngle(Vector3 startPoint, Vector3 endPoint)
+    {
+        Vector3 direction = (endPoint - startPoint).normalized;
+        float distance = Vector3.Distance(startPoint, endPoint);
+
+        // Calculate angle in degrees
+        float currentAngle = Mathf.Atan2(direction.z, direction.x) * Mathf.Rad2Deg;
+        if (currentAngle < 0) currentAngle += 360f;
+
+        // Find closest snap angle
+        float closestAngle = snapAngles[0];
+        float smallestDifference = Mathf.Abs(currentAngle - closestAngle);
+
+        foreach (float angle in snapAngles)
+        {
+            float difference = Mathf.Abs(currentAngle - angle);
+            if (difference > 180f) difference = 360f - difference; // Handle wrapping
+
+            if (difference < smallestDifference)
+            {
+                smallestDifference = difference;
+                closestAngle = angle;
+            }
+        }
+
+        // Calculate snapped direction
+        float rad = closestAngle * Mathf.Deg2Rad;
+        Vector3 snappedDirection = new Vector3(Mathf.Cos(rad), 0f, Mathf.Sin(rad));
+
+        return startPoint + snappedDirection * distance;
+    }
+
+    private Vector3 SnapToNearbyPoint(Vector3 point)
+    {
+        float closestCornerDistance = float.MaxValue;
+        float closestWallDistance = float.MaxValue;
+        Vector3 closestCornerPoint = point;
+        Vector3 closestWallPoint = point;
+        bool foundCorner = false;
+
+        foreach (GameObject wall in walls)
+        {
+            if (wall == null) continue;
+
+            // First priority: Check both endpoints of the wall (corners)
+            Vector3[] endpoints = GetWallEndpoints(wall);
+            foreach (Vector3 endpoint in endpoints)
+            {
+                float distance = Vector3.Distance(point, endpoint);
+                if (distance < snapDistance && distance < closestCornerDistance)
+                {
+                    closestCornerDistance = distance;
+                    closestCornerPoint = endpoint;
+                    foundCorner = true;
+                    Debug.Log($"Found corner snap point at {endpoint}, distance: {distance}");
+                }
+            }
+
+            // Second priority: Check snapping to wall surface/center (only if no corner found nearby)
+            if (!foundCorner || closestCornerDistance > snapDistance * 0.7f) // Allow wall snapping if no close corner
+            {
+                Vector3 wallCenter = wall.transform.position;
+                wallCenter.y = 0f; // Project to ground level
+
+                // Project point onto wall line to find closest point on wall
+                Vector3 wallDirection = wall.transform.forward;
+                Vector3 toPoint = point - wallCenter;
+                float projection = Vector3.Dot(toPoint, wallDirection);
+
+                // Clamp projection to wall bounds
+                float wallLength = wall.transform.localScale.z;
+                projection = Mathf.Clamp(projection, -wallLength / 2f, wallLength / 2f);
+
+                Vector3 closestPointOnWall = wallCenter + wallDirection * projection;
+                float wallDistance = Vector3.Distance(point, closestPointOnWall);
+
+                // Snap to wall surface if clicking near the wall
+                if (wallDistance < snapDistance && wallDistance < closestWallDistance)
+                {
+                    closestWallDistance = wallDistance;
+                    closestWallPoint = closestPointOnWall;
+                    Debug.Log($"Found wall surface snap point at {closestPointOnWall}, distance: {wallDistance}");
+                }
+            }
+        }
+
+        // Return the best snap point: prioritize corners over wall surfaces
+        if (foundCorner && closestCornerDistance < snapDistance)
+        {
+            Debug.Log($"Using corner snap point: {closestCornerPoint}");
+            UpdateSnapIndicatorColor(true); // Corner = cyan
+            return closestCornerPoint;
+        }
+        else if (closestWallDistance < snapDistance)
+        {
+            Debug.Log($"Using wall surface snap point: {closestWallPoint}");
+            UpdateSnapIndicatorColor(false); // Wall surface = yellow
+            return closestWallPoint;
+        }
+
+        Debug.Log($"No snap point found, using original point: {point}");
+        return point;
+    }
+
+    private void UpdateSnapIndicatorColor(bool isCorner)
+    {
+        if (snapIndicator != null)
+        {
+            Renderer renderer = snapIndicator.GetComponent<Renderer>();
+            if (renderer != null)
+            {
+                Color indicatorColor = isCorner ? Color.cyan : Color.yellow;
+                Color emissionColor = indicatorColor * 2f;
+
+                renderer.material.color = indicatorColor;
+                renderer.material.SetColor("_EmissionColor", emissionColor);
+            }
+        }
+    }
+
+    private void CreateWall(Vector3 startPoint, Vector3 endPoint)
+    {
+        if (Vector3.Distance(startPoint, endPoint) < 0.1f) return; // Too short
+
+        // Calculate wall properties
+        Vector3 center = (startPoint + endPoint) / 2f;
+        center.y = wallHeight / 2f; // Set proper height
+
+        Vector3 direction = (endPoint - startPoint).normalized;
+        float length = Vector3.Distance(startPoint, endPoint);
+
+        // Create wall object from prefab
+        GameObject wall = Instantiate(wallPrefab, center, Quaternion.LookRotation(direction, Vector3.up));
+        wall.SetActive(true); // Make sure it's visible
+
+        // Scale the entire wall object to proper dimensions:
+        // X = thickness (perpendicular to wall direction)
+        // Y = height (up/down)  
+        // Z = length (along the wall direction)
+        wall.transform.localScale = new Vector3(wallThickness, wallHeight, length);
+
+        // Set wall name and add to list
+        wall.name = $"Wall_{walls.Count}";
+        walls.Add(wall);
+
+        Debug.Log($"Created wall: {wall.name} from {startPoint} to {endPoint}, length: {length}");
+    }
+
+    #endregion
+
+    #region Door Placement
+
+    private void HandleDoorPlacement()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+
+        // Find wall under mouse
+        GameObject wallUnderMouse = FindWallUnderMouse(mousePos);
+
+        // Update hover preview
+        UpdateDoorPreview(wallUnderMouse, mousePos);
+
+        if (Input.GetMouseButtonDown(0)) // Left click
+        {
+            Debug.Log($"Door placement click detected at {mousePos}");
+            if (wallUnderMouse != null)
+            {
+                Debug.Log($"Wall found under mouse: {wallUnderMouse.name}");
+                PlaceDoorOnWall(wallUnderMouse, mousePos);
+            }
+            else
+            {
+                Debug.LogWarning("No wall found under mouse cursor for door placement");
+                // Let's try a different approach - check nearby walls
+                GameObject nearestWall = FindNearestWall(mousePos);
+                if (nearestWall != null)
+                {
+                    Debug.Log($"Found nearest wall: {nearestWall.name}, placing door there");
+                    PlaceDoorOnWall(nearestWall, mousePos);
+                }
+                else
+                {
+                    Debug.LogWarning("No walls found nearby for door placement");
+                }
+            }
+        }
+    }
+
+    private void UpdateDoorPreview(GameObject wall, Vector3 mousePos)
+    {
+        if (wall != hoveredWall)
+        {
+            hoveredWall = wall;
+
+            if (wall != null)
+            {
+                ShowDoorPreview(wall, mousePos);
+            }
+            else
+            {
+                HideDoorPreview();
+            }
+        }
+        else if (wall != null)
+        {
+            // Update preview position
+            ShowDoorPreview(wall, mousePos);
+        }
+    }
+
+    private void ShowDoorPreview(GameObject wall, Vector3 mousePos)
+    {
+        if (doorPreview == null) return;
+
+        // Calculate door position on the wall
+        Vector3 doorPosition = CalculateDoorPositionOnWall(wall, mousePos);
+
+        // Position and orient the preview - door should face perpendicular to wall
+        doorPreview.transform.position = doorPosition;
+        doorPreview.transform.rotation = Quaternion.LookRotation(wall.transform.right);
+        doorPreview.SetActive(true);
+    }
+
+    private void HideDoorPreview()
+    {
+        if (doorPreview != null)
+        {
+            doorPreview.SetActive(false);
+        }
+    }
+
+    private void PlaceDoorOnWall(GameObject wall, Vector3 mousePos)
+    {
+        Debug.Log($"Attempting to place door on {wall.name} at mouse position {mousePos}");
+
+        // Calculate door position
+        Vector3 doorPosition = CalculateDoorPositionOnWall(wall, mousePos);
+        Debug.Log($"Calculated door position: {doorPosition}");
+
+        // Check if door would intersect with existing doors
+        if (WouldDoorIntersectExistingDoors(wall, doorPosition))
+        {
+            Debug.LogWarning("Cannot place door - would intersect with existing door");
+            return;
+        }
+
+        // Get wall endpoints and direction for splitting
+        Vector3[] wallEndpoints = GetWallEndpoints(wall);
+        Vector3 wallStart = wallEndpoints[0];
+        Vector3 wallEnd = wallEndpoints[1];
+        Vector3 wallDirection = wall.transform.forward;
+
+        // Calculate door boundaries along the wall
+        Vector3 doorStart = doorPosition - wallDirection * (doorWidth / 2f);
+        Vector3 doorEnd = doorPosition + wallDirection * (doorWidth / 2f);
+
+        // Create door at wall position with proper rotation
+        // Door should face perpendicular to the wall direction (reuse existing wallDirection)
+        Quaternion doorRotation = Quaternion.LookRotation(wall.transform.right); // Face perpendicular to wall
+
+        GameObject door = Instantiate(doorOpeningPrefab, doorPosition, doorRotation);
+        door.SetActive(true);
+        door.name = $"Door_on_{wall.name}";
+
+        // Split the original wall into two segments around the door
+        SplitWallAroundDoor(wall, wallStart, wallEnd, doorStart, doorEnd);
+
+        Debug.Log($"Successfully placed door: {door.name} and split wall into segments");
+    }
+
+    private bool WouldDoorIntersectExistingDoors(GameObject wall, Vector3 doorPosition)
+    {
+        // Find all existing doors
+        GameObject[] existingDoors = GameObject.FindGameObjectsWithTag("Door");
+
+        foreach (GameObject existingDoor in existingDoors)
+        {
+            // Check if doors are on the same wall or parallel walls
+            float distance = Vector3.Distance(doorPosition, existingDoor.transform.position);
+            if (distance < doorWidth * 1.5f) // Doors too close
+            {
+                Debug.Log($"Door too close to existing door {existingDoor.name}: distance = {distance}");
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private void SplitWallAroundDoor(GameObject originalWall, Vector3 wallStart, Vector3 wallEnd, Vector3 doorStart, Vector3 doorEnd)
+    {
+        // Calculate the two new wall segments
+        float originalWallLength = Vector3.Distance(wallStart, wallEnd);
+        float leftSegmentLength = Vector3.Distance(wallStart, doorStart);
+        float rightSegmentLength = Vector3.Distance(doorEnd, wallEnd);
+
+        // Only create segments if they're long enough
+        bool createLeftSegment = leftSegmentLength > 0.1f;
+        bool createRightSegment = rightSegmentLength > 0.1f;
+
+        Debug.Log($"Splitting wall: original length = {originalWallLength}, left = {leftSegmentLength}, right = {rightSegmentLength}");
+
+        if (createLeftSegment)
+        {
+            // Create left wall segment - full height
+            Vector3 leftCenter = (wallStart + doorStart) / 2f;
+            leftCenter.y = wallHeight / 2f;
+
+            GameObject leftWall = Instantiate(wallPrefab, leftCenter, originalWall.transform.rotation);
+            leftWall.SetActive(true);
+            leftWall.name = $"{originalWall.name}_Left";
+            leftWall.transform.localScale = new Vector3(wallThickness, wallHeight, leftSegmentLength);
+
+            walls.Add(leftWall);
+            Debug.Log($"Created left wall segment: {leftWall.name}");
+        }
+
+        if (createRightSegment)
+        {
+            // Create right wall segment - full height
+            Vector3 rightCenter = (doorEnd + wallEnd) / 2f;
+            rightCenter.y = wallHeight / 2f;
+
+            GameObject rightWall = Instantiate(wallPrefab, rightCenter, originalWall.transform.rotation);
+            rightWall.SetActive(true);
+            rightWall.name = $"{originalWall.name}_Right";
+            rightWall.transform.localScale = new Vector3(wallThickness, wallHeight, rightSegmentLength);
+
+            walls.Add(rightWall);
+            Debug.Log($"Created right wall segment: {rightWall.name}");
+        }
+
+        // Create header beam above the door (if there are segments on both sides)
+        if (createLeftSegment && createRightSegment)
+        {
+            CreateDoorHeaderBeam(originalWall, doorStart, doorEnd);
+        }
+
+        // Remove original wall from list and destroy it
+        walls.Remove(originalWall);
+        DestroyImmediate(originalWall);
+        Debug.Log("Removed original wall after splitting");
+    }
+
+    private void CreateDoorHeaderBeam(GameObject originalWall, Vector3 doorStart, Vector3 doorEnd)
+    {
+        // Create beam above door opening
+        Vector3 beamCenter = (doorStart + doorEnd) / 2f;
+        beamCenter.y = doorHeight + 0.1f; // Just above the door
+
+        GameObject headerBeam = Instantiate(wallPrefab, beamCenter, originalWall.transform.rotation);
+        headerBeam.SetActive(true);
+        headerBeam.name = $"{originalWall.name}_Header";
+
+        float beamLength = Vector3.Distance(doorStart, doorEnd);
+        float beamHeight = wallHeight - doorHeight - 0.1f; // Remaining height above door
+
+        if (beamHeight > 0.1f) // Only create beam if there's significant height remaining
+        {
+            headerBeam.transform.localScale = new Vector3(wallThickness, beamHeight, beamLength);
+            walls.Add(headerBeam);
+            Debug.Log($"Created door header beam: {headerBeam.name}");
+        }
+        else
+        {
+            // If no room for header beam, destroy it
+            DestroyImmediate(headerBeam);
+            Debug.Log("Door is full height - no header beam needed");
+        }
+    }
+
+    #endregion
+
+    #region Entrance Creation
+
+    private void HandleEntranceCreation()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+
+        // Find wall under mouse
+        GameObject wallUnderMouse = FindWallUnderMouse(mousePos);
+
+        // Update entrance preview (similar to door but different style)
+        UpdateEntrancePreview(wallUnderMouse, mousePos);
+
+        if (Input.GetMouseButtonDown(0)) // Left click
+        {
+            Debug.Log($"Entrance placement click detected at {mousePos}");
+            if (wallUnderMouse != null)
+            {
+                Debug.Log($"Wall found under mouse: {wallUnderMouse.name}");
+                PlaceEntranceOnWall(wallUnderMouse, mousePos);
+            }
+            else
+            {
+                Debug.LogWarning("No wall found under mouse cursor for entrance placement");
+
+                // Try alternative detection method first
+                GameObject alternativeWall = FindWallUnderMouseAlternative(mousePos);
+                if (alternativeWall != null)
+                {
+                    Debug.Log($"Alternative method found wall: {alternativeWall.name}, placing entrance there");
+                    PlaceEntranceOnWall(alternativeWall, mousePos);
+                }
+                else
+                {
+                    // Let's try a different approach - check nearby walls
+                    GameObject nearestWall = FindNearestWall(mousePos);
+                    if (nearestWall != null)
+                    {
+                        Debug.Log($"Found nearest wall: {nearestWall.name}, placing entrance there");
+                        PlaceEntranceOnWall(nearestWall, mousePos);
+                    }
+                    else
+                    {
+                        Debug.LogWarning("No walls found nearby for entrance placement");
+                    }
+                }
+            }
+        }
+    }
+
+    private void UpdateEntrancePreview(GameObject wall, Vector3 mousePos)
+    {
+        if (wall != null)
+        {
+            ShowEntrancePreview(wall, mousePos);
+        }
+        else
+        {
+            HideEntrancePreview();
+        }
+    }
+
+    private void ShowEntrancePreview(GameObject wall, Vector3 mousePos)
+    {
+        if (doorPreview == null) return; // Reuse door preview for now
+
+        // Calculate entrance position on the wall
+        Vector3 entrancePosition = CalculateDoorPositionOnWall(wall, mousePos);
+
+        // Position and orient the preview - entrance should face perpendicular to wall
+        doorPreview.transform.position = entrancePosition;
+        doorPreview.transform.rotation = Quaternion.LookRotation(wall.transform.right);
+
+        // Make entrance preview slightly different (maybe different scale or color)
+        doorPreview.transform.localScale = new Vector3(0.2f, doorHeight, doorWidth * 1.2f); // Slightly wider
+        doorPreview.SetActive(true);
+    }
+
+    private void HideEntrancePreview()
+    {
+        if (doorPreview != null)
+        {
+            doorPreview.SetActive(false);
+        }
+    }
+
+    private void PlaceEntranceOnWall(GameObject wall, Vector3 mousePos)
+    {
+        Debug.Log($"Attempting to place entrance on {wall.name} at mouse position {mousePos}");
+
+        // Calculate entrance position on the wall surface
+        Vector3 entrancePosition = CalculateDoorPositionOnWall(wall, mousePos);
+        Debug.Log($"Calculated entrance position: {entrancePosition}");
+
+        // Check if there's already an entrance
+        GameObject[] existingEntrances = GameObject.FindGameObjectsWithTag("Entrance");
+        if (existingEntrances.Length > 0)
+        {
+            Debug.LogWarning("Building already has an entrance. Replacing existing entrance.");
+            foreach (GameObject existingEntrance in existingEntrances)
+            {
+                DestroyImmediate(existingEntrance);
+            }
+        }
+
+        // Determine wall orientation based on its scale
+        Vector3 wallScale = wall.transform.localScale;
+        bool isNorthSouthWall = wallScale.x > wallScale.z; // Wide in X means North/South wall
+
+        Debug.Log($"Wall scale: {wallScale}, isNorthSouthWall: {isNorthSouthWall}");
+
+        // Calculate entrance boundaries and determine how to split the wall
+        float entranceWidth = doorWidth * 1.5f;
+
+        // Create entrance with proper rotation
+        GameObject entrance = CreateEntrancePrefab();
+        entrance.transform.position = entrancePosition;
+
+        // Set rotation based on wall orientation
+        if (isNorthSouthWall)
+        {
+            // For North/South walls (extending in X), entrance should face along Z-axis
+            entrance.transform.rotation = Quaternion.identity; // Facing forward (positive Z)
+        }
+        else
+        {
+            // For East/West walls (extending in Z), entrance should face along X-axis
+            entrance.transform.rotation = Quaternion.Euler(0, 90, 0); // Facing right (positive X)
+        }
+
+        entrance.SetActive(true);
+        entrance.name = "BuildingEntrance";
+        entrance.tag = "Entrance";
+
+        Debug.Log($"Placed entrance at {entrance.transform.position} with rotation {entrance.transform.rotation.eulerAngles}");
+
+        // Split the wall properly based on its orientation
+        SplitWallForEntrance(wall, entrancePosition, entranceWidth, isNorthSouthWall);
+
+        Debug.Log($"Successfully placed entrance and split wall");
+    }
+
+    private void SplitWallForEntrance(GameObject originalWall, Vector3 entrancePosition, float entranceWidth, bool isNorthSouthWall)
+    {
+        Vector3 wallPos = originalWall.transform.position;
+        Vector3 wallScale = originalWall.transform.localScale;
+        Quaternion wallRotation = originalWall.transform.rotation;
+
+        // Get the original wall's material to maintain consistency
+        Material originalMaterial = originalWall.GetComponent<Renderer>()?.material;
+
+        Debug.Log($"Splitting wall: {originalWall.name} at position {wallPos} with scale {wallScale}");
+
+        if (isNorthSouthWall)
+        {
+            // Wall extends in X direction, split along X-axis
+            float wallLength = wallScale.x; // Corrected: X is the length for North/South walls
+            float wallLeft = wallPos.x - wallLength / 2f;
+            float wallRight = wallPos.x + wallLength / 2f;
+
+            float entranceLeft = entrancePosition.x - entranceWidth / 2f;
+            float entranceRight = entrancePosition.x + entranceWidth / 2f;
+
+            Debug.Log($"North/South wall split: wallLeft={wallLeft}, wallRight={wallRight}, entranceLeft={entranceLeft}, entranceRight={entranceRight}");
+
+            // Create left segment if there's enough space
+            if (entranceLeft - wallLeft > 0.5f)
+            {
+                float leftLength = entranceLeft - wallLeft;
+                Vector3 leftCenter = new Vector3(wallLeft + leftLength / 2f, wallPos.y, wallPos.z);
+
+                GameObject leftWall = Instantiate(wallPrefab, leftCenter, wallRotation);
+                leftWall.SetActive(true);
+                leftWall.name = $"{originalWall.name}_Left_Entrance";
+                leftWall.transform.localScale = new Vector3(leftLength, wallScale.y, wallScale.z);
+                leftWall.tag = "Wall";
+
+                // Apply original material if available
+                if (originalMaterial != null)
+                {
+                    leftWall.GetComponent<Renderer>().material = originalMaterial;
+                }
+
+                walls.Add(leftWall);
+
+                Debug.Log($"Created left wall segment: scale {leftWall.transform.localScale} at {leftWall.transform.position}");
+            }
+
+            // Create right segment if there's enough space
+            if (wallRight - entranceRight > 0.5f)
+            {
+                float rightLength = wallRight - entranceRight;
+                Vector3 rightCenter = new Vector3(entranceRight + rightLength / 2f, wallPos.y, wallPos.z);
+
+                GameObject rightWall = Instantiate(wallPrefab, rightCenter, wallRotation);
+                rightWall.SetActive(true);
+                rightWall.name = $"{originalWall.name}_Right_Entrance";
+                rightWall.transform.localScale = new Vector3(rightLength, wallScale.y, wallScale.z);
+                rightWall.tag = "Wall";
+
+                // Apply original material if available
+                if (originalMaterial != null)
+                {
+                    rightWall.GetComponent<Renderer>().material = originalMaterial;
+                }
+
+                walls.Add(rightWall);
+
+                Debug.Log($"Created right wall segment: scale {rightWall.transform.localScale} at {rightWall.transform.position}");
+            }
+        }
+        else
+        {
+            // Wall extends in Z direction, split along Z-axis
+            float wallLength = wallScale.z;
+            float wallFront = wallPos.z - wallLength / 2f;
+            float wallBack = wallPos.z + wallLength / 2f;
+
+            float entranceFront = entrancePosition.z - entranceWidth / 2f;
+            float entranceBack = entrancePosition.z + entranceWidth / 2f;
+
+            Debug.Log($"East/West wall split: wallFront={wallFront}, wallBack={wallBack}, entranceFront={entranceFront}, entranceBack={entranceBack}");
+
+            // Create front segment if there's enough space
+            if (entranceFront - wallFront > 0.5f)
+            {
+                float frontLength = entranceFront - wallFront;
+                Vector3 frontCenter = new Vector3(wallPos.x, wallPos.y, wallFront + frontLength / 2f);
+
+                GameObject frontWall = Instantiate(wallPrefab, frontCenter, wallRotation);
+                frontWall.SetActive(true);
+                frontWall.name = $"{originalWall.name}_Front_Entrance";
+                frontWall.transform.localScale = new Vector3(wallScale.x, wallScale.y, frontLength);
+                frontWall.tag = "Wall";
+
+                // Apply original material if available
+                if (originalMaterial != null)
+                {
+                    frontWall.GetComponent<Renderer>().material = originalMaterial;
+                }
+
+                walls.Add(frontWall);
+
+                Debug.Log($"Created front wall segment: scale {frontWall.transform.localScale} at {frontWall.transform.position}");
+            }
+
+            // Create back segment if there's enough space
+            if (wallBack - entranceBack > 0.5f)
+            {
+                float backLength = wallBack - entranceBack;
+                Vector3 backCenter = new Vector3(wallPos.x, wallPos.y, entranceBack + backLength / 2f);
+
+                GameObject backWall = Instantiate(wallPrefab, backCenter, wallRotation);
+                backWall.SetActive(true);
+                backWall.name = $"{originalWall.name}_Back_Entrance";
+                backWall.transform.localScale = new Vector3(wallScale.x, wallScale.y, backLength);
+                backWall.tag = "Wall";
+
+                // Apply original material if available
+                if (originalMaterial != null)
+                {
+                    backWall.GetComponent<Renderer>().material = originalMaterial;
+                }
+
+                walls.Add(backWall);
+
+                Debug.Log($"Created back wall segment: scale {backWall.transform.localScale} at {backWall.transform.position}");
+            }
+        }
+
+        // Remove original wall
+        walls.Remove(originalWall);
+        DestroyImmediate(originalWall);
+        Debug.Log("Removed original wall after splitting for entrance");
+    }
+    private GameObject CreateEntrancePrefab()
+    {
+        // Create a more elaborate entrance than a regular door
+        GameObject entrance = new GameObject("BuildingEntrance");
+
+        // Create entrance frame - wider and more elaborate
+        GameObject entranceFrame = new GameObject("EntranceFrame");
+        entranceFrame.transform.SetParent(entrance.transform);
+
+        float entranceWidth = doorWidth * 1.5f;
+
+        // Create frame components: left post, right post, top beam, and entrance mat
+        CreateEntrancePost(entranceFrame, "LeftPost", new Vector3(-entranceWidth / 2f, doorHeight / 2f, 0f), entranceWidth);
+        CreateEntrancePost(entranceFrame, "RightPost", new Vector3(entranceWidth / 2f, doorHeight / 2f, 0f), entranceWidth);
+        CreateEntranceBeam(entranceFrame, "TopBeam", new Vector3(0f, doorHeight - 0.1f, 0f), entranceWidth);
+        CreateEntranceMat(entranceFrame, "WelcomeMat", new Vector3(0f, 0.05f, 1f), entranceWidth);
+
+        entrance.tag = "Entrance";
+        DontDestroyOnLoad(entrance);
+
+        return entrance;
+    }
+
+    private void CreateEntrancePost(GameObject parent, string name, Vector3 position, float width)
+    {
+        GameObject post = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        post.name = name;
+        post.transform.SetParent(parent.transform);
+        post.transform.localPosition = position;
+        post.transform.localScale = new Vector3(0.15f, doorHeight, 0.3f); // Slightly thicker than door posts
+
+        Renderer renderer = post.GetComponent<Renderer>();
+        Material frameMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        frameMaterial.color = new Color(0.3f, 0.15f, 0.05f); // Darker brown for entrance
+        frameMaterial.SetFloat("_Metallic", 0.0f);
+        frameMaterial.SetFloat("_Smoothness", 0.4f);
+        renderer.material = frameMaterial;
+    }
+
+    private void CreateEntranceBeam(GameObject parent, string name, Vector3 position, float width)
+    {
+        GameObject beam = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        beam.name = name;
+        beam.transform.SetParent(parent.transform);
+        beam.transform.localPosition = position;
+        beam.transform.localScale = new Vector3(width + 0.3f, 0.3f, 0.3f); // Wider and thicker beam
+
+        Renderer renderer = beam.GetComponent<Renderer>();
+        Material frameMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        frameMaterial.color = new Color(0.3f, 0.15f, 0.05f); // Darker brown for entrance
+        frameMaterial.SetFloat("_Metallic", 0.0f);
+        frameMaterial.SetFloat("_Smoothness", 0.4f);
+        renderer.material = frameMaterial;
+    }
+
+    private void CreateEntranceMat(GameObject parent, string name, Vector3 position, float width)
+    {
+        GameObject mat = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        mat.name = name;
+        mat.transform.SetParent(parent.transform);
+        mat.transform.localPosition = position;
+        mat.transform.localScale = new Vector3(width, 0.1f, 1.5f); // Welcome mat dimensions
+
+        Renderer renderer = mat.GetComponent<Renderer>();
+        Material matMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        matMaterial.color = new Color(0.8f, 0.2f, 0.2f); // Red welcome mat
+        matMaterial.SetFloat("_Metallic", 0.0f);
+        matMaterial.SetFloat("_Smoothness", 0.1f); // Rough mat texture
+        renderer.material = matMaterial;
+    }
+
+    #endregion
+
+    #region Helper Methods
+
+    private void CreatePreviewLine()
+    {
+        GameObject previewObj = new GameObject("WallPreview");
+        previewLine = previewObj.AddComponent<LineRenderer>();
+
+        // Use URP Unlit shader for line renderer (better for simple colored lines)
+        previewLine.material = new Material(Shader.Find("Universal Render Pipeline/Unlit"));
+        previewLine.material.color = Color.yellow;
+        previewLine.startColor = Color.yellow;
+        previewLine.endColor = Color.yellow;
+        previewLine.startWidth = 0.1f;
+        previewLine.endWidth = 0.1f;
+        previewLine.positionCount = 2;
+        previewLine.enabled = false;
+    }
+
+    private void CreateDoorPreview()
+    {
+        // Create a simple preview object
+        doorPreview = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        doorPreview.name = "DoorPreview";
+
+        // Make it transparent green
+        Renderer renderer = doorPreview.GetComponent<Renderer>();
+        Material previewMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+
+        // Set up bright green transparent color
+        previewMaterial.color = new Color(0f, 1f, 0f, 0.6f); // Bright transparent green
+
+        // Set up transparency properly for URP
+        previewMaterial.SetFloat("_Surface", 1); // Set to Transparent
+        previewMaterial.SetFloat("_Blend", 0); // Alpha blend
+        previewMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+        previewMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+        previewMaterial.SetInt("_ZWrite", 0);
+        previewMaterial.renderQueue = 3000;
+
+        // Make it non-metallic and smooth for better visibility
+        previewMaterial.SetFloat("_Metallic", 0.0f);
+        previewMaterial.SetFloat("_Smoothness", 0.9f);
+
+        renderer.material = previewMaterial;
+
+        // Scale to door size - match the actual door dimensions
+        doorPreview.transform.localScale = new Vector3(0.2f, doorHeight, doorWidth);
+        doorPreview.SetActive(false);
+
+        // Remove collider to prevent interference
+        Collider collider = doorPreview.GetComponent<Collider>();
+        if (collider != null) Destroy(collider);
+    }
+
+    private void CreateSnapIndicator()
+    {
+        snapIndicator = GameObject.CreatePrimitive(PrimitiveType.Sphere);
+        snapIndicator.name = "SnapIndicator";
+
+        // Make it a bright, pulsing indicator
+        Renderer renderer = snapIndicator.GetComponent<Renderer>();
+        Material indicatorMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
+        indicatorMaterial.color = Color.cyan;
+        indicatorMaterial.SetFloat("_Metallic", 0.0f);
+        indicatorMaterial.SetFloat("_Smoothness", 0.9f);
+
+        // Make it emissive so it glows
+        indicatorMaterial.EnableKeyword("_EMISSION");
+        indicatorMaterial.SetColor("_EmissionColor", Color.cyan * 2f);
+
+        renderer.material = indicatorMaterial;
+
+        // Scale it to be visible but not too large
+        snapIndicator.transform.localScale = Vector3.one * 0.3f;
+        snapIndicator.SetActive(false);
+
+        // Remove collider to prevent interference
+        Collider collider = snapIndicator.GetComponent<Collider>();
+        if (collider != null) Destroy(collider);
+    }
+
+    private void HideAllPreviews()
+    {
+        if (previewLine != null)
+        {
+            previewLine.enabled = false;
+        }
+
+        HideDoorPreview();
+        HideSnapIndicator();
+    }
+
+    private Vector3 GetMouseWorldPosition()
+    {
+        Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
+
+        // Cast ray onto ground plane (Y = 0)
+        if (Physics.Raycast(ray, out RaycastHit hit))
+        {
+            return hit.point;
+        }
+
+        // Fallback: project onto Y = 0 plane
+        float distance = -ray.origin.y / ray.direction.y;
+        return ray.origin + ray.direction * distance;
+    }
+
+    private GameObject FindWallUnderMouse(Vector3 mousePos)
+    {
+        Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
+
+        Debug.Log($"Raycasting for wall detection at mouse position: {Input.mousePosition}");
+        Debug.Log($"Ray origin: {ray.origin}, Ray direction: {ray.direction}");
+        Debug.Log($"Camera: {playerCamera?.name ?? "NULL"}, Camera position: {playerCamera?.transform.position ?? Vector3.zero}");
+        Debug.Log($"Total walls in list: {walls.Count}");
+
+        // Check if we have any walls with colliders
+        int wallsWithColliders = 0;
+        foreach (GameObject wall in walls)
+        {
+            if (wall != null)
+            {
+                Collider[] colliders = wall.GetComponentsInChildren<Collider>();
+                if (colliders.Length > 0)
+                {
+                    wallsWithColliders++;
+                    Debug.Log($"Wall {wall.name} has {colliders.Length} colliders");
+                }
+            }
+        }
+        Debug.Log($"Walls with colliders: {wallsWithColliders}");
+
+        // Try raycasting with all layers first
+        if (Physics.Raycast(ray, out RaycastHit hit, 1000f))
+        {
+            GameObject hitObj = hit.collider.gameObject;
+            Debug.Log($"Raycast hit object: {hitObj.name} on layer {hitObj.layer}");
+            Debug.Log($"Hit point: {hit.point}, Hit distance: {hit.distance}");
+
+            // Check if it's one of our walls (could be parent or child)
+            GameObject wallToCheck = hitObj;
+
+            // If we hit a child mesh, get the parent
+            if (hitObj.name == "WallMesh" && hitObj.transform.parent != null)
+            {
+                wallToCheck = hitObj.transform.parent.gameObject;
+                Debug.Log($"Hit child mesh, checking parent: {wallToCheck.name}");
+            }
+
+            if (walls.Contains(wallToCheck))
+            {
+                Debug.Log($"Hit object is a valid wall: {wallToCheck.name}");
+                return wallToCheck;
+            }
+            else
+            {
+                Debug.Log($"Hit object is not a wall we created: {wallToCheck.name}");
+                // Also check if the hit object has a Wall tag as fallback
+                if (hitObj.CompareTag("Wall") || (hitObj.transform.parent != null && hitObj.transform.parent.CompareTag("Wall")))
+                {
+                    GameObject taggedWall = hitObj.CompareTag("Wall") ? hitObj : hitObj.transform.parent.gameObject;
+                    Debug.Log($"Found wall by tag: {taggedWall.name}");
+                    return taggedWall;
+                }
+            }
+        }
+        else
+        {
+            Debug.Log("Raycast didn't hit anything - checking for potential issues:");
+            Debug.Log($"PlayerCamera null? {playerCamera == null}");
+            Debug.Log($"Physics.DefaultRaycastLayers: {Physics.DefaultRaycastLayers}");
+
+            // Try a wider raycast with all layers
+            RaycastHit[] hits = Physics.RaycastAll(ray, 1000f);
+            Debug.Log($"RaycastAll found {hits.Length} hits");
+            for (int i = 0; i < hits.Length; i++)
+            {
+                Debug.Log($"Hit {i}: {hits[i].collider.gameObject.name} on layer {hits[i].collider.gameObject.layer}");
+            }
+        }
+
+        return null;
+    }
+
+    private GameObject FindWallUnderMouseAlternative(Vector3 worldMousePos)
+    {
+        // Alternative approach: find the closest wall to the mouse world position
+        GameObject closestWall = null;
+        float closestDistance = float.MaxValue;
+        float maxDistance = 2f; // Maximum distance to consider a wall "under" the mouse
+
+        Debug.Log($"Alternative wall detection at world pos: {worldMousePos}");
+
+        foreach (GameObject wall in walls)
+        {
+            if (wall == null) continue;
+
+            // Calculate distance from mouse world position to wall center
+            float distance = Vector3.Distance(worldMousePos, wall.transform.position);
+
+            // Also check distance to wall bounds
+            Bounds wallBounds = GetWallBounds(wall);
+            float boundDistance = wallBounds.SqrDistance(worldMousePos);
+
+            Debug.Log($"Wall {wall.name}: center distance = {distance}, bound distance = {Mathf.Sqrt(boundDistance)}");
+
+            if (boundDistance < maxDistance * maxDistance && distance < closestDistance)
+            {
+                closestDistance = distance;
+                closestWall = wall;
+            }
+        }
+
+        if (closestWall != null)
+        {
+            Debug.Log($"Alternative method found wall: {closestWall.name} at distance {closestDistance}");
+        }
+        else
+        {
+            Debug.Log("Alternative method found no walls nearby");
+        }
+
+        return closestWall;
+    }
+
+    private Bounds GetWallBounds(GameObject wall)
+    {
+        Renderer renderer = wall.GetComponentInChildren<Renderer>();
+        if (renderer != null)
+        {
+            return renderer.bounds;
+        }
+
+        // Fallback: calculate bounds from transform
+        Vector3 scale = wall.transform.localScale;
+        return new Bounds(wall.transform.position, scale);
+    }
+
+    private GameObject FindNearestWall(Vector3 mousePos)
+    {
+        GameObject nearestWall = null;
+        float nearestDistance = float.MaxValue;
+
+        foreach (GameObject wall in walls)
+        {
+            if (wall == null) continue;
+
+            // Calculate distance from mouse position to wall
+            float distance = Vector3.Distance(mousePos, wall.transform.position);
+            if (distance < nearestDistance && distance < 5f) // Within 5 units
+            {
+                nearestDistance = distance;
+                nearestWall = wall;
+            }
+        }
+
+        if (nearestWall != null)
+        {
+            Debug.Log($"Found nearest wall: {nearestWall.name} at distance {nearestDistance}");
+        }
+
+        return nearestWall;
+    }
+
+    private Vector3[] GetWallEndpoints(GameObject wall)
+    {
+        // Calculate endpoints from wall transform
+        Vector3 center = wall.transform.position;
+        // With our new rotation, the wall extends along the forward (Z) axis
+        Vector3 wallDirection = wall.transform.forward;
+        float length = wall.transform.localScale.z; // Z is now the length
+
+        Vector3 start = center - wallDirection * (length / 2f);
+        Vector3 end = center + wallDirection * (length / 2f);
+
+        // Ensure Y = 0 for ground-level snapping
+        start.y = 0f;
+        end.y = 0f;
+
+        return new Vector3[] { start, end };
+    }
+
+    private Vector3 CalculateDoorPositionOnWall(GameObject wall, Vector3 mousePos)
+    {
+        // Project mouse position onto the wall
+        Vector3 wallCenter = wall.transform.position;
+        Vector3 wallScale = wall.transform.localScale;
+
+        // Determine wall orientation based on scale (not rotation)
+        bool isNorthSouthWall = wallScale.x > wallScale.z;
+
+        Vector3 wallDirection;
+        float wallLength;
+
+        if (isNorthSouthWall)
+        {
+            // Wall extends in X direction (North/South wall)
+            wallDirection = Vector3.right;
+            wallLength = wallScale.x;
+        }
+        else
+        {
+            // Wall extends in Z direction (East/West wall)
+            wallDirection = Vector3.forward;
+            wallLength = wallScale.z;
+        }
+
+        // Project mouse onto wall line
+        Vector3 toMouse = mousePos - wallCenter;
+        float projection = Vector3.Dot(toMouse, wallDirection);
+
+        // Clamp to wall bounds
+        projection = Mathf.Clamp(projection, -wallLength / 2f + doorWidth / 2f, wallLength / 2f - doorWidth / 2f);
+
+        Vector3 doorPos = wallCenter + wallDirection * projection;
+        doorPos.y = 0f; // Set door at ground level
+
+        Debug.Log($"Door position calculation: wallCenter={wallCenter}, wallDirection={wallDirection}, projection={projection}, doorPos={doorPos}");
+
+        return doorPos;
+    }
+
+    #endregion
+}

+ 1480 - 0
Assets/Scripts/Building/RoomBuilder.cs

@@ -0,0 +1,1480 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Linq;
+
+public enum BuildingMode
+{
+    PlacingWalls,
+    PlacingDoor,
+    AddingDoorToExistingWall
+}
+
+public class RoomBuilder : MonoBehaviour
+{
+    [Header("Building Settings")]
+    [SerializeField] private float snapTolerance = 1f;
+    [SerializeField] private Material wallMaterial;
+    [SerializeField] private Material previewMaterial;
+    [SerializeField] private float wallHeight = 3f;
+    [SerializeField] private float wallThickness = 0.2f;
+
+    [Header("Door Settings")]
+    [SerializeField] private float doorWidth = 1.5f;
+    [SerializeField] private Material doorFrameMaterial;
+
+    [Header("Visual Feedback")]
+    [SerializeField] private GameObject wallPointPrefab;
+    [SerializeField] private LineRenderer previewLine;
+
+    private List<Vector3> currentRoomPoints = new List<Vector3>();
+    private List<GameObject> wallSegments = new List<GameObject>();
+    private List<GameObject> wallPointMarkers = new List<GameObject>();
+
+    private bool isBuildingRoom = false;
+    private bool isPlacingDoor = false;
+    private BuildingMode currentBuildingMode = BuildingMode.PlacingWalls;
+    private Camera playerCamera;
+    private float lastRoomCompletionTime = 0f;
+    private const float ROOM_DETECTION_COOLDOWN = 1.0f; // 1 second cooldown
+
+    private GameObject previewWall;
+    private Room currentRoom;
+
+    // Events
+    public System.Action<Room> OnRoomCompleted;
+    public System.Action<string> OnBuildingError;
+
+    private void Start()
+    {
+        playerCamera = Camera.main;
+        if (previewLine == null)
+        {
+            CreatePreviewLine();
+        }
+    }
+
+    private void Update()
+    {
+        if (GameManager.Instance != null && !GameManager.Instance.IsBuilding())
+            return;
+
+        HandleInput();
+        UpdatePreview();
+    }
+
+    private void OnGUI()
+    {
+        // Show building mode information
+        if (GameManager.Instance != null && GameManager.Instance.IsBuilding())
+        {
+            GUIStyle style = new GUIStyle();
+            style.fontSize = 16;
+            style.normal.textColor = Color.white;
+
+            string modeText = "";
+            string instructionText = "";
+
+            if (isBuildingRoom)
+            {
+                modeText = "Building Room";
+                instructionText = "Left-click to place wall points | Right-click to complete room";
+            }
+            else if (isPlacingDoor)
+            {
+                modeText = "Placing Door";
+                instructionText = "Click on a wall to place door";
+            }
+            else if (currentBuildingMode == BuildingMode.AddingDoorToExistingWall)
+            {
+                modeText = "Adding Door to Wall";
+                instructionText = "Click on existing wall to add door | ESC to cancel | Tab to toggle modes";
+            }
+            else
+            {
+                modeText = "Ready to Build";
+                instructionText = "Left-click to start room | Tab to add door to existing wall | Auto-detects enclosed rooms";
+            }
+
+            GUI.Label(new Rect(10, 10, 400, 30), $"Mode: {modeText}", style);
+            GUI.Label(new Rect(10, 35, 400, 30), instructionText, style);
+        }
+    }
+
+    #region Input Handling
+    private void HandleInput()
+    {
+        // Only handle building inputs when we're supposed to be building
+        if (GameManager.Instance == null || !GameManager.Instance.IsBuilding())
+            return;
+
+        // Building mode switching - use Tab instead of D to avoid camera conflict
+        if (Input.GetKeyDown(KeyCode.Tab) && !isBuildingRoom && !isPlacingDoor)
+        {
+            currentBuildingMode = BuildingMode.AddingDoorToExistingWall;
+            Debug.Log("Switched to door placement mode - Click on existing walls to add doors");
+        }
+        else if (Input.GetKeyDown(KeyCode.Tab) && currentBuildingMode == BuildingMode.AddingDoorToExistingWall)
+        {
+            currentBuildingMode = BuildingMode.PlacingWalls;
+            Debug.Log("Switched to wall building mode");
+        }
+
+        if (Input.GetMouseButtonDown(0)) // Left click
+        {
+            Debug.Log($"Mouse click detected - isPlacingDoor={isPlacingDoor}, currentBuildingMode={currentBuildingMode}");
+
+            if (currentBuildingMode == BuildingMode.AddingDoorToExistingWall)
+            {
+                TryAddDoorToExistingWall();
+            }
+            else if (isPlacingDoor)
+            {
+                TryPlaceDoor();
+            }
+            else
+            {
+                TryPlaceWallPoint();
+            }
+        }
+        else if (Input.GetMouseButtonDown(1)) // Right click
+        {
+            if (isBuildingRoom)
+            {
+                // Instead of forcing completion, try to auto-complete smartly
+                // Only allow manual completion if we have a valid room shape
+                if (currentRoomPoints.Count >= 3)
+                {
+                    TryCompleteRoom();
+                }
+                else
+                {
+                    OnBuildingError?.Invoke("Need at least 3 points to complete room manually");
+                }
+            }
+        }
+        else if (Input.GetKeyDown(KeyCode.Escape))
+        {
+            if (currentBuildingMode == BuildingMode.AddingDoorToExistingWall)
+            {
+                currentBuildingMode = BuildingMode.PlacingWalls;
+                Debug.Log("Cancelled door placement mode");
+            }
+            else
+            {
+                CancelBuilding();
+            }
+        }
+    }
+
+    private Vector3 GetMouseWorldPosition()
+    {
+        Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
+        if (Physics.Raycast(ray, out RaycastHit hit))
+        {
+            return hit.point;
+        }
+        else
+        {
+            // Fallback: project to ground plane (y = 0)
+            Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
+            if (groundPlane.Raycast(ray, out float distance))
+            {
+                return ray.GetPoint(distance);
+            }
+        }
+        return Vector3.zero;
+    }
+    #endregion
+
+    #region Wall Building
+    private void TryPlaceWallPoint()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+
+        if (!isBuildingRoom)
+        {
+            // Check if we're starting near an existing wall
+            Vector3 snapPoint = FindWallSnapPoint(mousePos);
+            if (snapPoint != Vector3.zero)
+            {
+                Debug.Log($"Starting room from existing wall at: {snapPoint}");
+                StartRoom(snapPoint);
+            }
+            else
+            {
+                StartRoom(mousePos);
+            }
+        }
+        else
+        {
+            // Check if we're close to the first point (completing the room)
+            if (Vector3.Distance(mousePos, currentRoomPoints[0]) < snapTolerance)
+            {
+                AutoCompleteRoom();
+                return;
+            }
+
+            // Check if we're clicking on an existing wall to complete the room
+            Vector3 wallSnapPoint = FindWallSnapPoint(mousePos);
+            if (wallSnapPoint != Vector3.zero)
+            {
+                Debug.Log($"Completing room by connecting to existing wall at: {wallSnapPoint}");
+                AddWallPoint(wallSnapPoint);
+
+                // If we started from an existing wall and now connect to another existing wall,
+                // we can complete the room with just 2 points (wall-to-wall connection)
+                if (currentRoomPoints.Count >= 2)
+                {
+                    Debug.Log("Wall-to-wall connection detected, triggering comprehensive room detection");
+                    // Instead of AutoCompleteRoom, use the comprehensive room detection
+                    CheckForNewEnclosedRoomsGlobal();
+                    return;
+                }
+            }
+
+            AddWallPoint(mousePos);
+
+            // Auto-check if room is now enclosed (only for non-wall-snap cases)
+            if (IsRoomEnclosed(currentRoomPoints))
+            {
+                AutoCompleteRoom();
+            }
+
+            // ADDITIONAL: Force completion check if we have enough points and walls
+            if (currentRoomPoints.Count >= 3)
+            {
+                Debug.Log("Checking for forced room completion with sufficient points");
+                // Get all walls and see if we have enough to complete a room
+                List<GameObject> allWalls = new List<GameObject>();
+                GameObject[] allGameObjects = FindObjectsByType<GameObject>(FindObjectsSortMode.None);
+                foreach (GameObject obj in allGameObjects)
+                {
+                    if (obj != null && obj.GetComponent<Renderer>() != null &&
+                        (obj.name.Contains("Wall") || obj.name.Contains("wall")))
+                    {
+                        allWalls.Add(obj);
+                    }
+                }
+
+                if (allWalls.Count >= 4) // Enough walls for a room
+                {
+                    Debug.Log("Sufficient walls detected, forcing room completion");
+                    CheckForNewEnclosedRoomsGlobal();
+                }
+            }
+        }
+    }
+
+    private void AutoCompleteRoom()
+    {
+        // Check if room already has a door
+        if (DoesRoomHaveDoor())
+        {
+            Debug.Log("Room already has a door, completing without door placement.");
+            CompleteRoomWithoutDoor();
+        }
+        else
+        {
+            Debug.Log("Room completed, needs door placement.");
+            CompleteRoom();
+        }
+    }
+
+    private Vector3 FindWallSnapPoint(Vector3 clickPosition)
+    {
+        float snapDistance = 2.0f; // Distance to snap to existing walls
+        GameObject closestWall = null;
+        float closestDistance = float.MaxValue;
+
+        // Check all existing wall segments
+        foreach (GameObject wall in wallSegments)
+        {
+            if (wall == null || wall.name == "Door Opening" || wall.name == "Door Frame Post") continue;
+
+            Renderer wallRenderer = wall.GetComponent<Renderer>();
+            if (wallRenderer == null) continue;
+
+            // Check distance to wall bounds
+            Bounds bounds = wallRenderer.bounds;
+            float distance = bounds.SqrDistance(clickPosition);
+
+            if (distance < closestDistance && distance < snapDistance * snapDistance)
+            {
+                closestWall = wall;
+                closestDistance = distance;
+            }
+        }
+
+        if (closestWall != null)
+        {
+            // Find the closest point on the wall surface to snap to
+            Transform wallTransform = closestWall.transform;
+            Vector3 wallScale = wallTransform.localScale;
+            Vector3 wallCenter = wallTransform.position;
+
+            // Calculate wall endpoints based on wall's forward direction (length direction)
+            Vector3 wallDirection = wallTransform.forward;
+            float wallLength = wallScale.z; // Length is in Z direction after LookRotation
+
+            Vector3 wallStart = wallCenter - wallDirection * wallLength / 2f;
+            Vector3 wallEnd = wallCenter + wallDirection * wallLength / 2f;
+
+            // Project click position onto the wall line to find closest point
+            Vector3 wallVector = wallEnd - wallStart;
+            Vector3 clickVector = clickPosition - wallStart;
+            float t = Mathf.Clamp01(Vector3.Dot(clickVector, wallVector) / wallVector.sqrMagnitude);
+            Vector3 snapPoint = wallStart + t * wallVector;
+
+            // Ensure snap point is at ground level
+            snapPoint.y = 0f;
+
+            Debug.Log($"Found wall snap point: {snapPoint} on wall from {wallStart} to {wallEnd}");
+            return snapPoint;
+        }
+
+        return Vector3.zero; // No wall found to snap to
+    }
+
+    private bool DoesRoomHaveDoor()
+    {
+        // Check if any wall segments in current room area have door openings or door frames
+        foreach (GameObject segment in wallSegments)
+        {
+            if (segment != null && (segment.name == "Door Opening" || segment.name == "Door Frame Post"))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private bool IsRoomEnclosed(List<Vector3> points)
+    {
+        // Check if the current points form a closed shape
+        if (points.Count < 3) return false;
+
+        // Check if we're close to starting point or clicked on existing wall
+        Vector3 lastPoint = points[points.Count - 1];
+        Vector3 firstPoint = points[0];
+
+        return Vector3.Distance(lastPoint, firstPoint) < snapTolerance * 2f;
+    }
+
+    private void CompleteRoomWithoutDoor()
+    {
+        // Complete the room without entering door placement mode
+        if (currentRoomPoints.Count > 2)
+        {
+            Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+            Vector3 firstPoint = currentRoomPoints[0];
+
+            if (Vector3.Distance(lastPoint, firstPoint) > 0.1f)
+            {
+                CreateWallSegment(lastPoint, firstPoint);
+            }
+        }
+
+        Debug.Log("Room completed without additional door (existing door found).");
+
+        // Clean up any very short or overlapping wall segments
+        CleanupWallSegments();
+
+        // Finalize the room immediately
+        FinishRoom();
+
+        // Reset building state
+        ResetBuildingState();
+    }
+
+    private void StartRoom(Vector3 startPoint)
+    {
+        Debug.Log("Starting room construction");
+        isBuildingRoom = true;
+        currentRoomPoints.Clear();
+        currentRoomPoints.Add(startPoint);
+
+        // Create visual marker for start point
+        if (wallPointPrefab != null)
+        {
+            GameObject marker = Instantiate(wallPointPrefab, startPoint, Quaternion.identity);
+            marker.GetComponent<Renderer>().material.color = Color.green; // Start point is green
+            wallPointMarkers.Add(marker);
+        }
+    }
+
+    private void AddWallPoint(Vector3 newPoint)
+    {
+        currentRoomPoints.Add(newPoint);
+
+        // Create wall segment from previous point to new point
+        CreateWallSegment(currentRoomPoints[currentRoomPoints.Count - 2], newPoint);
+
+        // Create visual marker
+        if (wallPointPrefab != null)
+        {
+            GameObject marker = Instantiate(wallPointPrefab, newPoint, Quaternion.identity);
+            wallPointMarkers.Add(marker);
+        }
+
+        Debug.Log($"Added wall point {currentRoomPoints.Count}: {newPoint}");
+
+        // Check if this wall placement has created any new enclosed rooms
+        CheckForNewEnclosedRooms();
+
+        // Additional comprehensive check if we have enough points
+        if (currentRoomPoints.Count >= 3)
+        {
+            Debug.Log("Also triggering global room detection as backup");
+            CheckForNewEnclosedRoomsGlobal();
+        }
+
+        // SIMPLE FALLBACK: If we have 3+ points and are near existing walls, try to complete
+        if (currentRoomPoints.Count >= 3)
+        {
+            Vector3 firstPoint = currentRoomPoints[0];
+            Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+
+            // Simple distance check - if start and end are close to existing walls, complete the room
+            if (IsNearExistingWall(firstPoint) && IsNearExistingWall(lastPoint))
+            {
+                Debug.Log("Simple room completion: Start and end points near existing walls");
+                ForceSimpleRoomCompletion();
+            }
+        }
+    }
+
+    private bool IsNearExistingWall(Vector3 point)
+    {
+        GameObject[] allObjects = FindObjectsByType<GameObject>(FindObjectsSortMode.None);
+        foreach (GameObject obj in allObjects)
+        {
+            if (obj != null && obj.name.Contains("Wall") && obj.GetComponent<Renderer>() != null)
+            {
+                if (Vector3.Distance(point, obj.transform.position) < 3.0f)
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private void ForceSimpleRoomCompletion()
+    {
+        Debug.Log("Forcing simple room completion");
+
+        // Create a simple room from current points
+        if (currentRoomPoints.Count >= 3)
+        {
+            List<Vector3> roomArea = new List<Vector3>(currentRoomPoints);
+
+            // Check if it has a door
+            bool hasDoor = DoesAreaHaveDoor(roomArea);
+
+            if (!hasDoor)
+            {
+                Debug.Log("Simple room has no door - forcing door placement");
+                ForceRoomDoorPlacement(roomArea);
+            }
+            else
+            {
+                Debug.Log("Simple room has door - completing");
+                CompleteDetectedRoom(roomArea);
+            }
+        }
+    }
+
+    private void TryCompleteRoom()
+    {
+        if (currentRoomPoints.Count < 3)
+        {
+            OnBuildingError?.Invoke("Room needs at least 3 points");
+            return;
+        }
+
+        Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+        Vector3 firstPoint = currentRoomPoints[0];
+
+        // Check if there's a clear line to the first point
+        if (IsValidClosingWall(lastPoint, firstPoint))
+        {
+            CompleteRoom();
+        }
+        else
+        {
+            OnBuildingError?.Invoke("Cannot complete room: No clear line to start point");
+        }
+    }
+
+    private void CompleteRoom()
+    {
+        // Add final wall segment to close the room
+        if (currentRoomPoints.Count > 2)
+        {
+            Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+            Vector3 firstPoint = currentRoomPoints[0];
+
+            if (Vector3.Distance(lastPoint, firstPoint) > 0.1f)
+            {
+                CreateWallSegment(lastPoint, firstPoint);
+            }
+        }
+
+        Debug.Log("Room walls completed. Now place a door.");
+
+        // Clean up any very short or overlapping wall segments
+        CleanupWallSegments();
+
+        // Start door placement phase
+        isBuildingRoom = false;
+        isPlacingDoor = true;
+
+        // Change marker colors to indicate door placement phase
+        foreach (var marker in wallPointMarkers)
+        {
+            if (marker != null)
+                marker.GetComponent<Renderer>().material.color = Color.blue;
+        }
+    }
+
+    private void CleanupWallSegments()
+    {
+        // Remove any walls that are too short or overlapping
+        for (int i = wallSegments.Count - 1; i >= 0; i--)
+        {
+            if (wallSegments[i] == null) continue;
+
+            Transform wallTransform = wallSegments[i].transform;
+            Vector3 wallScale = wallTransform.localScale;
+
+            // Remove walls that are too short (likely overlapping or error segments)
+            if (wallScale.z < 0.2f) // Z is the length dimension
+            {
+                Debug.Log($"Removing short wall segment: {wallScale.z}");
+                DestroyImmediate(wallSegments[i]);
+                wallSegments.RemoveAt(i);
+            }
+        }
+    }
+    private bool IsValidClosingWall(Vector3 from, Vector3 to)
+    {
+        // For now, just check distance (can be improved with obstacle checking)
+        return Vector3.Distance(from, to) < 20f; // Max wall length
+    }
+
+    private void CreateWallSegment(Vector3 from, Vector3 to)
+    {
+        // Ensure points are at ground level (y = 0) for consistency
+        from.y = 0f;
+        to.y = 0f;
+
+        Vector3 center = (from + to) / 2f;
+        Vector3 direction = to - from;
+        float length = direction.magnitude;
+
+        // Skip very short wall segments to prevent overlapping
+        if (length < 0.1f)
+        {
+            Debug.LogWarning($"Skipping very short wall segment: {length}");
+            return;
+        }
+
+        GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        wall.name = "Wall Segment";
+
+        // Anchor wall to floor - position at ground level with wall extending upward
+        wall.transform.position = new Vector3(center.x, wallHeight / 2f, center.z);
+        wall.transform.rotation = Quaternion.LookRotation(direction);
+        wall.transform.localScale = new Vector3(wallThickness, wallHeight, length);
+
+        if (wallMaterial != null)
+        {
+            wall.GetComponent<Renderer>().material = wallMaterial;
+        }
+
+        // Add collider for pathfinding obstacles but make non-clickable
+        Collider wallCollider = wall.GetComponent<Collider>();
+        if (wallCollider != null)
+        {
+            wallCollider.isTrigger = false;
+            // Walls should block navigation but not be clickable for UI
+            wall.layer = LayerMask.NameToLayer("Default"); // Ensure it's on a non-UI layer
+        }
+
+        wallSegments.Add(wall);
+
+        // After adding any wall, check if it might have completed an enclosed room
+        // (but only if we're not already in a specific building mode)
+        if (!isPlacingDoor && currentBuildingMode != BuildingMode.AddingDoorToExistingWall)
+        {
+            CheckForNewEnclosedRoomsGlobal();
+        }
+    }
+    #endregion
+
+    #region Door Placement
+    private void TryPlaceDoor()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+        Debug.Log($"Trying to place door at mouse position: {mousePos}");
+
+        // Find the closest wall segment
+        GameObject closestWall = FindClosestWallSegment(mousePos);
+        if (closestWall != null)
+        {
+            Debug.Log($"Found wall for door placement: {closestWall.name}");
+            PlaceDoor(closestWall, mousePos);
+            FinishRoom(); // This should reset the building state
+
+            // Extra safety: force reset building state immediately
+            Debug.Log("Building state reset.");
+            return; // Exit immediately after placing door
+        }
+        else
+        {
+            Debug.LogWarning("No suitable wall found for door placement");
+            OnBuildingError?.Invoke("Click closer to a wall to place the door (not too close to corners)");
+        }
+    }
+
+    private void TryAddDoorToExistingWall()
+    {
+        Vector3 mousePos = GetMouseWorldPosition();
+        Debug.Log($"Trying to add door to existing wall at: {mousePos}");
+
+        // Find the closest existing wall segment (not door-related)
+        GameObject targetWall = null;
+        float closestDistance = float.MaxValue;
+
+        foreach (GameObject wall in wallSegments)
+        {
+            if (wall == null || wall.name == "Door Opening" || wall.name == "Door Frame Post") continue;
+
+            Renderer wallRenderer = wall.GetComponent<Renderer>();
+            if (wallRenderer == null) continue;
+
+            Bounds bounds = wallRenderer.bounds;
+            float distance = bounds.SqrDistance(mousePos);
+
+            if (distance < closestDistance && distance < 16f) // Max click distance squared
+            {
+                targetWall = wall;
+                closestDistance = distance;
+            }
+        }
+
+        if (targetWall != null)
+        {
+            Debug.Log($"Adding door to existing wall: {targetWall.name}");
+            PlaceDoor(targetWall, mousePos);
+
+            // Switch back to normal building mode
+            currentBuildingMode = BuildingMode.PlacingWalls;
+            Debug.Log("Door added successfully, switched back to wall building mode");
+        }
+        else
+        {
+            OnBuildingError?.Invoke("Click closer to an existing wall to add a door");
+        }
+    }
+
+    private GameObject FindClosestWallSegment(Vector3 position)
+    {
+        GameObject closest = null;
+        float closestDistance = float.MaxValue;
+
+        foreach (GameObject wall in wallSegments)
+        {
+            if (wall == null) continue;
+
+            // Get the wall bounds
+            Renderer wallRenderer = wall.GetComponent<Renderer>();
+            if (wallRenderer == null) continue;
+
+            Bounds bounds = wallRenderer.bounds;
+            float distance = bounds.SqrDistance(position);
+
+            // Check if click is within reasonable distance and not too close to wall ends
+            if (distance < closestDistance && distance < 16f) // Max click distance squared (4^2)
+            {
+                // Additional check: make sure we're not too close to wall endpoints
+                Transform wallTransform = wall.transform;
+                Vector3 wallDirection = wallTransform.forward;
+                float wallLength = wallTransform.localScale.z;
+
+                Vector3 wallStart = wallTransform.position - wallDirection * wallLength / 2f;
+                Vector3 wallEnd = wallTransform.position + wallDirection * wallLength / 2f;
+
+                float distToStart = Vector3.Distance(position, wallStart);
+                float distToEnd = Vector3.Distance(position, wallEnd);
+
+                // Only allow door placement if not too close to wall ends
+                if (distToStart > doorWidth * 0.75f && distToEnd > doorWidth * 0.75f)
+                {
+                    closestDistance = distance;
+                    closest = wall;
+                }
+            }
+        }
+
+        return closest;
+    }
+
+    private void PlaceDoor(GameObject wallSegment, Vector3 clickPosition)
+    {
+        // Create door opening by modifying the wall
+        Transform wallTransform = wallSegment.transform;
+        Vector3 wallScale = wallTransform.localScale;
+        Vector3 wallCenter = wallTransform.position;
+
+        // Calculate wall endpoints correctly based on wall's forward direction (length direction)
+        Vector3 wallDirection = wallTransform.forward;
+        float wallLength = wallScale.z; // Length is in Z direction after LookRotation
+
+        Vector3 wallStart = wallCenter - wallDirection * wallLength / 2f;
+        Vector3 wallEnd = wallCenter + wallDirection * wallLength / 2f;
+
+        // Project click position onto the wall line to find closest point
+        Vector3 wallVector = wallEnd - wallStart;
+        Vector3 clickVector = clickPosition - wallStart;
+        float t = Mathf.Clamp01(Vector3.Dot(clickVector, wallVector) / wallVector.sqrMagnitude);
+        Vector3 doorPosition = wallStart + t * wallVector;
+
+        // Validate door position - ensure it's not too close to wall ends
+        float distFromStart = Vector3.Distance(doorPosition, wallStart);
+        float distFromEnd = Vector3.Distance(doorPosition, wallEnd);
+        float minDistance = doorWidth * 0.6f;
+
+        if (distFromStart < minDistance || distFromEnd < minDistance)
+        {
+            // Adjust door position to be away from wall ends
+            if (distFromStart < distFromEnd)
+            {
+                doorPosition = wallStart + wallDirection * minDistance;
+            }
+            else
+            {
+                doorPosition = wallEnd - wallDirection * minDistance;
+            }
+        }
+
+        Debug.Log($"Door placed at: {doorPosition} on wall from {wallStart} to {wallEnd}");
+
+        // Remove original wall and create two wall segments with a gap
+        wallSegments.Remove(wallSegment);
+        DestroyImmediate(wallSegment);
+
+        CreateWallWithDoor(wallStart, wallEnd, doorPosition);
+    }
+
+    private void CreateWallWithDoor(Vector3 wallStart, Vector3 wallEnd, Vector3 doorPosition)
+    {
+        Vector3 wallDirection = (wallEnd - wallStart).normalized;
+        float doorHalfWidth = doorWidth / 2f;
+
+        Vector3 door1End = doorPosition - wallDirection * doorHalfWidth;
+        Vector3 door2Start = doorPosition + wallDirection * doorHalfWidth;
+
+        // Create wall segment before door (if long enough)
+        float leftSegmentLength = Vector3.Distance(wallStart, door1End);
+        if (leftSegmentLength > 0.5f)
+        {
+            CreateWallSegment(wallStart, door1End);
+        }
+
+        // Create wall segment after door (if long enough)
+        float rightSegmentLength = Vector3.Distance(door2Start, wallEnd);
+        if (rightSegmentLength > 0.5f)
+        {
+            CreateWallSegment(door2Start, wallEnd);
+        }
+
+        // Create door frame markers (simplified)
+        CreateDoorFrame(doorPosition, wallDirection);
+    }
+
+    private void CreateDoorFrame(Vector3 position, Vector3 direction)
+    {
+        Debug.Log($"Creating door frame at position: {position}, direction: {direction}");
+
+        // Create simple door frame markers - two posts on sides of the opening
+        float frameHeight = wallHeight * 0.85f; // Door frame slightly lower than wall
+
+        // Fix rotation: Use the direction itself (not perpendicular) for door post positioning
+        // This positions posts along the wall direction, not perpendicular to it
+        Vector3 postDirection = direction.normalized;
+
+        // Position posts precisely at the door opening edges along the wall
+        Vector3 leftPost = position - postDirection * doorWidth / 2f;
+        Vector3 rightPost = position + postDirection * doorWidth / 2f;
+
+        // Ensure door posts are exactly at ground level like walls
+        leftPost.y = 0f;
+        rightPost.y = 0f;
+
+        Debug.Log($"Door posts positioned at: Left={leftPost}, Right={rightPost}, Height={frameHeight}");
+
+        CreateDoorPost(leftPost, frameHeight);
+        CreateDoorPost(rightPost, frameHeight);
+
+        // Create a subtle ground-level door opening indicator
+        GameObject doorOpening = new GameObject("Door Opening");
+        doorOpening.transform.position = new Vector3(position.x, 0.01f, position.z); // Just above ground
+
+        // Add a simple flat rectangle for the door opening - perpendicular to wall direction
+        GameObject indicator = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        indicator.transform.SetParent(doorOpening.transform);
+        indicator.transform.localPosition = Vector3.zero;
+        // Rotate indicator to be perpendicular to the wall (across the door opening)
+        Vector3 perpendicular = Vector3.Cross(direction, Vector3.up).normalized;
+        indicator.transform.localRotation = Quaternion.LookRotation(perpendicular);
+        indicator.transform.localScale = new Vector3(doorWidth, 0.02f, 0.1f); // Thin flat indicator
+
+        Renderer indicatorRenderer = indicator.GetComponent<Renderer>();
+        if (indicatorRenderer != null)
+        {
+            indicatorRenderer.material.color = new Color(0.2f, 0.8f, 0.2f, 0.7f); // Semi-transparent green
+        }
+
+        indicator.name = "Door Indicator";
+
+        // Make door indicator non-clickable by removing collider
+        Collider indicatorCollider = indicator.GetComponent<Collider>();
+        if (indicatorCollider != null)
+        {
+            DestroyImmediate(indicatorCollider);
+        }
+
+        wallSegments.Add(doorOpening);
+    }
+    private void CreateDoorPost(Vector3 position, float height)
+    {
+        GameObject post = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        post.name = "Door Frame Post";
+
+        // Position door posts to match wall anchoring (anchored to floor)
+        // Ensure Y position matches how walls are positioned at wallHeight/2
+        post.transform.position = new Vector3(position.x, height / 2f, position.z);
+        post.transform.localScale = new Vector3(0.15f, height, 0.15f); // Slightly thinner posts
+
+        if (doorFrameMaterial != null)
+        {
+            post.GetComponent<Renderer>().material = doorFrameMaterial;
+        }
+        else
+        {
+            post.GetComponent<Renderer>().material.color = new Color(0.4f, 0.2f, 0.05f); // Darker brown
+        }
+
+        // Make door posts non-clickable but solid
+        Collider postCollider = post.GetComponent<Collider>();
+        if (postCollider != null)
+        {
+            postCollider.isTrigger = false; // Keep solid for visual barrier
+            post.layer = LayerMask.NameToLayer("Default"); // Non-clickable layer
+        }
+
+        wallSegments.Add(post);
+    }
+    private void FinishRoom()
+    {
+        // Use the stored room data if we have it (from auto-detection), otherwise create new
+        if (currentRoom == null)
+        {
+            currentRoom = new Room
+            {
+                roomPoints = new List<Vector3>(currentRoomPoints),
+                wallObjects = new List<GameObject>(wallSegments),
+                isComplete = true,
+                roomType = RoomType.Generic
+            };
+        }
+        else
+        {
+            // Update the existing room with completion status
+            currentRoom.isComplete = true;
+            currentRoom.hasEntrance = true;
+        }
+
+        lastRoomCompletionTime = Time.time; // Set completion time for cooldown
+        Debug.Log($"Room completed with door placed");
+
+        // Clean up visual markers
+        foreach (GameObject marker in wallPointMarkers)
+        {
+            if (marker != null)
+                DestroyImmediate(marker);
+        }
+
+        // Notify completion
+        OnRoomCompleted?.Invoke(currentRoom);
+
+        // Reset building state
+        ResetBuildingState();
+    }
+    #endregion
+
+    #region Preview and Visual Feedback
+    private void UpdatePreview()
+    {
+        if (!isBuildingRoom || currentRoomPoints.Count == 0)
+        {
+            if (previewLine != null)
+                previewLine.enabled = false;
+            return;
+        }
+
+        Vector3 mousePos = GetMouseWorldPosition();
+
+        // Update preview line
+        if (previewLine != null)
+        {
+            previewLine.enabled = true;
+            previewLine.positionCount = 2;
+            previewLine.SetPosition(0, currentRoomPoints[currentRoomPoints.Count - 1]);
+            previewLine.SetPosition(1, mousePos);
+
+            // Change color based on snap distance to first point
+            if (currentRoomPoints.Count > 2 && Vector3.Distance(mousePos, currentRoomPoints[0]) < snapTolerance)
+            {
+                previewLine.material.color = Color.green; // Can close room
+            }
+            else
+            {
+                previewLine.material.color = Color.white; // Normal building
+            }
+        }
+    }
+
+    private void CreatePreviewLine()
+    {
+        GameObject previewObj = new GameObject("Preview Line");
+        previewLine = previewObj.AddComponent<LineRenderer>();
+        previewLine.material = new Material(Shader.Find("Sprites/Default"));
+        previewLine.startColor = Color.white;
+        previewLine.endColor = Color.white;
+        previewLine.startWidth = 0.1f;
+        previewLine.enabled = false;
+    }
+    #endregion
+
+    #region Utility Methods
+    private void CancelBuilding()
+    {
+        if (isBuildingRoom || isPlacingDoor)
+        {
+            Debug.Log("Cancelling room construction");
+
+            // Clean up
+            foreach (GameObject wall in wallSegments)
+            {
+                if (wall != null)
+                    DestroyImmediate(wall);
+            }
+
+            foreach (GameObject marker in wallPointMarkers)
+            {
+                if (marker != null)
+                    DestroyImmediate(marker);
+            }
+
+            // Reset state
+            isBuildingRoom = false;
+            isPlacingDoor = false;
+            currentRoomPoints.Clear();
+            wallSegments.Clear();
+            wallPointMarkers.Clear();
+
+            if (previewLine != null)
+                previewLine.enabled = false;
+        }
+    }
+
+    public bool IsBuilding()
+    {
+        return isBuildingRoom || isPlacingDoor;
+    }
+
+    private void ResetBuildingState()
+    {
+        Debug.Log($"ResetBuildingState() called - Before: isBuildingRoom={isBuildingRoom}, isPlacingDoor={isPlacingDoor}, currentBuildingMode={currentBuildingMode}");
+
+        // Reset all building-related state variables
+        isBuildingRoom = false;
+        isPlacingDoor = false;
+        currentBuildingMode = BuildingMode.PlacingWalls;
+
+        currentRoomPoints.Clear();
+        wallSegments.Clear();
+        wallPointMarkers.Clear();
+
+        if (previewLine != null)
+            previewLine.enabled = false;
+
+        Debug.Log($"ResetBuildingState() completed - After: isBuildingRoom={isBuildingRoom}, isPlacingDoor={isPlacingDoor}, currentBuildingMode={currentBuildingMode}");
+    }
+
+    private void CheckForNewEnclosedRooms()
+    {
+        Debug.Log("CheckForNewEnclosedRooms() called");
+
+        // Skip room detection if we just completed a room recently (prevents immediate re-detection)
+        if (Time.time - lastRoomCompletionTime < ROOM_DETECTION_COOLDOWN)
+        {
+            Debug.Log("Skipping room detection due to cooldown period");
+            return;
+        }
+
+        // Skip if we're already placing a door
+        if (isPlacingDoor)
+        {
+            Debug.Log("Skipping room detection - already placing door");
+            return;
+        }
+
+        // Get all wall segments from multiple sources to ensure we find ALL walls
+        List<GameObject> allWalls = new List<GameObject>();
+
+        // Method 1: Include walls from our wallSegments list
+        List<GameObject> roomBuilderWalls = wallSegments.Where(wall =>
+            wall != null &&
+            wall.name == "Wall Segment" &&
+            wall.GetComponent<Renderer>() != null
+        ).ToList();
+        allWalls.AddRange(roomBuilderWalls);
+
+        // Method 2: Find all GameObjects that look like walls in the scene
+        GameObject[] allGameObjects = FindObjectsByType<GameObject>(FindObjectsSortMode.None);
+        foreach (GameObject obj in allGameObjects)
+        {
+            if (obj != null && obj.GetComponent<Renderer>() != null &&
+                (obj.name.Contains("Wall") || obj.name.Contains("wall")) &&
+                !allWalls.Contains(obj))
+            {
+                allWalls.Add(obj);
+            }
+        }
+
+        Debug.Log($"Found {roomBuilderWalls.Count} walls from RoomBuilder, {allWalls.Count} total walls in scene");
+
+        // Debug: List all walls found
+        foreach (var wall in allWalls)
+        {
+            if (wall != null)
+            {
+                Debug.Log($"Wall found: {wall.name} at position {wall.transform.position}");
+            }
+        }
+
+        // Find enclosed areas using the wall network
+        List<List<Vector3>> enclosedAreas = FindEnclosedAreas(allWalls);
+
+        Debug.Log($"FindEnclosedAreas returned {enclosedAreas.Count} areas");
+
+        foreach (var area in enclosedAreas)
+        {
+            Debug.Log($"Checking area with {area.Count} points");
+
+            if (IsValidRoom(area))
+            {
+                // Check if this room has any doors
+                bool hasDoor = DoesAreaHaveDoor(area);
+
+                Debug.Log($"Valid room found with {area.Count} points. Has door: {hasDoor}");
+
+                if (!hasDoor)
+                {
+                    Debug.Log($"Found new enclosed room without door - forcing door placement");
+                    ForceRoomDoorPlacement(area);
+                    return; // Handle one room at a time
+                }
+                else
+                {
+                    Debug.Log($"Found enclosed room with existing door - completing room");
+                    CompleteDetectedRoom(area);
+                }
+            }
+            else
+            {
+                Debug.Log($"Area not valid as room (too small or insufficient points)");
+            }
+        }
+    }
+
+    private List<List<Vector3>> FindEnclosedAreas(List<GameObject> walls)
+    {
+        Debug.Log("FindEnclosedAreas called");
+
+        List<List<Vector3>> enclosedAreas = new List<List<Vector3>>();
+
+        // Instead of just checking current room points, do a comprehensive wall network analysis
+        if (walls.Count >= 3) // Need at least 3 walls to form a room
+        {
+            Debug.Log("Attempting comprehensive wall network analysis");
+            // Use the global polygon detection method
+            enclosedAreas = DetectClosedPolygonsFromWalls(walls);
+        }
+
+        // Also check if current room points form a potential room (original logic)
+        if (currentRoomPoints.Count >= 3)
+        {
+            Debug.Log("Checking current room points for completion");
+            Vector3 firstPoint = currentRoomPoints[0];
+            Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+
+            // Check if there are existing walls that could complete the loop
+            foreach (GameObject wall in walls)
+            {
+                if (CouldWallCompleteRoom(wall, firstPoint, lastPoint))
+                {
+                    Debug.Log("Found wall that could complete current room");
+                    List<Vector3> completedRoom = new List<Vector3>(currentRoomPoints);
+                    enclosedAreas.Add(completedRoom);
+                    break;
+                }
+            }
+        }
+
+        Debug.Log($"FindEnclosedAreas returning {enclosedAreas.Count} areas");
+        return enclosedAreas;
+    }
+
+    private bool CouldWallCompleteRoom(GameObject wall, Vector3 roomStart, Vector3 roomEnd)
+    {
+        if (wall == null) return false;
+
+        // Get wall endpoints
+        Transform wallTransform = wall.transform;
+        Vector3 wallScale = wallTransform.localScale;
+        Vector3 wallCenter = wallTransform.position;
+        Vector3 wallDirection = wallTransform.forward;
+        float wallLength = wallScale.z;
+
+        Vector3 wallStart = wallCenter - wallDirection * wallLength / 2f;
+        Vector3 wallEnd = wallCenter + wallDirection * wallLength / 2f;
+
+        // Check if either end of the room is close to either end of this wall
+        float tolerance = snapTolerance * 2f;
+
+        return (Vector3.Distance(roomStart, wallStart) < tolerance ||
+                Vector3.Distance(roomStart, wallEnd) < tolerance) &&
+               (Vector3.Distance(roomEnd, wallStart) < tolerance ||
+                Vector3.Distance(roomEnd, wallEnd) < tolerance);
+    }
+
+    private bool IsValidRoom(List<Vector3> area)
+    {
+        if (area.Count < 3) return false;
+
+        // Calculate area - rooms should have minimum area
+        float area2D = CalculatePolygonArea(area);
+        return area2D > 4f; // Minimum room area
+    }
+
+    private float CalculatePolygonArea(List<Vector3> points)
+    {
+        if (points.Count < 3) return 0f;
+
+        float area = 0f;
+        for (int i = 0; i < points.Count; i++)
+        {
+            Vector3 current = points[i];
+            Vector3 next = points[(i + 1) % points.Count];
+            area += (current.x * next.z - next.x * current.z);
+        }
+        return Mathf.Abs(area) / 2f;
+    }
+
+    private bool DoesAreaHaveDoor(List<Vector3> area)
+    {
+        // Check if there are any door openings or door frame posts within the room area
+        foreach (GameObject segment in wallSegments)
+        {
+            if (segment != null && (segment.name == "Door Opening" || segment.name == "Door Frame Post"))
+            {
+                Vector3 doorPos = segment.transform.position;
+                if (IsPointInPolygon(doorPos, area))
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private bool IsPointInPolygon(Vector3 point, List<Vector3> polygon)
+    {
+        // Simple ray casting algorithm for 2D point-in-polygon test
+        bool inside = false;
+        for (int i = 0, j = polygon.Count - 1; i < polygon.Count; j = i++)
+        {
+            Vector3 pi = polygon[i];
+            Vector3 pj = polygon[j];
+
+            if (((pi.z > point.z) != (pj.z > point.z)) &&
+                (point.x < (pj.x - pi.x) * (point.z - pi.z) / (pj.z - pi.z) + pi.x))
+            {
+                inside = !inside;
+            }
+        }
+        return inside;
+    }
+
+    private void ForceRoomDoorPlacement(List<Vector3> roomArea)
+    {
+        Debug.Log("Forcing door placement for enclosed room");
+
+        // Switch to door placement mode
+        isBuildingRoom = false;
+        isPlacingDoor = true;
+        currentBuildingMode = BuildingMode.PlacingDoor;
+
+        // Store the room data
+        currentRoom = new Room
+        {
+            roomPoints = roomArea,
+            isComplete = false
+        };
+
+        // Clear current room points since we're now in door mode
+        currentRoomPoints.Clear();
+
+        OnBuildingError?.Invoke("Room detected! Click on a wall to place a door.");
+    }
+
+    private void CompleteDetectedRoom(List<Vector3> roomArea)
+    {
+        Debug.Log("Completing room with existing door");
+
+        // Create and complete the room
+        Room detectedRoom = new Room
+        {
+            roomPoints = roomArea,
+            isComplete = true,
+            hasEntrance = true
+        };
+
+        // Fire completion event
+        OnRoomCompleted?.Invoke(detectedRoom);
+
+        // Reset building state
+        ResetBuildingState();
+    }
+
+    private void CheckForNewEnclosedRoomsGlobal()
+    {
+        // This is a more comprehensive room detection that works with all existing walls
+        // It finds enclosed areas using all wall segments, not just current room points
+
+        List<GameObject> actualWalls = wallSegments.Where(wall =>
+            wall != null &&
+            wall.name == "Wall Segment" &&
+            wall.GetComponent<Renderer>() != null
+        ).ToList();
+
+        if (actualWalls.Count < 3) return; // Need at least 3 walls to form a room
+
+        Debug.Log($"Checking for enclosed rooms with {actualWalls.Count} walls");
+
+        // Use a more sophisticated approach to detect closed polygons
+        List<List<Vector3>> detectedRooms = DetectClosedPolygonsFromWalls(actualWalls);
+
+        Debug.Log($"Found {detectedRooms.Count} potential rooms");
+
+        foreach (var roomArea in detectedRooms)
+        {
+            Debug.Log($"Checking room with {roomArea.Count} points, area: {CalculatePolygonArea(roomArea)}");
+
+            if (IsValidRoom(roomArea))
+            {
+                bool hasDoor = DoesAreaHaveDoor(roomArea);
+
+                Debug.Log($"Valid room found. Has door: {hasDoor}");
+
+                if (!hasDoor)
+                {
+                    Debug.Log($"Detected new enclosed room without door - forcing door placement");
+                    ForceRoomDoorPlacement(roomArea);
+                    return; // Handle one room at a time
+                }
+                else
+                {
+                    Debug.Log($"Room already has door - completing");
+                    CompleteDetectedRoom(roomArea);
+                    return;
+                }
+            }
+        }
+
+        Debug.Log("No valid enclosed rooms detected");
+    }
+
+    private List<List<Vector3>> DetectClosedPolygonsFromWalls(List<GameObject> walls)
+    {
+        List<List<Vector3>> closedPolygons = new List<List<Vector3>>();
+
+        Debug.Log($"Starting simplified room detection with {walls.Count} walls");
+
+        // Simple approach: Look for rectangular rooms formed by connecting existing walls
+        // This is more reliable than complex graph algorithms for your use case
+
+        // Check if current room points connect existing walls to form a room
+        if (currentRoomPoints.Count >= 2)
+        {
+            Vector3 firstPoint = currentRoomPoints[0];
+            Vector3 lastPoint = currentRoomPoints[currentRoomPoints.Count - 1];
+
+            Debug.Log($"Checking if room points form enclosed area: {currentRoomPoints.Count} points");
+            Debug.Log($"First point: {firstPoint}, Last point: {lastPoint}");
+
+            // Check if we can find existing walls that connect our start and end points
+            bool startsOnWall = IsPointOnAnyWall(firstPoint, walls);
+            bool endsOnWall = IsPointOnAnyWall(lastPoint, walls);
+
+            Debug.Log($"First point on wall: {startsOnWall}, Last point on wall: {endsOnWall}");
+
+            if (startsOnWall && endsOnWall && currentRoomPoints.Count >= 3)
+            {
+                // Check if there's a path of existing walls that could complete the room
+                if (CanWallsCompleteRoom(firstPoint, lastPoint, walls))
+                {
+                    Debug.Log("Found completed room using wall connections!");
+                    List<Vector3> completedRoom = new List<Vector3>(currentRoomPoints);
+                    closedPolygons.Add(completedRoom);
+                }
+            }
+        }
+
+        Debug.Log($"Simplified detection found {closedPolygons.Count} rooms");
+        return closedPolygons;
+    }
+
+    private bool IsPointOnAnyWall(Vector3 point, List<GameObject> walls)
+    {
+        float tolerance = 2.0f; // Distance tolerance for "on wall"
+
+        foreach (GameObject wall in walls)
+        {
+            if (wall == null) continue;
+
+            // Check if point is close to this wall
+            Bounds wallBounds = wall.GetComponent<Renderer>().bounds;
+            if (wallBounds.SqrDistance(point) < tolerance * tolerance)
+            {
+                Debug.Log($"Point {point} is near wall {wall.name}");
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private bool CanWallsCompleteRoom(Vector3 startPoint, Vector3 endPoint, List<GameObject> walls)
+    {
+        // Simple check: if we have walls forming the outer boundary and our points connect them,
+        // we likely have a completed room
+
+        // Count how many walls we have that could form room boundaries
+        int boundaryWalls = 0;
+        foreach (GameObject wall in walls)
+        {
+            if (wall != null && wall.name.Contains("Wall"))
+            {
+                boundaryWalls++;
+            }
+        }
+
+        Debug.Log($"Found {boundaryWalls} potential boundary walls");
+
+        // If we have sufficient boundary walls and our points connect them, assume room completion
+        return boundaryWalls >= 4; // At least 4 walls needed for a room
+    }
+
+    private Vector3 RoundVector3(Vector3 vector, float precision)
+    {
+        return new Vector3(
+            Mathf.Round(vector.x / precision) * precision,
+            Mathf.Round(vector.y / precision) * precision,
+            Mathf.Round(vector.z / precision) * precision
+        );
+    }
+
+    private List<Vector3> FindSmallestCycle(Dictionary<Vector3, List<Vector3>> graph, Vector3 start, HashSet<Vector3> globalVisited)
+    {
+        if (globalVisited.Contains(start)) return null;
+
+        // DFS to find the shortest cycle starting from this point
+        HashSet<Vector3> pathVisited = new HashSet<Vector3>();
+        List<Vector3> path = new List<Vector3>();
+
+        if (DFSFindCycle(graph, start, start, pathVisited, path))
+        {
+            return new List<Vector3>(path);
+        }
+
+        return null;
+    }
+
+    private bool DFSFindCycle(Dictionary<Vector3, List<Vector3>> graph, Vector3 current, Vector3 target, HashSet<Vector3> pathVisited, List<Vector3> path)
+    {
+        // Check if we found a cycle back to start - use exact equality since we're using rounded coordinates
+        if (path.Count > 0 && path.Count >= 3)
+        {
+            // Check if current point connects back to target in the graph
+            if (graph.ContainsKey(current) && graph[current].Contains(target))
+            {
+                Debug.Log($"Found cycle! Path length: {path.Count}");
+                return true;
+            }
+        }
+
+        if (path.Count > 6) return false; // Limit search depth to avoid infinite loops
+
+        pathVisited.Add(current);
+        path.Add(current);
+
+        if (graph.ContainsKey(current))
+        {
+            foreach (var neighbor in graph[current])
+            {
+                // Don't revisit the previous node (except when completing cycle)
+                if (path.Count == 1 ||
+                    (!pathVisited.Contains(neighbor)) ||
+                    (path.Count >= 3 && neighbor.Equals(target)))
+                {
+                    if (DFSFindCycle(graph, neighbor, target, pathVisited, path))
+                        return true;
+                }
+            }
+        }
+
+        pathVisited.Remove(current);
+        path.RemoveAt(path.Count - 1);
+        return false;
+    }
+    #endregion
+}
+
+// Data classes
+[System.Serializable]
+public class Room
+{
+    public List<Vector3> roomPoints = new List<Vector3>();
+    public List<GameObject> wallObjects = new List<GameObject>();
+    public bool isComplete = false;
+    public RoomType roomType = RoomType.Generic;
+    public Vector3 doorPosition;
+    public bool hasEntrance = false;
+    public bool hasReception = false;
+}
+
+public enum RoomType
+{
+    Generic,
+    Reception,
+    GuestRoom,
+    Restaurant,
+    Kitchen,
+    Storage,
+    Bathroom,
+    Lobby
+}

+ 184 - 0
Assets/Scripts/Camera/CameraController.cs

@@ -0,0 +1,184 @@
+using UnityEngine;
+
+public class CameraController : MonoBehaviour
+{
+    [Header("Movement Settings")]
+    [SerializeField] private float panSpeed = 5f;
+    [SerializeField] private float zoomSpeed = 2f;
+    [SerializeField] private float rotationSpeed = 100f;
+
+    [Header("Limits")]
+    [SerializeField] private float minZoom = 5f;
+    [SerializeField] private float maxZoom = 50f;
+    [SerializeField] private Vector2 panLimitX = new Vector2(-50f, 50f);
+    [SerializeField] private Vector2 panLimitZ = new Vector2(-50f, 50f);
+
+    [Header("Input Settings")]
+    [SerializeField] private KeyCode panKey = KeyCode.LeftShift;
+    [SerializeField] private KeyCode rotateKey = KeyCode.LeftAlt;
+
+    private Camera cam;
+    private Vector3 lastMousePosition;
+    private bool isDragging = false;
+
+    private void Start()
+    {
+        cam = GetComponent<Camera>();
+        if (cam == null)
+        {
+            cam = Camera.main;
+        }
+
+        // Set initial camera position for hotel view
+        transform.position = new Vector3(0, 15f, -20f);
+        transform.rotation = Quaternion.Euler(45f, 0f, 0f);
+    }
+
+    private void Update()
+    {
+        HandleMovementInput();
+        HandleZoomInput();
+        HandleRotationInput();
+    }
+
+    private void HandleMovementInput()
+    {
+        // WASD movement
+        Vector3 movement = Vector3.zero;
+
+        if (Input.GetKey(KeyCode.W))
+            movement += transform.forward;
+        if (Input.GetKey(KeyCode.S))
+            movement -= transform.forward;
+        if (Input.GetKey(KeyCode.A))
+            movement -= transform.right;
+        if (Input.GetKey(KeyCode.D))
+            movement += transform.right;
+
+        // Apply movement with speed adjustment based on camera height
+        float speedMultiplier = transform.position.y / 10f;
+        movement *= panSpeed * speedMultiplier * Time.deltaTime;
+
+        // Clamp position within limits
+        Vector3 newPosition = transform.position + movement;
+        newPosition.x = Mathf.Clamp(newPosition.x, panLimitX.x, panLimitX.y);
+        newPosition.z = Mathf.Clamp(newPosition.z, panLimitZ.x, panLimitZ.y);
+
+        transform.position = newPosition;
+
+        // Mouse drag panning
+        HandleMousePanning();
+    }
+
+    private void HandleMousePanning()
+    {
+        if (Input.GetMouseButtonDown(2) || (Input.GetMouseButtonDown(0) && Input.GetKey(panKey))) // Middle mouse or Shift+Left mouse
+        {
+            isDragging = true;
+            lastMousePosition = Input.mousePosition;
+        }
+        else if (Input.GetMouseButtonUp(2) || Input.GetMouseButtonUp(0))
+        {
+            isDragging = false;
+        }
+
+        if (isDragging)
+        {
+            Vector3 mouseDelta = Input.mousePosition - lastMousePosition;
+
+            // Convert mouse movement to world movement
+            Vector3 worldDelta = new Vector3(-mouseDelta.x, 0, -mouseDelta.y) * panSpeed * 0.01f;
+
+            // Apply relative to camera orientation
+            worldDelta = transform.TransformDirection(worldDelta);
+            worldDelta.y = 0; // Keep camera at same height during panning
+
+            Vector3 newPosition = transform.position + worldDelta;
+            newPosition.x = Mathf.Clamp(newPosition.x, panLimitX.x, panLimitX.y);
+            newPosition.z = Mathf.Clamp(newPosition.z, panLimitZ.x, panLimitZ.y);
+
+            transform.position = newPosition;
+            lastMousePosition = Input.mousePosition;
+        }
+    }
+
+    private void HandleZoomInput()
+    {
+        float scroll = Input.GetAxis("Mouse ScrollWheel");
+
+        if (Mathf.Abs(scroll) > 0.01f)
+        {
+            // For orthographic camera, adjust orthographicSize
+            if (cam.orthographic)
+            {
+                cam.orthographicSize -= scroll * zoomSpeed;
+                cam.orthographicSize = Mathf.Clamp(cam.orthographicSize, minZoom, maxZoom);
+            }
+            else
+            {
+                // For perspective camera, move camera forward/backward
+                Vector3 zoomDirection = transform.forward * scroll * zoomSpeed;
+                Vector3 newPosition = transform.position + zoomDirection;
+
+                // Limit zoom by height
+                if (newPosition.y >= minZoom && newPosition.y <= maxZoom)
+                {
+                    transform.position = newPosition;
+                }
+            }
+        }
+    }
+
+    private void HandleRotationInput()
+    {
+        if (Input.GetMouseButton(1) || (Input.GetMouseButton(0) && Input.GetKey(rotateKey))) // Right mouse or Alt+Left mouse
+        {
+            float mouseX = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime;
+            float mouseY = -Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime;
+
+            // Rotate around Y axis (horizontal rotation)
+            transform.Rotate(Vector3.up, mouseX, Space.World);
+
+            // Rotate around local X axis (vertical rotation)
+            transform.Rotate(Vector3.right, mouseY, Space.Self);
+
+            // Clamp vertical rotation
+            Vector3 eulerAngles = transform.eulerAngles;
+            if (eulerAngles.x > 180f)
+                eulerAngles.x -= 360f;
+
+            eulerAngles.x = Mathf.Clamp(eulerAngles.x, -80f, 80f);
+            transform.eulerAngles = eulerAngles;
+        }
+    }
+
+    #region Public Methods
+    public void FocusOnPosition(Vector3 position, float distance = 15f)
+    {
+        Vector3 direction = (transform.position - position).normalized;
+        transform.position = position + direction * distance;
+        transform.LookAt(position);
+    }
+
+    public void SetPanLimits(Vector2 xLimits, Vector2 zLimits)
+    {
+        panLimitX = xLimits;
+        panLimitZ = zLimits;
+    }
+
+    public void ResetCamera()
+    {
+        transform.position = new Vector3(0, 15f, -20f);
+        transform.rotation = Quaternion.Euler(45f, 0f, 0f);
+    }
+    #endregion
+
+    private void OnDrawGizmosSelected()
+    {
+        // Draw pan limits
+        Gizmos.color = Color.yellow;
+        Vector3 center = new Vector3((panLimitX.x + panLimitX.y) / 2f, 0, (panLimitZ.x + panLimitZ.y) / 2f);
+        Vector3 size = new Vector3(panLimitX.y - panLimitX.x, 1f, panLimitZ.y - panLimitZ.x);
+        Gizmos.DrawWireCube(center, size);
+    }
+}

+ 485 - 0
Assets/Scripts/Facilities/FacilityManager.cs

@@ -0,0 +1,485 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Linq;
+
+public class FacilityManager : MonoBehaviour
+{
+    public static FacilityManager Instance { get; private set; }
+
+    [Header("Available Facilities")]
+    [SerializeField] private List<Facility> hotelFacilities = new List<Facility>();
+
+    [Header("Facility Prefabs")]
+    [SerializeField] private GameObject restaurantPrefab;
+    [SerializeField] private GameObject barPrefab;
+    [SerializeField] private GameObject gymPrefab;
+    [SerializeField] private GameObject playAreaPrefab;
+    [SerializeField] private GameObject valetStationPrefab;
+
+    // Events
+    public System.Action<Facility> OnFacilityAdded;
+    public System.Action<Facility> OnFacilityRemoved;
+    public System.Action<Guest, Facility> OnFacilityUsed;
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+    }
+
+    private void Start()
+    {
+        InitializeFacilities();
+    }
+
+    #region Initialization
+    private void InitializeFacilities()
+    {
+        // Find existing facilities in the scene
+        Facility[] existingFacilities = FindObjectsOfType<Facility>();
+        foreach (Facility facility in existingFacilities)
+        {
+            if (!hotelFacilities.Contains(facility))
+            {
+                hotelFacilities.Add(facility);
+            }
+        }
+
+        Debug.Log($"Initialized with {hotelFacilities.Count} facilities");
+    }
+    #endregion
+
+    #region Facility Management
+    public bool AddFacility(FacilityType facilityType, Vector3 position, Room associatedRoom = null)
+    {
+        GameObject facilityPrefab = GetFacilityPrefab(facilityType);
+        if (facilityPrefab == null)
+        {
+            facilityPrefab = CreateDefaultFacilityPrefab(facilityType);
+        }
+
+        GameObject facilityObj = Instantiate(facilityPrefab, position, Quaternion.identity);
+        Facility facility = facilityObj.GetComponent<Facility>();
+
+        if (facility == null)
+        {
+            facility = facilityObj.AddComponent<Facility>();
+        }
+
+        // Configure facility
+        facility.Initialize(facilityType, associatedRoom);
+
+        hotelFacilities.Add(facility);
+        OnFacilityAdded?.Invoke(facility);
+
+        Debug.Log($"Added facility: {facilityType} at {position}");
+        return true;
+    }
+
+    public bool RemoveFacility(Facility facility)
+    {
+        if (facility == null || !hotelFacilities.Contains(facility))
+        {
+            return false;
+        }
+
+        hotelFacilities.Remove(facility);
+        OnFacilityRemoved?.Invoke(facility);
+
+        Destroy(facility.gameObject);
+        Debug.Log($"Removed facility: {facility.Type}");
+        return true;
+    }
+
+    private GameObject GetFacilityPrefab(FacilityType facilityType)
+    {
+        switch (facilityType)
+        {
+            case FacilityType.Restaurant:
+                return restaurantPrefab;
+            case FacilityType.Bar:
+                return barPrefab;
+            case FacilityType.Gym:
+                return gymPrefab;
+            case FacilityType.PlayArea:
+                return playAreaPrefab;
+            case FacilityType.ValetParking:
+                return valetStationPrefab;
+            default:
+                return null;
+        }
+    }
+
+    private GameObject CreateDefaultFacilityPrefab(FacilityType facilityType)
+    {
+        GameObject facility = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        facility.name = facilityType.ToString();
+        facility.transform.localScale = new Vector3(2f, 1f, 2f);
+
+        // Set color based on facility type
+        Color facilityColor = GetFacilityColor(facilityType);
+        facility.GetComponent<Renderer>().material.color = facilityColor;
+
+        return facility;
+    }
+
+    private Color GetFacilityColor(FacilityType facilityType)
+    {
+        switch (facilityType)
+        {
+            case FacilityType.Restaurant: return Color.red;
+            case FacilityType.Bar: return new Color(0.5f, 0.2f, 0f); // Brown
+            case FacilityType.Gym: return Color.yellow;
+            case FacilityType.PlayArea: return Color.green;
+            case FacilityType.ValetParking: return Color.blue;
+            case FacilityType.Spa: return Color.magenta;
+            case FacilityType.BusinessCenter: return Color.gray;
+            case FacilityType.LaundryService: return Color.white;
+            default: return Color.gray;
+        }
+    }
+    #endregion
+
+    #region Facility Queries
+    public List<Facility> GetFacilitiesByType(FacilityType facilityType)
+    {
+        return hotelFacilities.Where(f => f.Type == facilityType).ToList();
+    }
+
+    public List<Facility> GetAvailableFacilities()
+    {
+        return hotelFacilities.Where(f => f.IsOperational).ToList();
+    }
+
+    public Facility GetNearestFacility(Vector3 position, FacilityType facilityType)
+    {
+        var facilitiesOfType = GetFacilitiesByType(facilityType);
+
+        return facilitiesOfType
+            .Where(f => f.IsOperational)
+            .OrderBy(f => Vector3.Distance(f.transform.position, position))
+            .FirstOrDefault();
+    }
+
+    public bool HasFacility(FacilityType facilityType)
+    {
+        return GetFacilitiesByType(facilityType).Any(f => f.IsOperational);
+    }
+
+    public float GetFacilitySatisfactionRating(FacilityType facilityType)
+    {
+        var facilities = GetFacilitiesByType(facilityType);
+        if (facilities.Count == 0) return 0f;
+
+        return facilities.Average(f => f.QualityRating);
+    }
+    #endregion
+
+    #region Wish Fulfillment
+    public bool CanFulfillWish(WishType wishType)
+    {
+        FacilityType requiredFacility = GetRequiredFacilityForWish(wishType);
+        return HasFacility(requiredFacility);
+    }
+
+    public Facility FindFacilityForWish(WishType wishType, Vector3 guestPosition)
+    {
+        FacilityType requiredFacility = GetRequiredFacilityForWish(wishType);
+        return GetNearestFacility(guestPosition, requiredFacility);
+    }
+
+    private FacilityType GetRequiredFacilityForWish(WishType wishType)
+    {
+        switch (wishType)
+        {
+            case WishType.Restaurant:
+                return FacilityType.Restaurant;
+            case WishType.BarService:
+                return FacilityType.Bar;
+            case WishType.PlayArea:
+                return FacilityType.PlayArea;
+            case WishType.ValetParking:
+                return FacilityType.ValetParking;
+            case WishType.WashingService:
+            case WishType.CleaningService:
+                return FacilityType.LaundryService;
+            case WishType.ActivityPlanning:
+                return FacilityType.BusinessCenter;
+            case WishType.RoomService:
+                return FacilityType.Restaurant; // Room service originates from restaurant
+            default:
+                return FacilityType.None;
+        }
+    }
+
+    public float CalculateWishFulfillmentBonus(Guest guest)
+    {
+        if (guest?.Wishes == null) return 0f;
+
+        float totalBonus = 0f;
+        int fulfilledWishes = 0;
+
+        foreach (var wish in guest.Wishes)
+        {
+            if (CanFulfillWish(wish.wishType))
+            {
+                totalBonus += wish.importance;
+                fulfilledWishes++;
+            }
+        }
+
+        // Bonus scales with the percentage of wishes that can be fulfilled
+        float fulfillmentRate = guest.Wishes.Count > 0 ? (float)fulfilledWishes / guest.Wishes.Count : 0f;
+
+        return totalBonus * fulfillmentRate;
+    }
+    #endregion
+
+    #region Statistics and Information
+    public List<Facility> GetAllFacilities()
+    {
+        return new List<Facility>(hotelFacilities);
+    }
+
+    public int GetFacilityCount(FacilityType facilityType)
+    {
+        return GetFacilitiesByType(facilityType).Count;
+    }
+
+    public Dictionary<FacilityType, int> GetFacilityCountByType()
+    {
+        Dictionary<FacilityType, int> counts = new Dictionary<FacilityType, int>();
+
+        foreach (FacilityType type in System.Enum.GetValues(typeof(FacilityType)))
+        {
+            counts[type] = GetFacilityCount(type);
+        }
+
+        return counts;
+    }
+
+    public float GetOverallFacilityRating()
+    {
+        if (hotelFacilities.Count == 0) return 0f;
+
+        return hotelFacilities.Average(f => f.QualityRating);
+    }
+    #endregion
+}
+
+// Facility Component
+public class Facility : MonoBehaviour
+{
+    [Header("Facility Info")]
+    [SerializeField] private FacilityType facilityType = FacilityType.None;
+    [SerializeField] private string facilityName;
+    [SerializeField] private bool isOperational = true;
+
+    [Header("Quality and Capacity")]
+    [SerializeField] private float qualityRating = 0.7f; // 0 to 1
+    [SerializeField] private int maxCapacity = 10;
+    [SerializeField] private List<Guest> currentUsers = new List<Guest>();
+
+    [Header("Associated Room")]
+    [SerializeField] private Room associatedRoom;
+
+    [Header("Staff Requirements")]
+    [SerializeField] private List<Staff.StaffType> requiredStaffTypes = new List<Staff.StaffType>();
+    [SerializeField] private int minStaffCount = 1;
+
+    // Events
+    public System.Action<Guest> OnGuestUseFacility;
+    public System.Action<Guest> OnGuestLeaveFacility;
+
+    #region Properties
+    public FacilityType Type => facilityType;
+    public string FacilityName => string.IsNullOrEmpty(facilityName) ? facilityType.ToString() : facilityName;
+    public bool IsOperational => isOperational && HasRequiredStaff();
+    public float QualityRating => qualityRating;
+    public int CurrentCapacity => currentUsers.Count;
+    public int MaxCapacity => maxCapacity;
+    public bool HasCapacity => CurrentCapacity < MaxCapacity;
+    public Room AssociatedRoom => associatedRoom;
+    #endregion
+
+    public void Initialize(FacilityType type, Room room = null)
+    {
+        facilityType = type;
+        associatedRoom = room;
+
+        SetupFacilityDefaults();
+
+        Debug.Log($"Initialized facility: {FacilityName}");
+    }
+
+    private void SetupFacilityDefaults()
+    {
+        switch (facilityType)
+        {
+            case FacilityType.Restaurant:
+                maxCapacity = 20;
+                requiredStaffTypes.Add(Staff.StaffType.Chef);
+                break;
+            case FacilityType.Bar:
+                maxCapacity = 15;
+                requiredStaffTypes.Add(Staff.StaffType.Chef); // Bartender would be ideal, but using chef for now
+                break;
+            case FacilityType.PlayArea:
+                maxCapacity = 30;
+                break;
+            case FacilityType.ValetParking:
+                maxCapacity = 50;
+                requiredStaffTypes.Add(Staff.StaffType.Valet);
+                break;
+            case FacilityType.LaundryService:
+                maxCapacity = 5;
+                requiredStaffTypes.Add(Staff.StaffType.Housekeeper);
+                break;
+        }
+    }
+
+    #region Guest Interaction
+    public bool CanGuestUseFacility(Guest guest)
+    {
+        if (!IsOperational || !HasCapacity)
+            return false;
+
+        // Check if guest has specific requirements for this facility
+        return true;
+    }
+
+    public bool AddGuest(Guest guest)
+    {
+        if (!CanGuestUseFacility(guest))
+            return false;
+
+        currentUsers.Add(guest);
+        OnGuestUseFacility?.Invoke(guest);
+
+        Debug.Log($"Guest {guest.GuestName} is now using {FacilityName}");
+        return true;
+    }
+
+    public bool RemoveGuest(Guest guest)
+    {
+        if (!currentUsers.Contains(guest))
+            return false;
+
+        currentUsers.Remove(guest);
+        OnGuestLeaveFacility?.Invoke(guest);
+
+        Debug.Log($"Guest {guest.GuestName} has left {FacilityName}");
+        return true;
+    }
+    #endregion
+
+    #region Staff Management
+    private bool HasRequiredStaff()
+    {
+        if (requiredStaffTypes.Count == 0)
+            return true;
+
+        if (StaffManager.Instance == null)
+            return false;
+
+        foreach (var staffType in requiredStaffTypes)
+        {
+            if (StaffManager.Instance.GetStaffCount(staffType) < minStaffCount)
+                return false;
+        }
+
+        return true;
+    }
+
+    public List<Staff.StaffType> GetRequiredStaffTypes()
+    {
+        return new List<Staff.StaffType>(requiredStaffTypes);
+    }
+    #endregion
+
+    #region Facility Management
+    public void SetOperational(bool operational)
+    {
+        isOperational = operational;
+
+        if (!operational)
+        {
+            // Remove all current users
+            var usersToRemove = new List<Guest>(currentUsers);
+            foreach (var guest in usersToRemove)
+            {
+                RemoveGuest(guest);
+            }
+        }
+
+        Debug.Log($"{FacilityName} is now {(operational ? "operational" : "closed")}");
+    }
+
+    public void UpgradeQuality(float qualityIncrease)
+    {
+        qualityRating = Mathf.Clamp01(qualityRating + qualityIncrease);
+        Debug.Log($"{FacilityName} quality upgraded to {qualityRating:P0}");
+    }
+
+    public void IncreaseCapacity(int capacityIncrease)
+    {
+        maxCapacity += capacityIncrease;
+        Debug.Log($"{FacilityName} capacity increased to {maxCapacity}");
+    }
+    #endregion
+
+    private void OnMouseDown()
+    {
+        // Show facility info when clicked
+        Debug.Log($"Facility: {FacilityName}\nType: {facilityType}\nOperational: {IsOperational}\nCapacity: {CurrentCapacity}/{MaxCapacity}\nQuality: {qualityRating:P0}");
+    }
+
+    private void OnDrawGizmosSelected()
+    {
+        // Draw facility area
+        Gizmos.color = GetFacilityColor();
+        Gizmos.DrawWireCube(transform.position, transform.localScale);
+
+        // Draw capacity indicator
+        Gizmos.color = Color.white;
+        for (int i = 0; i < CurrentCapacity && i < 10; i++)
+        {
+            Vector3 userPos = transform.position + Vector3.up * (i * 0.5f + 1f);
+            Gizmos.DrawWireSphere(userPos, 0.2f);
+        }
+    }
+
+    private Color GetFacilityColor()
+    {
+        if (!IsOperational) return Color.gray;
+
+        switch (facilityType)
+        {
+            case FacilityType.Restaurant: return Color.red;
+            case FacilityType.Bar: return new Color(0.5f, 0.2f, 0f);
+            case FacilityType.PlayArea: return Color.green;
+            case FacilityType.ValetParking: return Color.blue;
+            default: return Color.yellow;
+        }
+    }
+}
+
+// Enumerations
+public enum FacilityType
+{
+    None,
+    Restaurant,
+    Bar,
+    Gym,
+    PlayArea,
+    ValetParking,
+    Spa,
+    BusinessCenter,
+    LaundryService,
+    Pool,
+    ConferenceRoom
+}

+ 495 - 0
Assets/Scripts/Guests/Guest.cs

@@ -0,0 +1,495 @@
+using UnityEngine;
+using UnityEngine.AI;
+using System.Collections.Generic;
+using System;
+
+[RequireComponent(typeof(NavMeshAgent))]
+public class Guest : MonoBehaviour
+{
+    [Header("Guest Info")]
+    [SerializeField] private string guestName;
+    [SerializeField] private GuestType guestType = GuestType.Regular;
+    [SerializeField] private int stayDuration = 3; // days
+
+    [Header("Movement")]
+    [SerializeField] private float walkSpeed = 3.5f;
+    [SerializeField] private float runSpeed = 6f;
+
+    [Header("Mood Visualization")]
+    [SerializeField] private GameObject moodIcon;
+    [SerializeField] private SpriteRenderer moodRenderer;
+    [SerializeField] private Sprite[] moodSprites; // Happy, Neutral, Annoyed, Angry
+
+    private NavMeshAgent agent;
+    private GuestState currentState = GuestState.Arriving;
+    private GuestMood currentMood = GuestMood.Neutral;
+    private List<GuestWish> wishes = new List<GuestWish>();
+    private List<string> moodReasons = new List<string>();
+
+    private Room assignedRoom;
+    private Vector3 spawnPosition;
+    private float satisfactionLevel = 0.5f; // 0 to 1
+    private float patience = 100f;
+    private float maxPatience = 100f;
+
+    // Navigation targets
+    private Vector3 currentDestination;
+    private bool hasDestination = false;
+
+    // Events
+    public static event Action<Guest> OnGuestArrived;
+    public static event Action<Guest> OnGuestLeft;
+    public static event Action<Guest> OnGuestAssignedRoom;
+
+    public enum GuestState
+    {
+        Arriving,
+        LookingForReception,
+        CheckingIn,
+        GoingToRoom,
+        InRoom,
+        Exploring,
+        Leaving,
+        Left
+    }
+
+    public enum GuestMood
+    {
+        Happy = 0,
+        Neutral = 1,
+        Annoyed = 2,
+        Angry = 3
+    }
+
+    public enum GuestType
+    {
+        Regular,
+        Business,
+        Family,
+        VIP,
+        Celebrity
+    }
+
+    #region Properties
+    public string GuestName
+    {
+        get => string.IsNullOrEmpty(guestName) ? GenerateRandomName() : guestName;
+        set => guestName = value;
+    }
+
+    public GuestState CurrentState => currentState;
+    public GuestMood CurrentMood => currentMood;
+    public GuestType Type => guestType;
+    public float SatisfactionLevel => satisfactionLevel;
+    public float Patience => patience;
+    public List<GuestWish> Wishes => wishes;
+    public List<string> MoodReasons => moodReasons;
+    public Room AssignedRoom => assignedRoom;
+    #endregion
+
+    private void Awake()
+    {
+        agent = GetComponent<NavMeshAgent>();
+        agent.speed = walkSpeed;
+
+        SetupMoodIcon();
+        GenerateWishes();
+
+        spawnPosition = transform.position;
+    }
+
+    private void Start()
+    {
+        SetState(GuestState.Arriving);
+        OnGuestArrived?.Invoke(this);
+
+        // Look for reception to check in
+        FindAndGoToReception();
+    }
+
+    private void Update()
+    {
+        UpdatePatience();
+        UpdateBehaviorBasedOnState();
+        UpdateMoodDisplay();
+
+        // Check if agent reached destination
+        if (hasDestination && agent.enabled && !agent.pathPending && agent.remainingDistance < 0.5f)
+        {
+            OnReachedDestination();
+        }
+    }
+
+    #region State Management
+    private void SetState(GuestState newState)
+    {
+        currentState = newState;
+        Debug.Log($"Guest {GuestName} state changed to: {newState}");
+
+        switch (newState)
+        {
+            case GuestState.Arriving:
+                AddMoodReason("Just arrived at the hotel");
+                break;
+            case GuestState.LookingForReception:
+                AddMoodReason("Looking for reception desk");
+                break;
+            case GuestState.CheckingIn:
+                AddMoodReason("Checking into the hotel");
+                break;
+            case GuestState.GoingToRoom:
+                AddMoodReason("Heading to assigned room");
+                break;
+            case GuestState.InRoom:
+                AddMoodReason("Settling into room");
+                break;
+            case GuestState.Exploring:
+                AddMoodReason("Exploring hotel facilities");
+                break;
+            case GuestState.Leaving:
+                AddMoodReason("Checking out and leaving");
+                break;
+        }
+    }
+
+    private void UpdateBehaviorBasedOnState()
+    {
+        switch (currentState)
+        {
+            case GuestState.LookingForReception:
+                if (!hasDestination)
+                {
+                    FindAndGoToReception();
+                }
+                break;
+
+            case GuestState.CheckingIn:
+                // Stay at reception for a moment
+                if (Time.time % 5f < 0.1f) // Every 5 seconds, try to get a room
+                {
+                    TryGetRoom();
+                }
+                break;
+
+            case GuestState.InRoom:
+                // Randomly decide to explore or stay
+                if (UnityEngine.Random.value < 0.001f) // Small chance per frame
+                {
+                    DecideNextActivity();
+                }
+                break;
+        }
+    }
+
+    private void UpdatePatience()
+    {
+        if (currentState == GuestState.LookingForReception ||
+            currentState == GuestState.CheckingIn)
+        {
+            patience -= Time.deltaTime * 2f; // Lose patience while waiting
+
+            if (patience <= 0)
+            {
+                SetMood(GuestMood.Angry);
+                AddMoodReason("Waited too long without service");
+                LeaveHotel();
+            }
+            else if (patience < maxPatience * 0.3f)
+            {
+                SetMood(GuestMood.Annoyed);
+                AddMoodReason("Taking too long to check in");
+            }
+        }
+    }
+    #endregion
+
+    #region Navigation
+    public bool MoveTo(Vector3 destination)
+    {
+        if (!agent.enabled) return false;
+
+        agent.SetDestination(destination);
+        currentDestination = destination;
+        hasDestination = true;
+
+        return true;
+    }
+
+    private void OnReachedDestination()
+    {
+        hasDestination = false;
+
+        switch (currentState)
+        {
+            case GuestState.LookingForReception:
+                SetState(GuestState.CheckingIn);
+                break;
+
+            case GuestState.GoingToRoom:
+                SetState(GuestState.InRoom);
+                AddMoodReason("Arrived at assigned room");
+                break;
+        }
+    }
+
+    private void FindAndGoToReception()
+    {
+        // Look for reception room or reception desk
+        GameObject[] receptions = GameObject.FindGameObjectsWithTag("Reception");
+        if (receptions.Length > 0)
+        {
+            MoveTo(receptions[0].transform.position);
+            SetState(GuestState.LookingForReception);
+        }
+        else
+        {
+            // No reception found - get annoyed
+            SetMood(GuestMood.Annoyed);
+            AddMoodReason("Cannot find hotel reception");
+
+            // Wander around looking for it
+            WanderRandomly();
+        }
+    }
+
+    private void WanderRandomly()
+    {
+        Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 10f;
+        randomDirection += transform.position;
+        randomDirection.y = transform.position.y;
+
+        if (NavMesh.SamplePosition(randomDirection, out NavMeshHit hit, 10f, NavMesh.AllAreas))
+        {
+            MoveTo(hit.position);
+        }
+    }
+    #endregion
+
+    #region Room Management
+    private void TryGetRoom()
+    {
+        // Try to get a room assignment from hotel manager
+        Room availableRoom = HotelManager.Instance?.GetAvailableRoom(this);
+
+        if (availableRoom != null)
+        {
+            AssignRoom(availableRoom);
+        }
+        else
+        {
+            // No rooms available
+            SetMood(GuestMood.Annoyed);
+            AddMoodReason("No rooms available");
+
+            // Lose more patience
+            patience -= 20f;
+
+            if (patience <= 20f)
+            {
+                LeaveHotel();
+            }
+        }
+    }
+
+    public void AssignRoom(Room room)
+    {
+        assignedRoom = room;
+        SetState(GuestState.GoingToRoom);
+
+        // Calculate room satisfaction
+        float roomSatisfaction = CalculateRoomSatisfaction(room);
+        satisfactionLevel = Mathf.Clamp01(satisfactionLevel + roomSatisfaction - 0.5f);
+
+        if (roomSatisfaction > 0.7f)
+        {
+            SetMood(GuestMood.Happy);
+            AddMoodReason("Very satisfied with the room");
+        }
+        else if (roomSatisfaction < 0.3f)
+        {
+            SetMood(GuestMood.Annoyed);
+            AddMoodReason("Room doesn't meet expectations");
+        }
+
+        // Go to room
+        MoveTo(room.roomPoints[0]); // Go to room center
+
+        OnGuestAssignedRoom?.Invoke(this);
+    }
+
+    private float CalculateRoomSatisfaction(Room room)
+    {
+        float satisfaction = 0.5f; // Base satisfaction
+
+        // Check if room type matches guest preferences
+        // This would be expanded based on guest type and wishes
+
+        return satisfaction;
+    }
+
+    private void DecideNextActivity()
+    {
+        // Based on wishes, decide what to do next
+        if (wishes.Count > 0)
+        {
+            GuestWish randomWish = wishes[UnityEngine.Random.Range(0, wishes.Count)];
+
+            if (TryFulfillWish(randomWish))
+            {
+                SetState(GuestState.Exploring);
+            }
+        }
+        else
+        {
+            // No specific wishes, just wander
+            WanderRandomly();
+            SetState(GuestState.Exploring);
+        }
+    }
+
+    private bool TryFulfillWish(GuestWish wish)
+    {
+        // Look for facilities that can fulfill the wish
+        // This would be expanded with actual facility finding logic
+        return false;
+    }
+    #endregion
+
+    #region Mood System
+    private void SetMood(GuestMood mood)
+    {
+        currentMood = mood;
+        UpdateMoodDisplay();
+    }
+
+    private void AddMoodReason(string reason)
+    {
+        moodReasons.Insert(0, $"{DateTime.Now:HH:mm} - {reason}");
+
+        // Keep only recent reasons
+        if (moodReasons.Count > 10)
+        {
+            moodReasons.RemoveAt(moodReasons.Count - 1);
+        }
+    }
+
+    private void UpdateMoodDisplay()
+    {
+        if (moodRenderer != null && moodSprites != null && moodSprites.Length > (int)currentMood)
+        {
+            moodRenderer.sprite = moodSprites[(int)currentMood];
+
+            // Show mood icon only if not neutral or happy
+            moodIcon.SetActive(currentMood != GuestMood.Neutral && currentMood != GuestMood.Happy);
+        }
+    }
+
+    private void SetupMoodIcon()
+    {
+        if (moodIcon == null)
+        {
+            moodIcon = new GameObject("Mood Icon");
+            moodIcon.transform.SetParent(transform);
+            moodIcon.transform.localPosition = Vector3.up * 2.5f;
+
+            moodRenderer = moodIcon.AddComponent<SpriteRenderer>();
+            moodRenderer.sortingOrder = 10;
+
+            moodIcon.SetActive(false);
+        }
+    }
+    #endregion
+
+    #region Wish System
+    private void GenerateWishes()
+    {
+        wishes.Clear();
+
+        // Generate wishes based on guest type
+        int wishCount = UnityEngine.Random.Range(1, 4);
+        List<WishType> availableWishes = new List<WishType>((WishType[])Enum.GetValues(typeof(WishType)));
+
+        for (int i = 0; i < wishCount && availableWishes.Count > 0; i++)
+        {
+            int randomIndex = UnityEngine.Random.Range(0, availableWishes.Count);
+            WishType wishType = availableWishes[randomIndex];
+            availableWishes.RemoveAt(randomIndex);
+
+            wishes.Add(new GuestWish
+            {
+                wishType = wishType,
+                importance = GetWishImportanceForGuestType(wishType),
+                isFulfilled = false
+            });
+        }
+    }
+
+    private float GetWishImportanceForGuestType(WishType wishType)
+    {
+        // Different guest types value different wishes
+        switch (guestType)
+        {
+            case GuestType.Business:
+                return wishType == WishType.RoomService || wishType == WishType.CleaningService ? 0.9f : 0.5f;
+            case GuestType.Family:
+                return wishType == WishType.PlayArea || wishType == WishType.Restaurant ? 0.8f : 0.5f;
+            case GuestType.VIP:
+                return wishType == WishType.ValetParking || wishType == WishType.ActivityPlanning ? 0.9f : 0.6f;
+            default:
+                return 0.5f;
+        }
+    }
+    #endregion
+
+    #region Utility Methods
+    private string GenerateRandomName()
+    {
+        string[] firstNames = { "John", "Jane", "Mike", "Sarah", "David", "Lisa", "Chris", "Amy", "Tom", "Kate" };
+        string[] lastNames = { "Smith", "Johnson", "Brown", "Davis", "Wilson", "Miller", "Moore", "Taylor", "Anderson", "Thomas" };
+
+        return $"{firstNames[UnityEngine.Random.Range(0, firstNames.Length)]} {lastNames[UnityEngine.Random.Range(0, lastNames.Length)]}";
+    }
+
+    public void LeaveHotel()
+    {
+        SetState(GuestState.Leaving);
+        MoveTo(spawnPosition); // Go back to entrance
+
+        OnGuestLeft?.Invoke(this);
+
+        // Destroy after a delay
+        Destroy(gameObject, 3f);
+    }
+
+    private void OnMouseDown()
+    {
+        // Show guest info when clicked
+        if (GuestInfoUI.Instance != null)
+        {
+            GuestInfoUI.Instance.ShowGuestInfo(this);
+        }
+    }
+    #endregion
+}
+
+// Supporting classes
+[System.Serializable]
+public class GuestWish
+{
+    public WishType wishType;
+    public float importance; // 0 to 1
+    public bool isFulfilled;
+}
+
+public enum WishType
+{
+    Restaurant,
+    ValetParking,
+    ActivityPlanning,
+    RoomService,
+    BarService,
+    PlayArea,
+    CleaningService,
+    WashingService,
+    CloseToEvents
+}

+ 212 - 0
Assets/Scripts/Managers/GameManager.cs

@@ -0,0 +1,212 @@
+using UnityEngine;
+using System;
+
+public class GameManager : MonoBehaviour
+{
+    #region Singleton
+    public static GameManager Instance { get; private set; }
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+        DontDestroyOnLoad(this.gameObject);
+    }
+    #endregion
+
+    [Header("Game Speed Settings")]
+    [SerializeField] private float normalSpeed = 1f;
+    [SerializeField] private float fastSpeed = 2f;
+    [SerializeField] private float ultraSpeed = 4f;
+
+    [Header("Game State")]
+    public GameState currentGameState = GameState.Building;
+
+    [Header("Hotel Requirements")]
+    public bool hasEntrance = false;
+    public bool hasReception = false;
+    public bool canOpenHotel = false;
+
+    [Header("UI References")]
+    [SerializeField] private UnityEngine.UI.Text speedText;
+    [SerializeField] private UnityEngine.UI.Text gameStateText;
+
+    public enum GameSpeed
+    {
+        Paused = 0,
+        Normal = 1,
+        Fast = 2,
+        Ultra = 3
+    }
+
+    public enum GameState
+    {
+        Building,
+        PreOpening,
+        Operating,
+        Paused
+    }
+
+    private GameSpeed currentSpeed = GameSpeed.Normal;
+
+    // Events
+    public static event Action<GameSpeed> OnSpeedChanged;
+    public static event Action<GameState> OnGameStateChanged;
+    public static event Action OnHotelOpened;
+
+    void Start()
+    {
+        SetGameSpeed(GameSpeed.Normal);
+        UpdateGameState();
+    }
+
+    void Update()
+    {
+        HandleSpeedInput();
+        CheckHotelRequirements();
+        UpdateUI();
+    }
+
+    #region Speed Control
+    private void HandleSpeedInput()
+    {
+        if (Input.GetKeyDown(KeyCode.Alpha1))
+        {
+            SetGameSpeed(GameSpeed.Paused);
+        }
+        else if (Input.GetKeyDown(KeyCode.Alpha2))
+        {
+            SetGameSpeed(GameSpeed.Normal);
+        }
+        else if (Input.GetKeyDown(KeyCode.Alpha3))
+        {
+            SetGameSpeed(GameSpeed.Fast);
+        }
+        else if (Input.GetKeyDown(KeyCode.Alpha4))
+        {
+            SetGameSpeed(GameSpeed.Ultra);
+        }
+    }
+
+    public void SetGameSpeed(GameSpeed speed)
+    {
+        currentSpeed = speed;
+
+        switch (speed)
+        {
+            case GameSpeed.Paused:
+                Time.timeScale = 0f;
+                break;
+            case GameSpeed.Normal:
+                Time.timeScale = normalSpeed;
+                break;
+            case GameSpeed.Fast:
+                Time.timeScale = fastSpeed;
+                break;
+            case GameSpeed.Ultra:
+                Time.timeScale = ultraSpeed;
+                break;
+        }
+
+        OnSpeedChanged?.Invoke(speed);
+        Debug.Log($"Game speed changed to: {speed} (TimeScale: {Time.timeScale})");
+    }
+
+    public GameSpeed GetCurrentSpeed()
+    {
+        return currentSpeed;
+    }
+    #endregion
+
+    #region Game State Management
+    private void CheckHotelRequirements()
+    {
+        bool previousCanOpen = canOpenHotel;
+        canOpenHotel = hasEntrance && hasReception;
+
+        if (canOpenHotel && !previousCanOpen && currentGameState == GameState.Building)
+        {
+            currentGameState = GameState.PreOpening;
+            OnGameStateChanged?.Invoke(currentGameState);
+        }
+    }
+
+    public void OpenHotel()
+    {
+        if (canOpenHotel)
+        {
+            currentGameState = GameState.Operating;
+            OnGameStateChanged?.Invoke(currentGameState);
+            OnHotelOpened?.Invoke();
+            Debug.Log("Hotel is now open for business!");
+        }
+        else
+        {
+            Debug.LogWarning("Cannot open hotel: Missing requirements (Entrance: " + hasEntrance + ", Reception: " + hasReception + ")");
+        }
+    }
+
+    public void SetEntrance(bool value)
+    {
+        hasEntrance = value;
+        Debug.Log("Hotel entrance: " + (value ? "Added" : "Removed"));
+    }
+
+    public void SetReception(bool value)
+    {
+        hasReception = value;
+        Debug.Log("Hotel reception: " + (value ? "Added" : "Removed"));
+    }
+
+    private void UpdateGameState()
+    {
+        OnGameStateChanged?.Invoke(currentGameState);
+    }
+    #endregion
+
+    #region UI Updates
+    private void UpdateUI()
+    {
+        if (speedText != null)
+        {
+            speedText.text = $"Speed: {currentSpeed} ({Time.timeScale}x)";
+        }
+
+        if (gameStateText != null)
+        {
+            string stateInfo = $"State: {currentGameState}";
+            if (currentGameState == GameState.Building || currentGameState == GameState.PreOpening)
+            {
+                stateInfo += $"\nEntrance: {(hasEntrance ? "✓" : "✗")}";
+                stateInfo += $"\nReception: {(hasReception ? "✓" : "✗")}";
+                if (canOpenHotel)
+                {
+                    stateInfo += "\n[Ready to Open!]";
+                }
+            }
+            gameStateText.text = stateInfo;
+        }
+    }
+    #endregion
+
+    #region Utility Methods
+    public bool IsGamePaused()
+    {
+        return currentSpeed == GameSpeed.Paused || currentGameState == GameState.Paused;
+    }
+
+    public bool IsHotelOperating()
+    {
+        return currentGameState == GameState.Operating;
+    }
+
+    public bool IsBuilding()
+    {
+        return currentGameState == GameState.Building;
+    }
+    #endregion
+}

+ 421 - 0
Assets/Scripts/Managers/HotelManager.cs

@@ -0,0 +1,421 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Collections;
+
+public class HotelManager : MonoBehaviour
+{
+    public static HotelManager Instance { get; private set; }
+
+    [Header("Hotel Settings")]
+    [SerializeField] private int maxGuestsPerDay = 20;
+    [SerializeField] private float guestArrivalInterval = 30f; // seconds
+    [SerializeField] private Transform guestSpawnPoint;
+
+    [Header("Guest Prefabs")]
+    [SerializeField] private GameObject[] guestPrefabs;
+    [SerializeField] private GameObject defaultGuestPrefab;
+
+    [Header("Hotel Stats")]
+    [SerializeField] private float hotelRating = 3f; // 1 to 5 stars
+    [SerializeField] private int totalRooms = 0;
+    [SerializeField] private int availableRooms = 0;
+
+    private List<Room> hotelRooms = new List<Room>();
+    private List<Guest> currentGuests = new List<Guest>();
+    private List<Guest> waitingGuests = new List<Guest>();
+
+    private bool isHotelOpen = false;
+    private int guestsArrivedToday = 0;
+    private float timeUntilNextGuest = 0f;
+
+    // Events
+    public System.Action<Guest> OnGuestArrived;
+    public System.Action<Guest> OnGuestLeft;
+    public System.Action<Guest> OnGuestAssignedRoom;
+    public System.Action<Room> OnRoomAdded;
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+    }
+
+    private void Start()
+    {
+        SubscribeToEvents();
+        SetupSpawnPoint();
+
+        // Wait for hotel to open before spawning guests
+        if (GameManager.Instance != null)
+        {
+            GameManager.OnHotelOpened += OnHotelOpened;
+        }
+    }
+
+    private void OnDestroy()
+    {
+        UnsubscribeFromEvents();
+    }
+
+    private void Update()
+    {
+        if (isHotelOpen)
+        {
+            HandleGuestArrivals();
+            UpdateHotelStats();
+        }
+    }
+
+    #region Hotel Operations
+    private void OnHotelOpened()
+    {
+        isHotelOpen = true;
+        Debug.Log("Hotel is now open! Guests will start arriving.");
+
+        // Start spawning guests
+        timeUntilNextGuest = guestArrivalInterval;
+    }
+
+    private void HandleGuestArrivals()
+    {
+        if (!isHotelOpen) return;
+
+        timeUntilNextGuest -= Time.deltaTime;
+
+        if (timeUntilNextGuest <= 0 && guestsArrivedToday < maxGuestsPerDay)
+        {
+            SpawnGuest();
+
+            // Calculate next arrival time (with some randomness)
+            float randomFactor = UnityEngine.Random.Range(0.5f, 1.5f);
+            timeUntilNextGuest = guestArrivalInterval * randomFactor;
+
+            // Adjust based on hotel rating (higher rating = more guests)
+            timeUntilNextGuest /= (hotelRating / 3f);
+        }
+    }
+
+    private void SpawnGuest()
+    {
+        if (guestSpawnPoint == null)
+        {
+            Debug.LogWarning("No guest spawn point set!");
+            return;
+        }
+
+        // Choose guest type based on hotel rating
+        Guest.GuestType guestType = ChooseGuestType();
+        GameObject guestPrefab = ChooseGuestPrefab(guestType);
+
+        if (guestPrefab == null)
+        {
+            Debug.LogWarning("No guest prefab available!");
+            return;
+        }
+
+        GameObject guestObj = Instantiate(guestPrefab, guestSpawnPoint.position, guestSpawnPoint.rotation);
+        Guest guest = guestObj.GetComponent<Guest>();
+
+        if (guest == null)
+        {
+            guest = guestObj.AddComponent<Guest>();
+        }
+
+        // Set guest properties
+        guest.GuestName = GenerateGuestName();
+
+        // Set guest type based on hotel rating
+        SetGuestType(guest, guestType);
+
+        guestsArrivedToday++;
+        Debug.Log($"Guest {guest.GuestName} ({guestType}) has arrived!");
+    }
+
+    private Guest.GuestType ChooseGuestType()
+    {
+        // Higher rated hotels get more high-profile guests
+        float rand = UnityEngine.Random.value;
+
+        if (hotelRating >= 4.5f && rand < 0.1f)
+            return Guest.GuestType.Celebrity;
+        else if (hotelRating >= 4f && rand < 0.2f)
+            return Guest.GuestType.VIP;
+        else if (rand < 0.3f)
+            return Guest.GuestType.Business;
+        else if (rand < 0.5f)
+            return Guest.GuestType.Family;
+        else
+            return Guest.GuestType.Regular;
+    }
+
+    private GameObject ChooseGuestPrefab(Guest.GuestType guestType)
+    {
+        // For now, use default prefab. Later can be expanded for specific types
+        if (defaultGuestPrefab != null)
+            return defaultGuestPrefab;
+
+        if (guestPrefabs != null && guestPrefabs.Length > 0)
+            return guestPrefabs[UnityEngine.Random.Range(0, guestPrefabs.Length)];
+
+        return CreateDefaultGuestPrefab();
+    }
+
+    private GameObject CreateDefaultGuestPrefab()
+    {
+        // Create a simple guest prefab if none is provided
+        GameObject guest = GameObject.CreatePrimitive(PrimitiveType.Capsule);
+        guest.name = "Guest";
+
+        // Add NavMeshAgent
+        guest.AddComponent<UnityEngine.AI.NavMeshAgent>();
+
+        // Add Guest script
+        guest.AddComponent<Guest>();
+
+        // Set color
+        guest.GetComponent<Renderer>().material.color = Color.blue;
+
+        return guest;
+    }
+
+    private void SetGuestType(Guest guest, Guest.GuestType guestType)
+    {
+        // This would be expanded to set specific properties based on type
+        // For now, just log the type
+        Debug.Log($"Setting guest type to: {guestType}");
+    }
+
+    private string GenerateGuestName()
+    {
+        string[] firstNames = { "Alex", "Jamie", "Casey", "Jordan", "Riley", "Morgan", "Quinn", "Blake", "Drew", "Sage" };
+        string[] lastNames = { "Parker", "Reed", "Blake", "Gray", "Stone", "Fox", "Lane", "Cross", "Vale", "Knox" };
+
+        return $"{firstNames[UnityEngine.Random.Range(0, firstNames.Length)]} {lastNames[UnityEngine.Random.Range(0, lastNames.Length)]}";
+    }
+    #endregion
+
+    #region Room Management
+    public void AddRoom(Room room)
+    {
+        if (room != null)
+        {
+            hotelRooms.Add(room);
+            totalRooms++;
+            availableRooms++;
+
+            OnRoomAdded?.Invoke(room);
+            UpdateHotelStats();
+
+            Debug.Log($"Room added. Total rooms: {totalRooms}, Available: {availableRooms}");
+        }
+    }
+
+    public Room GetAvailableRoom(Guest guest)
+    {
+        // Find an available room that matches guest preferences
+        foreach (Room room in hotelRooms)
+        {
+            if (room.isComplete && !room.IsOccupied())
+            {
+                // For now, assign any available room
+                // Later can be expanded to match guest preferences
+                room.SetOccupied(true, guest);
+                availableRooms--;
+
+                Debug.Log($"Assigned room to {guest.GuestName}");
+                return room;
+            }
+        }
+
+        Debug.Log($"No available rooms for {guest.GuestName}");
+        return null;
+    }
+
+    public void ReleaseRoom(Room room)
+    {
+        if (room != null && room.IsOccupied())
+        {
+            room.SetOccupied(false);
+            availableRooms++;
+
+            Debug.Log($"Room released. Available rooms: {availableRooms}");
+        }
+    }
+
+    public List<Room> GetAllRooms()
+    {
+        return new List<Room>(hotelRooms);
+    }
+
+    public int GetAvailableRoomCount()
+    {
+        return availableRooms;
+    }
+    #endregion
+
+    #region Guest Management
+    private void SubscribeToEvents()
+    {
+        Guest.OnGuestArrived += OnGuestArrivedHandler;
+        Guest.OnGuestLeft += OnGuestLeftHandler;
+        Guest.OnGuestAssignedRoom += OnGuestAssignedRoomHandler;
+    }
+
+    private void UnsubscribeFromEvents()
+    {
+        Guest.OnGuestArrived -= OnGuestArrivedHandler;
+        Guest.OnGuestLeft -= OnGuestLeftHandler;
+        Guest.OnGuestAssignedRoom -= OnGuestAssignedRoomHandler;
+    }
+
+    private void OnGuestArrivedHandler(Guest guest)
+    {
+        currentGuests.Add(guest);
+        OnGuestArrived?.Invoke(guest);
+
+        Debug.Log($"Hotel Manager: {guest.GuestName} has arrived. Current guests: {currentGuests.Count}");
+    }
+
+    private void OnGuestLeftHandler(Guest guest)
+    {
+        currentGuests.Remove(guest);
+        waitingGuests.Remove(guest);
+
+        // Release room if guest had one
+        if (guest.AssignedRoom != null)
+        {
+            ReleaseRoom(guest.AssignedRoom);
+        }
+
+        OnGuestLeft?.Invoke(guest);
+        Debug.Log($"Hotel Manager: {guest.GuestName} has left. Current guests: {currentGuests.Count}");
+    }
+
+    private void OnGuestAssignedRoomHandler(Guest guest)
+    {
+        waitingGuests.Remove(guest);
+        OnGuestAssignedRoom?.Invoke(guest);
+
+        Debug.Log($"Hotel Manager: {guest.GuestName} has been assigned a room");
+    }
+
+    public List<Guest> GetCurrentGuests()
+    {
+        return new List<Guest>(currentGuests);
+    }
+
+    public List<Guest> GetWaitingGuests()
+    {
+        return new List<Guest>(waitingGuests);
+    }
+    #endregion
+
+    #region Hotel Statistics
+    private void UpdateHotelStats()
+    {
+        // Calculate hotel rating based on guest satisfaction
+        if (currentGuests.Count > 0)
+        {
+            float totalSatisfaction = 0f;
+            int guestsWithFeedback = 0;
+
+            foreach (Guest guest in currentGuests)
+            {
+                if (guest.AssignedRoom != null) // Only count guests who have checked in
+                {
+                    totalSatisfaction += guest.SatisfactionLevel;
+                    guestsWithFeedback++;
+                }
+            }
+
+            if (guestsWithFeedback > 0)
+            {
+                float averageSatisfaction = totalSatisfaction / guestsWithFeedback;
+
+                // Slowly adjust hotel rating based on satisfaction
+                float targetRating = 1f + (averageSatisfaction * 4f); // Convert 0-1 to 1-5 scale
+                hotelRating = Mathf.Lerp(hotelRating, targetRating, Time.deltaTime * 0.1f);
+
+                hotelRating = Mathf.Clamp(hotelRating, 1f, 5f);
+            }
+        }
+    }
+
+    public float GetHotelRating()
+    {
+        return hotelRating;
+    }
+
+    public int GetTotalGuests()
+    {
+        return currentGuests.Count;
+    }
+
+    public float GetOccupancyRate()
+    {
+        if (totalRooms == 0) return 0f;
+        return (float)(totalRooms - availableRooms) / totalRooms;
+    }
+    #endregion
+
+    #region Utility Methods
+    private void SetupSpawnPoint()
+    {
+        if (guestSpawnPoint == null)
+        {
+            // Create a default spawn point
+            GameObject spawnObj = new GameObject("Guest Spawn Point");
+            spawnObj.transform.position = new Vector3(0, 0, -15f); // Outside the initial room
+            guestSpawnPoint = spawnObj.transform;
+            spawnObj.transform.SetParent(this.transform);
+        }
+    }
+
+    public bool IsHotelOpen()
+    {
+        return isHotelOpen;
+    }
+
+    private void OnDrawGizmosSelected()
+    {
+        if (guestSpawnPoint != null)
+        {
+            Gizmos.color = Color.green;
+            Gizmos.DrawWireSphere(guestSpawnPoint.position, 1f);
+            Gizmos.DrawWireCube(guestSpawnPoint.position + Vector3.up, Vector3.one * 0.5f);
+        }
+    }
+    #endregion
+}
+
+// Extension methods for Room class
+public static class RoomExtensions
+{
+    private static Dictionary<Room, Guest> roomOccupancy = new Dictionary<Room, Guest>();
+
+    public static bool IsOccupied(this Room room)
+    {
+        return roomOccupancy.ContainsKey(room) && roomOccupancy[room] != null;
+    }
+
+    public static void SetOccupied(this Room room, bool occupied, Guest guest = null)
+    {
+        if (occupied && guest != null)
+        {
+            roomOccupancy[room] = guest;
+        }
+        else
+        {
+            roomOccupancy.Remove(room);
+        }
+    }
+
+    public static Guest GetOccupant(this Room room)
+    {
+        return roomOccupancy.ContainsKey(room) ? roomOccupancy[room] : null;
+    }
+}

+ 480 - 0
Assets/Scripts/Managers/StaffManager.cs

@@ -0,0 +1,480 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Linq;
+
+public class StaffManager : MonoBehaviour
+{
+    public static StaffManager Instance { get; private set; }
+
+    [Header("Staff Management")]
+    [SerializeField] private List<Staff> allStaff = new List<Staff>();
+    [SerializeField] private int maxStaffCount = 50;
+
+    [Header("Hiring Settings")]
+    [SerializeField] private float baseHiringCost = 1000f;
+    [SerializeField] private float dailyWageCost = 100f;
+
+    [Header("Staff Prefabs")]
+    [SerializeField] private GameObject receptionistPrefab;
+    [SerializeField] private GameObject housekeeperPrefab;
+    [SerializeField] private GameObject chefPrefab;
+    [SerializeField] private GameObject janitorPrefab;
+    [SerializeField] private GameObject bellhopPrefab;
+    [SerializeField] private GameObject valetPrefab;
+    [SerializeField] private GameObject defaultStaffPrefab;
+
+    [Header("Spawn Points")]
+    [SerializeField] private Transform staffSpawnPoint;
+
+    private Queue<StaffTask> pendingTasks = new Queue<StaffTask>();
+    private Dictionary<Staff.StaffType, List<Staff>> staffByType = new Dictionary<Staff.StaffType, List<Staff>>();
+
+    // Events
+    public System.Action<Staff> OnStaffHired;
+    public System.Action<Staff> OnStaffFired;
+    public System.Action<StaffTask> OnTaskCreated;
+    public System.Action<StaffTask> OnTaskCompleted;
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+    }
+
+    private void Start()
+    {
+        InitializeStaffCategories();
+        SubscribeToEvents();
+        SetupSpawnPoint();
+
+        // Hire initial staff
+        HireInitialStaff();
+    }
+
+    private void OnDestroy()
+    {
+        UnsubscribeFromEvents();
+    }
+
+    private void Update()
+    {
+        ProcessPendingTasks();
+        AutoAssignTasks();
+    }
+
+    #region Initialization
+    private void InitializeStaffCategories()
+    {
+        foreach (Staff.StaffType staffType in System.Enum.GetValues(typeof(Staff.StaffType)))
+        {
+            staffByType[staffType] = new List<Staff>();
+        }
+    }
+
+    private void SubscribeToEvents()
+    {
+        Staff.OnStaffHired += OnStaffHiredHandler;
+        Staff.OnStaffCompleteTask += OnStaffCompleteTaskHandler;
+        Staff.OnTaskAssigned += OnTaskAssignedHandler;
+
+        // Subscribe to guest events to create tasks
+        if (HotelManager.Instance != null)
+        {
+            HotelManager.Instance.OnGuestArrived += OnGuestArrived;
+        }
+    }
+
+    private void UnsubscribeFromEvents()
+    {
+        Staff.OnStaffHired -= OnStaffHiredHandler;
+        Staff.OnStaffCompleteTask -= OnStaffCompleteTaskHandler;
+        Staff.OnTaskAssigned -= OnTaskAssignedHandler;
+
+        if (HotelManager.Instance != null)
+        {
+            HotelManager.Instance.OnGuestArrived -= OnGuestArrived;
+        }
+    }
+
+    private void SetupSpawnPoint()
+    {
+        if (staffSpawnPoint == null)
+        {
+            GameObject spawn = new GameObject("Staff Spawn Point");
+            spawn.transform.position = new Vector3(-5f, 0f, -5f);
+            staffSpawnPoint = spawn.transform;
+            spawn.transform.SetParent(this.transform);
+        }
+    }
+
+    private void HireInitialStaff()
+    {
+        // Hire minimum required staff
+        HireStaff(Staff.StaffType.Receptionist);
+        HireStaff(Staff.StaffType.Housekeeper);
+    }
+    #endregion
+
+    #region Staff Hiring and Management
+    public bool HireStaff(Staff.StaffType staffType)
+    {
+        if (allStaff.Count >= maxStaffCount)
+        {
+            Debug.LogWarning("Cannot hire more staff: Maximum capacity reached");
+            return false;
+        }
+
+        GameObject staffPrefab = GetStaffPrefab(staffType);
+        if (staffPrefab == null)
+        {
+            Debug.LogWarning($"No prefab available for staff type: {staffType}");
+            return false;
+        }
+
+        // Spawn staff member
+        Vector3 spawnPosition = staffSpawnPoint != null ? staffSpawnPoint.position : Vector3.zero;
+        GameObject staffObj = Instantiate(staffPrefab, spawnPosition, Quaternion.identity);
+
+        Staff staffComponent = staffObj.GetComponent<Staff>();
+        if (staffComponent == null)
+        {
+            staffComponent = staffObj.AddComponent<Staff>();
+        }
+
+        // Set staff properties
+        ConfigureNewStaff(staffComponent, staffType);
+
+        Debug.Log($"Hired new {staffType}: {staffComponent.StaffName}");
+        return true;
+    }
+
+    private GameObject GetStaffPrefab(Staff.StaffType staffType)
+    {
+        switch (staffType)
+        {
+            case Staff.StaffType.Receptionist:
+                return receptionistPrefab ?? CreateDefaultStaffPrefab("Receptionist", Color.blue);
+            case Staff.StaffType.Housekeeper:
+                return housekeeperPrefab ?? CreateDefaultStaffPrefab("Housekeeper", Color.green);
+            case Staff.StaffType.Chef:
+                return chefPrefab ?? CreateDefaultStaffPrefab("Chef", Color.red);
+            case Staff.StaffType.Janitor:
+                return janitorPrefab ?? CreateDefaultStaffPrefab("Janitor", Color.yellow);
+            case Staff.StaffType.Bellhop:
+                return bellhopPrefab ?? CreateDefaultStaffPrefab("Bellhop", Color.cyan);
+            case Staff.StaffType.Valet:
+                return valetPrefab ?? CreateDefaultStaffPrefab("Valet", Color.magenta);
+            default:
+                return defaultStaffPrefab ?? CreateDefaultStaffPrefab("Staff", Color.gray);
+        }
+    }
+
+    private GameObject CreateDefaultStaffPrefab(string name, Color color)
+    {
+        GameObject staff = GameObject.CreatePrimitive(PrimitiveType.Capsule);
+        staff.name = name;
+
+        // Add NavMeshAgent with error handling
+        try
+        {
+            var agent = staff.AddComponent<UnityEngine.AI.NavMeshAgent>();
+            agent.enabled = false; // Disable until NavMesh is available
+        }
+        catch (System.Exception e)
+        {
+            Debug.LogWarning($"Failed to add NavMeshAgent to {name}: {e.Message}. NavMesh needs to be baked first.");
+        }
+
+        // Set color
+        staff.GetComponent<Renderer>().material.color = color;
+
+        // Add Staff script will be added by the HireStaff method
+
+        return staff;
+    }
+
+    private void ConfigureNewStaff(Staff staff, Staff.StaffType staffType)
+    {
+        // Set random efficiency
+        float efficiency = UnityEngine.Random.Range(0.6f, 1f);
+
+        // Configure based on type (using reflection or direct property access)
+        staff.name = $"{staffType}_{allStaff.Count + 1}";
+    }
+
+    public bool FireStaff(Staff staff)
+    {
+        if (staff == null || !allStaff.Contains(staff))
+        {
+            return false;
+        }
+
+        // Clear all tasks
+        staff.ClearAllTasks();
+
+        // Remove from lists
+        allStaff.Remove(staff);
+
+        foreach (var staffList in staffByType.Values)
+        {
+            staffList.Remove(staff);
+        }
+
+        OnStaffFired?.Invoke(staff);
+
+        // Destroy the game object
+        Destroy(staff.gameObject);
+
+        Debug.Log($"Fired staff member: {staff.StaffName}");
+        return true;
+    }
+
+    public List<Staff> GetStaffByType(Staff.StaffType staffType)
+    {
+        return staffByType.ContainsKey(staffType) ? new List<Staff>(staffByType[staffType]) : new List<Staff>();
+    }
+
+    public List<Staff> GetAvailableStaff(Staff.StaffType staffType)
+    {
+        return GetStaffByType(staffType).Where(s => s.IsAvailable).ToList();
+    }
+
+    public List<Staff> GetAllStaff()
+    {
+        return new List<Staff>(allStaff);
+    }
+
+    public int GetStaffCount(Staff.StaffType staffType)
+    {
+        return GetStaffByType(staffType).Count;
+    }
+    #endregion
+
+    #region Task Management
+    public void CreateTask(TaskType taskType, Vector3 location, GameObject target = null, Room targetRoom = null, int priority = 1)
+    {
+        StaffTask task = new StaffTask
+        {
+            taskType = taskType,
+            location = location,
+            targetGuest = target,
+            targetRoom = targetRoom,
+            priority = priority,
+            duration = GetTaskDuration(taskType),
+            isUrgent = priority >= 8,
+            description = GetTaskDescription(taskType)
+        };
+
+        pendingTasks.Enqueue(task);
+        OnTaskCreated?.Invoke(task);
+
+        Debug.Log($"Created task: {taskType} at {location}");
+    }
+
+    private void ProcessPendingTasks()
+    {
+        while (pendingTasks.Count > 0)
+        {
+            StaffTask task = pendingTasks.Dequeue();
+
+            if (AssignTaskToAvailableStaff(task))
+            {
+                Debug.Log($"Task assigned: {task.taskType}");
+            }
+            else
+            {
+                // Re-queue task if no available staff
+                pendingTasks.Enqueue(task);
+                break; // Avoid infinite loop
+            }
+        }
+    }
+
+    private bool AssignTaskToAvailableStaff(StaffTask task)
+    {
+        // Find staff members who can handle this task
+        List<Staff> capableStaff = allStaff.Where(s => s.CanHandleTask(task.taskType)).ToList();
+
+        if (capableStaff.Count == 0)
+        {
+            Debug.LogWarning($"No staff available to handle task: {task.taskType}");
+            return false;
+        }
+
+        // Find the best available staff member
+        Staff bestStaff = capableStaff
+            .Where(s => s.IsAvailable || s.TaskCount < 3) // Allow up to 3 queued tasks
+            .OrderBy(s => s.TaskCount)
+            .ThenByDescending(s => s.Efficiency)
+            .FirstOrDefault();
+
+        if (bestStaff == null)
+        {
+            return false; // No available staff
+        }
+
+        bestStaff.AssignTask(task);
+        return true;
+    }
+
+    private void AutoAssignTasks()
+    {
+        // Automatically create tasks based on hotel needs
+
+        // Check if guests need check-in assistance
+        if (HotelManager.Instance != null)
+        {
+            var waitingGuests = HotelManager.Instance.GetWaitingGuests();
+            foreach (var guest in waitingGuests)
+            {
+                if (guest.CurrentState == Guest.GuestState.LookingForReception)
+                {
+                    CreateTask(TaskType.CheckInGuest, guest.transform.position, guest.gameObject, null, 7);
+                }
+            }
+        }
+
+        // Create random maintenance tasks
+        if (UnityEngine.Random.value < 0.001f) // Very low chance per frame
+        {
+            CreateRandomMaintenanceTask();
+        }
+    }
+
+    private void CreateRandomMaintenanceTask()
+    {
+        TaskType[] maintenanceTasks = { TaskType.CleanArea, TaskType.Maintenance };
+        TaskType randomTask = maintenanceTasks[UnityEngine.Random.Range(0, maintenanceTasks.Length)];
+
+        Vector3 randomLocation = new Vector3(
+            UnityEngine.Random.Range(-10f, 10f),
+            0f,
+            UnityEngine.Random.Range(-10f, 10f)
+        );
+
+        CreateTask(randomTask, randomLocation, null, null, 3);
+    }
+
+    private float GetTaskDuration(TaskType taskType)
+    {
+        switch (taskType)
+        {
+            case TaskType.CheckInGuest: return 15f;
+            case TaskType.CleanRoom: return 30f;
+            case TaskType.DeliverService: return 10f;
+            case TaskType.PrepareFood: return 20f;
+            case TaskType.AnswerPhone: return 5f;
+            case TaskType.CarryLuggage: return 8f;
+            case TaskType.ParkCar: return 12f;
+            case TaskType.CleanArea: return 25f;
+            case TaskType.Maintenance: return 45f;
+            case TaskType.LaundryService: return 60f;
+            default: return 15f;
+        }
+    }
+
+    private string GetTaskDescription(TaskType taskType)
+    {
+        switch (taskType)
+        {
+            case TaskType.CheckInGuest: return "Check in arriving guest";
+            case TaskType.CleanRoom: return "Clean and prepare guest room";
+            case TaskType.DeliverService: return "Deliver room service";
+            case TaskType.PrepareFood: return "Prepare meal in kitchen";
+            case TaskType.AnswerPhone: return "Answer reception phone";
+            case TaskType.CarryLuggage: return "Assist guest with luggage";
+            case TaskType.ParkCar: return "Park guest's vehicle";
+            case TaskType.CleanArea: return "Clean common area";
+            case TaskType.Maintenance: return "Perform maintenance work";
+            case TaskType.LaundryService: return "Handle laundry service";
+            default: return "General hotel task";
+        }
+    }
+    #endregion
+
+    #region Event Handlers
+    private void OnStaffHiredHandler(Staff staff)
+    {
+        if (!allStaff.Contains(staff))
+        {
+            allStaff.Add(staff);
+
+            if (staffByType.ContainsKey(staff.Type))
+            {
+                staffByType[staff.Type].Add(staff);
+            }
+        }
+
+        OnStaffHired?.Invoke(staff);
+    }
+
+    private void OnStaffCompleteTaskHandler(Staff staff)
+    {
+        // Handle task completion effects
+        Debug.Log($"{staff.StaffName} completed a task");
+    }
+
+    private void OnTaskAssignedHandler(Staff staff, StaffTask task)
+    {
+        Debug.Log($"Task {task.taskType} assigned to {staff.StaffName}");
+    }
+
+    private void OnGuestArrived(Guest guest)
+    {
+        // Create check-in task for arriving guests
+        CreateTask(TaskType.CheckInGuest, guest.transform.position, guest.gameObject, null, 6);
+    }
+    #endregion
+
+    #region Statistics and Information
+    public int GetTotalStaffCount()
+    {
+        return allStaff.Count;
+    }
+
+    public float GetTotalDailyWages()
+    {
+        return allStaff.Count * dailyWageCost;
+    }
+
+    public Dictionary<Staff.StaffType, int> GetStaffCountByType()
+    {
+        Dictionary<Staff.StaffType, int> counts = new Dictionary<Staff.StaffType, int>();
+
+        foreach (var kvp in staffByType)
+        {
+            counts[kvp.Key] = kvp.Value.Count;
+        }
+
+        return counts;
+    }
+
+    public List<Staff> GetBusiestStaff()
+    {
+        return allStaff.OrderByDescending(s => s.TaskCount).Take(5).ToList();
+    }
+
+    public float GetAverageStaffEfficiency()
+    {
+        if (allStaff.Count == 0) return 0f;
+
+        return allStaff.Average(s => s.Efficiency);
+    }
+    #endregion
+
+    #region Debug and Visualization
+    private void OnDrawGizmosSelected()
+    {
+        if (staffSpawnPoint != null)
+        {
+            Gizmos.color = Color.yellow;
+            Gizmos.DrawWireSphere(staffSpawnPoint.position, 1f);
+            Gizmos.DrawWireCube(staffSpawnPoint.position + Vector3.up, Vector3.one * 0.8f);
+        }
+    }
+    #endregion
+}

+ 557 - 0
Assets/Scripts/Staff/Staff.cs

@@ -0,0 +1,557 @@
+using UnityEngine;
+using UnityEngine.AI;
+using System.Collections.Generic;
+using System;
+
+[RequireComponent(typeof(NavMeshAgent))]
+public class Staff : MonoBehaviour
+{
+    [Header("Staff Info")]
+    [SerializeField] private string staffName;
+    [SerializeField] private StaffType staffType = StaffType.Receptionist;
+    [SerializeField] private float efficiency = 0.7f; // 0 to 1
+    [SerializeField] private float workSpeed = 1f;
+
+    [Header("Work Settings")]
+    [SerializeField] private Transform workStation;
+    [SerializeField] private float workRadius = 5f;
+    [SerializeField] private LayerMask workLayerMask = -1;
+
+    [Header("Movement")]
+    [SerializeField] private float walkSpeed = 3f;
+    [SerializeField] private float runSpeed = 5f;
+
+    [Header("Visual")]
+    [SerializeField] private GameObject workIndicator;
+    [SerializeField] private SpriteRenderer statusIcon;
+
+    private NavMeshAgent agent;
+    private StaffState currentState = StaffState.Idle;
+    private List<StaffTask> taskQueue = new List<StaffTask>();
+    private StaffTask currentTask;
+
+    private Vector3 homePosition;
+    private float workTimer = 0f;
+    private float shiftStartTime;
+    private float shiftDuration = 8f * 60f; // 8 hours in game minutes
+
+    // Events
+    public static event Action<Staff> OnStaffHired;
+    public static event Action<Staff> OnStaffCompleteTask;
+    public static event Action<Staff, StaffTask> OnTaskAssigned;
+
+    public enum StaffState
+    {
+        Idle,
+        MovingToTask,
+        Working,
+        OnBreak,
+        OffDuty
+    }
+
+    public enum StaffType
+    {
+        Receptionist,
+        Housekeeper,
+        Chef,
+        Janitor,
+        Bellhop,
+        Valet,
+        Security,
+        Manager
+    }
+
+    #region Properties
+    public string StaffName
+    {
+        get => string.IsNullOrEmpty(staffName) ? GenerateRandomName() : staffName;
+        set => staffName = value;
+    }
+
+    public StaffState CurrentState => currentState;
+    public StaffType Type => staffType;
+    public float Efficiency => efficiency;
+    public Transform WorkStation => workStation;
+    public int TaskCount => taskQueue.Count;
+    public bool IsAvailable => currentState == StaffState.Idle && taskQueue.Count == 0;
+    #endregion
+
+    private void Awake()
+    {
+        agent = GetComponent<NavMeshAgent>();
+        agent.speed = walkSpeed;
+
+        SetupWorkIndicator();
+        homePosition = transform.position;
+        shiftStartTime = Time.time;
+    }
+
+    private void Start()
+    {
+        SetState(StaffState.Idle);
+        OnStaffHired?.Invoke(this);
+
+        // Find or create work station based on staff type
+        SetupWorkStation();
+    }
+
+    private void Update()
+    {
+        UpdateWorkShift();
+        UpdateTaskExecution();
+        UpdateMovement();
+        UpdateVisuals();
+    }
+
+    #region State Management
+    private void SetState(StaffState newState)
+    {
+        currentState = newState;
+        Debug.Log($"Staff {StaffName} ({staffType}) state changed to: {newState}");
+
+        switch (newState)
+        {
+            case StaffState.Idle:
+                agent.speed = walkSpeed;
+                if (workStation != null)
+                    MoveToPosition(workStation.position);
+                break;
+            case StaffState.MovingToTask:
+                agent.speed = currentTask?.isUrgent == true ? runSpeed : walkSpeed;
+                break;
+            case StaffState.Working:
+                agent.speed = 0f;
+                StartWork();
+                break;
+            case StaffState.OnBreak:
+                MoveToPosition(homePosition);
+                break;
+        }
+    }
+
+    private void UpdateWorkShift()
+    {
+        float timeWorked = Time.time - shiftStartTime;
+
+        if (timeWorked > shiftDuration)
+        {
+            if (currentState != StaffState.OffDuty)
+            {
+                SetState(StaffState.OffDuty);
+                ClearAllTasks();
+            }
+        }
+        else if (timeWorked % (2f * 60f) < Time.deltaTime) // Break every 2 game hours
+        {
+            if (currentState == StaffState.Idle && UnityEngine.Random.value < 0.3f)
+            {
+                TakeBreak();
+            }
+        }
+    }
+
+    private void TakeBreak()
+    {
+        SetState(StaffState.OnBreak);
+
+        // Return to work after break
+        Invoke(nameof(ReturnFromBreak), 30f); // 30 second break
+    }
+
+    private void ReturnFromBreak()
+    {
+        if (currentState == StaffState.OnBreak)
+        {
+            SetState(StaffState.Idle);
+        }
+    }
+    #endregion
+
+    #region Task Management
+    public void AssignTask(StaffTask task)
+    {
+        if (task == null) return;
+
+        taskQueue.Add(task);
+        OnTaskAssigned?.Invoke(this, task);
+
+        Debug.Log($"Task assigned to {StaffName}: {task.taskType}");
+
+        // If idle, start working immediately
+        if (currentState == StaffState.Idle)
+        {
+            ProcessNextTask();
+        }
+    }
+
+    private void ProcessNextTask()
+    {
+        if (taskQueue.Count == 0)
+        {
+            SetState(StaffState.Idle);
+            return;
+        }
+
+        // Get highest priority task
+        taskQueue.Sort((a, b) => b.priority.CompareTo(a.priority));
+        currentTask = taskQueue[0];
+        taskQueue.RemoveAt(0);
+
+        // Move to task location
+        if (currentTask.location != Vector3.zero)
+        {
+            SetState(StaffState.MovingToTask);
+            MoveToPosition(currentTask.location);
+        }
+        else
+        {
+            SetState(StaffState.Working);
+        }
+    }
+
+    private void UpdateTaskExecution()
+    {
+        if (currentTask == null) return;
+
+        switch (currentState)
+        {
+            case StaffState.MovingToTask:
+                if (HasReachedDestination())
+                {
+                    SetState(StaffState.Working);
+                }
+                break;
+
+            case StaffState.Working:
+                workTimer += Time.deltaTime * efficiency * workSpeed;
+
+                if (workTimer >= currentTask.duration)
+                {
+                    CompleteCurrentTask();
+                }
+                break;
+        }
+    }
+
+    private void StartWork()
+    {
+        workTimer = 0f;
+
+        if (workIndicator != null)
+            workIndicator.SetActive(true);
+
+        Debug.Log($"{StaffName} started working on: {currentTask.taskType}");
+    }
+
+    private void CompleteCurrentTask()
+    {
+        if (currentTask == null) return;
+
+        Debug.Log($"{StaffName} completed task: {currentTask.taskType}");
+
+        // Execute task effects
+        ExecuteTaskEffects(currentTask);
+
+        OnStaffCompleteTask?.Invoke(this);
+
+        if (workIndicator != null)
+            workIndicator.SetActive(false);
+
+        currentTask = null;
+        workTimer = 0f;
+
+        // Process next task
+        ProcessNextTask();
+    }
+
+    private void ExecuteTaskEffects(StaffTask task)
+    {
+        switch (task.taskType)
+        {
+            case TaskType.CheckInGuest:
+                // Handle guest check-in
+                if (task.targetGuest != null)
+                {
+                    task.targetGuest.GetComponent<Guest>()?.AssignRoom(HotelManager.Instance?.GetAvailableRoom(task.targetGuest.GetComponent<Guest>()));
+                }
+                break;
+
+            case TaskType.CleanRoom:
+                // Mark room as clean
+                if (task.targetRoom != null)
+                {
+                    Debug.Log($"Room cleaned by {StaffName}");
+                }
+                break;
+
+            case TaskType.DeliverService:
+                // Deliver room service
+                Debug.Log($"Service delivered by {StaffName}");
+                break;
+        }
+    }
+
+    public void ClearAllTasks()
+    {
+        taskQueue.Clear();
+        currentTask = null;
+        workTimer = 0f;
+
+        if (workIndicator != null)
+            workIndicator.SetActive(false);
+    }
+
+    public bool CanHandleTask(TaskType taskType)
+    {
+        switch (staffType)
+        {
+            case StaffType.Receptionist:
+                return taskType == TaskType.CheckInGuest || taskType == TaskType.AnswerPhone;
+            case StaffType.Housekeeper:
+                return taskType == TaskType.CleanRoom || taskType == TaskType.LaundryService;
+            case StaffType.Chef:
+                return taskType == TaskType.PrepareFood || taskType == TaskType.DeliverService;
+            case StaffType.Janitor:
+                return taskType == TaskType.CleanArea || taskType == TaskType.Maintenance;
+            case StaffType.Bellhop:
+                return taskType == TaskType.CarryLuggage || taskType == TaskType.DeliverService;
+            case StaffType.Valet:
+                return taskType == TaskType.ParkCar || taskType == TaskType.CarryLuggage;
+            default:
+                return false;
+        }
+    }
+    #endregion
+
+    #region Movement
+    private bool MoveToPosition(Vector3 position)
+    {
+        if (!agent.enabled || !agent.isOnNavMesh) return false;
+
+        try
+        {
+            agent.SetDestination(position);
+            return true;
+        }
+        catch (System.Exception e)
+        {
+            Debug.LogWarning($"Failed to set destination for {StaffName}: {e.Message}");
+            return false;
+        }
+    }
+
+    private bool HasReachedDestination()
+    {
+        return agent.enabled && agent.isOnNavMesh && !agent.pathPending && agent.remainingDistance < 0.5f;
+    }
+
+    private void UpdateMovement()
+    {
+        // Update animation or visual effects based on movement
+        if (agent.enabled && agent.velocity.magnitude > 0.1f)
+        {
+            // Staff is moving
+        }
+        else
+        {
+            // Staff is stationary
+        }
+    }
+    #endregion
+
+    #region Work Station Setup
+    private void SetupWorkStation()
+    {
+        if (workStation == null)
+        {
+            workStation = FindWorkStation();
+        }
+
+        if (workStation == null)
+        {
+            CreateDefaultWorkStation();
+        }
+    }
+
+    private Transform FindWorkStation()
+    {
+        GameObject[] stations = null;
+
+        try
+        {
+            switch (staffType)
+            {
+                case StaffType.Receptionist:
+                    stations = GameObject.FindGameObjectsWithTag("Reception");
+                    break;
+                case StaffType.Chef:
+                    stations = GameObject.FindGameObjectsWithTag("Kitchen");
+                    break;
+                case StaffType.Housekeeper:
+                case StaffType.Janitor:
+                    // These staff types move around, no fixed station
+                    return transform; // Use current position
+            }
+        }
+        catch (UnityException)
+        {
+            Debug.LogWarning($"Tag for {staffType} not defined. Staff will create default work station.");
+            return null;
+        }
+
+        if (stations != null && stations.Length > 0)
+        {
+            return stations[0].transform;
+        }
+
+        return null;
+    }
+
+    private void CreateDefaultWorkStation()
+    {
+        GameObject station = new GameObject($"{StaffName} Work Station");
+        station.transform.position = transform.position;
+        workStation = station.transform;
+
+        // Add visual indicator
+        GameObject indicator = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
+        indicator.transform.SetParent(station.transform);
+        indicator.transform.localPosition = Vector3.zero;
+        indicator.transform.localScale = new Vector3(0.5f, 0.1f, 0.5f);
+        indicator.GetComponent<Renderer>().material.color = GetStaffTypeColor();
+        indicator.name = $"{staffType} Station";
+    }
+
+    private Color GetStaffTypeColor()
+    {
+        switch (staffType)
+        {
+            case StaffType.Receptionist: return Color.blue;
+            case StaffType.Housekeeper: return Color.green;
+            case StaffType.Chef: return Color.red;
+            case StaffType.Janitor: return Color.yellow;
+            case StaffType.Bellhop: return Color.cyan;
+            case StaffType.Valet: return Color.magenta;
+            default: return Color.gray;
+        }
+    }
+    #endregion
+
+    #region Visual Setup
+    private void SetupWorkIndicator()
+    {
+        if (workIndicator == null)
+        {
+            workIndicator = new GameObject("Work Indicator");
+            workIndicator.transform.SetParent(transform);
+            workIndicator.transform.localPosition = Vector3.up * 2f;
+
+            // Create a simple spinning cube as work indicator
+            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
+            cube.transform.SetParent(workIndicator.transform);
+            cube.transform.localScale = Vector3.one * 0.3f;
+            cube.GetComponent<Renderer>().material.color = Color.yellow;
+
+            // Add spinning animation
+            cube.AddComponent<SpinIndicator>();
+
+            workIndicator.SetActive(false);
+        }
+    }
+
+    private void UpdateVisuals()
+    {
+        // Update staff appearance based on state
+        Renderer renderer = GetComponent<Renderer>();
+        if (renderer != null)
+        {
+            Color baseColor = GetStaffTypeColor();
+
+            switch (currentState)
+            {
+                case StaffState.Working:
+                    renderer.material.color = Color.Lerp(baseColor, Color.white, 0.3f);
+                    break;
+                case StaffState.OnBreak:
+                    renderer.material.color = Color.Lerp(baseColor, Color.gray, 0.5f);
+                    break;
+                case StaffState.OffDuty:
+                    renderer.material.color = Color.Lerp(baseColor, Color.black, 0.5f);
+                    break;
+                default:
+                    renderer.material.color = baseColor;
+                    break;
+            }
+        }
+    }
+    #endregion
+
+    #region Utility Methods
+    private string GenerateRandomName()
+    {
+        string[] firstNames = { "Alice", "Bob", "Carol", "Dave", "Emma", "Frank", "Grace", "Henry", "Iris", "Jack" };
+        string[] lastNames = { "Anderson", "Brown", "Clark", "Davis", "Evans", "Foster", "Green", "Harris", "Johnson", "King" };
+
+        return $"{firstNames[UnityEngine.Random.Range(0, firstNames.Length)]} {lastNames[UnityEngine.Random.Range(0, lastNames.Length)]}";
+    }
+
+    private void OnMouseDown()
+    {
+        // Show staff info when clicked
+        Debug.Log($"Staff: {StaffName} ({staffType})\nState: {currentState}\nTasks: {taskQueue.Count}\nEfficiency: {efficiency:P0}");
+    }
+
+    private void OnDrawGizmosSelected()
+    {
+        // Draw work radius
+        Gizmos.color = Color.blue;
+        Gizmos.DrawWireSphere(transform.position, workRadius);
+
+        // Draw line to work station
+        if (workStation != null)
+        {
+            Gizmos.color = Color.green;
+            Gizmos.DrawLine(transform.position, workStation.position);
+        }
+    }
+    #endregion
+}
+
+// Supporting classes
+[System.Serializable]
+public class StaffTask
+{
+    public TaskType taskType;
+    public Vector3 location;
+    public float duration = 10f; // seconds
+    public int priority = 1; // 1-10, higher is more urgent
+    public bool isUrgent = false;
+    public GameObject targetGuest;
+    public Room targetRoom;
+    public string description;
+}
+
+public enum TaskType
+{
+    CheckInGuest,
+    CleanRoom,
+    DeliverService,
+    PrepareFood,
+    AnswerPhone,
+    CarryLuggage,
+    ParkCar,
+    CleanArea,
+    Maintenance,
+    LaundryService
+}
+
+// Helper component for work indicator animation
+public class SpinIndicator : MonoBehaviour
+{
+    [SerializeField] private float spinSpeed = 90f;
+
+    private void Update()
+    {
+        transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime);
+    }
+}

+ 353 - 0
Assets/Scripts/Systems/HotelRatingSystem.cs

@@ -0,0 +1,353 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.Linq;
+
+public class HotelRatingSystem : MonoBehaviour
+{
+    public static HotelRatingSystem Instance { get; private set; }
+
+    [Header("Rating Components")]
+    [SerializeField] private float baseRating = 3f;
+    [SerializeField] private float currentOverallRating = 3f;
+
+    [Header("Rating Weights")]
+    [SerializeField] private float guestSatisfactionWeight = 0.4f;
+    [SerializeField] private float facilityQualityWeight = 0.25f;
+    [SerializeField] private float staffEfficiencyWeight = 0.15f;
+    [SerializeField] private float roomQualityWeight = 0.1f;
+    [SerializeField] private float serviceSpeedWeight = 0.1f;
+
+    [Header("Rating History")]
+    [SerializeField] private List<RatingSnapshot> ratingHistory = new List<RatingSnapshot>();
+    [SerializeField] private int maxHistoryEntries = 100;
+
+    private Dictionary<string, float> componentRatings = new Dictionary<string, float>();
+    private float lastRatingUpdate = 0f;
+    private float ratingUpdateInterval = 30f; // Update every 30 seconds
+
+    // Events
+    public System.Action<float, float> OnRatingChanged; // old rating, new rating
+    public System.Action<RatingSnapshot> OnRatingUpdated;
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+    }
+
+    private void Start()
+    {
+        InitializeRatingSystem();
+    }
+
+    private void Update()
+    {
+        if (Time.time - lastRatingUpdate >= ratingUpdateInterval)
+        {
+            UpdateOverallRating();
+            lastRatingUpdate = Time.time;
+        }
+    }
+
+    #region Initialization
+    private void InitializeRatingSystem()
+    {
+        componentRatings["GuestSatisfaction"] = 0.5f;
+        componentRatings["FacilityQuality"] = 0.5f;
+        componentRatings["StaffEfficiency"] = 0.5f;
+        componentRatings["RoomQuality"] = 0.5f;
+        componentRatings["ServiceSpeed"] = 0.5f;
+
+        currentOverallRating = baseRating;
+
+        Debug.Log("Hotel Rating System initialized");
+    }
+    #endregion
+
+    #region Rating Calculation
+    public void UpdateOverallRating()
+    {
+        float previousRating = currentOverallRating;
+
+        // Calculate component ratings
+        UpdateComponentRatings();
+
+        // Calculate weighted overall rating
+        float newRating = CalculateWeightedRating();
+
+        // Apply some smoothing to prevent rapid changes
+        currentOverallRating = Mathf.Lerp(currentOverallRating, newRating, 0.1f);
+        currentOverallRating = Mathf.Clamp(currentOverallRating, 1f, 5f);
+
+        // Create rating snapshot
+        RatingSnapshot snapshot = CreateRatingSnapshot();
+        AddRatingToHistory(snapshot);
+
+        // Notify of rating change
+        if (Mathf.Abs(previousRating - currentOverallRating) > 0.01f)
+        {
+            OnRatingChanged?.Invoke(previousRating, currentOverallRating);
+            OnRatingUpdated?.Invoke(snapshot);
+
+            Debug.Log($"Hotel rating updated: {previousRating:F2} → {currentOverallRating:F2}");
+        }
+    }
+
+    private void UpdateComponentRatings()
+    {
+        // Guest Satisfaction
+        componentRatings["GuestSatisfaction"] = CalculateGuestSatisfactionRating();
+
+        // Facility Quality
+        componentRatings["FacilityQuality"] = CalculateFacilityQualityRating();
+
+        // Staff Efficiency
+        componentRatings["StaffEfficiency"] = CalculateStaffEfficiencyRating();
+
+        // Room Quality
+        componentRatings["RoomQuality"] = CalculateRoomQualityRating();
+
+        // Service Speed
+        componentRatings["ServiceSpeed"] = CalculateServiceSpeedRating();
+    }
+
+    private float CalculateWeightedRating()
+    {
+        float weightedSum = 0f;
+        float totalWeight = 0f;
+
+        weightedSum += componentRatings["GuestSatisfaction"] * guestSatisfactionWeight;
+        totalWeight += guestSatisfactionWeight;
+
+        weightedSum += componentRatings["FacilityQuality"] * facilityQualityWeight;
+        totalWeight += facilityQualityWeight;
+
+        weightedSum += componentRatings["StaffEfficiency"] * staffEfficiencyWeight;
+        totalWeight += staffEfficiencyWeight;
+
+        weightedSum += componentRatings["RoomQuality"] * roomQualityWeight;
+        totalWeight += roomQualityWeight;
+
+        weightedSum += componentRatings["ServiceSpeed"] * serviceSpeedWeight;
+        totalWeight += serviceSpeedWeight;
+
+        // Convert from 0-1 scale to 1-5 star scale
+        float normalizedRating = totalWeight > 0 ? weightedSum / totalWeight : 0.5f;
+        return 1f + (normalizedRating * 4f);
+    }
+    #endregion
+
+    #region Component Rating Calculations
+    private float CalculateGuestSatisfactionRating()
+    {
+        if (HotelManager.Instance == null) return 0.5f;
+
+        var currentGuests = HotelManager.Instance.GetCurrentGuests();
+        if (currentGuests.Count == 0) return 0.5f;
+
+        // Only count guests who have been assigned rooms
+        var satisfiedGuests = currentGuests.Where(g => g.AssignedRoom != null).ToList();
+        if (satisfiedGuests.Count == 0) return 0.5f;
+
+        float totalSatisfaction = satisfiedGuests.Sum(g => g.SatisfactionLevel);
+        return totalSatisfaction / satisfiedGuests.Count;
+    }
+
+    private float CalculateFacilityQualityRating()
+    {
+        if (FacilityManager.Instance == null) return 0.5f;
+
+        var facilities = FacilityManager.Instance.GetAvailableFacilities();
+        if (facilities.Count == 0) return 0.3f; // Low rating if no facilities
+
+        float totalQuality = facilities.Sum(f => f.QualityRating);
+        float averageQuality = totalQuality / facilities.Count;
+
+        // Bonus for having diverse facilities
+        var uniqueTypes = facilities.Select(f => f.Type).Distinct().Count();
+        float diversityBonus = Mathf.Clamp01(uniqueTypes / 6f) * 0.2f; // Max 20% bonus for 6+ facility types
+
+        return Mathf.Clamp01(averageQuality + diversityBonus);
+    }
+
+    private float CalculateStaffEfficiencyRating()
+    {
+        if (StaffManager.Instance == null) return 0.5f;
+
+        float averageEfficiency = StaffManager.Instance.GetAverageStaffEfficiency();
+
+        // Factor in staff-to-guest ratio
+        int totalStaff = StaffManager.Instance.GetTotalStaffCount();
+        int totalGuests = HotelManager.Instance?.GetTotalGuests() ?? 0;
+
+        float idealRatio = 0.3f; // 3 staff per 10 guests
+        float actualRatio = totalGuests > 0 ? (float)totalStaff / totalGuests : 1f;
+        float ratioScore = Mathf.Clamp01(actualRatio / idealRatio);
+
+        // Combine efficiency and ratio
+        return (averageEfficiency * 0.7f) + (ratioScore * 0.3f);
+    }
+
+    private float CalculateRoomQualityRating()
+    {
+        if (HotelManager.Instance == null) return 0.5f;
+
+        var allRooms = HotelManager.Instance.GetAllRooms();
+        if (allRooms.Count == 0) return 0.2f;
+
+        // For now, assume all rooms have base quality
+        // This could be expanded to include room upgrades, cleanliness, etc.
+        float baseRoomQuality = 0.6f;
+
+        // Factor in room availability vs demand
+        float occupancyRate = HotelManager.Instance.GetOccupancyRate();
+        float availabilityBonus = occupancyRate < 0.9f ? 0.1f : 0f; // Bonus for having available rooms
+
+        return Mathf.Clamp01(baseRoomQuality + availabilityBonus);
+    }
+
+    private float CalculateServiceSpeedRating()
+    {
+        if (StaffManager.Instance == null) return 0.5f;
+
+        // Base this on average guest patience levels
+        if (HotelManager.Instance == null) return 0.5f;
+
+        var currentGuests = HotelManager.Instance.GetCurrentGuests();
+        if (currentGuests.Count == 0) return 0.7f; // Good rating if no complaints
+
+        // Calculate average patience (higher patience = better service speed)
+        float totalPatience = currentGuests.Sum(g => g.Patience);
+        float averagePatience = totalPatience / currentGuests.Count;
+
+        return averagePatience / 100f; // Convert from 0-100 to 0-1 scale
+    }
+    #endregion
+
+    #region Rating History
+    private RatingSnapshot CreateRatingSnapshot()
+    {
+        return new RatingSnapshot
+        {
+            timestamp = System.DateTime.Now,
+            overallRating = currentOverallRating,
+            guestSatisfaction = componentRatings["GuestSatisfaction"],
+            facilityQuality = componentRatings["FacilityQuality"],
+            staffEfficiency = componentRatings["StaffEfficiency"],
+            roomQuality = componentRatings["RoomQuality"],
+            serviceSpeed = componentRatings["ServiceSpeed"],
+            totalGuests = HotelManager.Instance?.GetTotalGuests() ?? 0,
+            totalStaff = StaffManager.Instance?.GetTotalStaffCount() ?? 0,
+            occupancyRate = HotelManager.Instance?.GetOccupancyRate() ?? 0f
+        };
+    }
+
+    private void AddRatingToHistory(RatingSnapshot snapshot)
+    {
+        ratingHistory.Add(snapshot);
+
+        // Limit history size
+        if (ratingHistory.Count > maxHistoryEntries)
+        {
+            ratingHistory.RemoveAt(0);
+        }
+    }
+
+    public List<RatingSnapshot> GetRatingHistory(int entryCount = 10)
+    {
+        int startIndex = Mathf.Max(0, ratingHistory.Count - entryCount);
+        return ratingHistory.GetRange(startIndex, ratingHistory.Count - startIndex);
+    }
+    #endregion
+
+    #region Public Interface
+    public float GetOverallRating()
+    {
+        return currentOverallRating;
+    }
+
+    public string GetRatingStars()
+    {
+        int stars = Mathf.RoundToInt(currentOverallRating);
+        return new string('★', stars) + new string('☆', 5 - stars);
+    }
+
+    public Dictionary<string, float> GetComponentRatings()
+    {
+        return new Dictionary<string, float>(componentRatings);
+    }
+
+    public string GetRatingCategory()
+    {
+        if (currentOverallRating >= 4.5f) return "Luxury";
+        if (currentOverallRating >= 3.5f) return "Premium";
+        if (currentOverallRating >= 2.5f) return "Standard";
+        if (currentOverallRating >= 1.5f) return "Budget";
+        return "Poor";
+    }
+
+    public float GetRatingChangeLastPeriod()
+    {
+        if (ratingHistory.Count < 2) return 0f;
+
+        var latest = ratingHistory[ratingHistory.Count - 1];
+        var previous = ratingHistory[ratingHistory.Count - 2];
+
+        return latest.overallRating - previous.overallRating;
+    }
+
+    public void ForceRatingUpdate()
+    {
+        UpdateOverallRating();
+    }
+    #endregion
+
+    #region Guest Attraction
+    public Guest.GuestType GetAttractedGuestType()
+    {
+        // Higher rated hotels attract higher profile guests
+        if (currentOverallRating >= 4.5f && UnityEngine.Random.value < 0.15f)
+            return Guest.GuestType.Celebrity;
+        if (currentOverallRating >= 4f && UnityEngine.Random.value < 0.25f)
+            return Guest.GuestType.VIP;
+        if (currentOverallRating >= 3.5f && UnityEngine.Random.value < 0.35f)
+            return Guest.GuestType.Business;
+        if (UnityEngine.Random.value < 0.4f)
+            return Guest.GuestType.Family;
+
+        return Guest.GuestType.Regular;
+    }
+
+    public float GetGuestArrivalRateMultiplier()
+    {
+        // Higher rated hotels get more guests
+        return Mathf.Clamp(currentOverallRating / 3f, 0.5f, 2f);
+    }
+    #endregion
+}
+
+// Data structure for rating snapshots
+[System.Serializable]
+public class RatingSnapshot
+{
+    public System.DateTime timestamp;
+    public float overallRating;
+    public float guestSatisfaction;
+    public float facilityQuality;
+    public float staffEfficiency;
+    public float roomQuality;
+    public float serviceSpeed;
+    public int totalGuests;
+    public int totalStaff;
+    public float occupancyRate;
+
+    public override string ToString()
+    {
+        return $"Rating: {overallRating:F2} stars at {timestamp:HH:mm:ss} " +
+               $"(Guests: {totalGuests}, Staff: {totalStaff}, Occupancy: {occupancyRate:P0})";
+    }
+}

+ 247 - 0
Assets/Scripts/UI/BuildingUIController.cs

@@ -0,0 +1,247 @@
+using UnityEngine;
+using UnityEngine.UIElements;
+
+public class BuildingUIController : MonoBehaviour
+{
+    [Header("UI References")]
+    public UIDocument uiDocument;
+
+    [Header("Building System")]
+    public NewRoomBuilder roomBuilder;
+
+    private VisualElement root;
+    private Button wallModeButton;
+    private Button doorModeButton;
+    private Button entranceModeButton;
+    private Button normalModeButton;
+    private Label statusLabel;
+    private Label instructionLabel;
+
+    public enum BuildingMode
+    {
+        Normal,
+        CreatingWalls,
+        CreatingDoors,
+        CreatingEntrance
+    }
+
+    private BuildingMode currentMode = BuildingMode.Normal;
+
+    private void Start()
+    {
+        InitializeUI();
+
+        // Check for existing entrances periodically
+        InvokeRepeating(nameof(UpdateEntranceButtonVisibility), 1f, 1f);
+    }
+
+    private void InitializeUI()
+    {
+        if (uiDocument == null)
+        {
+            uiDocument = GetComponent<UIDocument>();
+        }
+
+        // Load the UXML file
+        VisualTreeAsset uiAsset = Resources.Load<VisualTreeAsset>("UI/BuildingInterface");
+        if (uiAsset == null)
+        {
+            // Try loading from Assets/UI folder
+            uiAsset = UnityEngine.Resources.Load<VisualTreeAsset>("BuildingInterface");
+        }
+
+        if (uiAsset != null)
+        {
+            uiDocument.visualTreeAsset = uiAsset;
+        }
+        else
+        {
+            Debug.LogWarning("BuildingInterface.uxml not found. Creating UI programmatically.");
+            CreateUIManually();
+            return;
+        }
+
+        root = uiDocument.rootVisualElement;
+
+        // Get button references
+        wallModeButton = root.Q<Button>("WallModeButton");
+        doorModeButton = root.Q<Button>("DoorModeButton");
+        entranceModeButton = root.Q<Button>("EntranceModeButton");
+        normalModeButton = root.Q<Button>("NormalModeButton");
+
+        // Get label references
+        statusLabel = root.Q<Label>("StatusLabel");
+        instructionLabel = root.Q<Label>("InstructionLabel");
+
+        // Register button callbacks
+        if (wallModeButton != null) wallModeButton.clicked += OnWallModeClicked;
+        if (doorModeButton != null) doorModeButton.clicked += OnDoorModeClicked;
+        if (entranceModeButton != null) entranceModeButton.clicked += OnEntranceModeClicked;
+        if (normalModeButton != null) normalModeButton.clicked += OnNormalModeClicked;
+
+        // Initialize UI state
+        UpdateUI();
+    }
+
+    private void CreateUIManually()
+    {
+        // Create UI elements manually if UXML file is not found
+        root = uiDocument.rootVisualElement;
+
+        // Create main panel
+        VisualElement panel = new VisualElement();
+        panel.name = "BuildingPanel";
+        panel.style.position = Position.Absolute;
+        panel.style.top = 20;
+        panel.style.left = 20;
+        panel.style.minWidth = 200;
+        panel.style.backgroundColor = new Color(0, 0, 0, 0.8f);
+        panel.style.paddingTop = panel.style.paddingLeft = panel.style.paddingRight = panel.style.paddingBottom = 15;
+
+        // Create title
+        Label title = new Label("Building Tools");
+        title.name = "Title";
+        title.style.fontSize = 18;
+        title.style.color = Color.white;
+        title.style.unityFontStyleAndWeight = FontStyle.Bold;
+        title.style.marginBottom = 10;
+        panel.Add(title);
+
+        // Create buttons
+        wallModeButton = new Button(() => OnWallModeClicked()) { text = "Create Walls" };
+        doorModeButton = new Button(() => OnDoorModeClicked()) { text = "Create Doors" };
+        entranceModeButton = new Button(() => OnEntranceModeClicked()) { text = "Create Entrance" };
+        normalModeButton = new Button(() => OnNormalModeClicked()) { text = "Normal Mode" };
+
+        wallModeButton.style.marginBottom = doorModeButton.style.marginBottom = entranceModeButton.style.marginBottom = normalModeButton.style.marginBottom = 8;
+        wallModeButton.style.minHeight = doorModeButton.style.minHeight = entranceModeButton.style.minHeight = normalModeButton.style.minHeight = 35;
+
+        panel.Add(wallModeButton);
+        panel.Add(doorModeButton);
+        panel.Add(entranceModeButton);
+        panel.Add(normalModeButton);
+
+        // Create status labels
+        statusLabel = new Label("Mode: Normal");
+        instructionLabel = new Label("Click a button to start building");
+
+        statusLabel.style.fontSize = 14;
+        statusLabel.style.color = new Color(0.8f, 1f, 0.8f);
+        statusLabel.style.unityFontStyleAndWeight = FontStyle.Bold;
+        statusLabel.style.marginTop = 10;
+        statusLabel.style.marginBottom = 5;
+
+        instructionLabel.style.fontSize = 12;
+        instructionLabel.style.color = new Color(0.8f, 0.8f, 0.8f);
+        instructionLabel.style.whiteSpace = WhiteSpace.Normal;
+
+        panel.Add(statusLabel);
+        panel.Add(instructionLabel);
+
+        root.Add(panel);
+
+        UpdateUI();
+    }
+
+    private void OnWallModeClicked()
+    {
+        SetBuildingMode(BuildingMode.CreatingWalls);
+    }
+
+    private void OnDoorModeClicked()
+    {
+        SetBuildingMode(BuildingMode.CreatingDoors);
+    }
+
+    private void OnEntranceModeClicked()
+    {
+        SetBuildingMode(BuildingMode.CreatingEntrance);
+    }
+
+    private void OnNormalModeClicked()
+    {
+        SetBuildingMode(BuildingMode.Normal);
+    }
+
+    public void SetBuildingMode(BuildingMode mode)
+    {
+        currentMode = mode;
+
+        // Notify the room builder of the mode change
+        if (roomBuilder != null)
+        {
+            roomBuilder.SetBuildingMode(mode);
+        }
+
+        UpdateUI();
+    }
+
+    private void UpdateUI()
+    {
+        // Update entrance button visibility first
+        UpdateEntranceButtonVisibility();
+
+        // Remove active class from all buttons
+        wallModeButton.RemoveFromClassList("active");
+        doorModeButton.RemoveFromClassList("active");
+        if (entranceModeButton != null) entranceModeButton.RemoveFromClassList("active");
+        normalModeButton.RemoveFromClassList("active");
+
+        // Update button states and labels based on current mode
+        switch (currentMode)
+        {
+            case BuildingMode.Normal:
+                normalModeButton.AddToClassList("active");
+                statusLabel.text = "Mode: Normal";
+                instructionLabel.text = "Click a button to start building";
+                break;
+
+            case BuildingMode.CreatingWalls:
+                wallModeButton.AddToClassList("active");
+                statusLabel.text = "Mode: Creating Walls";
+                instructionLabel.text = "Click and drag to create walls. Walls snap to 45° angles.";
+                break;
+
+            case BuildingMode.CreatingDoors:
+                doorModeButton.AddToClassList("active");
+                statusLabel.text = "Mode: Creating Doors";
+                instructionLabel.text = "Click on a wall to add a door opening.";
+                break;
+
+            case BuildingMode.CreatingEntrance:
+                if (entranceModeButton != null) entranceModeButton.AddToClassList("active");
+                statusLabel.text = "Mode: Creating Entrance";
+                instructionLabel.text = "Click on an outer wall to create the main building entrance.";
+                break;
+        }
+    }
+
+    public BuildingMode GetCurrentMode()
+    {
+        return currentMode;
+    }
+
+    private void UpdateEntranceButtonVisibility()
+    {
+        if (entranceModeButton == null) return;
+
+        // Check if an entrance exists
+        GameObject[] existingEntrances = GameObject.FindGameObjectsWithTag("Entrance");
+        bool hasEntrance = existingEntrances != null && existingEntrances.Length > 0;
+
+        // Show/hide the entrance button based on whether an entrance exists
+        entranceModeButton.style.display = hasEntrance ? DisplayStyle.None : DisplayStyle.Flex;
+
+        // If we're in entrance creation mode and an entrance was just created, switch to normal mode
+        if (hasEntrance && currentMode == BuildingMode.CreatingEntrance)
+        {
+            SetBuildingMode(BuildingMode.Normal);
+        }
+    }
+
+    private void OnDestroy()
+    {
+        // Clean up the repeating invocation
+        CancelInvoke(nameof(UpdateEntranceButtonVisibility));
+    }
+}

+ 284 - 0
Assets/Scripts/UI/GuestInfoUI.cs

@@ -0,0 +1,284 @@
+using UnityEngine;
+using UnityEngine.UI;
+using System.Collections.Generic;
+
+public class GuestInfoUI : MonoBehaviour
+{
+    public static GuestInfoUI Instance { get; private set; }
+
+    [Header("UI Components")]
+    [SerializeField] private GameObject guestInfoPanel;
+    [SerializeField] private Text guestNameText;
+    [SerializeField] private Text guestTypeText;
+    [SerializeField] private Text guestStateText;
+    [SerializeField] private Image moodImage;
+    [SerializeField] private Text satisfactionText;
+    [SerializeField] private Text patienceText;
+    [SerializeField] private Transform wishesContainer;
+    [SerializeField] private Transform moodReasonsContainer;
+    [SerializeField] private Button closeButton;
+
+    [Header("Prefabs")]
+    [SerializeField] private GameObject wishItemPrefab;
+    [SerializeField] private GameObject moodReasonPrefab;
+
+    [Header("Mood Sprites")]
+    [SerializeField] private Sprite[] moodSprites; // Happy, Neutral, Annoyed, Angry
+
+    private Guest currentGuest;
+
+    private void Awake()
+    {
+        if (Instance != null && Instance != this)
+        {
+            Destroy(this.gameObject);
+            return;
+        }
+        Instance = this;
+    }
+
+    private void Start()
+    {
+        SetupUI();
+    }
+
+    private void SetupUI()
+    {
+        if (guestInfoPanel != null)
+            guestInfoPanel.SetActive(false);
+
+        if (closeButton != null)
+            closeButton.onClick.AddListener(CloseGuestInfo);
+
+        // Create UI elements if they don't exist
+        CreateUIIfMissing();
+    }
+
+    private void CreateUIIfMissing()
+    {
+        if (guestInfoPanel == null)
+        {
+            CreateGuestInfoPanel();
+        }
+    }
+
+    private void CreateGuestInfoPanel()
+    {
+        // Create a simple guest info panel programmatically
+        GameObject canvas = GameObject.Find("Canvas");
+        if (canvas == null)
+        {
+            GameObject canvasObj = new GameObject("Canvas");
+            canvas = canvasObj;
+            canvas.AddComponent<Canvas>();
+            canvas.AddComponent<CanvasScaler>();
+            canvas.AddComponent<GraphicRaycaster>();
+            canvas.GetComponent<Canvas>().renderMode = RenderMode.ScreenSpaceOverlay;
+        }
+
+        guestInfoPanel = new GameObject("Guest Info Panel");
+        guestInfoPanel.transform.SetParent(canvas.transform, false);
+
+        RectTransform panelRect = guestInfoPanel.AddComponent<RectTransform>();
+        panelRect.anchorMin = new Vector2(0.1f, 0.1f);
+        panelRect.anchorMax = new Vector2(0.9f, 0.9f);
+        panelRect.offsetMin = Vector2.zero;
+        panelRect.offsetMax = Vector2.zero;
+
+        Image panelImage = guestInfoPanel.AddComponent<Image>();
+        panelImage.color = new Color(0, 0, 0, 0.8f);
+
+        guestInfoPanel.SetActive(false);
+    }
+
+    public void ShowGuestInfo(Guest guest)
+    {
+        if (guest == null || guestInfoPanel == null) return;
+
+        currentGuest = guest;
+        guestInfoPanel.SetActive(true);
+
+        UpdateGuestInfo();
+    }
+
+    public void CloseGuestInfo()
+    {
+        if (guestInfoPanel != null)
+            guestInfoPanel.SetActive(false);
+
+        currentGuest = null;
+    }
+
+    private void Update()
+    {
+        // Update info if panel is open and we have a guest
+        if (currentGuest != null && guestInfoPanel != null && guestInfoPanel.activeSelf)
+        {
+            UpdateGuestInfo();
+        }
+    }
+
+    private void UpdateGuestInfo()
+    {
+        if (currentGuest == null) return;
+
+        // Update basic info
+        if (guestNameText != null)
+            guestNameText.text = currentGuest.GuestName;
+
+        if (guestTypeText != null)
+            guestTypeText.text = $"Type: {currentGuest.Type}";
+
+        if (guestStateText != null)
+            guestStateText.text = $"State: {currentGuest.CurrentState}";
+
+        // Update mood
+        if (moodImage != null && moodSprites != null && moodSprites.Length > (int)currentGuest.CurrentMood)
+        {
+            moodImage.sprite = moodSprites[(int)currentGuest.CurrentMood];
+        }
+
+        // Update satisfaction
+        if (satisfactionText != null)
+        {
+            float satisfaction = currentGuest.SatisfactionLevel;
+            satisfactionText.text = $"Satisfaction: {satisfaction:P0}";
+
+            // Color code satisfaction
+            if (satisfaction > 0.7f)
+                satisfactionText.color = Color.green;
+            else if (satisfaction < 0.4f)
+                satisfactionText.color = Color.red;
+            else
+                satisfactionText.color = Color.yellow;
+        }
+
+        // Update patience
+        if (patienceText != null)
+        {
+            float patience = currentGuest.Patience;
+            patienceText.text = $"Patience: {patience:F0}%";
+
+            // Color code patience
+            if (patience > 70f)
+                patienceText.color = Color.green;
+            else if (patience < 30f)
+                patienceText.color = Color.red;
+            else
+                patienceText.color = Color.yellow;
+        }
+
+        // Update wishes
+        UpdateWishesList();
+
+        // Update mood reasons
+        UpdateMoodReasonsList();
+    }
+
+    private void UpdateWishesList()
+    {
+        if (wishesContainer == null || currentGuest == null) return;
+
+        // Clear existing wishes
+        foreach (Transform child in wishesContainer)
+        {
+            Destroy(child.gameObject);
+        }
+
+        // Add current wishes
+        foreach (var wish in currentGuest.Wishes)
+        {
+            CreateWishItem(wish);
+        }
+    }
+
+    private void CreateWishItem(GuestWish wish)
+    {
+        GameObject wishItem;
+
+        if (wishItemPrefab != null)
+        {
+            wishItem = Instantiate(wishItemPrefab, wishesContainer);
+        }
+        else
+        {
+            // Create simple wish item
+            wishItem = new GameObject("Wish Item");
+            wishItem.transform.SetParent(wishesContainer);
+
+            Text wishText = wishItem.AddComponent<Text>();
+            wishText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
+            wishText.fontSize = 14;
+        }
+
+        Text textComponent = wishItem.GetComponent<Text>();
+        if (textComponent != null)
+        {
+            string fulfillmentStatus = wish.isFulfilled ? "✓" : "✗";
+            textComponent.text = $"{fulfillmentStatus} {wish.wishType} (Importance: {wish.importance:P0})";
+            textComponent.color = wish.isFulfilled ? Color.green : Color.white;
+        }
+    }
+
+    private void UpdateMoodReasonsList()
+    {
+        if (moodReasonsContainer == null || currentGuest == null) return;
+
+        // Clear existing reasons
+        foreach (Transform child in moodReasonsContainer)
+        {
+            Destroy(child.gameObject);
+        }
+
+        // Add recent mood reasons
+        foreach (string reason in currentGuest.MoodReasons)
+        {
+            CreateMoodReasonItem(reason);
+        }
+    }
+
+    private void CreateMoodReasonItem(string reason)
+    {
+        GameObject reasonItem;
+
+        if (moodReasonPrefab != null)
+        {
+            reasonItem = Instantiate(moodReasonPrefab, moodReasonsContainer);
+        }
+        else
+        {
+            // Create simple reason item
+            reasonItem = new GameObject("Mood Reason Item");
+            reasonItem.transform.SetParent(moodReasonsContainer);
+
+            Text reasonText = reasonItem.AddComponent<Text>();
+            reasonText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
+            reasonText.fontSize = 12;
+            reasonText.color = Color.gray;
+        }
+
+        Text textComponent = reasonItem.GetComponent<Text>();
+        if (textComponent != null)
+        {
+            textComponent.text = reason;
+        }
+    }
+
+    #region Static Helper Methods
+    public static void ShowGuestInfoStatic(Guest guest)
+    {
+        if (Instance != null)
+        {
+            Instance.ShowGuestInfo(guest);
+        }
+    }
+
+    public static void CloseGuestInfoStatic()
+    {
+        if (Instance != null)
+        {
+            Instance.CloseGuestInfo();
+        }
+    }
+    #endregion
+}

+ 46 - 0
Assets/Scripts/UI/PanelSettings.asset

@@ -0,0 +1,46 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 19101, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: PanelSettings
+  m_EditorClassIdentifier: 
+  themeUss: {fileID: -4733365628477956816, guid: 55d7306cc86a83d4fba5576204403663, type: 3}
+  m_DisableNoThemeWarning: 0
+  m_TargetTexture: {fileID: 0}
+  m_RenderMode: 0
+  m_WorldSpaceLayer: 0
+  m_ScaleMode: 1
+  m_ReferenceSpritePixelsPerUnit: 100
+  m_PixelsPerUnit: 100
+  m_Scale: 1
+  m_ReferenceDpi: 96
+  m_FallbackDpi: 96
+  m_ReferenceResolution: {x: 1200, y: 800}
+  m_ScreenMatchMode: 0
+  m_Match: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+  m_BindingLogLevel: 0
+  m_ClearDepthStencil: 1
+  m_ClearColor: 0
+  m_ColorClearValue: {r: 0, g: 0, b: 0, a: 0}
+  m_VertexBudget: 0
+  m_DynamicAtlasSettings:
+    m_MinAtlasSize: 64
+    m_MaxAtlasSize: 4096
+    m_MaxSubTextureSize: 64
+    m_ActiveFilters: -1
+  m_AtlasBlitShader: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0}
+  m_RuntimeShader: {fileID: 9100, guid: 0000000000000000f000000000000000, type: 0}
+  m_RuntimeWorldShader: {fileID: 9102, guid: 0000000000000000f000000000000000, type: 0}
+  m_ICUDataAsset: {fileID: 0}
+  forceGammaRendering: 0
+  textSettings: {fileID: 0}

+ 309 - 0
Assets/Scripts/UI/UIController.cs

@@ -0,0 +1,309 @@
+using UnityEngine;
+using UnityEngine.UI;
+using System.Collections.Generic;
+
+public class UIController : MonoBehaviour
+{
+    [Header("UI Panels")]
+    [SerializeField] private GameObject buildingPanel;
+    [SerializeField] private GameObject gameInfoPanel;
+    [SerializeField] private GameObject roomSelectionPanel;
+
+    [Header("Game Info Display")]
+    [SerializeField] private Text speedText;
+    [SerializeField] private Text gameStateText;
+    [SerializeField] private Text instructionsText;
+
+    [Header("Building Controls")]
+    [SerializeField] private Button buildRoomButton;
+    [SerializeField] private Button cancelBuildingButton;
+    [SerializeField] private Dropdown roomTypeDropdown;
+
+    [Header("Hotel Management")]
+    [SerializeField] private Button openHotelButton;
+    [SerializeField] private Text hotelRequirementsText;
+
+    [Header("Error/Warning Display")]
+    [SerializeField] private GameObject errorPanel;
+    [SerializeField] private Text errorText;
+    [SerializeField] private Button errorCloseButton;
+
+    private RoomBuilder roomBuilder;
+    private bool isUISetup = false;
+
+    private void Start()
+    {
+        SetupUI();
+        SubscribeToEvents();
+    }
+
+    private void OnDestroy()
+    {
+        UnsubscribeFromEvents();
+    }
+
+    private void SetupUI()
+    {
+        // Find RoomBuilder in scene
+        roomBuilder = FindObjectOfType<RoomBuilder>();
+
+        // Setup button events
+        if (buildRoomButton != null)
+            buildRoomButton.onClick.AddListener(StartBuildingRoom);
+
+        if (cancelBuildingButton != null)
+        {
+            cancelBuildingButton.onClick.AddListener(CancelBuilding);
+            cancelBuildingButton.gameObject.SetActive(false);
+        }
+
+        if (openHotelButton != null)
+        {
+            openHotelButton.onClick.AddListener(TryOpenHotel);
+            openHotelButton.interactable = false;
+        }
+
+        if (errorCloseButton != null)
+            errorCloseButton.onClick.AddListener(CloseErrorPanel);
+
+        if (errorPanel != null)
+            errorPanel.SetActive(false);
+
+        // Setup room type dropdown
+        SetupRoomTypeDropdown();
+
+        isUISetup = true;
+        UpdateUI();
+    }
+
+    private void SetupRoomTypeDropdown()
+    {
+        if (roomTypeDropdown != null)
+        {
+            roomTypeDropdown.ClearOptions();
+            List<string> roomTypes = new List<string>();
+
+            foreach (RoomType roomType in System.Enum.GetValues(typeof(RoomType)))
+            {
+                roomTypes.Add(roomType.ToString());
+            }
+
+            roomTypeDropdown.AddOptions(roomTypes);
+        }
+    }
+
+    private void SubscribeToEvents()
+    {
+        if (GameManager.Instance != null)
+        {
+            GameManager.OnSpeedChanged += UpdateSpeedDisplay;
+            GameManager.OnGameStateChanged += UpdateGameStateDisplay;
+        }
+
+        if (roomBuilder != null)
+        {
+            roomBuilder.OnRoomCompleted += OnRoomCompleted;
+            roomBuilder.OnBuildingError += ShowError;
+        }
+    }
+
+    private void UnsubscribeFromEvents()
+    {
+        if (GameManager.Instance != null)
+        {
+            GameManager.OnSpeedChanged -= UpdateSpeedDisplay;
+            GameManager.OnGameStateChanged -= UpdateGameStateDisplay;
+        }
+
+        if (roomBuilder != null)
+        {
+            roomBuilder.OnRoomCompleted -= OnRoomCompleted;
+            roomBuilder.OnBuildingError -= ShowError;
+        }
+    }
+
+    private void Update()
+    {
+        if (isUISetup)
+        {
+            UpdateUI();
+        }
+    }
+
+    #region UI Updates
+    private void UpdateUI()
+    {
+        UpdateInstructionsText();
+        UpdateHotelRequirements();
+        UpdateBuildingControls();
+    }
+
+    private void UpdateInstructionsText()
+    {
+        if (instructionsText == null) return;
+
+        if (roomBuilder != null && roomBuilder.IsBuilding())
+        {
+            instructionsText.text = "Building Mode:\n" +
+                                  "• Left click to place wall points\n" +
+                                  "• Right click to complete room (if possible)\n" +
+                                  "• Get close to start point to auto-complete\n" +
+                                  "• After walls, click on a wall to place door\n" +
+                                  "• ESC to cancel";
+        }
+        else if (GameManager.Instance != null)
+        {
+            switch (GameManager.Instance.currentGameState)
+            {
+                case GameManager.GameState.Building:
+                    instructionsText.text = "Building Phase:\n" +
+                                          "• Build rooms for your hotel\n" +
+                                          "• Add entrance and reception to open\n" +
+                                          "• Keys 1-4 control game speed\n" +
+                                          "• Start building with the button below";
+                    break;
+                case GameManager.GameState.PreOpening:
+                    instructionsText.text = "Ready to Open:\n" +
+                                          "• All requirements met!\n" +
+                                          "• Click 'Open Hotel' to start operations\n" +
+                                          "• Keys 1-4 control game speed";
+                    break;
+                case GameManager.GameState.Operating:
+                    instructionsText.text = "Hotel Operating:\n" +
+                                          "• Guests are now arriving\n" +
+                                          "• Manage your hotel operations\n" +
+                                          "• Keys 1-4 control game speed";
+                    break;
+            }
+        }
+    }
+
+    private void UpdateHotelRequirements()
+    {
+        if (hotelRequirementsText == null || GameManager.Instance == null) return;
+
+        string requirements = "Hotel Requirements:\n";
+        requirements += $"• Entrance: {(GameManager.Instance.hasEntrance ? "✓" : "✗")}\n";
+        requirements += $"• Reception: {(GameManager.Instance.hasReception ? "✓" : "✗")}\n";
+
+        if (GameManager.Instance.canOpenHotel)
+        {
+            requirements += "\n<color=green>Ready to open!</color>";
+        }
+
+        hotelRequirementsText.text = requirements;
+
+        // Update open hotel button
+        if (openHotelButton != null)
+        {
+            openHotelButton.interactable = GameManager.Instance.canOpenHotel &&
+                                         GameManager.Instance.currentGameState == GameManager.GameState.PreOpening;
+        }
+    }
+
+    private void UpdateBuildingControls()
+    {
+        if (buildRoomButton == null || cancelBuildingButton == null) return;
+
+        bool isBuilding = roomBuilder != null && roomBuilder.IsBuilding();
+
+        buildRoomButton.gameObject.SetActive(!isBuilding);
+        cancelBuildingButton.gameObject.SetActive(isBuilding);
+
+        // Disable building if hotel is operating
+        if (GameManager.Instance != null && GameManager.Instance.IsHotelOperating())
+        {
+            buildRoomButton.interactable = false;
+        }
+    }
+
+    private void UpdateSpeedDisplay(GameManager.GameSpeed speed)
+    {
+        if (speedText != null)
+        {
+            speedText.text = $"Speed: {speed} ({Time.timeScale}x)";
+        }
+    }
+
+    private void UpdateGameStateDisplay(GameManager.GameState state)
+    {
+        if (gameStateText != null)
+        {
+            gameStateText.text = $"State: {state}";
+        }
+    }
+    #endregion
+
+    #region Button Events
+    private void StartBuildingRoom()
+    {
+        Debug.Log("Starting room building mode");
+        // RoomBuilder will handle the building logic through mouse input
+    }
+
+    private void CancelBuilding()
+    {
+        if (roomBuilder != null)
+        {
+            // RoomBuilder handles cancellation through ESC key, 
+            // but we can trigger it programmatically too
+            Debug.Log("Cancelling building mode via UI");
+        }
+    }
+
+    private void TryOpenHotel()
+    {
+        if (GameManager.Instance != null)
+        {
+            GameManager.Instance.OpenHotel();
+        }
+    }
+
+    private void OnRoomCompleted(Room room)
+    {
+        Debug.Log($"Room completed: {room.roomType}");
+
+        // Check if this room satisfies hotel requirements
+        RoomType selectedType = (RoomType)roomTypeDropdown.value;
+        room.roomType = selectedType;
+
+        switch (selectedType)
+        {
+            case RoomType.Reception:
+                if (GameManager.Instance != null)
+                    GameManager.Instance.SetReception(true);
+                break;
+            case RoomType.Lobby:
+                if (GameManager.Instance != null)
+                    GameManager.Instance.SetEntrance(true);
+                break;
+        }
+
+        ShowMessage($"Room completed: {selectedType}");
+    }
+
+    private void ShowError(string errorMessage)
+    {
+        if (errorPanel != null && errorText != null)
+        {
+            errorText.text = errorMessage;
+            errorPanel.SetActive(true);
+            Debug.LogWarning($"Building Error: {errorMessage}");
+        }
+    }
+
+    private void ShowMessage(string message)
+    {
+        Debug.Log(message);
+        // You can create a message panel similar to error panel for positive feedback
+    }
+
+    private void CloseErrorPanel()
+    {
+        if (errorPanel != null)
+        {
+            errorPanel.SetActive(false);
+        }
+    }
+    #endregion
+}

+ 86 - 0
Assets/Scripts/Utils/PrefabCreator.cs

@@ -0,0 +1,86 @@
+using UnityEngine;
+
+public class PrefabCreator : MonoBehaviour
+{
+    [Header("Auto-Create Prefabs")]
+    public bool autoCreatePrefabs = true;
+
+    private void Awake()
+    {
+        if (autoCreatePrefabs)
+        {
+            CreateBasicPrefabs();
+        }
+    }
+
+    private void CreateBasicPrefabs()
+    {
+        // Create wall prefab if needed
+        CreateWallPrefab();
+        CreateWallPointPrefab();
+        CreateDoorOpeningPrefab();
+    }
+
+    private GameObject CreateWallPrefab()
+    {
+        GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        wall.name = "Wall_Prefab";
+
+        // Set default material
+        Renderer renderer = wall.GetComponent<Renderer>();
+        Material wallMaterial = new Material(Shader.Find("Standard"));
+        wallMaterial.color = new Color(0.8f, 0.7f, 0.6f); // Beige color
+        renderer.material = wallMaterial;
+
+        // Add collider for door placement detection
+        BoxCollider collider = wall.GetComponent<BoxCollider>();
+        if (collider == null)
+        {
+            collider = wall.AddComponent<BoxCollider>();
+        }
+
+        wall.tag = "Wall";
+
+        // Don't destroy this object - it's created dynamically
+        return wall;
+    }
+
+    private GameObject CreateWallPointPrefab()
+    {
+        GameObject point = GameObject.CreatePrimitive(PrimitiveType.Sphere);
+        point.name = "WallPoint_Prefab";
+        point.transform.localScale = Vector3.one * 0.2f;
+
+        Renderer renderer = point.GetComponent<Renderer>();
+        Material pointMaterial = new Material(Shader.Find("Standard"));
+        pointMaterial.color = Color.red;
+        renderer.material = pointMaterial;
+
+        // Remove collider to prevent interference
+        Collider collider = point.GetComponent<Collider>();
+        if (collider != null)
+        {
+            DestroyImmediate(collider);
+        }
+
+        return point;
+    }
+
+    private GameObject CreateDoorOpeningPrefab()
+    {
+        GameObject door = GameObject.CreatePrimitive(PrimitiveType.Cube);
+        door.name = "DoorOpening_Prefab";
+
+        // Scale to door size
+        door.transform.localScale = new Vector3(1.5f, 2.5f, 0.2f);
+
+        Renderer renderer = door.GetComponent<Renderer>();
+        Material doorMaterial = new Material(Shader.Find("Standard"));
+        doorMaterial.color = new Color(0.6f, 0.4f, 0.2f); // Brown door color
+        renderer.material = doorMaterial;
+
+        door.tag = "Door";
+
+        return door;
+    }
+}

+ 982 - 0
Assets/Settings/DefaultVolumeProfile.asset

@@ -0,0 +1,982 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-9167874883656233139
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5485954d14dfb9a4c8ead8edb0ded5b1, type: 3}
+  m_Name: LiftGammaGain
+  m_EditorClassIdentifier: 
+  active: 1
+  lift:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+  gamma:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+  gain:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+--- !u!114 &-8270506406425502121
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 70afe9e12c7a7ed47911bb608a23a8ff, type: 3}
+  m_Name: SplitToning
+  m_EditorClassIdentifier: 
+  active: 1
+  shadows:
+    m_OverrideState: 1
+    m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  highlights:
+    m_OverrideState: 1
+    m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  balance:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-8104416584915340131
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 0}
+  m_Name: CopyPasteTestComponent2
+  m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent2
+  active: 1
+  p1:
+    m_OverrideState: 1
+    m_Value: 0
+  p2:
+    m_OverrideState: 1
+    m_Value: 0
+  p21:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-7750755424749557576
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 60f3b30c03e6ba64d9a27dc9dba8f28d, type: 3}
+  m_Name: OutlineVolumeComponent
+  m_EditorClassIdentifier: 
+  active: 1
+  Enabled:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-7743500325797982168
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3}
+  m_Name: MotionBlur
+  m_EditorClassIdentifier: 
+  active: 1
+  mode:
+    m_OverrideState: 1
+    m_Value: 0
+  quality:
+    m_OverrideState: 1
+    m_Value: 0
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  clamp:
+    m_OverrideState: 1
+    m_Value: 0.05
+--- !u!114 &-7274224791359825572
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0fd9ee276a1023e439cf7a9c393195fa, type: 3}
+  m_Name: TestAnimationCurveVolumeComponent
+  m_EditorClassIdentifier: 
+  active: 1
+  testParameter:
+    m_OverrideState: 1
+    m_Value:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0.5
+        value: 10
+        inSlope: 0
+        outSlope: 10
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      - serializedVersion: 3
+        time: 1
+        value: 15
+        inSlope: 10
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0
+        outWeight: 0
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+--- !u!114 &-6335409530604852063
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3}
+  m_Name: ColorAdjustments
+  m_EditorClassIdentifier: 
+  active: 1
+  postExposure:
+    m_OverrideState: 1
+    m_Value: 0
+  contrast:
+    m_OverrideState: 1
+    m_Value: 0
+  colorFilter:
+    m_OverrideState: 1
+    m_Value: {r: 1, g: 1, b: 1, a: 1}
+  hueShift:
+    m_OverrideState: 1
+    m_Value: 0
+  saturation:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-6288072647309666549
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3}
+  m_Name: FilmGrain
+  m_EditorClassIdentifier: 
+  active: 1
+  type:
+    m_OverrideState: 1
+    m_Value: 0
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  response:
+    m_OverrideState: 1
+    m_Value: 0.8
+  texture:
+    m_OverrideState: 1
+    m_Value: {fileID: 0}
+--- !u!114 &-5520245016509672950
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3}
+  m_Name: Tonemapping
+  m_EditorClassIdentifier: 
+  active: 1
+  mode:
+    m_OverrideState: 1
+    m_Value: 0
+  neutralHDRRangeReductionMode:
+    m_OverrideState: 1
+    m_Value: 2
+  acesPreset:
+    m_OverrideState: 1
+    m_Value: 3
+  hueShiftAmount:
+    m_OverrideState: 1
+    m_Value: 0
+  detectPaperWhite:
+    m_OverrideState: 1
+    m_Value: 0
+  paperWhite:
+    m_OverrideState: 1
+    m_Value: 300
+  detectBrightnessLimits:
+    m_OverrideState: 1
+    m_Value: 1
+  minNits:
+    m_OverrideState: 1
+    m_Value: 0.005
+  maxNits:
+    m_OverrideState: 1
+    m_Value: 1000
+--- !u!114 &-5360449096862653589
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 0}
+  m_Name: VolumeComponentSupportedEverywhere
+  m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEngine.Rendering.Tests:VolumeComponentEditorSupportedOnTests/VolumeComponentSupportedEverywhere
+  active: 1
+--- !u!114 &-5139089513906902183
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5a00a63fdd6bd2a45ab1f2d869305ffd, type: 3}
+  m_Name: OasisFogVolumeComponent
+  m_EditorClassIdentifier: 
+  active: 1
+  Density:
+    m_OverrideState: 1
+    m_Value: 0
+  StartDistance:
+    m_OverrideState: 1
+    m_Value: 0
+  HeightRange:
+    m_OverrideState: 1
+    m_Value: {x: 0, y: 50}
+  Tint:
+    m_OverrideState: 1
+    m_Value: {r: 1, g: 1, b: 1, a: 1}
+  SunScatteringIntensity:
+    m_OverrideState: 1
+    m_Value: 2
+--- !u!114 &-4463884970436517307
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fb60a22f311433c4c962b888d1393f88, type: 3}
+  m_Name: PaniniProjection
+  m_EditorClassIdentifier: 
+  active: 1
+  distance:
+    m_OverrideState: 1
+    m_Value: 0
+  cropToFit:
+    m_OverrideState: 1
+    m_Value: 1
+--- !u!114 &-1410297666881709256
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6bd486065ce11414fa40e631affc4900, type: 3}
+  m_Name: ProbeVolumesOptions
+  m_EditorClassIdentifier: 
+  active: 1
+  normalBias:
+    m_OverrideState: 1
+    m_Value: 0.33
+  viewBias:
+    m_OverrideState: 1
+    m_Value: 0
+  scaleBiasWithMinProbeDistance:
+    m_OverrideState: 1
+    m_Value: 0
+  samplingNoise:
+    m_OverrideState: 1
+    m_Value: 0.1
+  animateSamplingNoise:
+    m_OverrideState: 1
+    m_Value: 1
+  leakReductionMode:
+    m_OverrideState: 1
+    m_Value: 1
+  minValidDotProductValue:
+    m_OverrideState: 1
+    m_Value: 0.1
+  occlusionOnlyReflectionNormalization:
+    m_OverrideState: 1
+    m_Value: 1
+  intensityMultiplier:
+    m_OverrideState: 1
+    m_Value: 1
+  skyOcclusionIntensityMultiplier:
+    m_OverrideState: 1
+    m_Value: 1
+--- !u!114 &-1216621516061285780
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3}
+  m_Name: Bloom
+  m_EditorClassIdentifier: 
+  active: 1
+  skipIterations:
+    m_OverrideState: 1
+    m_Value: 1
+  threshold:
+    m_OverrideState: 1
+    m_Value: 0.9
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  scatter:
+    m_OverrideState: 1
+    m_Value: 0.7
+  clamp:
+    m_OverrideState: 1
+    m_Value: 65472
+  tint:
+    m_OverrideState: 1
+    m_Value: {r: 1, g: 1, b: 1, a: 1}
+  highQualityFiltering:
+    m_OverrideState: 1
+    m_Value: 0
+  downscale:
+    m_OverrideState: 1
+    m_Value: 0
+  maxIterations:
+    m_OverrideState: 1
+    m_Value: 6
+  dirtTexture:
+    m_OverrideState: 1
+    m_Value: {fileID: 0}
+    dimension: 1
+  dirtIntensity:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-1170528603972255243
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 221518ef91623a7438a71fef23660601, type: 3}
+  m_Name: WhiteBalance
+  m_EditorClassIdentifier: 
+  active: 1
+  temperature:
+    m_OverrideState: 1
+    m_Value: 0
+  tint:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &-581120513425526550
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 0}
+  m_Name: CopyPasteTestComponent3
+  m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent3
+  active: 1
+  p1:
+    m_OverrideState: 1
+    m_Value: 0
+  p2:
+    m_OverrideState: 1
+    m_Value: 0
+  p31:
+    m_OverrideState: 1
+    m_Value: {r: 0, g: 0, b: 0, a: 1}
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3}
+  m_Name: DefaultVolumeProfile
+  m_EditorClassIdentifier: 
+  components:
+  - {fileID: -9167874883656233139}
+  - {fileID: 1918650496244738858}
+  - {fileID: 853819529557874667}
+  - {fileID: 1052315754049611418}
+  - {fileID: -1170528603972255243}
+  - {fileID: -8270506406425502121}
+  - {fileID: -5520245016509672950}
+  - {fileID: 7173750748008157695}
+  - {fileID: 1666464333004379222}
+  - {fileID: 9001657382290151224}
+  - {fileID: -6335409530604852063}
+  - {fileID: -1216621516061285780}
+  - {fileID: 3959858460715838825}
+  - {fileID: -7743500325797982168}
+  - {fileID: 4644742534064026673}
+  - {fileID: -4463884970436517307}
+  - {fileID: -6288072647309666549}
+  - {fileID: 7518938298396184218}
+  - {fileID: -1410297666881709256}
+  - {fileID: -7750755424749557576}
+  - {fileID: -5139089513906902183}
+--- !u!114 &853819529557874667
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 06437c1ff663d574d9447842ba0a72e4, type: 3}
+  m_Name: ScreenSpaceLensFlare
+  m_EditorClassIdentifier: 
+  active: 1
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  tintColor:
+    m_OverrideState: 1
+    m_Value: {r: 1, g: 1, b: 1, a: 1}
+  bloomMip:
+    m_OverrideState: 1
+    m_Value: 1
+  firstFlareIntensity:
+    m_OverrideState: 1
+    m_Value: 1
+  secondaryFlareIntensity:
+    m_OverrideState: 1
+    m_Value: 1
+  warpedFlareIntensity:
+    m_OverrideState: 1
+    m_Value: 1
+  warpedFlareScale:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1}
+  samples:
+    m_OverrideState: 1
+    m_Value: 1
+  sampleDimmer:
+    m_OverrideState: 1
+    m_Value: 0.5
+  vignetteEffect:
+    m_OverrideState: 1
+    m_Value: 1
+  startingPosition:
+    m_OverrideState: 1
+    m_Value: 1.25
+  scale:
+    m_OverrideState: 1
+    m_Value: 1.5
+  streaksIntensity:
+    m_OverrideState: 1
+    m_Value: 0
+  streaksLength:
+    m_OverrideState: 1
+    m_Value: 0.5
+  streaksOrientation:
+    m_OverrideState: 1
+    m_Value: 0
+  streaksThreshold:
+    m_OverrideState: 1
+    m_Value: 0.25
+  resolution:
+    m_OverrideState: 1
+    m_Value: 4
+  chromaticAbberationIntensity:
+    m_OverrideState: 1
+    m_Value: 0.5
+--- !u!114 &1052315754049611418
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 558a8e2b6826cf840aae193990ba9f2e, type: 3}
+  m_Name: ShadowsMidtonesHighlights
+  m_EditorClassIdentifier: 
+  active: 1
+  shadows:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+  midtones:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+  highlights:
+    m_OverrideState: 1
+    m_Value: {x: 1, y: 1, z: 1, w: 0}
+  shadowsStart:
+    m_OverrideState: 1
+    m_Value: 0
+  shadowsEnd:
+    m_OverrideState: 1
+    m_Value: 0.3
+  highlightsStart:
+    m_OverrideState: 1
+    m_Value: 0.55
+  highlightsEnd:
+    m_OverrideState: 1
+    m_Value: 1
+--- !u!114 &1666464333004379222
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3eb4b772797da9440885e8bd939e9560, type: 3}
+  m_Name: ColorCurves
+  m_EditorClassIdentifier: 
+  active: 1
+  master:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 2
+      m_Loop: 0
+      m_ZeroValue: 0
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve:
+        - serializedVersion: 3
+          time: 0
+          value: 0
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        - serializedVersion: 3
+          time: 1
+          value: 1
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  red:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 2
+      m_Loop: 0
+      m_ZeroValue: 0
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve:
+        - serializedVersion: 3
+          time: 0
+          value: 0
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        - serializedVersion: 3
+          time: 1
+          value: 1
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  green:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 2
+      m_Loop: 0
+      m_ZeroValue: 0
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve:
+        - serializedVersion: 3
+          time: 0
+          value: 0
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        - serializedVersion: 3
+          time: 1
+          value: 1
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  blue:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 2
+      m_Loop: 0
+      m_ZeroValue: 0
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve:
+        - serializedVersion: 3
+          time: 0
+          value: 0
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        - serializedVersion: 3
+          time: 1
+          value: 1
+          inSlope: 1
+          outSlope: 1
+          tangentMode: 0
+          weightedMode: 0
+          inWeight: 0
+          outWeight: 0
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  hueVsHue:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 0
+      m_Loop: 1
+      m_ZeroValue: 0.5
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve: []
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  hueVsSat:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 0
+      m_Loop: 1
+      m_ZeroValue: 0.5
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve: []
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  satVsSat:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 0
+      m_Loop: 0
+      m_ZeroValue: 0.5
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve: []
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+  lumVsSat:
+    m_OverrideState: 1
+    m_Value:
+      <length>k__BackingField: 0
+      m_Loop: 0
+      m_ZeroValue: 0.5
+      m_Range: 1
+      m_Curve:
+        serializedVersion: 2
+        m_Curve: []
+        m_PreInfinity: 2
+        m_PostInfinity: 2
+        m_RotationOrder: 4
+--- !u!114 &1918650496244738858
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e021b4c809a781e468c2988c016ebbea, type: 3}
+  m_Name: ColorLookup
+  m_EditorClassIdentifier: 
+  active: 1
+  texture:
+    m_OverrideState: 1
+    m_Value: {fileID: 0}
+    dimension: 1
+  contribution:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &3959858460715838825
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c01700fd266d6914ababb731e09af2eb, type: 3}
+  m_Name: DepthOfField
+  m_EditorClassIdentifier: 
+  active: 1
+  mode:
+    m_OverrideState: 1
+    m_Value: 0
+  gaussianStart:
+    m_OverrideState: 1
+    m_Value: 10
+  gaussianEnd:
+    m_OverrideState: 1
+    m_Value: 30
+  gaussianMaxRadius:
+    m_OverrideState: 1
+    m_Value: 1
+  highQualitySampling:
+    m_OverrideState: 1
+    m_Value: 0
+  focusDistance:
+    m_OverrideState: 1
+    m_Value: 10
+  aperture:
+    m_OverrideState: 1
+    m_Value: 5.6
+  focalLength:
+    m_OverrideState: 1
+    m_Value: 50
+  bladeCount:
+    m_OverrideState: 1
+    m_Value: 5
+  bladeCurvature:
+    m_OverrideState: 1
+    m_Value: 1
+  bladeRotation:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &4251301726029935498
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 74955a4b0b4243bc87231e8b59ed9140, type: 3}
+  m_Name: TestVolume
+  m_EditorClassIdentifier: 
+  active: 1
+  param:
+    m_OverrideState: 1
+    m_Value: 123
+--- !u!114 &4644742534064026673
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3}
+  m_Name: ChromaticAberration
+  m_EditorClassIdentifier: 
+  active: 1
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &6940869943325143175
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 0}
+  m_Name: VolumeComponentSupportedOnAnySRP
+  m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEngine.Rendering.Tests:VolumeComponentEditorSupportedOnTests/VolumeComponentSupportedOnAnySRP
+  active: 1
+--- !u!114 &7173750748008157695
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3}
+  m_Name: Vignette
+  m_EditorClassIdentifier: 
+  active: 1
+  color:
+    m_OverrideState: 1
+    m_Value: {r: 0, g: 0, b: 0, a: 1}
+  center:
+    m_OverrideState: 1
+    m_Value: {x: 0.5, y: 0.5}
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  smoothness:
+    m_OverrideState: 1
+    m_Value: 0.2
+  rounded:
+    m_OverrideState: 1
+    m_Value: 0
+--- !u!114 &7518938298396184218
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c5e1dc532bcb41949b58bc4f2abfbb7e, type: 3}
+  m_Name: LensDistortion
+  m_EditorClassIdentifier: 
+  active: 1
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0
+  xMultiplier:
+    m_OverrideState: 1
+    m_Value: 1
+  yMultiplier:
+    m_OverrideState: 1
+    m_Value: 1
+  center:
+    m_OverrideState: 1
+    m_Value: {x: 0.5, y: 0.5}
+  scale:
+    m_OverrideState: 1
+    m_Value: 1
+--- !u!114 &9001657382290151224
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cdfbdbb87d3286943a057f7791b43141, type: 3}
+  m_Name: ChannelMixer
+  m_EditorClassIdentifier: 
+  active: 1
+  redOutRedIn:
+    m_OverrideState: 1
+    m_Value: 100
+  redOutGreenIn:
+    m_OverrideState: 1
+    m_Value: 0
+  redOutBlueIn:
+    m_OverrideState: 1
+    m_Value: 0
+  greenOutRedIn:
+    m_OverrideState: 1
+    m_Value: 0
+  greenOutGreenIn:
+    m_OverrideState: 1
+    m_Value: 100
+  greenOutBlueIn:
+    m_OverrideState: 1
+    m_Value: 0
+  blueOutRedIn:
+    m_OverrideState: 1
+    m_Value: 0
+  blueOutGreenIn:
+    m_OverrideState: 1
+    m_Value: 0
+  blueOutBlueIn:
+    m_OverrideState: 1
+    m_Value: 100
+--- !u!114 &9122958982931076880
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 0}
+  m_Name: CopyPasteTestComponent1
+  m_EditorClassIdentifier: Unity.RenderPipelines.Core.Editor.Tests:UnityEditor.Rendering.Tests:VolumeComponentCopyPasteTests/CopyPasteTestComponent1
+  active: 1
+  p1:
+    m_OverrideState: 1
+    m_Value: 0
+  p2:
+    m_OverrideState: 1
+    m_Value: 0

+ 135 - 0
Assets/Settings/Mobile_RPAsset.asset

@@ -0,0 +1,135 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
+  m_Name: Mobile_RPAsset
+  m_EditorClassIdentifier: 
+  k_AssetVersion: 12
+  k_AssetPreviousVersion: 12
+  m_RendererType: 1
+  m_RendererData: {fileID: 0}
+  m_RendererDataList:
+  - {fileID: 11400000, guid: 65bc7dbf4170f435aa868c779acfb082, type: 2}
+  m_DefaultRendererIndex: 0
+  m_RequireDepthTexture: 0
+  m_RequireOpaqueTexture: 0
+  m_OpaqueDownsampling: 0
+  m_SupportsTerrainHoles: 1
+  m_SupportsHDR: 1
+  m_HDRColorBufferPrecision: 0
+  m_MSAA: 1
+  m_RenderScale: 0.8
+  m_UpscalingFilter: 3
+  m_FsrOverrideSharpness: 0
+  m_FsrSharpness: 0.92
+  m_EnableLODCrossFade: 1
+  m_LODCrossFadeDitheringType: 1
+  m_ShEvalMode: 0
+  m_LightProbeSystem: 0
+  m_ProbeVolumeMemoryBudget: 1024
+  m_ProbeVolumeBlendingMemoryBudget: 256
+  m_SupportProbeVolumeGPUStreaming: 0
+  m_SupportProbeVolumeDiskStreaming: 0
+  m_SupportProbeVolumeScenarios: 0
+  m_SupportProbeVolumeScenarioBlending: 0
+  m_ProbeVolumeSHBands: 1
+  m_MainLightRenderingMode: 1
+  m_MainLightShadowsSupported: 1
+  m_MainLightShadowmapResolution: 1024
+  m_AdditionalLightsRenderingMode: 1
+  m_AdditionalLightsPerObjectLimit: 4
+  m_AdditionalLightShadowsSupported: 0
+  m_AdditionalLightsShadowmapResolution: 2048
+  m_AdditionalLightsShadowResolutionTierLow: 256
+  m_AdditionalLightsShadowResolutionTierMedium: 512
+  m_AdditionalLightsShadowResolutionTierHigh: 1024
+  m_ReflectionProbeBlending: 1
+  m_ReflectionProbeBoxProjection: 1
+  m_ShadowDistance: 50
+  m_ShadowCascadeCount: 1
+  m_Cascade2Split: 0.25
+  m_Cascade3Split: {x: 0.1, y: 0.3}
+  m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467}
+  m_CascadeBorder: 0.2
+  m_ShadowDepthBias: 1
+  m_ShadowNormalBias: 1
+  m_AnyShadowsSupported: 1
+  m_SoftShadowsSupported: 0
+  m_ConservativeEnclosingSphere: 1
+  m_NumIterationsEnclosingSphere: 64
+  m_SoftShadowQuality: 2
+  m_AdditionalLightsCookieResolution: 1024
+  m_AdditionalLightsCookieFormat: 1
+  m_UseSRPBatcher: 1
+  m_SupportsDynamicBatching: 0
+  m_MixedLightingSupported: 1
+  m_SupportsLightCookies: 1
+  m_SupportsLightLayers: 1
+  m_DebugLevel: 0
+  m_StoreActionsOptimization: 0
+  m_UseAdaptivePerformance: 1
+  m_ColorGradingMode: 0
+  m_ColorGradingLutSize: 32
+  m_UseFastSRGBLinearConversion: 1
+  m_SupportDataDrivenLensFlare: 1
+  m_SupportScreenSpaceLensFlare: 1
+  m_GPUResidentDrawerMode: 0
+  m_UseLegacyLightmaps: 0
+  m_SmallMeshScreenPercentage: 0
+  m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
+  m_ShadowType: 1
+  m_LocalShadowsSupported: 0
+  m_LocalShadowsAtlasResolution: 256
+  m_MaxPixelLights: 0
+  m_ShadowAtlasResolution: 256
+  m_VolumeFrameworkUpdateMode: 0
+  m_VolumeProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2}
+  apvScenesData:
+    obsoleteSceneBounds:
+      m_Keys: []
+      m_Values: []
+    obsoleteHasProbeVolumes:
+      m_Keys: []
+      m_Values: 
+  m_PrefilteringModeMainLightShadows: 3
+  m_PrefilteringModeAdditionalLight: 4
+  m_PrefilteringModeAdditionalLightShadows: 0
+  m_PrefilterXRKeywords: 1
+  m_PrefilteringModeForwardPlus: 1
+  m_PrefilteringModeDeferredRendering: 0
+  m_PrefilteringModeScreenSpaceOcclusion: 0
+  m_PrefilterDebugKeywords: 1
+  m_PrefilterWriteRenderingLayers: 1
+  m_PrefilterHDROutput: 1
+  m_PrefilterSSAODepthNormals: 1
+  m_PrefilterSSAOSourceDepthLow: 1
+  m_PrefilterSSAOSourceDepthMedium: 0
+  m_PrefilterSSAOSourceDepthHigh: 1
+  m_PrefilterSSAOInterleaved: 0
+  m_PrefilterSSAOBlueNoise: 1
+  m_PrefilterSSAOSampleCountLow: 1
+  m_PrefilterSSAOSampleCountMedium: 0
+  m_PrefilterSSAOSampleCountHigh: 1
+  m_PrefilterDBufferMRT1: 1
+  m_PrefilterDBufferMRT2: 1
+  m_PrefilterDBufferMRT3: 1
+  m_PrefilterSoftShadowsQualityLow: 1
+  m_PrefilterSoftShadowsQualityMedium: 1
+  m_PrefilterSoftShadowsQualityHigh: 1
+  m_PrefilterSoftShadows: 0
+  m_PrefilterScreenCoord: 1
+  m_PrefilterNativeRenderPass: 1
+  m_PrefilterUseLegacyLightmaps: 0
+  m_ShaderVariantLogLevel: 0
+  m_ShadowCascades: 0
+  m_Textures:
+    blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3}
+    bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3}

+ 52 - 0
Assets/Settings/Mobile_Renderer.asset

@@ -0,0 +1,52 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
+  m_Name: Mobile_Renderer
+  m_EditorClassIdentifier: 
+  debugShaders:
+    debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7,
+      type: 3}
+    hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
+    probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959,
+      type: 3}
+  probeVolumeResources:
+    probeVolumeDebugShader: {fileID: 0}
+    probeVolumeFragmentationDebugShader: {fileID: 0}
+    probeVolumeOffsetDebugShader: {fileID: 0}
+    probeVolumeSamplingDebugShader: {fileID: 0}
+    probeSamplingDebugMesh: {fileID: 0}
+    probeSamplingDebugTexture: {fileID: 0}
+    probeVolumeBlendStatesCS: {fileID: 0}
+  m_RendererFeatures: []
+  m_RendererFeatureMap: 
+  m_UseNativeRenderPass: 1
+  postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
+  m_AssetVersion: 2
+  m_OpaqueLayerMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_TransparentLayerMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_DefaultStencilState:
+    overrideStencilState: 0
+    stencilReference: 0
+    stencilCompareFunction: 8
+    passOperation: 2
+    failOperation: 0
+    zFailOperation: 0
+  m_ShadowTransparentReceive: 0
+  m_RenderingMode: 2
+  m_DepthPrimingMode: 0
+  m_CopyDepthMode: 0
+  m_AccurateGbufferNormals: 0
+  m_IntermediateTextureMode: 0

+ 135 - 0
Assets/Settings/PC_RPAsset.asset

@@ -0,0 +1,135 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3}
+  m_Name: PC_RPAsset
+  m_EditorClassIdentifier: 
+  k_AssetVersion: 12
+  k_AssetPreviousVersion: 12
+  m_RendererType: 1
+  m_RendererData: {fileID: 0}
+  m_RendererDataList:
+  - {fileID: 11400000, guid: f288ae1f4751b564a96ac7587541f7a2, type: 2}
+  m_DefaultRendererIndex: 0
+  m_RequireDepthTexture: 1
+  m_RequireOpaqueTexture: 1
+  m_OpaqueDownsampling: 1
+  m_SupportsTerrainHoles: 1
+  m_SupportsHDR: 1
+  m_HDRColorBufferPrecision: 0
+  m_MSAA: 1
+  m_RenderScale: 1
+  m_UpscalingFilter: 0
+  m_FsrOverrideSharpness: 0
+  m_FsrSharpness: 0.92
+  m_EnableLODCrossFade: 1
+  m_LODCrossFadeDitheringType: 1
+  m_ShEvalMode: 0
+  m_LightProbeSystem: 0
+  m_ProbeVolumeMemoryBudget: 1024
+  m_ProbeVolumeBlendingMemoryBudget: 256
+  m_SupportProbeVolumeGPUStreaming: 0
+  m_SupportProbeVolumeDiskStreaming: 0
+  m_SupportProbeVolumeScenarios: 0
+  m_SupportProbeVolumeScenarioBlending: 0
+  m_ProbeVolumeSHBands: 1
+  m_MainLightRenderingMode: 1
+  m_MainLightShadowsSupported: 1
+  m_MainLightShadowmapResolution: 2048
+  m_AdditionalLightsRenderingMode: 1
+  m_AdditionalLightsPerObjectLimit: 4
+  m_AdditionalLightShadowsSupported: 1
+  m_AdditionalLightsShadowmapResolution: 2048
+  m_AdditionalLightsShadowResolutionTierLow: 256
+  m_AdditionalLightsShadowResolutionTierMedium: 512
+  m_AdditionalLightsShadowResolutionTierHigh: 1024
+  m_ReflectionProbeBlending: 1
+  m_ReflectionProbeBoxProjection: 1
+  m_ShadowDistance: 50
+  m_ShadowCascadeCount: 4
+  m_Cascade2Split: 0.25
+  m_Cascade3Split: {x: 0.1, y: 0.3}
+  m_Cascade4Split: {x: 0.12299999, y: 0.2926, z: 0.53599995}
+  m_CascadeBorder: 0.107758604
+  m_ShadowDepthBias: 0.1
+  m_ShadowNormalBias: 0.5
+  m_AnyShadowsSupported: 1
+  m_SoftShadowsSupported: 1
+  m_ConservativeEnclosingSphere: 1
+  m_NumIterationsEnclosingSphere: 64
+  m_SoftShadowQuality: 3
+  m_AdditionalLightsCookieResolution: 2048
+  m_AdditionalLightsCookieFormat: 3
+  m_UseSRPBatcher: 1
+  m_SupportsDynamicBatching: 0
+  m_MixedLightingSupported: 1
+  m_SupportsLightCookies: 1
+  m_SupportsLightLayers: 1
+  m_DebugLevel: 0
+  m_StoreActionsOptimization: 0
+  m_UseAdaptivePerformance: 1
+  m_ColorGradingMode: 0
+  m_ColorGradingLutSize: 32
+  m_UseFastSRGBLinearConversion: 0
+  m_SupportDataDrivenLensFlare: 1
+  m_SupportScreenSpaceLensFlare: 1
+  m_GPUResidentDrawerMode: 0
+  m_UseLegacyLightmaps: 0
+  m_SmallMeshScreenPercentage: 0
+  m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0
+  m_ShadowType: 1
+  m_LocalShadowsSupported: 0
+  m_LocalShadowsAtlasResolution: 256
+  m_MaxPixelLights: 0
+  m_ShadowAtlasResolution: 256
+  m_VolumeFrameworkUpdateMode: 0
+  m_VolumeProfile: {fileID: 11400000, guid: 10fc4df2da32a41aaa32d77bc913491c, type: 2}
+  apvScenesData:
+    obsoleteSceneBounds:
+      m_Keys: []
+      m_Values: []
+    obsoleteHasProbeVolumes:
+      m_Keys: []
+      m_Values: 
+  m_PrefilteringModeMainLightShadows: 3
+  m_PrefilteringModeAdditionalLight: 4
+  m_PrefilteringModeAdditionalLightShadows: 0
+  m_PrefilterXRKeywords: 1
+  m_PrefilteringModeForwardPlus: 1
+  m_PrefilteringModeDeferredRendering: 0
+  m_PrefilteringModeScreenSpaceOcclusion: 1
+  m_PrefilterDebugKeywords: 1
+  m_PrefilterWriteRenderingLayers: 0
+  m_PrefilterHDROutput: 1
+  m_PrefilterSSAODepthNormals: 0
+  m_PrefilterSSAOSourceDepthLow: 1
+  m_PrefilterSSAOSourceDepthMedium: 1
+  m_PrefilterSSAOSourceDepthHigh: 1
+  m_PrefilterSSAOInterleaved: 1
+  m_PrefilterSSAOBlueNoise: 0
+  m_PrefilterSSAOSampleCountLow: 1
+  m_PrefilterSSAOSampleCountMedium: 0
+  m_PrefilterSSAOSampleCountHigh: 1
+  m_PrefilterDBufferMRT1: 1
+  m_PrefilterDBufferMRT2: 1
+  m_PrefilterDBufferMRT3: 0
+  m_PrefilterSoftShadowsQualityLow: 0
+  m_PrefilterSoftShadowsQualityMedium: 0
+  m_PrefilterSoftShadowsQualityHigh: 0
+  m_PrefilterSoftShadows: 0
+  m_PrefilterScreenCoord: 1
+  m_PrefilterNativeRenderPass: 1
+  m_PrefilterUseLegacyLightmaps: 0
+  m_ShaderVariantLogLevel: 0
+  m_ShadowCascades: 0
+  m_Textures:
+    blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3}
+    bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3}

+ 95 - 0
Assets/Settings/PC_Renderer.asset

@@ -0,0 +1,95 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3}
+  m_Name: PC_Renderer
+  m_EditorClassIdentifier: 
+  debugShaders:
+    debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7,
+      type: 3}
+    hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
+    probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959,
+      type: 3}
+  probeVolumeResources:
+    probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae,
+      type: 3}
+    probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607,
+      type: 3}
+    probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664,
+      type: 3}
+    probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7,
+      type: 3}
+    probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe,
+      type: 3}
+    probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e,
+      type: 3}
+    probeVolumeBlendStatesCS: {fileID: 7200000, guid: b9a23f869c4fd45f19c5ada54dd82176,
+      type: 3}
+  m_RendererFeatures:
+  - {fileID: 7833122117494664109}
+  m_RendererFeatureMap: ad6b866f10d7b46c
+  m_UseNativeRenderPass: 1
+  postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2}
+  m_AssetVersion: 2
+  m_OpaqueLayerMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_TransparentLayerMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_DefaultStencilState:
+    overrideStencilState: 0
+    stencilReference: 1
+    stencilCompareFunction: 3
+    passOperation: 2
+    failOperation: 0
+    zFailOperation: 0
+  m_ShadowTransparentReceive: 1
+  m_RenderingMode: 2
+  m_DepthPrimingMode: 0
+  m_CopyDepthMode: 0
+  m_AccurateGbufferNormals: 0
+  m_IntermediateTextureMode: 0
+--- !u!114 &7833122117494664109
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f62c9c65cf3354c93be831c8bc075510, type: 3}
+  m_Name: ScreenSpaceAmbientOcclusion
+  m_EditorClassIdentifier: 
+  m_Active: 1
+  m_Settings:
+    AOMethod: 0
+    Downsample: 0
+    AfterOpaque: 0
+    Source: 1
+    NormalSamples: 1
+    Intensity: 0.4
+    DirectLightingStrength: 0.25
+    Radius: 0.3
+    Samples: 1
+    BlurQuality: 0
+    Falloff: 100
+    SampleCount: -1
+  m_BlueNoise256Textures:
+  - {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3}
+  - {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3}
+  - {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3}
+  - {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3}
+  - {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3}
+  - {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3}
+  - {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3}
+  m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3}

+ 159 - 0
Assets/Settings/SampleSceneProfile.asset

@@ -0,0 +1,159 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-7893295128165547882
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3}
+  m_Name: Bloom
+  m_EditorClassIdentifier: 
+  active: 1
+  skipIterations:
+    m_OverrideState: 1
+    m_Value: 0
+  threshold:
+    m_OverrideState: 1
+    m_Value: 1
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0.25
+  scatter:
+    m_OverrideState: 1
+    m_Value: 0.5
+  clamp:
+    m_OverrideState: 0
+    m_Value: 65472
+  tint:
+    m_OverrideState: 0
+    m_Value: {r: 1, g: 1, b: 1, a: 1}
+  highQualityFiltering:
+    m_OverrideState: 1
+    m_Value: 1
+  downscale:
+    m_OverrideState: 0
+    m_Value: 0
+  maxIterations:
+    m_OverrideState: 0
+    m_Value: 6
+  dirtTexture:
+    m_OverrideState: 0
+    m_Value: {fileID: 0}
+    dimension: 1
+  dirtIntensity:
+    m_OverrideState: 0
+    m_Value: 0
+--- !u!114 &-3357603926938260329
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3}
+  m_Name: Vignette
+  m_EditorClassIdentifier: 
+  active: 1
+  color:
+    m_OverrideState: 0
+    m_Value: {r: 0, g: 0, b: 0, a: 1}
+  center:
+    m_OverrideState: 0
+    m_Value: {x: 0.5, y: 0.5}
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0.2
+  smoothness:
+    m_OverrideState: 0
+    m_Value: 0.2
+  rounded:
+    m_OverrideState: 0
+    m_Value: 0
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3}
+  m_Name: SampleSceneProfile
+  m_EditorClassIdentifier: 
+  components:
+  - {fileID: 849379129802519247}
+  - {fileID: -7893295128165547882}
+  - {fileID: 7391319092446245454}
+  - {fileID: -3357603926938260329}
+--- !u!114 &849379129802519247
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3}
+  m_Name: Tonemapping
+  m_EditorClassIdentifier: 
+  active: 1
+  mode:
+    m_OverrideState: 1
+    m_Value: 1
+  neutralHDRRangeReductionMode:
+    m_OverrideState: 0
+    m_Value: 2
+  acesPreset:
+    m_OverrideState: 0
+    m_Value: 3
+  hueShiftAmount:
+    m_OverrideState: 0
+    m_Value: 0
+  detectPaperWhite:
+    m_OverrideState: 1
+    m_Value: 0
+  paperWhite:
+    m_OverrideState: 1
+    m_Value: 234
+  detectBrightnessLimits:
+    m_OverrideState: 1
+    m_Value: 1
+  minNits:
+    m_OverrideState: 1
+    m_Value: 0.005
+  maxNits:
+    m_OverrideState: 1
+    m_Value: 647
+--- !u!114 &7391319092446245454
+MonoBehaviour:
+  m_ObjectHideFlags: 3
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3}
+  m_Name: MotionBlur
+  m_EditorClassIdentifier: 
+  active: 0
+  mode:
+    m_OverrideState: 0
+    m_Value: 0
+  quality:
+    m_OverrideState: 1
+    m_Value: 2
+  intensity:
+    m_OverrideState: 1
+    m_Value: 0.6
+  clamp:
+    m_OverrideState: 0
+    m_Value: 0.05

+ 261 - 0
Assets/Settings/UniversalRenderPipelineGlobalSettings.asset

@@ -0,0 +1,261 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2ec995e51a6e251468d2a3fd8a686257, type: 3}
+  m_Name: UniversalRenderPipelineGlobalSettings
+  m_EditorClassIdentifier: 
+  m_ShaderStrippingSetting:
+    m_Version: 0
+    m_ExportShaderVariants: 1
+    m_ShaderVariantLogLevel: 0
+    m_StripRuntimeDebugShaders: 1
+  m_URPShaderStrippingSetting:
+    m_Version: 0
+    m_StripUnusedPostProcessingVariants: 1
+    m_StripUnusedVariants: 1
+    m_StripScreenCoordOverrideVariants: 1
+  m_ShaderVariantLogLevel: 0
+  m_ExportShaderVariants: 1
+  m_StripDebugVariants: 1
+  m_StripUnusedPostProcessingVariants: 1
+  m_StripUnusedVariants: 1
+  m_StripScreenCoordOverrideVariants: 1
+  supportRuntimeDebugDisplay: 0
+  m_EnableRenderGraph: 0
+  m_Settings:
+    m_SettingsList:
+      m_List:
+      - rid: 6852985685364965376
+      - rid: 6852985685364965377
+      - rid: 6852985685364965378
+      - rid: 6852985685364965379
+      - rid: 6852985685364965380
+      - rid: 6852985685364965381
+      - rid: 6852985685364965382
+      - rid: 6852985685364965383
+      - rid: 6852985685364965384
+      - rid: 6852985685364965385
+      - rid: 6852985685364965386
+      - rid: 6852985685364965387
+      - rid: 6852985685364965388
+      - rid: 6852985685364965389
+      - rid: 6852985685364965390
+      - rid: 6852985685364965391
+      - rid: 6852985685364965392
+      - rid: 6852985685364965393
+      - rid: 6852985685364965394
+      - rid: 8712630790384254976
+      - rid: 657883489249263616
+      - rid: 657883489249263617
+    m_RuntimeSettings:
+      m_List: []
+  m_AssetVersion: 8
+  m_ObsoleteDefaultVolumeProfile: {fileID: 0}
+  m_RenderingLayerNames:
+  - Light Layer default
+  - Light Layer 1
+  - Light Layer 2
+  - Light Layer 3
+  - Light Layer 4
+  - Light Layer 5
+  - Light Layer 6
+  - Light Layer 7
+  m_ValidRenderingLayers: 0
+  lightLayerName0: Light Layer default
+  lightLayerName1: Light Layer 1
+  lightLayerName2: Light Layer 2
+  lightLayerName3: Light Layer 3
+  lightLayerName4: Light Layer 4
+  lightLayerName5: Light Layer 5
+  lightLayerName6: Light Layer 6
+  lightLayerName7: Light Layer 7
+  apvScenesData:
+    obsoleteSceneBounds:
+      m_Keys: []
+      m_Values: []
+    obsoleteHasProbeVolumes:
+      m_Keys: []
+      m_Values: 
+  references:
+    version: 2
+    RefIds:
+    - rid: 657883489249263616
+      type: {class: UniversalRenderPipelineRuntimeXRResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_xrOcclusionMeshPS: {fileID: 4800000, guid: 4431b1f1f743fbf4eb310a967890cbea, type: 3}
+        m_xrMirrorViewPS: {fileID: 4800000, guid: d5a307c014552314b9f560906d708772, type: 3}
+        m_xrMotionVector: {fileID: 4800000, guid: f89aac1e4f84468418fe30e611dff395, type: 3}
+    - rid: 657883489249263617
+      type: {class: UniversalRenderPipelineEditorAssets, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: eda47df5b85f4f249abf7abd73db2cb2, type: 2}
+    - rid: 6852985685364965376
+      type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_StripUnusedPostProcessingVariants: 1
+        m_StripUnusedVariants: 1
+        m_StripScreenCoordOverrideVariants: 1
+    - rid: 6852985685364965377
+      type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3}
+        m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3}
+        m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3}
+        m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3}
+        m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3}
+        m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3}
+        m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3}
+        m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3}
+        m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3}
+    - rid: 6852985685364965378
+      type: {class: UniversalRendererResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
+        m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3}
+        m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3}
+        m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, type: 3}
+    - rid: 6852985685364965379
+      type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_DebugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3}
+        m_HdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3}
+        m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3}
+    - rid: 6852985685364965380
+      type: {class: UniversalRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3}
+        m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3}
+        m_CoreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3}
+        m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3}
+        m_SamplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3}
+    - rid: 6852985685364965381
+      type: {class: UniversalRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 1
+        m_BlueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3}
+        m_BayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3}
+        m_DebugFontTex: {fileID: 2800000, guid: 26a413214480ef144b2915d6ff4d0beb, type: 3}
+    - rid: 6852985685364965382
+      type: {class: Renderer2DResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3}
+        m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3}
+        m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3}
+        m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3}
+        m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3}
+        m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3}
+        m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3}
+        m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
+        m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+        m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+        m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2}
+    - rid: 6852985685364965383
+      type: {class: UniversalRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_DefaultMaterial: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+        m_DefaultParticleMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2}
+        m_DefaultLineMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2}
+        m_DefaultTerrainMaterial: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2}
+        m_DefaultDecalMaterial: {fileID: 2100000, guid: 31d0dcc6f2dd4e4408d18036a2c93862, type: 2}
+        m_DefaultSpriteMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+    - rid: 6852985685364965384
+      type: {class: URPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_VolumeProfile: {fileID: 11400000, guid: ab09877e2e707104187f6f83e2f62510, type: 2}
+    - rid: 6852985685364965385
+      type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
+      data:
+        m_Version: 0
+        m_EnableRenderCompatibilityMode: 0
+    - rid: 6852985685364965386
+      type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime}
+      data:
+        m_Version: 0
+        m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, type: 3}
+        m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, type: 3}
+        m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, type: 3}
+        m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, type: 3}
+        m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, type: 3}
+        m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, type: 3}
+        m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3}
+        m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3}
+        m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3}
+    - rid: 6852985685364965387
+      type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3}
+        m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3}
+        m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3}
+    - rid: 6852985685364965388
+      type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 1
+        dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, type: 3}
+        subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, type: 3}
+        voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, type: 3}
+        traceVirtualOffsetCS: {fileID: -6772857160820960102, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3}
+        traceVirtualOffsetRT: {fileID: -5126288278712620388, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3}
+        skyOcclusionCS: {fileID: -6772857160820960102, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3}
+        skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3}
+        renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
+        renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
+    - rid: 6852985685364965389
+      type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 1
+        m_ProbeVolumeDisableStreamingAssets: 0
+    - rid: 6852985685364965390
+      type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 1
+        probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, type: 3}
+        probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, type: 3}
+        probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, type: 3}
+        probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3}
+        probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3}
+        numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3}
+    - rid: 6852985685364965391
+      type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_version: 0
+        m_IncludeReferencedInScenes: 0
+        m_IncludeAssetsByLabel: 0
+        m_LabelToInclude: 
+    - rid: 6852985685364965392
+      type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 0
+        m_ExportShaderVariants: 1
+        m_ShaderVariantLogLevel: 0
+        m_StripRuntimeDebugShaders: 1
+    - rid: 6852985685364965393
+      type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 1
+        probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3}
+        probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3}
+        probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3}
+    - rid: 6852985685364965394
+      type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_version: 0
+        m_EnableCompilationCaching: 1
+        m_EnableValidityChecks: 1
+    - rid: 8712630790384254976
+      type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime}
+      data:
+        m_Version: 0
+        m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3}

BIN
Assets/TutorialInfo/Icons/URP.png


+ 654 - 0
Assets/TutorialInfo/Layout.wlt

@@ -0,0 +1,654 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_PixelRect:
+    serializedVersion: 2
+    x: 0
+    y: 45
+    width: 1666
+    height: 958
+  m_ShowMode: 4
+  m_Title: 
+  m_RootView: {fileID: 6}
+  m_MinSize: {x: 950, y: 542}
+  m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &2
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 466
+    width: 290
+    height: 442
+  m_MinSize: {x: 234, y: 271}
+  m_MaxSize: {x: 10004, y: 10021}
+  m_ActualView: {fileID: 14}
+  m_Panes:
+  - {fileID: 14}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &3
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 4}
+  - {fileID: 2}
+  m_Position:
+    serializedVersion: 2
+    x: 973
+    y: 0
+    width: 290
+    height: 908
+  m_MinSize: {x: 234, y: 492}
+  m_MaxSize: {x: 10004, y: 14042}
+  vertical: 1
+  controlID: 226
+--- !u!114 &4
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 290
+    height: 466
+  m_MinSize: {x: 204, y: 221}
+  m_MaxSize: {x: 4004, y: 4021}
+  m_ActualView: {fileID: 17}
+  m_Panes:
+  - {fileID: 17}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &5
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 466
+    width: 973
+    height: 442
+  m_MinSize: {x: 202, y: 221}
+  m_MaxSize: {x: 4002, y: 4021}
+  m_ActualView: {fileID: 15}
+  m_Panes:
+  - {fileID: 15}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &6
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 7}
+  - {fileID: 8}
+  - {fileID: 9}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1666
+    height: 958
+  m_MinSize: {x: 950, y: 542}
+  m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &7
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1666
+    height: 30
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+  m_LastLoadedLayoutName: Tutorial
+--- !u!114 &8
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 10}
+  - {fileID: 3}
+  - {fileID: 11}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 30
+    width: 1666
+    height: 908
+  m_MinSize: {x: 713, y: 492}
+  m_MaxSize: {x: 18008, y: 14042}
+  vertical: 0
+  controlID: 74
+--- !u!114 &9
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 938
+    width: 1666
+    height: 20
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+--- !u!114 &10
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 12}
+  - {fileID: 5}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 973
+    height: 908
+  m_MinSize: {x: 202, y: 442}
+  m_MaxSize: {x: 4002, y: 8042}
+  vertical: 1
+  controlID: 75
+--- !u!114 &11
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 1263
+    y: 0
+    width: 403
+    height: 908
+  m_MinSize: {x: 277, y: 71}
+  m_MaxSize: {x: 4002, y: 4021}
+  m_ActualView: {fileID: 13}
+  m_Panes:
+  - {fileID: 13}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &12
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 973
+    height: 466
+  m_MinSize: {x: 202, y: 221}
+  m_MaxSize: {x: 4002, y: 4021}
+  m_ActualView: {fileID: 16}
+  m_Panes:
+  - {fileID: 16}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &13
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AutoRepaintOnSceneChange: 0
+  m_MinSize: {x: 275, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Inspector
+    m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_DepthBufferBits: 0
+  m_Pos:
+    serializedVersion: 2
+    x: 2
+    y: 19
+    width: 401
+    height: 887
+  m_ScrollPosition: {x: 0, y: 0}
+  m_InspectorMode: 0
+  m_PreviewResizer:
+    m_CachedPref: -160
+    m_ControlHash: -371814159
+    m_PrefName: Preview_InspectorPreview
+  m_PreviewWindow: {fileID: 0}
+--- !u!114 &14
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AutoRepaintOnSceneChange: 0
+  m_MinSize: {x: 230, y: 250}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_TitleContent:
+    m_Text: Project
+    m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_DepthBufferBits: 0
+  m_Pos:
+    serializedVersion: 2
+    x: 2
+    y: 19
+    width: 286
+    height: 421
+  m_SearchFilter:
+    m_NameFilter: 
+    m_ClassNames: []
+    m_AssetLabels: []
+    m_AssetBundleNames: []
+    m_VersionControlStates: []
+    m_ReferencingInstanceIDs: 
+    m_ScenePaths: []
+    m_ShowAllHits: 0
+    m_SearchArea: 0
+    m_Folders:
+    - Assets
+  m_ViewMode: 0
+  m_StartGridSize: 64
+  m_LastFolders:
+  - Assets
+  m_LastFoldersGridSize: -1
+  m_LastProjectPath: /Users/danielbrauer/Unity Projects/New Unity Project 47
+  m_IsLocked: 0
+  m_FolderTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: ee240000
+    m_LastClickedID: 9454
+    m_ExpandedIDs: ee24000000ca9a3bffffff7f
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_AssetTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 68fbffff
+    m_LastClickedID: 0
+    m_ExpandedIDs: ee240000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_ListAreaState:
+    m_SelectedInstanceIDs: 68fbffff
+    m_LastClickedInstanceID: -1176
+    m_HadKeyboardFocusLastEvent: 0
+    m_ExpandedInstanceIDs: c6230000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 0}
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+    m_NewAssetIndexInList: -1
+    m_ScrollPosition: {x: 0, y: 0}
+    m_GridSize: 64
+  m_DirectoriesAreaWidth: 110
+--- !u!114 &15
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AutoRepaintOnSceneChange: 1
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Game
+    m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_DepthBufferBits: 32
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 19
+    width: 971
+    height: 421
+  m_MaximizeOnPlay: 0
+  m_Gizmos: 0
+  m_Stats: 0
+  m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+  m_TargetDisplay: 0
+  m_ZoomArea:
+    m_HRangeLocked: 0
+    m_VRangeLocked: 0
+    m_HBaseRangeMin: -242.75
+    m_HBaseRangeMax: 242.75
+    m_VBaseRangeMin: -101
+    m_VBaseRangeMax: 101
+    m_HAllowExceedBaseRangeMin: 1
+    m_HAllowExceedBaseRangeMax: 1
+    m_VAllowExceedBaseRangeMin: 1
+    m_VAllowExceedBaseRangeMax: 1
+    m_ScaleWithWindow: 0
+    m_HSlider: 0
+    m_VSlider: 0
+    m_IgnoreScrollWheelUntilClicked: 0
+    m_EnableMouseInput: 1
+    m_EnableSliderZoom: 0
+    m_UniformScale: 1
+    m_UpDirection: 1
+    m_DrawArea:
+      serializedVersion: 2
+      x: 0
+      y: 17
+      width: 971
+      height: 404
+    m_Scale: {x: 2, y: 2}
+    m_Translation: {x: 485.5, y: 202}
+    m_MarginLeft: 0
+    m_MarginRight: 0
+    m_MarginTop: 0
+    m_MarginBottom: 0
+    m_LastShownAreaInsideMargins:
+      serializedVersion: 2
+      x: -242.75
+      y: -101
+      width: 485.5
+      height: 202
+    m_MinimalGUI: 1
+  m_defaultScale: 2
+  m_TargetTexture: {fileID: 0}
+  m_CurrentColorSpace: 0
+  m_LastWindowPixelSize: {x: 1942, y: 842}
+  m_ClearInEditMode: 1
+  m_NoCameraWarning: 1
+  m_LowResolutionForAspectRatios: 01000000000100000100
+--- !u!114 &16
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AutoRepaintOnSceneChange: 1
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Scene
+    m_Image: {fileID: 2318424515335265636, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_DepthBufferBits: 32
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 19
+    width: 971
+    height: 445
+  m_SceneLighting: 1
+  lastFramingTime: 0
+  m_2DMode: 0
+  m_isRotationLocked: 0
+  m_AudioPlay: 0
+  m_Position:
+    m_Target: {x: 0, y: 0, z: 0}
+    speed: 2
+    m_Value: {x: 0, y: 0, z: 0}
+  m_RenderMode: 0
+  m_ValidateTrueMetals: 0
+  m_SceneViewState:
+    showFog: 1
+    showMaterialUpdate: 0
+    showSkybox: 1
+    showFlares: 1
+    showImageEffects: 1
+  grid:
+    xGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+    yGrid:
+      m_Target: 1
+      speed: 2
+      m_Value: 1
+    zGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+  m_Rotation:
+    m_Target: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+    speed: 2
+    m_Value: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+  m_Size:
+    m_Target: 10
+    speed: 2
+    m_Value: 10
+  m_Ortho:
+    m_Target: 0
+    speed: 2
+    m_Value: 0
+  m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0}
+  m_LastSceneViewOrtho: 0
+  m_ReplacementShader: {fileID: 0}
+  m_ReplacementString: 
+  m_LastLockedObject: {fileID: 0}
+  m_ViewIsLockedToObject: 0
+--- !u!114 &17
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AutoRepaintOnSceneChange: 0
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Hierarchy
+    m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_DepthBufferBits: 0
+  m_Pos:
+    serializedVersion: 2
+    x: 2
+    y: 19
+    width: 286
+    height: 445
+  m_TreeViewState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 68fbffff
+    m_LastClickedID: -1176
+    m_ExpandedIDs: 7efbffff00000000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 0
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+  m_ExpandedScenes:
+  - 
+  m_CurrenRootInstanceID: 0
+  m_Locked: 0
+  m_CurrentSortingName: TransformSorting

+ 242 - 0
Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs

@@ -0,0 +1,242 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.IO;
+using System.Reflection;
+
+[CustomEditor(typeof(Readme))]
+[InitializeOnLoad]
+public class ReadmeEditor : Editor
+{
+    static string s_ShowedReadmeSessionStateName = "ReadmeEditor.showedReadme";
+    
+    static string s_ReadmeSourceDirectory = "Assets/TutorialInfo";
+
+    const float k_Space = 16f;
+
+    static ReadmeEditor()
+    {
+        EditorApplication.delayCall += SelectReadmeAutomatically;
+    }
+
+    static void RemoveTutorial()
+    {
+        if (EditorUtility.DisplayDialog("Remove Readme Assets",
+            
+            $"All contents under {s_ReadmeSourceDirectory} will be removed, are you sure you want to proceed?",
+            "Proceed",
+            "Cancel"))
+        {
+            if (Directory.Exists(s_ReadmeSourceDirectory))
+            {
+                FileUtil.DeleteFileOrDirectory(s_ReadmeSourceDirectory);
+                FileUtil.DeleteFileOrDirectory(s_ReadmeSourceDirectory + ".meta");
+            }
+            else
+            {
+                Debug.Log($"Could not find the Readme folder at {s_ReadmeSourceDirectory}");
+            }
+
+            var readmeAsset = SelectReadme();
+            if (readmeAsset != null)
+            {
+                var path = AssetDatabase.GetAssetPath(readmeAsset);
+                FileUtil.DeleteFileOrDirectory(path + ".meta");
+                FileUtil.DeleteFileOrDirectory(path);
+            }
+
+            AssetDatabase.Refresh();
+        }
+    }
+
+    static void SelectReadmeAutomatically()
+    {
+        if (!SessionState.GetBool(s_ShowedReadmeSessionStateName, false))
+        {
+            var readme = SelectReadme();
+            SessionState.SetBool(s_ShowedReadmeSessionStateName, true);
+
+            if (readme && !readme.loadedLayout)
+            {
+                LoadLayout();
+                readme.loadedLayout = true;
+            }
+        }
+    }
+
+    static void LoadLayout()
+    {
+        var assembly = typeof(EditorApplication).Assembly;
+        var windowLayoutType = assembly.GetType("UnityEditor.WindowLayout", true);
+        var method = windowLayoutType.GetMethod("LoadWindowLayout", BindingFlags.Public | BindingFlags.Static);
+        method.Invoke(null, new object[] { Path.Combine(Application.dataPath, "TutorialInfo/Layout.wlt"), false });
+    }
+
+    static Readme SelectReadme()
+    {
+        var ids = AssetDatabase.FindAssets("Readme t:Readme");
+        if (ids.Length == 1)
+        {
+            var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(ids[0]));
+
+            Selection.objects = new UnityEngine.Object[] { readmeObject };
+
+            return (Readme)readmeObject;
+        }
+        else
+        {
+            Debug.Log("Couldn't find a readme");
+            return null;
+        }
+    }
+
+    protected override void OnHeaderGUI()
+    {
+        var readme = (Readme)target;
+        Init();
+
+        var iconWidth = Mathf.Min(EditorGUIUtility.currentViewWidth / 3f - 20f, 128f);
+
+        GUILayout.BeginHorizontal("In BigTitle");
+        {
+            if (readme.icon != null)
+            {
+                GUILayout.Space(k_Space);
+                GUILayout.Label(readme.icon, GUILayout.Width(iconWidth), GUILayout.Height(iconWidth));
+            }
+            GUILayout.Space(k_Space);
+            GUILayout.BeginVertical();
+            {
+
+                GUILayout.FlexibleSpace();
+                GUILayout.Label(readme.title, TitleStyle);
+                GUILayout.FlexibleSpace();
+            }
+            GUILayout.EndVertical();
+            GUILayout.FlexibleSpace();
+        }
+        GUILayout.EndHorizontal();
+    }
+
+    public override void OnInspectorGUI()
+    {
+        var readme = (Readme)target;
+        Init();
+
+        foreach (var section in readme.sections)
+        {
+            if (!string.IsNullOrEmpty(section.heading))
+            {
+                GUILayout.Label(section.heading, HeadingStyle);
+            }
+
+            if (!string.IsNullOrEmpty(section.text))
+            {
+                GUILayout.Label(section.text, BodyStyle);
+            }
+
+            if (!string.IsNullOrEmpty(section.linkText))
+            {
+                if (LinkLabel(new GUIContent(section.linkText)))
+                {
+                    Application.OpenURL(section.url);
+                }
+            }
+
+            GUILayout.Space(k_Space);
+        }
+
+        if (GUILayout.Button("Remove Readme Assets", ButtonStyle))
+        {
+            RemoveTutorial();
+        }
+    }
+
+    bool m_Initialized;
+
+    GUIStyle LinkStyle
+    {
+        get { return m_LinkStyle; }
+    }
+
+    [SerializeField]
+    GUIStyle m_LinkStyle;
+
+    GUIStyle TitleStyle
+    {
+        get { return m_TitleStyle; }
+    }
+
+    [SerializeField]
+    GUIStyle m_TitleStyle;
+
+    GUIStyle HeadingStyle
+    {
+        get { return m_HeadingStyle; }
+    }
+
+    [SerializeField]
+    GUIStyle m_HeadingStyle;
+
+    GUIStyle BodyStyle
+    {
+        get { return m_BodyStyle; }
+    }
+
+    [SerializeField]
+    GUIStyle m_BodyStyle;
+
+    GUIStyle ButtonStyle
+    {
+        get { return m_ButtonStyle; }
+    }
+
+    [SerializeField]
+    GUIStyle m_ButtonStyle;
+
+    void Init()
+    {
+        if (m_Initialized)
+            return;
+        m_BodyStyle = new GUIStyle(EditorStyles.label);
+        m_BodyStyle.wordWrap = true;
+        m_BodyStyle.fontSize = 14;
+        m_BodyStyle.richText = true;
+
+        m_TitleStyle = new GUIStyle(m_BodyStyle);
+        m_TitleStyle.fontSize = 26;
+
+        m_HeadingStyle = new GUIStyle(m_BodyStyle);
+        m_HeadingStyle.fontStyle = FontStyle.Bold;
+        m_HeadingStyle.fontSize = 18;
+
+        m_LinkStyle = new GUIStyle(m_BodyStyle);
+        m_LinkStyle.wordWrap = false;
+
+        // Match selection color which works nicely for both light and dark skins
+        m_LinkStyle.normal.textColor = new Color(0x00 / 255f, 0x78 / 255f, 0xDA / 255f, 1f);
+        m_LinkStyle.stretchWidth = false;
+
+        m_ButtonStyle = new GUIStyle(EditorStyles.miniButton);
+        m_ButtonStyle.fontStyle = FontStyle.Bold;
+
+        m_Initialized = true;
+    }
+
+    bool LinkLabel(GUIContent label, params GUILayoutOption[] options)
+    {
+        var position = GUILayoutUtility.GetRect(label, LinkStyle, options);
+
+        Handles.BeginGUI();
+        Handles.color = LinkStyle.normal.textColor;
+        Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax));
+        Handles.color = Color.white;
+        Handles.EndGUI();
+
+        EditorGUIUtility.AddCursorRect(position, MouseCursor.Link);
+
+        return GUI.Button(position, label, LinkStyle);
+    }
+}

+ 16 - 0
Assets/TutorialInfo/Scripts/Readme.cs

@@ -0,0 +1,16 @@
+using System;
+using UnityEngine;
+
+public class Readme : ScriptableObject
+{
+    public Texture2D icon;
+    public string title;
+    public Section[] sections;
+    public bool loadedLayout;
+
+    [Serializable]
+    public class Section
+    {
+        public string heading, text, linkText, url;
+    }
+}

+ 1 - 0
Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss

@@ -0,0 +1 @@
+@import url("unity-theme://default");

+ 126 - 0
Assets/UI/BuildingInterface.uss

@@ -0,0 +1,126 @@
+/* Building Interface Styles */
+
+.building-panel {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    min-width: 200px;
+    background-color: rgba(0, 0, 0, 0.8);
+    border-radius: 10px;
+    padding: 15px;
+    border-left-color: rgb(255, 255, 255);
+    border-right-color: rgb(255, 255, 255);
+    border-top-color: rgb(255, 255, 255);
+    border-bottom-color: rgb(255, 255, 255);
+    border-top-width: 2px;
+    border-right-width: 2px;
+    border-bottom-width: 2px;
+    border-left-width: 2px;
+}
+
+.panel-title {
+    font-size: 18px;
+    color: rgb(255, 255, 255);
+    -unity-font-style: bold;
+    margin-bottom: 10px;
+    -unity-text-align: middle-center;
+}
+
+.button-container {
+    flex-direction: column;
+    margin-bottom: 15px;
+}
+
+.build-button {
+    margin-bottom: 8px;
+    min-height: 35px;
+    font-size: 14px;
+    border-radius: 5px;
+    border-width: 2px;
+    -unity-font-style: bold;
+    transition-duration: 0.2s;
+}
+
+.wall-button {
+    background-color: rgb(100, 150, 100);
+    border-color: rgb(150, 200, 150);
+    color: rgb(255, 255, 255);
+}
+
+.wall-button:hover {
+    background-color: rgb(120, 170, 120);
+    border-color: rgb(180, 230, 180);
+}
+
+.wall-button.active {
+    background-color: rgb(150, 200, 150);
+    border-color: rgb(200, 255, 200);
+}
+
+.door-button {
+    background-color: rgb(150, 100, 100);
+    border-color: rgb(200, 150, 150);
+    color: rgb(255, 255, 255);
+}
+
+.door-button:hover {
+    background-color: rgb(170, 120, 120);
+    border-color: rgb(230, 180, 180);
+}
+
+.door-button.active {
+    background-color: rgb(200, 150, 150);
+    border-color: rgb(255, 200, 200);
+}
+
+.entrance-button {
+    background-color: rgb(150, 120, 50);
+    border-color: rgb(200, 170, 100);
+    color: rgb(255, 255, 255);
+}
+
+.entrance-button:hover {
+    background-color: rgb(170, 140, 70);
+    border-color: rgb(230, 200, 130);
+}
+
+.entrance-button.active {
+    background-color: rgb(200, 170, 100);
+    border-color: rgb(255, 220, 150);
+}
+
+.normal-button {
+    background-color: rgb(100, 100, 150);
+    border-color: rgb(150, 150, 200);
+    color: rgb(255, 255, 255);
+}
+
+.normal-button:hover {
+    background-color: rgb(120, 120, 170);
+    border-color: rgb(180, 180, 230);
+}
+
+.normal-button.active {
+    background-color: rgb(150, 150, 200);
+    border-color: rgb(200, 200, 255);
+}
+
+.status-container {
+    flex-direction: column;
+    border-top-width: 1px;
+    border-top-color: rgba(255, 255, 255, 0.3);
+    padding-top: 10px;
+}
+
+.status-label {
+    font-size: 14px;
+    color: rgb(200, 255, 200);
+    -unity-font-style: bold;
+    margin-bottom: 5px;
+}
+
+.instruction-label {
+    font-size: 12px;
+    color: rgb(200, 200, 200);
+    white-space: normal;
+}

+ 16 - 0
Assets/UI/BuildingInterface.uxml

@@ -0,0 +1,16 @@
+<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False">
+    <Style src="project://database/Assets/UI/BuildingInterface.uss?fileID=7433441132597879392&amp;guid=REPLACE_GUID&amp;type=3#BuildingInterface" />
+    <ui:VisualElement name="BuildingPanel" class="building-panel">
+        <ui:Label text="Building Tools" display-tooltip-when-elided="true" name="Title" class="panel-title" />
+        <ui:VisualElement name="ButtonContainer" class="button-container">
+            <ui:Button text="Create Walls" display-tooltip-when-elided="true" name="WallModeButton" class="build-button wall-button" />
+            <ui:Button text="Create Doors" display-tooltip-when-elided="true" name="DoorModeButton" class="build-button door-button" />
+            <ui:Button text="Create Entrance" display-tooltip-when-elided="true" name="EntranceModeButton" class="build-button entrance-button" />
+            <ui:Button text="Normal Mode" display-tooltip-when-elided="true" name="NormalModeButton" class="build-button normal-button" />
+        </ui:VisualElement>
+        <ui:VisualElement name="StatusContainer" class="status-container">
+            <ui:Label text="Mode: Normal" display-tooltip-when-elided="true" name="StatusLabel" class="status-label" />
+            <ui:Label text="Click a button to start building" display-tooltip-when-elided="true" name="InstructionLabel" class="instruction-label" />
+        </ui:VisualElement>
+    </ui:VisualElement>
+</ui:UXML>

+ 47 - 0
Packages/manifest.json

@@ -0,0 +1,47 @@
+{
+  "dependencies": {
+    "com.unity.ai.navigation": "2.0.5",
+    "com.unity.collab-proxy": "2.9.3",
+    "com.unity.ide.rider": "3.0.31",
+    "com.unity.ide.visualstudio": "2.0.22",
+    "com.unity.inputsystem": "1.11.2",
+    "com.unity.multiplayer.center": "1.0.0",
+    "com.unity.render-pipelines.universal": "17.0.3",
+    "com.unity.test-framework": "1.4.5",
+    "com.unity.timeline": "1.8.7",
+    "com.unity.ugui": "2.0.0",
+    "com.unity.visualscripting": "1.9.5",
+    "com.unity.modules.accessibility": "1.0.0",
+    "com.unity.modules.ai": "1.0.0",
+    "com.unity.modules.androidjni": "1.0.0",
+    "com.unity.modules.animation": "1.0.0",
+    "com.unity.modules.assetbundle": "1.0.0",
+    "com.unity.modules.audio": "1.0.0",
+    "com.unity.modules.cloth": "1.0.0",
+    "com.unity.modules.director": "1.0.0",
+    "com.unity.modules.imageconversion": "1.0.0",
+    "com.unity.modules.imgui": "1.0.0",
+    "com.unity.modules.jsonserialize": "1.0.0",
+    "com.unity.modules.particlesystem": "1.0.0",
+    "com.unity.modules.physics": "1.0.0",
+    "com.unity.modules.physics2d": "1.0.0",
+    "com.unity.modules.screencapture": "1.0.0",
+    "com.unity.modules.terrain": "1.0.0",
+    "com.unity.modules.terrainphysics": "1.0.0",
+    "com.unity.modules.tilemap": "1.0.0",
+    "com.unity.modules.ui": "1.0.0",
+    "com.unity.modules.uielements": "1.0.0",
+    "com.unity.modules.umbra": "1.0.0",
+    "com.unity.modules.unityanalytics": "1.0.0",
+    "com.unity.modules.unitywebrequest": "1.0.0",
+    "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
+    "com.unity.modules.unitywebrequestaudio": "1.0.0",
+    "com.unity.modules.unitywebrequesttexture": "1.0.0",
+    "com.unity.modules.unitywebrequestwww": "1.0.0",
+    "com.unity.modules.vehicles": "1.0.0",
+    "com.unity.modules.video": "1.0.0",
+    "com.unity.modules.vr": "1.0.0",
+    "com.unity.modules.wind": "1.0.0",
+    "com.unity.modules.xr": "1.0.0"
+  }
+}

+ 465 - 0
Packages/packages-lock.json

@@ -0,0 +1,465 @@
+{
+  "dependencies": {
+    "com.unity.ai.navigation": {
+      "version": "2.0.5",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.modules.ai": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.burst": {
+      "version": "1.8.18",
+      "depth": 2,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.mathematics": "1.2.1",
+        "com.unity.modules.jsonserialize": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.collab-proxy": {
+      "version": "2.9.3",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {},
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.collections": {
+      "version": "2.5.1",
+      "depth": 2,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.burst": "1.8.17",
+        "com.unity.test-framework": "1.4.5",
+        "com.unity.nuget.mono-cecil": "1.11.4",
+        "com.unity.test-framework.performance": "3.0.3"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.ext.nunit": {
+      "version": "2.0.5",
+      "depth": 1,
+      "source": "registry",
+      "dependencies": {},
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.ide.rider": {
+      "version": "3.0.31",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.ext.nunit": "1.0.6"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.ide.visualstudio": {
+      "version": "2.0.22",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.test-framework": "1.1.9"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.inputsystem": {
+      "version": "1.11.2",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.modules.uielements": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.mathematics": {
+      "version": "1.3.2",
+      "depth": 2,
+      "source": "registry",
+      "dependencies": {},
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.multiplayer.center": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.uielements": "1.0.0"
+      }
+    },
+    "com.unity.nuget.mono-cecil": {
+      "version": "1.11.4",
+      "depth": 3,
+      "source": "registry",
+      "dependencies": {},
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.render-pipelines.core": {
+      "version": "17.0.3",
+      "depth": 1,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.burst": "1.8.14",
+        "com.unity.mathematics": "1.3.2",
+        "com.unity.ugui": "2.0.0",
+        "com.unity.collections": "2.4.3",
+        "com.unity.modules.physics": "1.0.0",
+        "com.unity.modules.terrain": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0",
+        "com.unity.rendering.light-transport": "1.0.1"
+      }
+    },
+    "com.unity.render-pipelines.universal": {
+      "version": "17.0.3",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.render-pipelines.core": "17.0.3",
+        "com.unity.shadergraph": "17.0.3",
+        "com.unity.render-pipelines.universal-config": "17.0.3"
+      }
+    },
+    "com.unity.render-pipelines.universal-config": {
+      "version": "17.0.3",
+      "depth": 1,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.render-pipelines.core": "17.0.3"
+      }
+    },
+    "com.unity.rendering.light-transport": {
+      "version": "1.0.1",
+      "depth": 2,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.collections": "2.2.0",
+        "com.unity.mathematics": "1.2.4",
+        "com.unity.modules.terrain": "1.0.0"
+      }
+    },
+    "com.unity.searcher": {
+      "version": "4.9.2",
+      "depth": 2,
+      "source": "registry",
+      "dependencies": {},
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.shadergraph": {
+      "version": "17.0.3",
+      "depth": 1,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.render-pipelines.core": "17.0.3",
+        "com.unity.searcher": "4.9.2"
+      }
+    },
+    "com.unity.test-framework": {
+      "version": "1.4.5",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.ext.nunit": "2.0.3",
+        "com.unity.modules.imgui": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.test-framework.performance": {
+      "version": "3.0.3",
+      "depth": 3,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.test-framework": "1.1.31",
+        "com.unity.modules.jsonserialize": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.timeline": {
+      "version": "1.8.7",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.modules.audio": "1.0.0",
+        "com.unity.modules.director": "1.0.0",
+        "com.unity.modules.animation": "1.0.0",
+        "com.unity.modules.particlesystem": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.ugui": {
+      "version": "2.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.ui": "1.0.0",
+        "com.unity.modules.imgui": "1.0.0"
+      }
+    },
+    "com.unity.visualscripting": {
+      "version": "1.9.5",
+      "depth": 0,
+      "source": "registry",
+      "dependencies": {
+        "com.unity.ugui": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0"
+      },
+      "url": "https://packages.unity.com"
+    },
+    "com.unity.modules.accessibility": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.ai": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.androidjni": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.animation": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.assetbundle": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.audio": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.cloth": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.physics": "1.0.0"
+      }
+    },
+    "com.unity.modules.director": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.audio": "1.0.0",
+        "com.unity.modules.animation": "1.0.0"
+      }
+    },
+    "com.unity.modules.hierarchycore": {
+      "version": "1.0.0",
+      "depth": 1,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.imageconversion": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.imgui": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.jsonserialize": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.particlesystem": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.physics": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.physics2d": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.screencapture": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.imageconversion": "1.0.0"
+      }
+    },
+    "com.unity.modules.subsystems": {
+      "version": "1.0.0",
+      "depth": 1,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.jsonserialize": "1.0.0"
+      }
+    },
+    "com.unity.modules.terrain": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.terrainphysics": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.physics": "1.0.0",
+        "com.unity.modules.terrain": "1.0.0"
+      }
+    },
+    "com.unity.modules.tilemap": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.physics2d": "1.0.0"
+      }
+    },
+    "com.unity.modules.ui": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.uielements": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.ui": "1.0.0",
+        "com.unity.modules.imgui": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0",
+        "com.unity.modules.hierarchycore": "1.0.0"
+      }
+    },
+    "com.unity.modules.umbra": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.unityanalytics": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.unitywebrequest": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0"
+      }
+    },
+    "com.unity.modules.unitywebrequest": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.unitywebrequestassetbundle": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.assetbundle": "1.0.0",
+        "com.unity.modules.unitywebrequest": "1.0.0"
+      }
+    },
+    "com.unity.modules.unitywebrequestaudio": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.unitywebrequest": "1.0.0",
+        "com.unity.modules.audio": "1.0.0"
+      }
+    },
+    "com.unity.modules.unitywebrequesttexture": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.unitywebrequest": "1.0.0",
+        "com.unity.modules.imageconversion": "1.0.0"
+      }
+    },
+    "com.unity.modules.unitywebrequestwww": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.unitywebrequest": "1.0.0",
+        "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
+        "com.unity.modules.unitywebrequestaudio": "1.0.0",
+        "com.unity.modules.audio": "1.0.0",
+        "com.unity.modules.assetbundle": "1.0.0",
+        "com.unity.modules.imageconversion": "1.0.0"
+      }
+    },
+    "com.unity.modules.vehicles": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.physics": "1.0.0"
+      }
+    },
+    "com.unity.modules.video": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.audio": "1.0.0",
+        "com.unity.modules.ui": "1.0.0",
+        "com.unity.modules.unitywebrequest": "1.0.0"
+      }
+    },
+    "com.unity.modules.vr": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.jsonserialize": "1.0.0",
+        "com.unity.modules.physics": "1.0.0",
+        "com.unity.modules.xr": "1.0.0"
+      }
+    },
+    "com.unity.modules.wind": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {}
+    },
+    "com.unity.modules.xr": {
+      "version": "1.0.0",
+      "depth": 0,
+      "source": "builtin",
+      "dependencies": {
+        "com.unity.modules.physics": "1.0.0",
+        "com.unity.modules.jsonserialize": "1.0.0",
+        "com.unity.modules.subsystems": "1.0.0"
+      }
+    }
+  }
+}

+ 19 - 0
ProjectSettings/AudioManager.asset

@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!11 &1
+AudioManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Volume: 1
+  Rolloff Scale: 1
+  Doppler Factor: 1
+  Default Speaker Mode: 2
+  m_SampleRate: 0
+  m_DSPBufferSize: 1024
+  m_VirtualVoiceCount: 512
+  m_RealVoiceCount: 32
+  m_SpatializerPlugin: 
+  m_AmbisonicDecoderPlugin: 
+  m_DisableAudio: 0
+  m_VirtualizeEffects: 1
+  m_RequestedDSPBufferSize: 0

+ 6 - 0
ProjectSettings/ClusterInputManager.asset

@@ -0,0 +1,6 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!236 &1
+ClusterInputManager:
+  m_ObjectHideFlags: 0
+  m_Inputs: []

+ 36 - 0
ProjectSettings/DynamicsManager.asset

@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!55 &1
+PhysicsManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 13
+  m_Gravity: {x: 0, y: -9.81, z: 0}
+  m_DefaultMaterial: {fileID: 0}
+  m_BounceThreshold: 2
+  m_SleepThreshold: 0.005
+  m_DefaultContactOffset: 0.01
+  m_DefaultSolverIterations: 6
+  m_DefaultSolverVelocityIterations: 1
+  m_QueriesHitBackfaces: 0
+  m_QueriesHitTriggers: 1
+  m_EnableAdaptiveForce: 0
+  m_ClothInterCollisionDistance: 0.1
+  m_ClothInterCollisionStiffness: 0.2
+  m_ContactsGeneration: 1
+  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+  m_AutoSimulation: 1
+  m_AutoSyncTransforms: 0
+  m_ReuseCollisionCallbacks: 1
+  m_ClothInterCollisionSettingsToggle: 0
+  m_ClothGravity: {x: 0, y: -9.81, z: 0}
+  m_ContactPairsMode: 0
+  m_BroadphaseType: 0
+  m_WorldBounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 250, y: 250, z: 250}
+  m_WorldSubdivisions: 8
+  m_FrictionType: 0
+  m_EnableEnhancedDeterminism: 0
+  m_EnableUnifiedHeightmaps: 1
+  m_SolverType: 0
+  m_DefaultMaxAngularSpeed: 50

+ 13 - 0
ProjectSettings/EditorBuildSettings.asset

@@ -0,0 +1,13 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1045 &1
+EditorBuildSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Scenes:
+  - enabled: 1
+    path: Assets/Scenes/MainScene.unity
+    guid: 99c9720ab356a0642a771bea13969a05
+  m_configObjects:
+    com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
+  m_UseUCBPForAssetBundles: 0

+ 48 - 0
ProjectSettings/EditorSettings.asset

@@ -0,0 +1,48 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!159 &1
+EditorSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 13
+  m_SerializationMode: 2
+  m_LineEndingsForNewScripts: 0
+  m_DefaultBehaviorMode: 0
+  m_PrefabRegularEnvironment: {fileID: 0}
+  m_PrefabUIEnvironment: {fileID: 0}
+  m_SpritePackerMode: 0
+  m_SpritePackerCacheSize: 10
+  m_SpritePackerPaddingPower: 1
+  m_Bc7TextureCompressor: 0
+  m_EtcTextureCompressorBehavior: 1
+  m_EtcTextureFastCompressor: 1
+  m_EtcTextureNormalCompressor: 2
+  m_EtcTextureBestCompressor: 4
+  m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
+  m_ProjectGenerationRootNamespace: 
+  m_EnableTextureStreamingInEditMode: 1
+  m_EnableTextureStreamingInPlayMode: 1
+  m_EnableEditorAsyncCPUTextureLoading: 0
+  m_AsyncShaderCompilation: 1
+  m_PrefabModeAllowAutoSave: 1
+  m_EnterPlayModeOptionsEnabled: 1
+  m_EnterPlayModeOptions: 0
+  m_GameObjectNamingDigits: 1
+  m_GameObjectNamingScheme: 0
+  m_AssetNamingUsesSpace: 1
+  m_InspectorUseIMGUIDefaultInspector: 0
+  m_UseLegacyProbeSampleCount: 0
+  m_SerializeInlineMappingsOnOneLine: 1
+  m_DisableCookiesInLightmapper: 0
+  m_AssetPipelineMode: 1
+  m_RefreshImportMode: 0
+  m_CacheServerMode: 0
+  m_CacheServerEndpoint: 
+  m_CacheServerNamespacePrefix: default
+  m_CacheServerEnableDownload: 1
+  m_CacheServerEnableUpload: 1
+  m_CacheServerEnableAuth: 0
+  m_CacheServerEnableTls: 0
+  m_CacheServerValidationMode: 2
+  m_CacheServerDownloadBatchSize: 128
+  m_EnableEnlightenBakedGI: 0
+  m_ReferencedClipsExactNaming: 1

+ 70 - 0
ProjectSettings/GraphicsSettings.asset

@@ -0,0 +1,70 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!30 &1
+GraphicsSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 16
+  m_Deferred:
+    m_Mode: 1
+    m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
+  m_DeferredReflections:
+    m_Mode: 1
+    m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
+  m_ScreenSpaceShadows:
+    m_Mode: 1
+    m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
+  m_DepthNormals:
+    m_Mode: 1
+    m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
+  m_MotionVectors:
+    m_Mode: 1
+    m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
+  m_LightHalo:
+    m_Mode: 1
+    m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
+  m_LensFlare:
+    m_Mode: 1
+    m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
+  m_VideoShadersIncludeMode: 2
+  m_AlwaysIncludedShaders:
+  - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
+  m_PreloadedShaders: []
+  m_PreloadShadersBatchTimeLimit: -1
+  m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
+    type: 0}
+  m_CustomRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd,
+    type: 2}
+  m_TransparencySortMode: 0
+  m_TransparencySortAxis: {x: 0, y: 0, z: 1}
+  m_DefaultRenderingPath: 1
+  m_DefaultMobileRenderingPath: 1
+  m_TierSettings: []
+  m_LightmapStripping: 0
+  m_FogStripping: 0
+  m_InstancingStripping: 0
+  m_BrgStripping: 0
+  m_LightmapKeepPlain: 1
+  m_LightmapKeepDirCombined: 1
+  m_LightmapKeepDynamicPlain: 1
+  m_LightmapKeepDynamicDirCombined: 1
+  m_LightmapKeepShadowMask: 1
+  m_LightmapKeepSubtractive: 1
+  m_FogKeepLinear: 1
+  m_FogKeepExp: 1
+  m_FogKeepExp2: 1
+  m_AlbedoSwatchInfos: []
+  m_RenderPipelineGlobalSettingsMap:
+    UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: 18dc0cd2c080841dea60987a38ce93fa,
+      type: 2}
+  m_LightsUseLinearIntensity: 1
+  m_LightsUseColorTemperature: 1
+  m_LogWhenShaderIsCompiled: 0
+  m_LightProbeOutsideHullStrategy: 0
+  m_CameraRelativeLightCulling: 0
+  m_CameraRelativeShadowCulling: 0

+ 487 - 0
ProjectSettings/InputManager.asset

@@ -0,0 +1,487 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!13 &1
+InputManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Axes:
+  - serializedVersion: 3
+    m_Name: Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: left
+    positiveButton: right
+    altNegativeButton: a
+    altPositiveButton: d
+    gravity: 3
+    dead: 0.001
+    sensitivity: 3
+    snap: 1
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: down
+    positiveButton: up
+    altNegativeButton: s
+    altPositiveButton: w
+    gravity: 3
+    dead: 0.001
+    sensitivity: 3
+    snap: 1
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire1
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left ctrl
+    altNegativeButton: 
+    altPositiveButton: mouse 0
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire2
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left alt
+    altNegativeButton: 
+    altPositiveButton: mouse 1
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire3
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left shift
+    altNegativeButton: 
+    altPositiveButton: mouse 2
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Jump
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: space
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse X
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse Y
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 1
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse ScrollWheel
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 2
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0.19
+    sensitivity: 1
+    snap: 0
+    invert: 0
+    type: 2
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0.19
+    sensitivity: 1
+    snap: 0
+    invert: 1
+    type: 2
+    axis: 1
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire1
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 0
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire2
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 1
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire3
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 2
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Jump
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 3
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Submit
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: return
+    altNegativeButton: 
+    altPositiveButton: joystick button 0
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Submit
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: enter
+    altNegativeButton: 
+    altPositiveButton: space
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Cancel
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: escape
+    altNegativeButton: 
+    altPositiveButton: joystick button 1
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Enable Debug Button 1
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left ctrl
+    altNegativeButton: 
+    altPositiveButton: joystick button 8
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Enable Debug Button 2
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: backspace
+    altNegativeButton: 
+    altPositiveButton: joystick button 9
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Reset
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left alt
+    altNegativeButton: 
+    altPositiveButton: joystick button 1
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Next
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: page down
+    altNegativeButton: 
+    altPositiveButton: joystick button 5
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Previous
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: page up
+    altNegativeButton: 
+    altPositiveButton: joystick button 4
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Validate
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: return
+    altNegativeButton: 
+    altPositiveButton: joystick button 0
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Persistent
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: right shift
+    altNegativeButton: 
+    altPositiveButton: joystick button 2
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Multiplier
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left shift
+    altNegativeButton: 
+    altPositiveButton: joystick button 3
+    gravity: 0
+    dead: 0
+    sensitivity: 0
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: left
+    positiveButton: right
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: down
+    positiveButton: up
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: down
+    positiveButton: up
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 2
+    axis: 6
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Debug Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: left
+    positiveButton: right
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 2
+    axis: 5
+    joyNum: 0

+ 35 - 0
ProjectSettings/MemorySettings.asset

@@ -0,0 +1,35 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!387306366 &1
+MemorySettings:
+  m_ObjectHideFlags: 0
+  m_EditorMemorySettings:
+    m_MainAllocatorBlockSize: -1
+    m_ThreadAllocatorBlockSize: -1
+    m_MainGfxBlockSize: -1
+    m_ThreadGfxBlockSize: -1
+    m_CacheBlockSize: -1
+    m_TypetreeBlockSize: -1
+    m_ProfilerBlockSize: -1
+    m_ProfilerEditorBlockSize: -1
+    m_BucketAllocatorGranularity: -1
+    m_BucketAllocatorBucketsCount: -1
+    m_BucketAllocatorBlockSize: -1
+    m_BucketAllocatorBlockCount: -1
+    m_ProfilerBucketAllocatorGranularity: -1
+    m_ProfilerBucketAllocatorBucketsCount: -1
+    m_ProfilerBucketAllocatorBlockSize: -1
+    m_ProfilerBucketAllocatorBlockCount: -1
+    m_TempAllocatorSizeMain: -1
+    m_JobTempAllocatorBlockSize: -1
+    m_BackgroundJobTempAllocatorBlockSize: -1
+    m_JobTempAllocatorReducedBlockSize: -1
+    m_TempAllocatorSizeGIBakingWorker: -1
+    m_TempAllocatorSizeNavMeshWorker: -1
+    m_TempAllocatorSizeAudioWorker: -1
+    m_TempAllocatorSizeCloudWorker: -1
+    m_TempAllocatorSizeGfx: -1
+    m_TempAllocatorSizeJobWorker: -1
+    m_TempAllocatorSizeBackgroundWorker: -1
+    m_TempAllocatorSizePreloadManager: -1
+  m_PlatformMemorySettings: {}

+ 7 - 0
ProjectSettings/MultiplayerManager.asset

@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!655991488 &1
+MultiplayerManager:
+  m_ObjectHideFlags: 0
+  m_EnableMultiplayerRoles: 0
+  m_StrippingTypes: {}

+ 91 - 0
ProjectSettings/NavMeshAreas.asset

@@ -0,0 +1,91 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!126 &1
+NavMeshProjectSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  areas:
+  - name: Walkable
+    cost: 1
+  - name: Not Walkable
+    cost: 1
+  - name: Jump
+    cost: 2
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  m_LastAgentTypeID: -887442657
+  m_Settings:
+  - serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.75
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_SettingNames:
+  - Humanoid

+ 43 - 0
ProjectSettings/PackageManagerSettings.asset

@@ -0,0 +1,43 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 61
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_EnablePreviewPackages: 0
+  m_EnablePackageDependencies: 0
+  m_AdvancedSettingsExpanded: 1
+  m_ScopedRegistriesSettingsExpanded: 1
+  oneTimeWarningShown: 0
+  m_Registries:
+  - m_Id: main
+    m_Name: 
+    m_Url: https://packages.unity.com
+    m_Scopes: []
+    m_IsDefault: 1
+    m_Capabilities: 7
+  m_UserSelectedRegistryName: 
+  m_UserAddingNewScopedRegistry: 0
+  m_RegistryInfoDraft:
+    m_ErrorMessage: 
+    m_Original:
+      m_Id: 
+      m_Name: 
+      m_Url: 
+      m_Scopes: []
+      m_IsDefault: 0
+      m_Capabilities: 0
+    m_Modified: 0
+    m_Name: 
+    m_Url: 
+    m_Scopes:
+    - 
+    m_SelectedScopeIndex: 0

+ 56 - 0
ProjectSettings/Physics2DSettings.asset

@@ -0,0 +1,56 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!19 &1
+Physics2DSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 4
+  m_Gravity: {x: 0, y: -9.81}
+  m_DefaultMaterial: {fileID: 0}
+  m_VelocityIterations: 8
+  m_PositionIterations: 3
+  m_VelocityThreshold: 1
+  m_MaxLinearCorrection: 0.2
+  m_MaxAngularCorrection: 8
+  m_MaxTranslationSpeed: 100
+  m_MaxRotationSpeed: 360
+  m_BaumgarteScale: 0.2
+  m_BaumgarteTimeOfImpactScale: 0.75
+  m_TimeToSleep: 0.5
+  m_LinearSleepTolerance: 0.01
+  m_AngularSleepTolerance: 2
+  m_DefaultContactOffset: 0.01
+  m_JobOptions:
+    serializedVersion: 2
+    useMultithreading: 0
+    useConsistencySorting: 0
+    m_InterpolationPosesPerJob: 100
+    m_NewContactsPerJob: 30
+    m_CollideContactsPerJob: 100
+    m_ClearFlagsPerJob: 200
+    m_ClearBodyForcesPerJob: 200
+    m_SyncDiscreteFixturesPerJob: 50
+    m_SyncContinuousFixturesPerJob: 50
+    m_FindNearestContactsPerJob: 100
+    m_UpdateTriggerContactsPerJob: 100
+    m_IslandSolverCostThreshold: 100
+    m_IslandSolverBodyCostScale: 1
+    m_IslandSolverContactCostScale: 10
+    m_IslandSolverJointCostScale: 10
+    m_IslandSolverBodiesPerJob: 50
+    m_IslandSolverContactsPerJob: 50
+  m_AutoSimulation: 1
+  m_QueriesHitTriggers: 1
+  m_QueriesStartInColliders: 1
+  m_CallbacksOnDisable: 1
+  m_ReuseCollisionCallbacks: 0
+  m_AutoSyncTransforms: 0
+  m_AlwaysShowColliders: 0
+  m_ShowColliderSleep: 1
+  m_ShowColliderContacts: 0
+  m_ShowColliderAABB: 0
+  m_ContactArrowScale: 0.2
+  m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
+  m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
+  m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
+  m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
+  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

+ 7 - 0
ProjectSettings/PresetManager.asset

@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1386491679 &1
+PresetManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_DefaultPresets: {}

+ 930 - 0
ProjectSettings/ProjectSettings.asset

@@ -0,0 +1,930 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!129 &1
+PlayerSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 28
+  productGUID: f5d7bfede0f0724478bb53dd1d3286ac
+  AndroidProfiler: 0
+  AndroidFilterTouchesWhenObscured: 0
+  AndroidEnableSustainedPerformanceMode: 0
+  defaultScreenOrientation: 4
+  targetDevice: 2
+  useOnDemandResources: 0
+  accelerometerFrequency: 60
+  companyName: DefaultCompany
+  productName: HotelTycoon
+  defaultCursor: {fileID: 0}
+  cursorHotspot: {x: 0, y: 0}
+  m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
+  m_ShowUnitySplashScreen: 1
+  m_ShowUnitySplashLogo: 1
+  m_SplashScreenOverlayOpacity: 1
+  m_SplashScreenAnimation: 1
+  m_SplashScreenLogoStyle: 1
+  m_SplashScreenDrawMode: 0
+  m_SplashScreenBackgroundAnimationZoom: 1
+  m_SplashScreenLogoAnimationZoom: 1
+  m_SplashScreenBackgroundLandscapeAspect: 1
+  m_SplashScreenBackgroundPortraitAspect: 1
+  m_SplashScreenBackgroundLandscapeUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenBackgroundPortraitUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenLogos: []
+  m_VirtualRealitySplashScreen: {fileID: 0}
+  m_HolographicTrackingLossScreen: {fileID: 0}
+  defaultScreenWidth: 1024
+  defaultScreenHeight: 768
+  defaultScreenWidthWeb: 960
+  defaultScreenHeightWeb: 600
+  m_StereoRenderingPath: 0
+  m_ActiveColorSpace: 1
+  unsupportedMSAAFallback: 0
+  m_SpriteBatchMaxVertexCount: 65535
+  m_SpriteBatchVertexThreshold: 300
+  m_MTRendering: 1
+  mipStripping: 0
+  numberOfMipsStripped: 0
+  numberOfMipsStrippedPerMipmapLimitGroup: {}
+  m_StackTraceTypes: 010000000100000001000000010000000100000001000000
+  iosShowActivityIndicatorOnLoading: -1
+  androidShowActivityIndicatorOnLoading: -1
+  iosUseCustomAppBackgroundBehavior: 0
+  allowedAutorotateToPortrait: 1
+  allowedAutorotateToPortraitUpsideDown: 1
+  allowedAutorotateToLandscapeRight: 1
+  allowedAutorotateToLandscapeLeft: 1
+  useOSAutorotation: 1
+  use32BitDisplayBuffer: 1
+  preserveFramebufferAlpha: 0
+  disableDepthAndStencilBuffers: 0
+  androidStartInFullscreen: 1
+  androidRenderOutsideSafeArea: 1
+  androidUseSwappy: 0
+  androidBlitType: 0
+  androidResizeableActivity: 1
+  androidDefaultWindowWidth: 1920
+  androidDefaultWindowHeight: 1080
+  androidMinimumWindowWidth: 400
+  androidMinimumWindowHeight: 300
+  androidFullscreenMode: 1
+  androidAutoRotationBehavior: 1
+  androidPredictiveBackSupport: 0
+  androidApplicationEntry: 2
+  defaultIsNativeResolution: 1
+  macRetinaSupport: 1
+  runInBackground: 0
+  muteOtherAudioSources: 0
+  Prepare IOS For Recording: 0
+  Force IOS Speakers When Recording: 0
+  deferSystemGesturesMode: 0
+  hideHomeButton: 0
+  submitAnalytics: 1
+  usePlayerLog: 1
+  dedicatedServerOptimizations: 1
+  bakeCollisionMeshes: 0
+  forceSingleInstance: 0
+  useFlipModelSwapchain: 1
+  resizableWindow: 0
+  useMacAppStoreValidation: 0
+  macAppStoreCategory: public.app-category.games
+  gpuSkinning: 1
+  meshDeformation: 2
+  xboxPIXTextureCapture: 0
+  xboxEnableAvatar: 0
+  xboxEnableKinect: 0
+  xboxEnableKinectAutoTracking: 0
+  xboxEnableFitness: 0
+  visibleInBackground: 1
+  allowFullscreenSwitch: 1
+  fullscreenMode: 1
+  xboxSpeechDB: 0
+  xboxEnableHeadOrientation: 0
+  xboxEnableGuest: 0
+  xboxEnablePIXSampling: 0
+  metalFramebufferOnly: 0
+  xboxOneResolution: 0
+  xboxOneSResolution: 0
+  xboxOneXResolution: 3
+  xboxOneMonoLoggingLevel: 0
+  xboxOneLoggingLevel: 1
+  xboxOneDisableEsram: 0
+  xboxOneEnableTypeOptimization: 0
+  xboxOnePresentImmediateThreshold: 0
+  switchQueueCommandMemory: 1048576
+  switchQueueControlMemory: 16384
+  switchQueueComputeMemory: 262144
+  switchNVNShaderPoolsGranularity: 33554432
+  switchNVNDefaultPoolsGranularity: 16777216
+  switchNVNOtherPoolsGranularity: 16777216
+  switchGpuScratchPoolGranularity: 2097152
+  switchAllowGpuScratchShrinking: 0
+  switchNVNMaxPublicTextureIDCount: 0
+  switchNVNMaxPublicSamplerIDCount: 0
+  switchMaxWorkerMultiple: 8
+  switchNVNGraphicsFirmwareMemory: 32
+  vulkanNumSwapchainBuffers: 3
+  vulkanEnableSetSRGBWrite: 0
+  vulkanEnablePreTransform: 1
+  vulkanEnableLateAcquireNextImage: 0
+  vulkanEnableCommandBufferRecycling: 1
+  loadStoreDebugModeEnabled: 0
+  visionOSBundleVersion: 1.0
+  tvOSBundleVersion: 1.0
+  bundleVersion: 0.1.0
+  preloadedAssets: []
+  metroInputSource: 0
+  wsaTransparentSwapchain: 0
+  m_HolographicPauseOnTrackingLoss: 1
+  xboxOneDisableKinectGpuReservation: 1
+  xboxOneEnable7thCore: 1
+  vrSettings:
+    enable360StereoCapture: 0
+  isWsaHolographicRemotingEnabled: 0
+  enableFrameTimingStats: 0
+  enableOpenGLProfilerGPURecorders: 1
+  allowHDRDisplaySupport: 0
+  useHDRDisplay: 0
+  hdrBitDepth: 0
+  m_ColorGamuts: 00000000
+  targetPixelDensity: 30
+  resolutionScalingMode: 0
+  resetResolutionOnWindowResize: 0
+  androidSupportedAspectRatio: 1
+  androidMaxAspectRatio: 2.4
+  androidMinAspectRatio: 1
+  applicationIdentifier:
+    Android: com.UnityTechnologies.com.unity.template.urpblank
+    Standalone: com.Unity-Technologies.com.unity.template.urp-blank
+    iPhone: com.Unity-Technologies.com.unity.template.urp-blank
+  buildNumber:
+    Standalone: 0
+    VisionOS: 0
+    iPhone: 0
+    tvOS: 0
+  overrideDefaultApplicationIdentifier: 1
+  AndroidBundleVersionCode: 1
+  AndroidMinSdkVersion: 23
+  AndroidTargetSdkVersion: 0
+  AndroidPreferredInstallLocation: 1
+  aotOptions: 
+  stripEngineCode: 1
+  iPhoneStrippingLevel: 0
+  iPhoneScriptCallOptimization: 0
+  ForceInternetPermission: 0
+  ForceSDCardPermission: 0
+  CreateWallpaper: 0
+  androidSplitApplicationBinary: 0
+  keepLoadedShadersAlive: 0
+  StripUnusedMeshComponents: 0
+  strictShaderVariantMatching: 0
+  VertexChannelCompressionMask: 4054
+  iPhoneSdkVersion: 988
+  iOSSimulatorArchitecture: 0
+  iOSTargetOSVersionString: 13.0
+  tvOSSdkVersion: 0
+  tvOSSimulatorArchitecture: 0
+  tvOSRequireExtendedGameController: 0
+  tvOSTargetOSVersionString: 13.0
+  VisionOSSdkVersion: 0
+  VisionOSTargetOSVersionString: 1.0
+  uIPrerenderedIcon: 0
+  uIRequiresPersistentWiFi: 0
+  uIRequiresFullScreen: 1
+  uIStatusBarHidden: 1
+  uIExitOnSuspend: 0
+  uIStatusBarStyle: 0
+  appleTVSplashScreen: {fileID: 0}
+  appleTVSplashScreen2x: {fileID: 0}
+  tvOSSmallIconLayers: []
+  tvOSSmallIconLayers2x: []
+  tvOSLargeIconLayers: []
+  tvOSLargeIconLayers2x: []
+  tvOSTopShelfImageLayers: []
+  tvOSTopShelfImageLayers2x: []
+  tvOSTopShelfImageWideLayers: []
+  tvOSTopShelfImageWideLayers2x: []
+  iOSLaunchScreenType: 0
+  iOSLaunchScreenPortrait: {fileID: 0}
+  iOSLaunchScreenLandscape: {fileID: 0}
+  iOSLaunchScreenBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreenFillPct: 100
+  iOSLaunchScreenSize: 100
+  iOSLaunchScreeniPadType: 0
+  iOSLaunchScreeniPadImage: {fileID: 0}
+  iOSLaunchScreeniPadBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreeniPadFillPct: 100
+  iOSLaunchScreeniPadSize: 100
+  iOSLaunchScreenCustomStoryboardPath: 
+  iOSLaunchScreeniPadCustomStoryboardPath: 
+  iOSDeviceRequirements: []
+  iOSURLSchemes: []
+  macOSURLSchemes: []
+  iOSBackgroundModes: 0
+  iOSMetalForceHardShadows: 0
+  metalEditorSupport: 1
+  metalAPIValidation: 1
+  metalCompileShaderBinary: 0
+  iOSRenderExtraFrameOnPause: 0
+  iosCopyPluginsCodeInsteadOfSymlink: 0
+  appleDeveloperTeamID: 
+  iOSManualSigningProvisioningProfileID: 
+  tvOSManualSigningProvisioningProfileID: 
+  VisionOSManualSigningProvisioningProfileID: 
+  iOSManualSigningProvisioningProfileType: 0
+  tvOSManualSigningProvisioningProfileType: 0
+  VisionOSManualSigningProvisioningProfileType: 0
+  appleEnableAutomaticSigning: 0
+  iOSRequireARKit: 0
+  iOSAutomaticallyDetectAndAddCapabilities: 1
+  appleEnableProMotion: 0
+  shaderPrecisionModel: 0
+  clonedFromGUID: 3c72c65a16f0acb438eed22b8b16c24a
+  templatePackageId: com.unity.template.urp-blank@17.0.11
+  templateDefaultScene: Assets/Scenes/SampleScene.unity
+  useCustomMainManifest: 0
+  useCustomLauncherManifest: 0
+  useCustomMainGradleTemplate: 0
+  useCustomLauncherGradleManifest: 0
+  useCustomBaseGradleTemplate: 0
+  useCustomGradlePropertiesTemplate: 0
+  useCustomGradleSettingsTemplate: 0
+  useCustomProguardFile: 0
+  AndroidTargetArchitectures: 2
+  AndroidSplashScreenScale: 0
+  androidSplashScreen: {fileID: 0}
+  AndroidKeystoreName: 
+  AndroidKeyaliasName: 
+  AndroidEnableArmv9SecurityFeatures: 0
+  AndroidEnableArm64MTE: 0
+  AndroidBuildApkPerCpuArchitecture: 0
+  AndroidTVCompatibility: 0
+  AndroidIsGame: 1
+  AndroidEnableTango: 0
+  androidEnableBanner: 1
+  androidUseLowAccuracyLocation: 0
+  androidUseCustomKeystore: 0
+  m_AndroidBanners:
+  - width: 320
+    height: 180
+    banner: {fileID: 0}
+  androidGamepadSupportLevel: 0
+  AndroidMinifyRelease: 0
+  AndroidMinifyDebug: 0
+  AndroidValidateAppBundleSize: 1
+  AndroidAppBundleSizeToValidate: 150
+  AndroidReportGooglePlayAppDependencies: 1
+  androidSymbolsSizeThreshold: 800
+  m_BuildTargetIcons: []
+  m_BuildTargetPlatformIcons:
+  - m_BuildTarget: iPhone
+    m_Icons:
+    - m_Textures: []
+      m_Width: 180
+      m_Height: 180
+      m_Kind: 0
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 120
+      m_Height: 120
+      m_Kind: 0
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 167
+      m_Height: 167
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 152
+      m_Height: 152
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 76
+      m_Height: 76
+      m_Kind: 0
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 120
+      m_Height: 120
+      m_Kind: 3
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 80
+      m_Height: 80
+      m_Kind: 3
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 80
+      m_Height: 80
+      m_Kind: 3
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 3
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 87
+      m_Height: 87
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 58
+      m_Height: 58
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 29
+      m_Height: 29
+      m_Kind: 1
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 58
+      m_Height: 58
+      m_Kind: 1
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 29
+      m_Height: 29
+      m_Kind: 1
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 60
+      m_Height: 60
+      m_Kind: 2
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 2
+      m_SubKind: iPhone
+    - m_Textures: []
+      m_Width: 40
+      m_Height: 40
+      m_Kind: 2
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 20
+      m_Height: 20
+      m_Kind: 2
+      m_SubKind: iPad
+    - m_Textures: []
+      m_Width: 1024
+      m_Height: 1024
+      m_Kind: 4
+      m_SubKind: App Store
+  - m_BuildTarget: Android
+    m_Icons:
+    - m_Textures: []
+      m_Width: 432
+      m_Height: 432
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 324
+      m_Height: 324
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 216
+      m_Height: 216
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 162
+      m_Height: 162
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 108
+      m_Height: 108
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 81
+      m_Height: 81
+      m_Kind: 2
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 192
+      m_Height: 192
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 144
+      m_Height: 144
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 96
+      m_Height: 96
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 72
+      m_Height: 72
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 48
+      m_Height: 48
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 36
+      m_Height: 36
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 192
+      m_Height: 192
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 144
+      m_Height: 144
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 96
+      m_Height: 96
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 72
+      m_Height: 72
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 48
+      m_Height: 48
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 36
+      m_Height: 36
+      m_Kind: 0
+      m_SubKind: 
+  - m_BuildTarget: tvOS
+    m_Icons:
+    - m_Textures: []
+      m_Width: 1280
+      m_Height: 768
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 800
+      m_Height: 480
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 400
+      m_Height: 240
+      m_Kind: 0
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 4640
+      m_Height: 1440
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 2320
+      m_Height: 720
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 3840
+      m_Height: 1440
+      m_Kind: 1
+      m_SubKind: 
+    - m_Textures: []
+      m_Width: 1920
+      m_Height: 720
+      m_Kind: 1
+      m_SubKind: 
+  m_BuildTargetBatching: []
+  m_BuildTargetShaderSettings: []
+  m_BuildTargetGraphicsJobs: []
+  m_BuildTargetGraphicsJobMode: []
+  m_BuildTargetGraphicsAPIs:
+  - m_BuildTarget: iOSSupport
+    m_APIs: 10000000
+    m_Automatic: 1
+  - m_BuildTarget: AndroidPlayer
+    m_APIs: 150000000b000000
+    m_Automatic: 0
+  m_BuildTargetVRSettings: []
+  m_DefaultShaderChunkSizeInMB: 16
+  m_DefaultShaderChunkCount: 0
+  openGLRequireES31: 0
+  openGLRequireES31AEP: 0
+  openGLRequireES32: 0
+  m_TemplateCustomTags: {}
+  mobileMTRendering:
+    Android: 1
+    iPhone: 1
+    tvOS: 1
+  m_BuildTargetGroupLightmapEncodingQuality:
+  - serializedVersion: 2
+    m_BuildTarget: Android
+    m_EncodingQuality: 1
+  m_BuildTargetGroupLightmapSettings: []
+  m_BuildTargetGroupLoadStoreDebugModeSettings: []
+  m_BuildTargetNormalMapEncoding:
+  - m_BuildTarget: Android
+    m_Encoding: 1
+  m_BuildTargetDefaultTextureCompressionFormat:
+  - serializedVersion: 3
+    m_BuildTarget: Android
+    m_Formats: 03000000
+  playModeTestRunnerEnabled: 0
+  runPlayModeTestAsEditModeTest: 0
+  actionOnDotNetUnhandledException: 1
+  editorGfxJobOverride: 1
+  enableInternalProfiler: 0
+  logObjCUncaughtExceptions: 1
+  enableCrashReportAPI: 0
+  cameraUsageDescription: 
+  locationUsageDescription: 
+  microphoneUsageDescription: 
+  bluetoothUsageDescription: 
+  macOSTargetOSVersion: 11.0
+  switchNMETAOverride: 
+  switchNetLibKey: 
+  switchSocketMemoryPoolSize: 6144
+  switchSocketAllocatorPoolSize: 128
+  switchSocketConcurrencyLimit: 14
+  switchScreenResolutionBehavior: 2
+  switchUseCPUProfiler: 0
+  switchEnableFileSystemTrace: 0
+  switchLTOSetting: 0
+  switchApplicationID: 0x01004b9000490000
+  switchNSODependencies: 
+  switchCompilerFlags: 
+  switchTitleNames_0: 
+  switchTitleNames_1: 
+  switchTitleNames_2: 
+  switchTitleNames_3: 
+  switchTitleNames_4: 
+  switchTitleNames_5: 
+  switchTitleNames_6: 
+  switchTitleNames_7: 
+  switchTitleNames_8: 
+  switchTitleNames_9: 
+  switchTitleNames_10: 
+  switchTitleNames_11: 
+  switchTitleNames_12: 
+  switchTitleNames_13: 
+  switchTitleNames_14: 
+  switchTitleNames_15: 
+  switchPublisherNames_0: 
+  switchPublisherNames_1: 
+  switchPublisherNames_2: 
+  switchPublisherNames_3: 
+  switchPublisherNames_4: 
+  switchPublisherNames_5: 
+  switchPublisherNames_6: 
+  switchPublisherNames_7: 
+  switchPublisherNames_8: 
+  switchPublisherNames_9: 
+  switchPublisherNames_10: 
+  switchPublisherNames_11: 
+  switchPublisherNames_12: 
+  switchPublisherNames_13: 
+  switchPublisherNames_14: 
+  switchPublisherNames_15: 
+  switchIcons_0: {fileID: 0}
+  switchIcons_1: {fileID: 0}
+  switchIcons_2: {fileID: 0}
+  switchIcons_3: {fileID: 0}
+  switchIcons_4: {fileID: 0}
+  switchIcons_5: {fileID: 0}
+  switchIcons_6: {fileID: 0}
+  switchIcons_7: {fileID: 0}
+  switchIcons_8: {fileID: 0}
+  switchIcons_9: {fileID: 0}
+  switchIcons_10: {fileID: 0}
+  switchIcons_11: {fileID: 0}
+  switchIcons_12: {fileID: 0}
+  switchIcons_13: {fileID: 0}
+  switchIcons_14: {fileID: 0}
+  switchIcons_15: {fileID: 0}
+  switchSmallIcons_0: {fileID: 0}
+  switchSmallIcons_1: {fileID: 0}
+  switchSmallIcons_2: {fileID: 0}
+  switchSmallIcons_3: {fileID: 0}
+  switchSmallIcons_4: {fileID: 0}
+  switchSmallIcons_5: {fileID: 0}
+  switchSmallIcons_6: {fileID: 0}
+  switchSmallIcons_7: {fileID: 0}
+  switchSmallIcons_8: {fileID: 0}
+  switchSmallIcons_9: {fileID: 0}
+  switchSmallIcons_10: {fileID: 0}
+  switchSmallIcons_11: {fileID: 0}
+  switchSmallIcons_12: {fileID: 0}
+  switchSmallIcons_13: {fileID: 0}
+  switchSmallIcons_14: {fileID: 0}
+  switchSmallIcons_15: {fileID: 0}
+  switchManualHTML: 
+  switchAccessibleURLs: 
+  switchLegalInformation: 
+  switchMainThreadStackSize: 1048576
+  switchPresenceGroupId: 
+  switchLogoHandling: 0
+  switchReleaseVersion: 0
+  switchDisplayVersion: 1.0.0
+  switchStartupUserAccount: 0
+  switchSupportedLanguagesMask: 0
+  switchLogoType: 0
+  switchApplicationErrorCodeCategory: 
+  switchUserAccountSaveDataSize: 0
+  switchUserAccountSaveDataJournalSize: 0
+  switchApplicationAttribute: 0
+  switchCardSpecSize: -1
+  switchCardSpecClock: -1
+  switchRatingsMask: 0
+  switchRatingsInt_0: 0
+  switchRatingsInt_1: 0
+  switchRatingsInt_2: 0
+  switchRatingsInt_3: 0
+  switchRatingsInt_4: 0
+  switchRatingsInt_5: 0
+  switchRatingsInt_6: 0
+  switchRatingsInt_7: 0
+  switchRatingsInt_8: 0
+  switchRatingsInt_9: 0
+  switchRatingsInt_10: 0
+  switchRatingsInt_11: 0
+  switchRatingsInt_12: 0
+  switchLocalCommunicationIds_0: 
+  switchLocalCommunicationIds_1: 
+  switchLocalCommunicationIds_2: 
+  switchLocalCommunicationIds_3: 
+  switchLocalCommunicationIds_4: 
+  switchLocalCommunicationIds_5: 
+  switchLocalCommunicationIds_6: 
+  switchLocalCommunicationIds_7: 
+  switchParentalControl: 0
+  switchAllowsScreenshot: 1
+  switchAllowsVideoCapturing: 1
+  switchAllowsRuntimeAddOnContentInstall: 0
+  switchDataLossConfirmation: 0
+  switchUserAccountLockEnabled: 0
+  switchSystemResourceMemory: 16777216
+  switchSupportedNpadStyles: 22
+  switchNativeFsCacheSize: 32
+  switchIsHoldTypeHorizontal: 0
+  switchSupportedNpadCount: 8
+  switchEnableTouchScreen: 1
+  switchSocketConfigEnabled: 0
+  switchTcpInitialSendBufferSize: 32
+  switchTcpInitialReceiveBufferSize: 64
+  switchTcpAutoSendBufferSizeMax: 256
+  switchTcpAutoReceiveBufferSizeMax: 256
+  switchUdpSendBufferSize: 9
+  switchUdpReceiveBufferSize: 42
+  switchSocketBufferEfficiency: 4
+  switchSocketInitializeEnabled: 1
+  switchNetworkInterfaceManagerInitializeEnabled: 1
+  switchDisableHTCSPlayerConnection: 0
+  switchUseNewStyleFilepaths: 0
+  switchUseLegacyFmodPriorities: 0
+  switchUseMicroSleepForYield: 1
+  switchEnableRamDiskSupport: 0
+  switchMicroSleepForYieldTime: 25
+  switchRamDiskSpaceSize: 12
+  switchUpgradedPlayerSettingsToNMETA: 0
+  ps4NPAgeRating: 12
+  ps4NPTitleSecret: 
+  ps4NPTrophyPackPath: 
+  ps4ParentalLevel: 11
+  ps4ContentID: ED1633-NPXX51362_00-0000000000000000
+  ps4Category: 0
+  ps4MasterVersion: 01.00
+  ps4AppVersion: 01.00
+  ps4AppType: 0
+  ps4ParamSfxPath: 
+  ps4VideoOutPixelFormat: 0
+  ps4VideoOutInitialWidth: 1920
+  ps4VideoOutBaseModeInitialWidth: 1920
+  ps4VideoOutReprojectionRate: 60
+  ps4PronunciationXMLPath: 
+  ps4PronunciationSIGPath: 
+  ps4BackgroundImagePath: 
+  ps4StartupImagePath: 
+  ps4StartupImagesFolder: 
+  ps4IconImagesFolder: 
+  ps4SaveDataImagePath: 
+  ps4SdkOverride: 
+  ps4BGMPath: 
+  ps4ShareFilePath: 
+  ps4ShareOverlayImagePath: 
+  ps4PrivacyGuardImagePath: 
+  ps4ExtraSceSysFile: 
+  ps4NPtitleDatPath: 
+  ps4RemotePlayKeyAssignment: -1
+  ps4RemotePlayKeyMappingDir: 
+  ps4PlayTogetherPlayerCount: 0
+  ps4EnterButtonAssignment: 2
+  ps4ApplicationParam1: 0
+  ps4ApplicationParam2: 0
+  ps4ApplicationParam3: 0
+  ps4ApplicationParam4: 0
+  ps4DownloadDataSize: 0
+  ps4GarlicHeapSize: 2048
+  ps4ProGarlicHeapSize: 2560
+  playerPrefsMaxSize: 32768
+  ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
+  ps4pnSessions: 1
+  ps4pnPresence: 1
+  ps4pnFriends: 1
+  ps4pnGameCustomData: 1
+  playerPrefsSupport: 0
+  enableApplicationExit: 0
+  resetTempFolder: 1
+  restrictedAudioUsageRights: 0
+  ps4UseResolutionFallback: 0
+  ps4ReprojectionSupport: 0
+  ps4UseAudio3dBackend: 0
+  ps4UseLowGarlicFragmentationMode: 1
+  ps4SocialScreenEnabled: 0
+  ps4ScriptOptimizationLevel: 2
+  ps4Audio3dVirtualSpeakerCount: 14
+  ps4attribCpuUsage: 0
+  ps4PatchPkgPath: 
+  ps4PatchLatestPkgPath: 
+  ps4PatchChangeinfoPath: 
+  ps4PatchDayOne: 0
+  ps4attribUserManagement: 0
+  ps4attribMoveSupport: 0
+  ps4attrib3DSupport: 0
+  ps4attribShareSupport: 0
+  ps4attribExclusiveVR: 0
+  ps4disableAutoHideSplash: 0
+  ps4videoRecordingFeaturesUsed: 0
+  ps4contentSearchFeaturesUsed: 0
+  ps4CompatibilityPS5: 0
+  ps4AllowPS5Detection: 0
+  ps4GPU800MHz: 1
+  ps4attribEyeToEyeDistanceSettingVR: 0
+  ps4IncludedModules: []
+  ps4attribVROutputEnabled: 0
+  monoEnv: 
+  splashScreenBackgroundSourceLandscape: {fileID: 0}
+  splashScreenBackgroundSourcePortrait: {fileID: 0}
+  blurSplashScreenBackground: 1
+  spritePackerPolicy: 
+  webGLMemorySize: 32
+  webGLExceptionSupport: 1
+  webGLNameFilesAsHashes: 0
+  webGLShowDiagnostics: 0
+  webGLDataCaching: 1
+  webGLDebugSymbols: 0
+  webGLEmscriptenArgs: 
+  webGLModulesDirectory: 
+  webGLTemplate: APPLICATION:Default
+  webGLAnalyzeBuildSize: 0
+  webGLUseEmbeddedResources: 0
+  webGLCompressionFormat: 0
+  webGLWasmArithmeticExceptions: 0
+  webGLLinkerTarget: 1
+  webGLThreadsSupport: 0
+  webGLDecompressionFallback: 0
+  webGLInitialMemorySize: 32
+  webGLMaximumMemorySize: 2048
+  webGLMemoryGrowthMode: 2
+  webGLMemoryLinearGrowthStep: 16
+  webGLMemoryGeometricGrowthStep: 0.2
+  webGLMemoryGeometricGrowthCap: 96
+  webGLEnableWebGPU: 0
+  webGLPowerPreference: 2
+  webGLWebAssemblyTable: 0
+  webGLWebAssemblyBigInt: 0
+  webGLCloseOnQuit: 0
+  webWasm2023: 0
+  scriptingDefineSymbols: {}
+  additionalCompilerArguments: {}
+  platformArchitecture: {}
+  scriptingBackend:
+    Android: 1
+  il2cppCompilerConfiguration: {}
+  il2cppCodeGeneration: {}
+  il2cppStacktraceInformation: {}
+  managedStrippingLevel: {}
+  incrementalIl2cppBuild: {}
+  suppressCommonWarnings: 1
+  allowUnsafeCode: 0
+  useDeterministicCompilation: 1
+  additionalIl2CppArgs: 
+  scriptingRuntimeVersion: 1
+  gcIncremental: 1
+  gcWBarrierValidation: 0
+  apiCompatibilityLevelPerPlatform: {}
+  editorAssembliesCompatibilityLevel: 1
+  m_RenderingPath: 1
+  m_MobileRenderingPath: 1
+  metroPackageName: HotelTycoon
+  metroPackageVersion: 
+  metroCertificatePath: 
+  metroCertificatePassword: 
+  metroCertificateSubject: 
+  metroCertificateIssuer: 
+  metroCertificateNotAfter: 0000000000000000
+  metroApplicationDescription: HotelTycoon
+  wsaImages: {}
+  metroTileShortName: 
+  metroTileShowName: 0
+  metroMediumTileShowName: 0
+  metroLargeTileShowName: 0
+  metroWideTileShowName: 0
+  metroSupportStreamingInstall: 0
+  metroLastRequiredScene: 0
+  metroDefaultTileSize: 1
+  metroTileForegroundText: 2
+  metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
+  metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
+  metroSplashScreenUseBackgroundColor: 0
+  syncCapabilities: 0
+  platformCapabilities: {}
+  metroTargetDeviceFamilies: {}
+  metroFTAName: 
+  metroFTAFileTypes: []
+  metroProtocolName: 
+  vcxProjDefaultLanguage: 
+  XboxOneProductId: 
+  XboxOneUpdateKey: 
+  XboxOneSandboxId: 
+  XboxOneContentId: 
+  XboxOneTitleId: 
+  XboxOneSCId: 
+  XboxOneGameOsOverridePath: 
+  XboxOnePackagingOverridePath: 
+  XboxOneAppManifestOverridePath: 
+  XboxOneVersion: 1.0.0.0
+  XboxOnePackageEncryption: 0
+  XboxOnePackageUpdateGranularity: 2
+  XboxOneDescription: 
+  XboxOneLanguage:
+  - enus
+  XboxOneCapability: []
+  XboxOneGameRating: {}
+  XboxOneIsContentPackage: 0
+  XboxOneEnhancedXboxCompatibilityMode: 0
+  XboxOneEnableGPUVariability: 1
+  XboxOneSockets: {}
+  XboxOneSplashScreen: {fileID: 0}
+  XboxOneAllowedProductIds: []
+  XboxOnePersistentLocalStorageSize: 0
+  XboxOneXTitleMemory: 8
+  XboxOneOverrideIdentityName: 
+  XboxOneOverrideIdentityPublisher: 
+  vrEditorSettings: {}
+  cloudServicesEnabled: {}
+  luminIcon:
+    m_Name: 
+    m_ModelFolderPath: 
+    m_PortalFolderPath: 
+  luminCert:
+    m_CertPath: 
+    m_SignPackage: 1
+  luminIsChannelApp: 0
+  luminVersion:
+    m_VersionCode: 1
+    m_VersionName: 
+  hmiPlayerDataPath: 
+  hmiForceSRGBBlit: 1
+  embeddedLinuxEnableGamepadInput: 0
+  hmiCpuConfiguration: 
+  hmiLogStartupTiming: 0
+  qnxGraphicConfPath: 
+  apiCompatibilityLevel: 6
+  captureStartupLogs: {}
+  activeInputHandler: 2
+  windowsGamepadBackendHint: 0
+  cloudProjectId: 9bcf5f75-1c39-41ba-a859-fc75ac8c8846
+  framebufferDepthMemorylessMode: 0
+  qualitySettingsNames: []
+  projectName: HotelTycoon
+  organizationId: axelnordh
+  cloudEnabled: 0
+  legacyClampBlendShapeWeights: 0
+  hmiLoadingImage: {fileID: 0}
+  platformRequiresReadableAssets: 0
+  virtualTexturingSupportEnabled: 0
+  insecureHttpOption: 0
+  androidVulkanDenyFilterList: []
+  androidVulkanAllowFilterList: []

+ 2 - 0
ProjectSettings/ProjectVersion.txt

@@ -0,0 +1,2 @@
+m_EditorVersion: 6000.0.33f1
+m_EditorVersionWithRevision: 6000.0.33f1 (433b0a79340b)

+ 134 - 0
ProjectSettings/QualitySettings.asset

@@ -0,0 +1,134 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!47 &1
+QualitySettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 5
+  m_CurrentQuality: 1
+  m_QualitySettings:
+  - serializedVersion: 4
+    name: Mobile
+    pixelLightCount: 2
+    shadows: 2
+    shadowResolution: 1
+    shadowProjection: 1
+    shadowCascades: 2
+    shadowDistance: 40
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 0
+    skinWeights: 2
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
+    anisotropicTextures: 1
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 1
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 1
+    useLegacyDetailDistribution: 1
+    adaptiveVsync: 0
+    vSyncCount: 0
+    realtimeGICPUUsage: 100
+    adaptiveVsyncExtraA: 0
+    adaptiveVsyncExtraB: 0
+    lodBias: 1
+    maximumLODLevel: 0
+    enableLODCrossFade: 1
+    streamingMipmapsActive: 0
+    streamingMipmapsAddAllCameras: 1
+    streamingMipmapsMemoryBudget: 512
+    streamingMipmapsRenderersPerFrame: 512
+    streamingMipmapsMaxLevelReduction: 2
+    streamingMipmapsMaxFileIORequests: 1024
+    particleRaycastBudget: 256
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    asyncUploadPersistentBuffer: 1
+    resolutionScalingFixedDPIFactor: 1
+    customRenderPipeline: {fileID: 11400000, guid: 5e6cbd92db86f4b18aec3ed561671858,
+      type: 2}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
+    excludedTargetPlatforms:
+    - Standalone
+  - serializedVersion: 4
+    name: PC
+    pixelLightCount: 2
+    shadows: 2
+    shadowResolution: 1
+    shadowProjection: 1
+    shadowCascades: 2
+    shadowDistance: 40
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 1
+    skinWeights: 4
+    globalTextureMipmapLimit: 0
+    textureMipmapLimitSettings: []
+    anisotropicTextures: 2
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 1
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 1
+    useLegacyDetailDistribution: 1
+    adaptiveVsync: 0
+    vSyncCount: 0
+    realtimeGICPUUsage: 100
+    adaptiveVsyncExtraA: 0
+    adaptiveVsyncExtraB: 0
+    lodBias: 2
+    maximumLODLevel: 0
+    enableLODCrossFade: 1
+    streamingMipmapsActive: 0
+    streamingMipmapsAddAllCameras: 1
+    streamingMipmapsMemoryBudget: 512
+    streamingMipmapsRenderersPerFrame: 512
+    streamingMipmapsMaxLevelReduction: 2
+    streamingMipmapsMaxFileIORequests: 1024
+    particleRaycastBudget: 256
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    asyncUploadPersistentBuffer: 1
+    resolutionScalingFixedDPIFactor: 1
+    customRenderPipeline: {fileID: 11400000, guid: 4b83569d67af61e458304325a23e5dfd,
+      type: 2}
+    terrainQualityOverrides: 0
+    terrainPixelError: 1
+    terrainDetailDensityScale: 1
+    terrainBasemapDistance: 1000
+    terrainDetailDistance: 80
+    terrainTreeDistance: 5000
+    terrainBillboardStart: 50
+    terrainFadeLength: 5
+    terrainMaxTrees: 50
+    excludedTargetPlatforms:
+    - Android
+    - iPhone
+  m_TextureMipmapLimitGroupNames: []
+  m_PerPlatformDefaultQuality:
+    Android: 0
+    GameCoreScarlett: 1
+    GameCoreXboxOne: 1
+    Lumin: 0
+    Nintendo Switch: 1
+    PS4: 1
+    PS5: 1
+    Server: 0
+    Stadia: 0
+    Standalone: 1
+    WebGL: 0
+    Windows Store Apps: 0
+    XboxOne: 0
+    iPhone: 0
+    tvOS: 0

+ 121 - 0
ProjectSettings/SceneTemplateSettings.json

@@ -0,0 +1,121 @@
+{
+    "templatePinStates": [],
+    "dependencyTypeInfos": [
+        {
+            "userAdded": false,
+            "type": "UnityEngine.AnimationClip",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEditor.Animations.AnimatorController",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.AnimatorOverrideController",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEditor.Audio.AudioMixerController",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.ComputeShader",
+            "defaultInstantiationMode": 1
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Cubemap",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.GameObject",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEditor.LightingDataAsset",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.LightingSettings",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Material",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEditor.MonoScript",
+            "defaultInstantiationMode": 1
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.PhysicsMaterial",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.PhysicsMaterial2D",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Rendering.VolumeProfile",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEditor.SceneAsset",
+            "defaultInstantiationMode": 1
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Shader",
+            "defaultInstantiationMode": 1
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.ShaderVariantCollection",
+            "defaultInstantiationMode": 1
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Texture",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Texture2D",
+            "defaultInstantiationMode": 0
+        },
+        {
+            "userAdded": false,
+            "type": "UnityEngine.Timeline.TimelineAsset",
+            "defaultInstantiationMode": 0
+        }
+    ],
+    "defaultDependencyTypeInfo": {
+        "userAdded": false,
+        "type": "<default_scene_template_dependencies>",
+        "defaultInstantiationMode": 1
+    },
+    "newSceneOverride": 0
+}

+ 18 - 0
ProjectSettings/ShaderGraphSettings.asset

@@ -0,0 +1,18 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 61
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: de02f9e1d18f588468e474319d09a723, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  shaderVariantLimit: 128
+  customInterpolatorErrorThreshold: 32
+  customInterpolatorWarningThreshold: 16
+  customHeatmapValues: {fileID: 0}

+ 76 - 0
ProjectSettings/TagManager.asset

@@ -0,0 +1,76 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!78 &1
+TagManager:
+  serializedVersion: 2
+  tags: []
+  layers:
+  - Default
+  - TransparentFX
+  - Ignore Raycast
+  - 
+  - Water
+  - UI
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  m_SortingLayers:
+  - name: Default
+    uniqueID: 0
+    locked: 0
+  m_RenderingLayers:
+  - Default
+  - Light Layer 1
+  - Light Layer 2
+  - Light Layer 3
+  - Light Layer 4
+  - Light Layer 5
+  - Light Layer 6
+  - Light Layer 7
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 

+ 9 - 0
ProjectSettings/TimeManager.asset

@@ -0,0 +1,9 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!5 &1
+TimeManager:
+  m_ObjectHideFlags: 0
+  Fixed Timestep: 0.02
+  Maximum Allowed Timestep: 0.33333334
+  m_TimeScale: 1
+  Maximum Particle Timestep: 0.03

+ 15 - 0
ProjectSettings/URPProjectSettings.asset

@@ -0,0 +1,15 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 61
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_LastMaterialVersion: 9

+ 36 - 0
ProjectSettings/UnityConnectSettings.asset

@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!310 &1
+UnityConnectSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 1
+  m_Enabled: 0
+  m_TestMode: 0
+  m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
+  m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
+  m_ConfigUrl: https://config.uca.cloud.unity3d.com
+  m_DashboardUrl: https://dashboard.unity3d.com
+  m_TestInitMode: 0
+  CrashReportingSettings:
+    m_EventUrl: https://perf-events.cloud.unity3d.com
+    m_Enabled: 0
+    m_LogBufferSize: 10
+    m_CaptureEditorExceptions: 1
+  UnityPurchasingSettings:
+    m_Enabled: 0
+    m_TestMode: 0
+  UnityAnalyticsSettings:
+    m_Enabled: 0
+    m_TestMode: 0
+    m_InitializeOnStartup: 1
+    m_PackageRequiringCoreStatsPresent: 0
+  UnityAdsSettings:
+    m_Enabled: 0
+    m_InitializeOnStartup: 1
+    m_TestMode: 0
+    m_IosGameId: 
+    m_AndroidGameId: 
+    m_GameIds: {}
+    m_GameId: 
+  PerformanceReportingSettings:
+    m_Enabled: 0

+ 12 - 0
ProjectSettings/VFXManager.asset

@@ -0,0 +1,12 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!937362698 &1
+VFXManager:
+  m_ObjectHideFlags: 0
+  m_IndirectShader: {fileID: 0}
+  m_CopyBufferShader: {fileID: 0}
+  m_SortShader: {fileID: 0}
+  m_StripUpdateShader: {fileID: 0}
+  m_RenderPipeSettingsPath: 
+  m_FixedTimeStep: 0.016666668
+  m_MaxDeltaTime: 0.05

+ 8 - 0
ProjectSettings/VersionControlSettings.asset

@@ -0,0 +1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!890905787 &1
+VersionControlSettings:
+  m_ObjectHideFlags: 0
+  m_Mode: Visible Meta Files
+  m_CollabEditorSettings:
+    inProgressEnabled: 1

+ 10 - 0
ProjectSettings/XRSettings.asset

@@ -0,0 +1,10 @@
+{
+    "m_SettingKeys": [
+        "VR Device Disabled",
+        "VR Device User Alert"
+    ],
+    "m_SettingValues": [
+        "False",
+        "False"
+    ]
+}

+ 30 - 0
UserSettings/EditorUserSettings.asset

@@ -0,0 +1,30 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!162 &1
+EditorUserSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 4
+  m_ConfigSettings:
+    RecentlyUsedSceneGuid-0:
+      value: 5a08575f5207595a0f5d59741173094444164f7d7d2a23317c7a4465bbe1646d
+      flags: 0
+    vcSharedLogLevel:
+      value: 0d5e400f0650
+      flags: 0
+  m_VCAutomaticAdd: 1
+  m_VCDebugCom: 0
+  m_VCDebugCmd: 0
+  m_VCDebugOut: 0
+  m_SemanticMergeMode: 2
+  m_DesiredImportWorkerCount: 8
+  m_StandbyImportWorkerCount: 2
+  m_IdleImportWorkerShutdownDelay: 60000
+  m_VCShowFailedCheckout: 1
+  m_VCOverwriteFailedCheckoutAssets: 1
+  m_VCProjectOverlayIcons: 1
+  m_VCHierarchyOverlayIcons: 1
+  m_VCOtherOverlayIcons: 1
+  m_VCAllowAsyncUpdate: 1
+  m_VCScanLocalPackagesOnConnect: 1
+  m_ArtifactGarbageCollection: 1
+  m_CompressAssetsOnImport: 1

+ 1605 - 0
UserSettings/Layouts/default-6000.dwlt

@@ -0,0 +1,1605 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_PixelRect:
+    serializedVersion: 2
+    x: 8
+    y: 51
+    width: 3424
+    height: 1333
+  m_ShowMode: 4
+  m_Title: Console
+  m_RootView: {fileID: 5}
+  m_MinSize: {x: 875, y: 332}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_Maximized: 0
+--- !u!114 &2
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: ConsoleWindow
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 1661
+    y: 0
+    width: 1084
+    height: 434
+  m_MinSize: {x: 102, y: 126}
+  m_MaxSize: {x: 4002, y: 4026}
+  m_ActualView: {fileID: 22}
+  m_Panes:
+  - {fileID: 22}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &3
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 13}
+  - {fileID: 2}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 843
+    width: 2745
+    height: 434
+  m_MinSize: {x: 200, y: 50}
+  m_MaxSize: {x: 16192, y: 8096}
+  vertical: 0
+  controlID: 120
+  draggingID: 0
+--- !u!114 &4
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: GameView
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 1286
+    y: 0
+    width: 1459
+    height: 843
+  m_MinSize: {x: 52, y: 76}
+  m_MaxSize: {x: 4002, y: 4026}
+  m_ActualView: {fileID: 16}
+  m_Panes:
+  - {fileID: 16}
+  - {fileID: 15}
+  m_Selected: 0
+  m_LastSelected: 1
+--- !u!114 &5
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 6}
+  - {fileID: 8}
+  - {fileID: 7}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 3424
+    height: 1333
+  m_MinSize: {x: 875, y: 300}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_UseTopView: 1
+  m_TopViewHeight: 36
+  m_UseBottomView: 1
+  m_BottomViewHeight: 20
+--- !u!114 &6
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 3424
+    height: 36
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+  m_LastLoadedLayoutName: 
+--- !u!114 &7
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 1313
+    width: 3424
+    height: 20
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+--- !u!114 &8
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 9}
+  - {fileID: 14}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 36
+    width: 3424
+    height: 1277
+  m_MinSize: {x: 400, y: 100}
+  m_MaxSize: {x: 32384, y: 16192}
+  vertical: 0
+  controlID: 156
+  draggingID: 0
+--- !u!114 &9
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 10}
+  - {fileID: 3}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 2745
+    height: 1277
+  m_MinSize: {x: 300, y: 100}
+  m_MaxSize: {x: 24288, y: 16192}
+  vertical: 1
+  controlID: 119
+  draggingID: 0
+--- !u!114 &10
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 11}
+  - {fileID: 12}
+  - {fileID: 4}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 2745
+    height: 843
+  m_MinSize: {x: 300, y: 50}
+  m_MaxSize: {x: 24288, y: 8096}
+  vertical: 0
+  controlID: 49
+  draggingID: 0
+--- !u!114 &11
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 617
+    height: 843
+  m_MinSize: {x: 201, y: 226}
+  m_MaxSize: {x: 4001, y: 4026}
+  m_ActualView: {fileID: 18}
+  m_Panes:
+  - {fileID: 18}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &12
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: SceneView
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 617
+    y: 0
+    width: 669
+    height: 843
+  m_MinSize: {x: 202, y: 226}
+  m_MaxSize: {x: 4002, y: 4026}
+  m_ActualView: {fileID: 19}
+  m_Panes:
+  - {fileID: 19}
+  - {fileID: 20}
+  - {fileID: 17}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &13
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: ProjectBrowser
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1661
+    height: 434
+  m_MinSize: {x: 231, y: 276}
+  m_MaxSize: {x: 10001, y: 10026}
+  m_ActualView: {fileID: 21}
+  m_Panes:
+  - {fileID: 21}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &14
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 2745
+    y: 0
+    width: 679
+    height: 1277
+  m_MinSize: {x: 276, y: 76}
+  m_MaxSize: {x: 4001, y: 4026}
+  m_ActualView: {fileID: 23}
+  m_Panes:
+  - {fileID: 23}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &15
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13999, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: UI Builder
+    m_Image: {fileID: 8683992553321208622, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "UI Builder\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 1292
+    y: 79
+    width: 1464
+    height: 828
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+--- !u!114 &16
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 50, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Game
+    m_Image: {fileID: -6423792434712278376, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Game\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 1287
+    y: 24
+    width: 1457
+    height: 817
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_SerializedViewNames: []
+  m_SerializedViewValues: []
+  m_PlayModeViewName: GameView
+  m_ShowGizmos: 0
+  m_TargetDisplay: 0
+  m_ClearColor: {r: 0, g: 0, b: 0, a: 0}
+  m_TargetSize: {x: 1457, y: 796}
+  m_TextureFilterMode: 0
+  m_TextureHideFlags: 61
+  m_RenderIMGUI: 1
+  m_EnterPlayModeBehavior: 0
+  m_UseMipMap: 0
+  m_VSyncEnabled: 0
+  m_Gizmos: 0
+  m_Stats: 0
+  m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+  m_ZoomArea:
+    m_HRangeLocked: 0
+    m_VRangeLocked: 0
+    hZoomLockedByDefault: 0
+    vZoomLockedByDefault: 0
+    m_HBaseRangeMin: -728.5
+    m_HBaseRangeMax: 728.5
+    m_VBaseRangeMin: -398
+    m_VBaseRangeMax: 398
+    m_HAllowExceedBaseRangeMin: 1
+    m_HAllowExceedBaseRangeMax: 1
+    m_VAllowExceedBaseRangeMin: 1
+    m_VAllowExceedBaseRangeMax: 1
+    m_ScaleWithWindow: 0
+    m_HSlider: 0
+    m_VSlider: 0
+    m_IgnoreScrollWheelUntilClicked: 0
+    m_EnableMouseInput: 1
+    m_EnableSliderZoomHorizontal: 0
+    m_EnableSliderZoomVertical: 0
+    m_UniformScale: 1
+    m_UpDirection: 1
+    m_DrawArea:
+      serializedVersion: 2
+      x: 0
+      y: 21
+      width: 1457
+      height: 796
+    m_Scale: {x: 1, y: 1}
+    m_Translation: {x: 728.5, y: 398}
+    m_MarginLeft: 0
+    m_MarginRight: 0
+    m_MarginTop: 0
+    m_MarginBottom: 0
+    m_LastShownAreaInsideMargins:
+      serializedVersion: 2
+      x: -728.5
+      y: -398
+      width: 1457
+      height: 796
+    m_MinimalGUI: 1
+  m_defaultScale: 1
+  m_LastWindowPixelSize: {x: 1457, y: 817}
+  m_ClearInEditMode: 1
+  m_NoCameraWarning: 1
+  m_LowResolutionForAspectRatios: 01000000000000000000
+  m_XRRenderMode: 0
+  m_RenderTexture: {fileID: 0}
+  m_showToolbar: 1
+--- !u!114 &17
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12071, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 50, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Animation
+    m_Image: {fileID: -8166618308981325432, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Animation\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 453
+    y: 79
+    width: 1184
+    height: 804
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_LockTracker:
+    m_IsLocked: 0
+  m_LastSelectedObjectID: -10284
+--- !u!114 &18
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Hierarchy
+    m_Image: {fileID: 7966133145522015247, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Hierarchy\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 24
+    width: 616
+    height: 817
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_SceneHierarchy:
+    m_TreeViewState:
+      scrollPos: {x: 0, y: 0}
+      m_SelectedIDs: 
+      m_LastClickedID: 0
+      m_ExpandedIDs: 1cfbffff
+      m_RenameOverlay:
+        m_UserAcceptedRename: 0
+        m_Name: 
+        m_OriginalName: 
+        m_EditFieldRect:
+          serializedVersion: 2
+          x: 0
+          y: 0
+          width: 0
+          height: 0
+        m_UserData: 0
+        m_IsWaitingForDelay: 0
+        m_IsRenaming: 0
+        m_OriginalEventType: 11
+        m_IsRenamingFilename: 0
+        m_TrimLeadingAndTrailingWhitespace: 0
+        m_ClientGUIView: {fileID: 11}
+      m_SearchString: 
+    m_ExpandedScenes: []
+    m_CurrenRootInstanceID: 0
+    m_LockTracker:
+      m_IsLocked: 0
+    m_CurrentSortingName: TransformSorting
+  m_WindowGUID: 4c969a2b90040154d917609493e03593
+--- !u!114 &19
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Scene
+    m_Image: {fileID: 2593428753322112591, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Scene\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 618
+    y: 24
+    width: 667
+    height: 817
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData:
+    - dockPosition: 0
+      containerId: overlay-toolbar__top
+      displayed: 1
+      id: Tool Settings
+      index: 0
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-24.0,"y":-24.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":3,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: -24, y: -24}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 3
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-toolbar__top
+      displayed: 1
+      id: unity-grid-and-snap-toolbar
+      index: 1
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-141.0,"y":-194.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":3,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: -141, y: -194}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 3
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-toolbar__top
+      displayed: 1
+      id: unity-scene-view-toolbar
+      index: 0
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-toolbar__top
+      displayed: 1
+      id: unity-scene-view-camera-mode-toolbar
+      index: 1
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-213.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":1,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: -213, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 1
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-toolbar__top
+      displayed: 0
+      id: unity-search-toolbar
+      index: 2
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-24.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":1,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: -24, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 1
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-container--left
+      displayed: 1
+      id: unity-transform-toolbar
+      index: 0
+      contents: '{"m_Layout":2,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 2
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-container--left
+      displayed: 1
+      id: unity-component-tools
+      index: 1
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 197}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 2
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-container--right
+      displayed: 1
+      id: Orientation
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-111.0,"y":26.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":1,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: -111, y: 26}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 1
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Light Settings
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Camera
+      index: 1
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Cloth Constraints
+      index: 1
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Cloth Collisions
+      index: 2
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Navmesh Display
+      index: 4
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Agent Display
+      index: 5
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Obstacle Display
+      index: 6
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Occlusion Culling
+      index: 3
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Physics Debugger
+      index: 4
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Scene Visibility
+      index: 5
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Particles
+      index: 6
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Tilemap
+      index: 11
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Tilemap Palette Helper
+      index: 12
+      contents: 
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-toolbar__top
+      displayed: 0
+      id: Brush Attributes
+      index: 2
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":0.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-toolbar__left
+      displayed: 0
+      id: Terrain Tools
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":0.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-toolbar__left
+      displayed: 0
+      id: Brush Masks
+      index: 1
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":0.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--left
+      displayed: 0
+      id: Scene View/Lighting Visualization Colors
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--left
+      displayed: 1
+      id: Overlays/OverlayMenu
+      index: 1
+      contents: '{"m_Layout":1,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 1
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: APV Overlay
+      index: 7
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: overlay-toolbar__top
+      displayed: 1
+      id: AINavigationOverlay
+      index: 3
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":-48.0,"y":25.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":1,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 1
+      snapOffset: {x: -48, y: 25}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 1
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: SceneView/CamerasOverlay
+      index: 8
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/PBR Validation Settings
+      index: 9
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/TrailRenderer
+      index: 10
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Open Tile Palette
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":0.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Tile Palette Clipboard
+      index: 1
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Tilemap Focus
+      index: 2
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":24.0,"y":0.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 24, y: 0}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Tile Palette Brush Pick
+      index: 4
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: Scene View/Path
+      index: 15
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 0
+      containerId: Floating
+      displayed: 0
+      id: Scene View/Sprite Swap
+      index: 0
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":true,"m_FloatingSnapOffset":{"x":-240.0,"y":-199.0},"m_SnapOffsetDelta":{"x":0.0,"y":0.0},"m_FloatingSnapCorner":3,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 1
+      collapsed: 0
+      snapOffset: {x: -240, y: -199}
+      snapOffsetDelta: {x: 0, y: 0}
+      snapCorner: 3
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: XR Building Blocks
+      index: 11
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    - dockPosition: 1
+      containerId: overlay-container--right
+      displayed: 0
+      id: unity-spline-inspector
+      index: 12
+      contents: '{"m_Layout":4,"m_Collapsed":false,"m_Floating":false,"m_FloatingSnapOffset":{"x":0.0,"y":0.0},"m_SnapOffsetDelta":{"x":24.0,"y":0.0},"m_FloatingSnapCorner":0,"m_Size":{"x":0.0,"y":0.0},"m_SizeOverridden":false}'
+      floating: 0
+      collapsed: 0
+      snapOffset: {x: 0, y: 0}
+      snapOffsetDelta: {x: 24, y: 0}
+      snapCorner: 0
+      layout: 4
+      size: {x: 0, y: 0}
+      sizeOverridden: 0
+    m_ContainerData:
+    - containerId: overlay-toolbar__top
+      scrollOffset: 0
+    - containerId: overlay-toolbar__left
+      scrollOffset: 0
+    - containerId: overlay-container--left
+      scrollOffset: 0
+    - containerId: overlay-container--right
+      scrollOffset: 0
+    - containerId: overlay-toolbar__right
+      scrollOffset: 0
+    - containerId: overlay-toolbar__bottom
+      scrollOffset: 0
+    - containerId: Floating
+      scrollOffset: 0
+    m_OverlaysVisible: 1
+  m_WindowGUID: cc27987af1a868c49b0894db9c0f5429
+  m_Gizmos: 1
+  m_OverrideSceneCullingMask: 6917529027641081856
+  m_SceneIsLit: 0
+  m_SceneLighting: 1
+  m_2DMode: 0
+  m_isRotationLocked: 0
+  m_PlayAudio: 0
+  m_AudioPlay: 0
+  m_DebugDrawModesUseInteractiveLightBakingData: 0
+  m_Position:
+    m_Target: {x: -0.07655592, y: -1.0778626, z: 4.8192105}
+    speed: 2
+    m_Value: {x: -0.07655592, y: -1.0778626, z: 4.8192105}
+  m_RenderMode: 0
+  m_CameraMode:
+    drawMode: 0
+    name: Shaded
+    section: Shading Mode
+  m_ValidateTrueMetals: 0
+  m_DoValidateTrueMetals: 0
+  m_SceneViewState:
+    m_AlwaysRefresh: 0
+    showFog: 1
+    showSkybox: 0
+    showFlares: 1
+    showImageEffects: 1
+    showParticleSystems: 1
+    showVisualEffectGraphs: 1
+    m_FxEnabled: 1
+  m_Grid:
+    xGrid:
+      m_Fade:
+        m_Target: 0
+        speed: 2
+        m_Value: 0
+      m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+      m_Pivot: {x: 0, y: 0, z: 0}
+      m_Size: {x: 1, y: 1}
+    yGrid:
+      m_Fade:
+        m_Target: 1
+        speed: 2
+        m_Value: 1
+      m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+      m_Pivot: {x: 0, y: 0, z: 0}
+      m_Size: {x: 1, y: 1}
+    zGrid:
+      m_Fade:
+        m_Target: 0
+        speed: 2
+        m_Value: 0
+      m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4}
+      m_Pivot: {x: 0, y: 0, z: 0}
+      m_Size: {x: 1, y: 1}
+    m_ShowGrid: 1
+    m_GridAxis: 1
+    m_gridOpacity: 0.5
+  m_Rotation:
+    m_Target: {x: -0.23059197, y: 0.5004905, z: -0.14029975, w: -0.8225888}
+    speed: 2
+    m_Value: {x: -0.23059195, y: 0.5004905, z: -0.14029975, w: -0.8225888}
+  m_Size:
+    m_Target: 10
+    speed: 2
+    m_Value: 10
+  m_Ortho:
+    m_Target: 0
+    speed: 2
+    m_Value: 0
+  m_CameraSettings:
+    m_Speed: 1
+    m_SpeedNormalized: 0.5
+    m_SpeedMin: 0.001
+    m_SpeedMax: 2
+    m_EasingEnabled: 1
+    m_EasingDuration: 0.4
+    m_AccelerationEnabled: 1
+    m_FieldOfViewHorizontalOrVertical: 60
+    m_NearClip: 0.03
+    m_FarClip: 10000
+    m_DynamicClip: 1
+    m_OcclusionCulling: 0
+  m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+  m_LastSceneViewOrtho: 0
+  m_Viewpoint:
+    m_SceneView: {fileID: 19}
+    m_CameraOverscanSettings:
+      m_Opacity: 50
+      m_Scale: 1
+  m_ReplacementShader: {fileID: 0}
+  m_ReplacementString: 
+  m_SceneVisActive: 1
+  m_LastLockedObject: {fileID: 0}
+  m_LastDebugDrawMode: 35
+  m_ViewIsLockedToObject: 0
+--- !u!114 &20
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12914, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 50, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Animator
+    m_Image: {fileID: -1673928668082335149, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Animator\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 453
+    y: 79
+    width: 1184
+    height: 804
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_ViewTransforms:
+    m_KeySerializationHelper:
+    - {fileID: 2568848483022081583, guid: d58f871f3bd4dea45a809ea8308caa60, type: 2}
+    m_ValueSerializationHelper:
+    - e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_PreviewAnimator: {fileID: 0}
+  m_AnimatorController: {fileID: 9100000, guid: d58f871f3bd4dea45a809ea8308caa60, type: 2}
+  m_BreadCrumbs:
+  - m_Target: {fileID: 2568848483022081583, guid: d58f871f3bd4dea45a809ea8308caa60, type: 2}
+    m_ScrollPosition: {x: 0, y: 0}
+  stateMachineGraph: {fileID: 0}
+  stateMachineGraphGUI: {fileID: 0}
+  blendTreeGraph: {fileID: 0}
+  blendTreeGraphGUI: {fileID: 0}
+  m_AutoLiveLink: 1
+  m_MiniTool: 0
+  m_LockTracker:
+    m_IsLocked: 0
+  m_CurrentEditor: 0
+  m_LayerEditor:
+    m_SelectedLayerIndex: 0
+--- !u!114 &21
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 230, y: 250}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_TitleContent:
+    m_Text: Project
+    m_Image: {fileID: -5467254957812901981, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Project\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 24
+    width: 1660
+    height: 408
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_SearchFilter:
+    m_NameFilter: 
+    m_ClassNames: []
+    m_AssetLabels: []
+    m_AssetBundleNames: []
+    m_ReferencingInstanceIDs: 
+    m_SceneHandles: 
+    m_ShowAllHits: 0
+    m_SkipHidden: 0
+    m_SearchArea: 1
+    m_Folders:
+    - Assets/Scripts/Systems
+    m_Globs: []
+    m_ProductIds: 
+    m_AnyWithAssetOrigin: 0
+    m_OriginalText: 
+    m_ImportLogFlags: 0
+    m_FilterByTypeIntersection: 0
+  m_ViewMode: 1
+  m_StartGridSize: 67
+  m_LastFolders:
+  - Assets/Scripts/Systems
+  m_LastFoldersGridSize: 67
+  m_LastProjectPath: C:\Users\Axel-PC\HotelTycoon
+  m_LockTracker:
+    m_IsLocked: 0
+  m_FolderTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: dea80000
+    m_LastClickedID: 43230
+    m_ExpandedIDs: 00000000faa60000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_TrimLeadingAndTrailingWhitespace: 0
+      m_ClientGUIView: {fileID: 13}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_AssetTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 
+    m_LastClickedID: 0
+    m_ExpandedIDs: 00000000faa60000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_TrimLeadingAndTrailingWhitespace: 0
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_ListAreaState:
+    m_SelectedInstanceIDs: 
+    m_LastClickedInstanceID: 0
+    m_HadKeyboardFocusLastEvent: 1
+    m_ExpandedInstanceIDs: c6230000040a0100d8ce000056ae000054e0000044bd00004eb500003cb1000000000000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_TrimLeadingAndTrailingWhitespace: 0
+      m_ClientGUIView: {fileID: 13}
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+    m_NewAssetIndexInList: -1
+    m_ScrollPosition: {x: 0, y: 0}
+    m_GridSize: 67
+  m_SkipHiddenPackages: 0
+  m_DirectoriesAreaWidth: 309
+--- !u!114 &22
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 100, y: 100}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Console
+    m_Image: {fileID: -4327648978806127646, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Console\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 1662
+    y: 24
+    width: 1082
+    height: 408
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+--- !u!114 &23
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 275, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Inspector
+    m_Image: {fileID: -2667387946076563598, guid: 0000000000000000d000000000000000, type: 0}
+    m_Tooltip: 
+    m_TextWithWhitespace: "Inspector\u200B"
+  m_Pos:
+    serializedVersion: 2
+    x: 2746
+    y: 24
+    width: 678
+    height: 1251
+  m_SerializedDataModeController:
+    m_DataMode: 0
+    m_PreferredDataMode: 0
+    m_SupportedDataModes: 
+    isAutomatic: 1
+  m_ViewDataDictionary: {fileID: 0}
+  m_OverlayCanvas:
+    m_LastAppliedPresetName: Default
+    m_SaveData: []
+    m_ContainerData: []
+    m_OverlaysVisible: 1
+  m_ObjectsLockedBeforeSerialization: []
+  m_InstanceIDsLockedBeforeSerialization: 
+  m_PreviewResizer:
+    m_CachedPref: -289
+    m_ControlHash: -371814159
+    m_PrefName: Preview_InspectorPreview
+  m_LastInspectedObjectInstanceID: -1
+  m_LastVerticalScrollValue: 0
+  m_GlobalObjectId: 
+  m_InspectorMode: 0
+  m_LockTracker:
+    m_IsLocked: 0
+  m_PreviewWindow: {fileID: 0}

+ 1 - 0
UserSettings/Search.settings

@@ -0,0 +1 @@
+{}