From 58da5d1d718b6737d68119ca67159434d6ec82fd Mon Sep 17 00:00:00 2001 From: ldbetteridge Date: Tue, 31 Mar 2026 15:59:23 +0100 Subject: [PATCH] Initial import --- .gitignore | 32 + .vsconfig | 6 + Assets/InputSystem_Actions.inputactions | 1057 +++++++++++++++++ Assets/InputSystem_Actions.inputactions.meta | 14 + Assets/Readme.asset | 34 + Assets/Readme.asset.meta | 8 + Assets/Scenes.meta | 8 + Assets/Scenes/SampleScene.unity | 432 +++++++ Assets/Scenes/SampleScene.unity.meta | 7 + Assets/Scripts.meta | 8 + Assets/Scripts/Authoring.meta | 8 + Assets/Scripts/Authoring/BuildingAuthoring.cs | 67 ++ .../Authoring/BuildingAuthoring.cs.meta | 2 + .../Scripts/Authoring/PlayerStateAuthoring.cs | 44 + .../Authoring/PlayerStateAuthoring.cs.meta | 2 + .../Scripts/Authoring/ProjectileAuthoring.cs | 28 + .../Authoring/ProjectileAuthoring.cs.meta | 2 + .../Authoring/ResourceNodeAuthoring.cs | 28 + .../Authoring/ResourceNodeAuthoring.cs.meta | 2 + Assets/Scripts/Authoring/UnitAuthoring.cs | 72 ++ .../Scripts/Authoring/UnitAuthoring.cs.meta | 2 + Assets/Scripts/Components.meta | 8 + Assets/Scripts/Components/Aspects.cs | 45 + Assets/Scripts/Components/Aspects.cs.meta | 2 + Assets/Scripts/Components/BufferComponents.cs | 39 + .../Components/BufferComponents.cs.meta | 2 + .../Scripts/Components/GameplayComponents.cs | 168 +++ .../Components/GameplayComponents.cs.meta | 2 + Assets/Scripts/Components/PlayerComponents.cs | 61 + .../Components/PlayerComponents.cs.meta | 2 + Assets/Scripts/Components/Tags.cs | 22 + Assets/Scripts/Components/Tags.cs.meta | 2 + Assets/Scripts/Core.meta | 8 + Assets/Scripts/Core/GameConstants.cs | 90 ++ Assets/Scripts/Core/GameConstants.cs.meta | 2 + Assets/Scripts/Data.meta | 8 + Assets/Scripts/Data/BuildingDataSO.cs | 47 + Assets/Scripts/Data/BuildingDataSO.cs.meta | 2 + Assets/Scripts/Data/CivilizationDataSO.cs | 27 + .../Scripts/Data/CivilizationDataSO.cs.meta | 2 + Assets/Scripts/Data/EpochDataSO.cs | 28 + Assets/Scripts/Data/EpochDataSO.cs.meta | 2 + Assets/Scripts/Data/TechDataSO.cs | 48 + Assets/Scripts/Data/TechDataSO.cs.meta | 2 + Assets/Scripts/Data/UnitDataSO.cs | 51 + Assets/Scripts/Data/UnitDataSO.cs.meta | 2 + Assets/Scripts/EE2Clone.asmdef | 24 + Assets/Scripts/EE2Clone.asmdef.meta | 7 + Assets/Scripts/Hybrid.meta | 8 + Assets/Scripts/Hybrid/CommandDispatcher.cs | 219 ++++ .../Scripts/Hybrid/CommandDispatcher.cs.meta | 2 + Assets/Scripts/Hybrid/RTSCameraController.cs | 106 ++ .../Hybrid/RTSCameraController.cs.meta | 2 + Assets/Scripts/Hybrid/RTSInputActions.cs | 140 +++ Assets/Scripts/Hybrid/RTSInputActions.cs.meta | 2 + Assets/Scripts/Hybrid/SelectionBoxUI.cs | 67 ++ Assets/Scripts/Hybrid/SelectionBoxUI.cs.meta | 2 + Assets/Scripts/Hybrid/SelectionManager.cs | 243 ++++ .../Scripts/Hybrid/SelectionManager.cs.meta | 2 + Assets/Scripts/NetCode.meta | 8 + .../NetCode/ConnectionMonitorSystem.cs | 32 + .../NetCode/ConnectionMonitorSystem.cs.meta | 2 + Assets/Scripts/NetCode/GameBootstrap.cs | 23 + Assets/Scripts/NetCode/GameBootstrap.cs.meta | 2 + .../Scripts/NetCode/GoInGameClientSystem.cs | 52 + .../NetCode/GoInGameClientSystem.cs.meta | 2 + .../Scripts/NetCode/GoInGameServerSystem.cs | 77 ++ .../NetCode/GoInGameServerSystem.cs.meta | 2 + Assets/Scripts/NetCode/RpcCommands.cs | 95 ++ Assets/Scripts/NetCode/RpcCommands.cs.meta | 2 + Assets/Scripts/Systems.meta | 8 + Assets/Scripts/Systems/BuildingSystems.cs | 197 +++ .../Scripts/Systems/BuildingSystems.cs.meta | 2 + Assets/Scripts/Systems/CombatSystems.cs | 207 ++++ Assets/Scripts/Systems/CombatSystems.cs.meta | 2 + Assets/Scripts/Systems/GatheringSystems.cs | 172 +++ .../Scripts/Systems/GatheringSystems.cs.meta | 2 + Assets/Scripts/Systems/MovementSystems.cs | 151 +++ .../Scripts/Systems/MovementSystems.cs.meta | 2 + Assets/Scripts/Systems/PopulationSystem.cs | 67 ++ .../Scripts/Systems/PopulationSystem.cs.meta | 2 + Assets/Settings.meta | 8 + Assets/Settings/DefaultVolumeProfile.asset | 982 +++++++++++++++ .../Settings/DefaultVolumeProfile.asset.meta | 8 + Assets/Settings/Mobile_RPAsset.asset | 143 +++ Assets/Settings/Mobile_RPAsset.asset.meta | 8 + Assets/Settings/Mobile_Renderer.asset | 52 + Assets/Settings/Mobile_Renderer.asset.meta | 8 + Assets/Settings/PC_RPAsset.asset | 143 +++ Assets/Settings/PC_RPAsset.asset.meta | 8 + Assets/Settings/PC_Renderer.asset | 95 ++ Assets/Settings/PC_Renderer.asset.meta | 8 + Assets/Settings/RTSInputActions.inputactions | 414 +++++++ .../RTSInputActions.inputactions.meta | 14 + Assets/Settings/SampleSceneProfile.asset | 159 +++ Assets/Settings/SampleSceneProfile.asset.meta | 8 + ...niversalRenderPipelineGlobalSettings.asset | 443 +++++++ ...salRenderPipelineGlobalSettings.asset.meta | 8 + Assets/TutorialInfo.meta | 8 + Assets/TutorialInfo/Icons.meta | 9 + Assets/TutorialInfo/Icons/URP.png | Bin 0 -> 24069 bytes Assets/TutorialInfo/Icons/URP.png.meta | 134 +++ Assets/TutorialInfo/Layout.wlt | 654 ++++++++++ Assets/TutorialInfo/Layout.wlt.meta | 8 + Assets/TutorialInfo/Scripts.meta | 9 + Assets/TutorialInfo/Scripts/Editor.meta | 9 + .../Scripts/Editor/ReadmeEditor.cs | 242 ++++ .../Scripts/Editor/ReadmeEditor.cs.meta | 12 + Assets/TutorialInfo/Scripts/Readme.cs | 16 + Assets/TutorialInfo/Scripts/Readme.cs.meta | 12 + Packages/manifest.json | 54 + Packages/packages-lock.json | 593 +++++++++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 36 + ProjectSettings/EditorBuildSettings.asset | 12 + ProjectSettings/EditorSettings.asset | 52 + ProjectSettings/GraphicsSettings.asset | 69 ++ ProjectSettings/InputManager.asset | 487 ++++++++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/MultiplayerManager.asset | 7 + ProjectSettings/NavMeshAreas.asset | 91 ++ ProjectSettings/PackageManagerSettings.asset | 43 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 940 +++++++++++++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 134 +++ ProjectSettings/ShaderGraphSettings.asset | 18 + ProjectSettings/TagManager.asset | 76 ++ ProjectSettings/TimeManager.asset | 9 + ProjectSettings/URPProjectSettings.asset | 16 + ProjectSettings/UnityConnectSettings.asset | 40 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + 136 files changed, 10922 insertions(+) create mode 100644 .gitignore create mode 100644 .vsconfig create mode 100644 Assets/InputSystem_Actions.inputactions create mode 100644 Assets/InputSystem_Actions.inputactions.meta create mode 100644 Assets/Readme.asset create mode 100644 Assets/Readme.asset.meta create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/SampleScene.unity create mode 100644 Assets/Scenes/SampleScene.unity.meta create mode 100644 Assets/Scripts.meta create mode 100644 Assets/Scripts/Authoring.meta create mode 100644 Assets/Scripts/Authoring/BuildingAuthoring.cs create mode 100644 Assets/Scripts/Authoring/BuildingAuthoring.cs.meta create mode 100644 Assets/Scripts/Authoring/PlayerStateAuthoring.cs create mode 100644 Assets/Scripts/Authoring/PlayerStateAuthoring.cs.meta create mode 100644 Assets/Scripts/Authoring/ProjectileAuthoring.cs create mode 100644 Assets/Scripts/Authoring/ProjectileAuthoring.cs.meta create mode 100644 Assets/Scripts/Authoring/ResourceNodeAuthoring.cs create mode 100644 Assets/Scripts/Authoring/ResourceNodeAuthoring.cs.meta create mode 100644 Assets/Scripts/Authoring/UnitAuthoring.cs create mode 100644 Assets/Scripts/Authoring/UnitAuthoring.cs.meta create mode 100644 Assets/Scripts/Components.meta create mode 100644 Assets/Scripts/Components/Aspects.cs create mode 100644 Assets/Scripts/Components/Aspects.cs.meta create mode 100644 Assets/Scripts/Components/BufferComponents.cs create mode 100644 Assets/Scripts/Components/BufferComponents.cs.meta create mode 100644 Assets/Scripts/Components/GameplayComponents.cs create mode 100644 Assets/Scripts/Components/GameplayComponents.cs.meta create mode 100644 Assets/Scripts/Components/PlayerComponents.cs create mode 100644 Assets/Scripts/Components/PlayerComponents.cs.meta create mode 100644 Assets/Scripts/Components/Tags.cs create mode 100644 Assets/Scripts/Components/Tags.cs.meta create mode 100644 Assets/Scripts/Core.meta create mode 100644 Assets/Scripts/Core/GameConstants.cs create mode 100644 Assets/Scripts/Core/GameConstants.cs.meta create mode 100644 Assets/Scripts/Data.meta create mode 100644 Assets/Scripts/Data/BuildingDataSO.cs create mode 100644 Assets/Scripts/Data/BuildingDataSO.cs.meta create mode 100644 Assets/Scripts/Data/CivilizationDataSO.cs create mode 100644 Assets/Scripts/Data/CivilizationDataSO.cs.meta create mode 100644 Assets/Scripts/Data/EpochDataSO.cs create mode 100644 Assets/Scripts/Data/EpochDataSO.cs.meta create mode 100644 Assets/Scripts/Data/TechDataSO.cs create mode 100644 Assets/Scripts/Data/TechDataSO.cs.meta create mode 100644 Assets/Scripts/Data/UnitDataSO.cs create mode 100644 Assets/Scripts/Data/UnitDataSO.cs.meta create mode 100644 Assets/Scripts/EE2Clone.asmdef create mode 100644 Assets/Scripts/EE2Clone.asmdef.meta create mode 100644 Assets/Scripts/Hybrid.meta create mode 100644 Assets/Scripts/Hybrid/CommandDispatcher.cs create mode 100644 Assets/Scripts/Hybrid/CommandDispatcher.cs.meta create mode 100644 Assets/Scripts/Hybrid/RTSCameraController.cs create mode 100644 Assets/Scripts/Hybrid/RTSCameraController.cs.meta create mode 100644 Assets/Scripts/Hybrid/RTSInputActions.cs create mode 100644 Assets/Scripts/Hybrid/RTSInputActions.cs.meta create mode 100644 Assets/Scripts/Hybrid/SelectionBoxUI.cs create mode 100644 Assets/Scripts/Hybrid/SelectionBoxUI.cs.meta create mode 100644 Assets/Scripts/Hybrid/SelectionManager.cs create mode 100644 Assets/Scripts/Hybrid/SelectionManager.cs.meta create mode 100644 Assets/Scripts/NetCode.meta create mode 100644 Assets/Scripts/NetCode/ConnectionMonitorSystem.cs create mode 100644 Assets/Scripts/NetCode/ConnectionMonitorSystem.cs.meta create mode 100644 Assets/Scripts/NetCode/GameBootstrap.cs create mode 100644 Assets/Scripts/NetCode/GameBootstrap.cs.meta create mode 100644 Assets/Scripts/NetCode/GoInGameClientSystem.cs create mode 100644 Assets/Scripts/NetCode/GoInGameClientSystem.cs.meta create mode 100644 Assets/Scripts/NetCode/GoInGameServerSystem.cs create mode 100644 Assets/Scripts/NetCode/GoInGameServerSystem.cs.meta create mode 100644 Assets/Scripts/NetCode/RpcCommands.cs create mode 100644 Assets/Scripts/NetCode/RpcCommands.cs.meta create mode 100644 Assets/Scripts/Systems.meta create mode 100644 Assets/Scripts/Systems/BuildingSystems.cs create mode 100644 Assets/Scripts/Systems/BuildingSystems.cs.meta create mode 100644 Assets/Scripts/Systems/CombatSystems.cs create mode 100644 Assets/Scripts/Systems/CombatSystems.cs.meta create mode 100644 Assets/Scripts/Systems/GatheringSystems.cs create mode 100644 Assets/Scripts/Systems/GatheringSystems.cs.meta create mode 100644 Assets/Scripts/Systems/MovementSystems.cs create mode 100644 Assets/Scripts/Systems/MovementSystems.cs.meta create mode 100644 Assets/Scripts/Systems/PopulationSystem.cs create mode 100644 Assets/Scripts/Systems/PopulationSystem.cs.meta create mode 100644 Assets/Settings.meta create mode 100644 Assets/Settings/DefaultVolumeProfile.asset create mode 100644 Assets/Settings/DefaultVolumeProfile.asset.meta create mode 100644 Assets/Settings/Mobile_RPAsset.asset create mode 100644 Assets/Settings/Mobile_RPAsset.asset.meta create mode 100644 Assets/Settings/Mobile_Renderer.asset create mode 100644 Assets/Settings/Mobile_Renderer.asset.meta create mode 100644 Assets/Settings/PC_RPAsset.asset create mode 100644 Assets/Settings/PC_RPAsset.asset.meta create mode 100644 Assets/Settings/PC_Renderer.asset create mode 100644 Assets/Settings/PC_Renderer.asset.meta create mode 100644 Assets/Settings/RTSInputActions.inputactions create mode 100644 Assets/Settings/RTSInputActions.inputactions.meta create mode 100644 Assets/Settings/SampleSceneProfile.asset create mode 100644 Assets/Settings/SampleSceneProfile.asset.meta create mode 100644 Assets/Settings/UniversalRenderPipelineGlobalSettings.asset create mode 100644 Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 Assets/TutorialInfo.meta create mode 100644 Assets/TutorialInfo/Icons.meta create mode 100644 Assets/TutorialInfo/Icons/URP.png create mode 100644 Assets/TutorialInfo/Icons/URP.png.meta create mode 100644 Assets/TutorialInfo/Layout.wlt create mode 100644 Assets/TutorialInfo/Layout.wlt.meta create mode 100644 Assets/TutorialInfo/Scripts.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor.meta create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs create mode 100644 Assets/TutorialInfo/Scripts/Editor/ReadmeEditor.cs.meta create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs create mode 100644 Assets/TutorialInfo/Scripts/Readme.cs.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/MultiplayerManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/ShaderGraphSettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/URPProjectSettings.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ffcb0a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +[Ll]ibrary/ +[Tt]emp/ +[Oo]bj/ +[Bb]uild/ +[Bb]uilds/ +[Ll]ogs/ +[Uu]ser[Ss]ettings/ + +# Memory captures +MemoryCaptures/ + +# Addressables +ServerData/ + +# Visual Studio and Rider +.vs/ +.idea/ +*.csproj +*.sln +*.slnx +*.user +*.rsuser +*.suo +*.tmp + +# Unity generated files +Assets/AssetStoreTools* +Assets/Plugins/Editor/JetBrains* + +# OS files +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/InputSystem_Actions.inputactions b/Assets/InputSystem_Actions.inputactions new file mode 100644 index 0000000..1a12cb9 --- /dev/null +++ b/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": "/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": "/w", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "8180e8bd-4097-4f4e-ab88-4523101a6ce9", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "320bffee-a40b-4347-ac70-c210eb8bc73a", + "path": "/s", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "1c5327b5-f71c-4f60-99c7-4e737386f1d1", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "d2581a9b-1d11-4566-b27d-b92aff5fabbc", + "path": "/a", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "2e46982e-44cc-431b-9f0b-c11910bf467a", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcfe95b8-67b9-4526-84b5-5d0bc98d6400", + "path": "/d", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "77bff152-3580-4b21-b6de-dcd0c7e41164", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "1635d3fe-58b6-4ba9-a4e2-f4b964f6b5c8", + "path": "/{Primary2DAxis}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3ea4d645-4504-4529-b061-ab81934c3752", + "path": "/stick", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c1f7a91b-d0fd-4a62-997e-7fb9b69bf235", + "path": "/rightStick", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8c8e490b-c610-4785-884f-f04217b23ca4", + "path": "/delta", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse;Touch", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "3e5f5442-8668-4b27-a940-df99bad7e831", + "path": "/{Hatswitch}", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Look", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "143bb1cd-cc10-4eca-a2f0-a3664166fe91", + "path": "/buttonWest", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "05f6913d-c316-48b2-a6bb-e225f14c7960", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "886e731e-7071-4ae4-95c0-e61739dad6fd", + "path": "/primaryTouch/tap", + "interactions": "", + "processors": "", + "groups": ";Touch", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "ee3d0cd2-254e-47a7-a8cb-bc94d9658c54", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8255d333-5683-4943-a58a-ccb207ff1dce", + "path": "/{PrimaryAction}", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3c1c7f0-bd20-4ee7-a0f1-899b24bca6d7", + "path": "/enter", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "cbac6039-9c09-46a1-b5f2-4e5124ccb5ed", + "path": "/2", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e15ca19d-e649-4852-97d5-7fe8ccc44e94", + "path": "/dpad/right", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Next", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "f2e9ba44-c423-42a7-ad56-f20975884794", + "path": "/leftShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8cbb2f4b-a784-49cc-8d5e-c010b8c7f4e6", + "path": "/leftStickPress", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d8bf24bf-3f2f-4160-a97c-38ec1eb520ba", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Sprint", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "eb40bb66-4559-4dfa-9a2f-820438abb426", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "daba33a1-ad0c-4742-a909-43ad1cdfbeb6", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "603f3daf-40bd-4854-8724-93e8017f59e3", + "path": "/secondaryButton", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1534dc16-a6aa-499d-9c3a-22b47347b52a", + "path": "/1", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "25060bbd-a3a6-476e-8fba-45ae484aad05", + "path": "/dpad/left", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Previous", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "1c04ea5f-b012-41d1-a6f7-02e963b52893", + "path": "/e", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b3f66d0b-7751-423f-908b-a11c5bd95930", + "path": "/buttonNorth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4f4649ac-64a8-4a73-af11-b3faef356a4d", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Crouch", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "36e52cba-0905-478e-a818-f4bfcb9f3b9a", + "path": "/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": "/leftStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "9144cbe6-05e1-4687-a6d7-24f99d23dd81", + "path": "/rightStick/up", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2db08d65-c5fb-421b-983f-c71163608d67", + "path": "/leftStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "58748904-2ea9-4a80-8579-b500e6a76df8", + "path": "/rightStick/down", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "8ba04515-75aa-45de-966d-393d9bbd1c14", + "path": "/leftStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "712e721c-bdfb-4b23-a86c-a0d9fcfea921", + "path": "/rightStick/left", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "fcd248ae-a788-4676-a12e-f4d81205600b", + "path": "/leftStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "1f04d9bc-c50b-41a1-bfcc-afb75475ec20", + "path": "/rightStick/right", + "interactions": "", + "processors": "", + "groups": ";Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "fb8277d4-c5cd-4663-9dc7-ee3f0b506d90", + "path": "/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": "/stick/up", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "0cb3e13e-3d90-4178-8ae6-d9c5501d653f", + "path": "/stick/down", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "0392d399-f6dd-4c82-8062-c1e9c0d34835", + "path": "/stick/left", + "interactions": "", + "processors": "", + "groups": "Joystick", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "942a66d9-d42f-43d6-8d70-ecb4ba5363bc", + "path": "/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": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "up", + "id": "eb480147-c587-4a33-85ed-eb0ab9942c43", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "2bf42165-60bc-42ca-8072-8c13ab40239b", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "85d264ad-e0a0-4565-b7ff-1a37edde51ac", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "74214943-c580-44e4-98eb-ad7eebe17902", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "cea9b045-a000-445b-95b8-0c171af70a3b", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "8607c725-d935-4808-84b1-8354e29bab63", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "4cda81dc-9edd-4e03-9d7c-a71a14345d0b", + "path": "/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": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "e1394cbc-336e-44ce-9ea8-6007ed6193f7", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "5693e57a-238a-46ed-b5ae-e64e6e574302", + "path": "/touch*/position", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4faf7dc9-b979-4210-aa8c-e808e1ef89f5", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "8d66d5ba-88d7-48e6-b1cd-198bbfef7ace", + "path": "/tip", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "47c2a644-3ebc-4dae-a106-589b7ca75b59", + "path": "/touch*/press", + "interactions": "", + "processors": "", + "groups": "Touch", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "bb9e6b34-44bf-4381-ac63-5aa15d19f677", + "path": "/trigger", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "Click", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "38c99815-14ea-4617-8627-164d27641299", + "path": "/scroll", + "interactions": "", + "processors": "", + "groups": ";Keyboard&Mouse", + "action": "ScrollWheel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4c191405-5738-4d4b-a523-c6a301dbf754", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "RightClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "24066f69-da47-44f3-a07e-0015fb02eb2e", + "path": "/middleButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "MiddleClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "7236c0d9-6ca3-47cf-a6ee-a97f5b59ea77", + "path": "/devicePosition", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDevicePosition", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "23e01e3a-f935-4948-8d8b-9bcac77714fb", + "path": "/deviceRotation", + "interactions": "", + "processors": "", + "groups": "XR", + "action": "TrackedDeviceOrientation", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Gamepad", + "bindingGroup": "Gamepad", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Touch", + "bindingGroup": "Touch", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "Joystick", + "bindingGroup": "Joystick", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + }, + { + "name": "XR", + "bindingGroup": "XR", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} \ No newline at end of file diff --git a/Assets/InputSystem_Actions.inputactions.meta b/Assets/InputSystem_Actions.inputactions.meta new file mode 100644 index 0000000..6b38b04 --- /dev/null +++ b/Assets/InputSystem_Actions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 052faaac586de48259a63d0c4782560b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 0 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/Readme.asset b/Assets/Readme.asset new file mode 100644 index 0000000..77c2f83 --- /dev/null +++ b/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 diff --git a/Assets/Readme.asset.meta b/Assets/Readme.asset.meta new file mode 100644 index 0000000..ab3ad45 --- /dev/null +++ b/Assets/Readme.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8105016687592461f977c054a80ce2f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..c22a652 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21371b1ee9182084fab8c9c8ac8809bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..1c63aa8 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,432 @@ +%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_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + 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: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + 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 +--- !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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 330585546} + - {fileID: 410087041} + - {fileID: 832575519} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..9531828 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99c9720ab356a0642a771bea13969a05 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 0000000..84f793b --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: adcba165aa9a1684e895f3baf95e44b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Authoring.meta b/Assets/Scripts/Authoring.meta new file mode 100644 index 0000000..d1ffe53 --- /dev/null +++ b/Assets/Scripts/Authoring.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a484a2375b573b4e9ed65298416f27e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Authoring/BuildingAuthoring.cs b/Assets/Scripts/Authoring/BuildingAuthoring.cs new file mode 100644 index 0000000..b053a32 --- /dev/null +++ b/Assets/Scripts/Authoring/BuildingAuthoring.cs @@ -0,0 +1,67 @@ +using Unity.Entities; +using UnityEngine; +using EE2Clone.Components; +using EE2Clone.Data; + +namespace EE2Clone.Authoring +{ + public class BuildingAuthoring : MonoBehaviour + { + public BuildingDataSO BuildingData; + public bool StartConstructed = false; + + public class Baker : Baker + { + public override void Bake(BuildingAuthoring authoring) + { + var data = authoring.BuildingData; + if (data == null) return; + + var entity = GetEntity(TransformUsageFlags.Dynamic); + + AddComponent(entity, new BuildingTag()); + AddComponent(entity, new Health + { + Current = authoring.StartConstructed ? data.MaxHealth : 1, + Max = data.MaxHealth + }); + AddComponent(entity, new OwnerPlayer { PlayerId = 0 }); + AddComponent(entity, new BuildingTypeComponent { Value = data.BuildingType }); + AddComponent(entity, new LineOfSight { Range = data.LineOfSightRange }); + AddComponent(entity, new EpochLevel { Value = data.RequiredEpoch }); + + if (!authoring.StartConstructed) + { + AddComponent(entity, new UnderConstructionTag()); + AddComponent(entity, new ConstructionProgress + { + Progress = 0f, + BuildTime = data.BuildTime + }); + } + + if (data.TerritoryRadius > 0) + { + AddComponent(entity, new TerritorySource { Radius = data.TerritoryRadius }); + } + + if (data.ProvidesPopulation > 0) + { + AddComponent(entity, new ProvidesPopulation { Amount = data.ProvidesPopulation }); + } + + AddComponent(entity, new RallyPoint { Position = default }); + + // Production queue + AddBuffer(entity); + AddBuffer(entity); + + // Dropoff + if (data.IsDropoff && data.AcceptedResourceTypes != null && data.AcceptedResourceTypes.Length > 0) + { + AddComponent(entity, new DropoffBuilding { AcceptedType = data.AcceptedResourceTypes[0] }); + } + } + } + } +} diff --git a/Assets/Scripts/Authoring/BuildingAuthoring.cs.meta b/Assets/Scripts/Authoring/BuildingAuthoring.cs.meta new file mode 100644 index 0000000..a03f7d8 --- /dev/null +++ b/Assets/Scripts/Authoring/BuildingAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 37310523fb4035f4b96ce9b3d32af1f3 \ No newline at end of file diff --git a/Assets/Scripts/Authoring/PlayerStateAuthoring.cs b/Assets/Scripts/Authoring/PlayerStateAuthoring.cs new file mode 100644 index 0000000..8eadc53 --- /dev/null +++ b/Assets/Scripts/Authoring/PlayerStateAuthoring.cs @@ -0,0 +1,44 @@ +using Unity.Entities; +using UnityEngine; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Authoring +{ + public class PlayerStateAuthoring : MonoBehaviour + { + public int StartingFood = 200; + public int StartingWood = 200; + public int StartingStone = 100; + public int StartingGold = 100; + + public class Baker : Baker + { + public override void Bake(PlayerStateAuthoring authoring) + { + var entity = GetEntity(TransformUsageFlags.None); + + AddComponent(entity, new PlayerStateComponent + { + PlayerId = 0, + CurrentEpoch = Epoch.StoneAge, + PopulationCurrent = 0, + PopulationMax = GameConstants.StartingPopulationCap, + CivilizationId = 0, + IsAlive = true + }); + + AddComponent(entity, new PlayerResourcesComponent + { + Food = authoring.StartingFood, + Wood = authoring.StartingWood, + Stone = authoring.StartingStone, + Gold = authoring.StartingGold, + Tin = 0 + }); + + AddBuffer(entity); + } + } + } +} diff --git a/Assets/Scripts/Authoring/PlayerStateAuthoring.cs.meta b/Assets/Scripts/Authoring/PlayerStateAuthoring.cs.meta new file mode 100644 index 0000000..ae3edef --- /dev/null +++ b/Assets/Scripts/Authoring/PlayerStateAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 78cb57b57a35e8e44951d464cc24dfab \ No newline at end of file diff --git a/Assets/Scripts/Authoring/ProjectileAuthoring.cs b/Assets/Scripts/Authoring/ProjectileAuthoring.cs new file mode 100644 index 0000000..857e2e0 --- /dev/null +++ b/Assets/Scripts/Authoring/ProjectileAuthoring.cs @@ -0,0 +1,28 @@ +using Unity.Entities; +using UnityEngine; +using EE2Clone.Components; + +namespace EE2Clone.Authoring +{ + public class ProjectileAuthoring : MonoBehaviour + { + public float Speed = 20f; + + public class Baker : Baker + { + public override void Bake(ProjectileAuthoring authoring) + { + var entity = GetEntity(TransformUsageFlags.Dynamic); + + AddComponent(entity, new ProjectileTag()); + AddComponent(entity, new ProjectileData + { + Target = Entity.Null, + Damage = 0, + Speed = authoring.Speed, + OwnerPlayerId = 0 + }); + } + } + } +} diff --git a/Assets/Scripts/Authoring/ProjectileAuthoring.cs.meta b/Assets/Scripts/Authoring/ProjectileAuthoring.cs.meta new file mode 100644 index 0000000..7955298 --- /dev/null +++ b/Assets/Scripts/Authoring/ProjectileAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e6647a589e575c94788124df33f6dffd \ No newline at end of file diff --git a/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs b/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs new file mode 100644 index 0000000..573919a --- /dev/null +++ b/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs @@ -0,0 +1,28 @@ +using Unity.Entities; +using UnityEngine; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Authoring +{ + public class ResourceNodeAuthoring : MonoBehaviour + { + public ResourceType ResourceType = ResourceType.Food; + public int StartingAmount = 500; + + public class Baker : Baker + { + public override void Bake(ResourceNodeAuthoring authoring) + { + var entity = GetEntity(TransformUsageFlags.Dynamic); + + AddComponent(entity, new ResourceNodeTag()); + AddComponent(entity, new ResourceNode + { + Type = authoring.ResourceType, + RemainingAmount = authoring.StartingAmount + }); + } + } + } +} diff --git a/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs.meta b/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs.meta new file mode 100644 index 0000000..d57476e --- /dev/null +++ b/Assets/Scripts/Authoring/ResourceNodeAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0c7d47019d3edcc44b3e904abfe37c5c \ No newline at end of file diff --git a/Assets/Scripts/Authoring/UnitAuthoring.cs b/Assets/Scripts/Authoring/UnitAuthoring.cs new file mode 100644 index 0000000..11b40de --- /dev/null +++ b/Assets/Scripts/Authoring/UnitAuthoring.cs @@ -0,0 +1,72 @@ +using Unity.Entities; +using UnityEngine; +using EE2Clone.Components; +using EE2Clone.Core; +using EE2Clone.Data; + +namespace EE2Clone.Authoring +{ + public class UnitAuthoring : MonoBehaviour + { + public UnitDataSO UnitData; + + public class Baker : Baker + { + public override void Bake(UnitAuthoring authoring) + { + var data = authoring.UnitData; + if (data == null) return; + + var entity = GetEntity(TransformUsageFlags.Dynamic); + + AddComponent(entity, new UnitTag()); + AddComponent(entity, new Health { Current = data.MaxHealth, Max = data.MaxHealth }); + AddComponent(entity, new OwnerPlayer { PlayerId = 0 }); + AddComponent(entity, new MovementSpeed { Value = data.MoveSpeed }); + AddComponent(entity, new MoveTarget { Position = default, IsActive = false }); + AddComponent(entity, new AttackData + { + Damage = data.AttackDamage, + Range = data.AttackRange, + AttackCooldown = data.AttackCooldown, + CooldownRemaining = 0 + }); + AddComponent(entity, new ArmorData { Value = data.Armor }); + AddComponent(entity, new UnitClassComponent { Value = data.UnitClass }); + AddComponent(entity, new UnitStateComponent { Value = UnitState.Idle }); + AddComponent(entity, new LineOfSight { Range = data.LineOfSightRange }); + AddComponent(entity, new EpochLevel { Value = data.RequiredEpoch }); + AddComponent(entity, new CombatTarget { Target = Entity.Null }); + + // Counter bonuses + var counterBuffer = AddBuffer(entity); + if (data.CounterBonuses != null) + { + foreach (var bonus in data.CounterBonuses) + { + counterBuffer.Add(new CounterBonusElement + { + TargetClass = bonus.TargetClass, + Multiplier = bonus.Multiplier + }); + } + } + + // Citizen-specific components + if (data.UnitClass == UnitClass.Citizen) + { + AddComponent(entity, new CitizenTag()); + AddComponent(entity, new CitizenStateComponent { Value = CitizenState.Idle }); + AddComponent(entity, new CarriedResource + { + Type = ResourceType.Food, + Amount = 0, + MaxCarryCapacity = data.MaxCarryCapacity + }); + AddComponent(entity, new GatherTarget { Target = Entity.Null }); + AddComponent(entity, new BuildTarget { Target = Entity.Null }); + } + } + } + } +} diff --git a/Assets/Scripts/Authoring/UnitAuthoring.cs.meta b/Assets/Scripts/Authoring/UnitAuthoring.cs.meta new file mode 100644 index 0000000..ac4ed86 --- /dev/null +++ b/Assets/Scripts/Authoring/UnitAuthoring.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1bbeae99680553f46b1d3fd5c27d6342 \ No newline at end of file diff --git a/Assets/Scripts/Components.meta b/Assets/Scripts/Components.meta new file mode 100644 index 0000000..8a90082 --- /dev/null +++ b/Assets/Scripts/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 255ecf90be61ec741848f7d763680759 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Components/Aspects.cs b/Assets/Scripts/Components/Aspects.cs new file mode 100644 index 0000000..4ea0cb7 --- /dev/null +++ b/Assets/Scripts/Components/Aspects.cs @@ -0,0 +1,45 @@ +using Unity.Entities; +using Unity.Transforms; + +namespace EE2Clone.Components +{ + public readonly partial struct UnitAspect : IAspect + { + public readonly Entity Entity; + + public readonly RefRW Transform; + public readonly RefRO Health; + public readonly RefRO Owner; + public readonly RefRO Speed; + public readonly RefRW MoveTarget; + public readonly RefRO Attack; + public readonly RefRO Armor; + public readonly RefRO UnitClass; + public readonly RefRW State; + public readonly RefRO LineOfSight; + } + + public readonly partial struct BuildingAspect : IAspect + { + public readonly Entity Entity; + + public readonly RefRO Transform; + public readonly RefRW Health; + public readonly RefRO Owner; + public readonly RefRO BuildingType; + public readonly RefRO LineOfSight; + } + + public readonly partial struct GathererAspect : IAspect + { + public readonly Entity Entity; + + public readonly RefRW Transform; + public readonly RefRO Owner; + public readonly RefRO Speed; + public readonly RefRW MoveTarget; + public readonly RefRW CitizenState; + public readonly RefRW CarriedResource; + public readonly RefRW GatherTarget; + } +} diff --git a/Assets/Scripts/Components/Aspects.cs.meta b/Assets/Scripts/Components/Aspects.cs.meta new file mode 100644 index 0000000..fd0226d --- /dev/null +++ b/Assets/Scripts/Components/Aspects.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1d3da0d6cb90d294287efd6c1fa55c9f \ No newline at end of file diff --git a/Assets/Scripts/Components/BufferComponents.cs b/Assets/Scripts/Components/BufferComponents.cs new file mode 100644 index 0000000..e64eef8 --- /dev/null +++ b/Assets/Scripts/Components/BufferComponents.cs @@ -0,0 +1,39 @@ +using Unity.Entities; +using Unity.NetCode; +using EE2Clone.Core; + +namespace EE2Clone.Components +{ + [GhostComponent] + [InternalBufferCapacity(4)] + public struct CounterBonusElement : IBufferElementData + { + [GhostField] public UnitClass TargetClass; + [GhostField] public float Multiplier; + } + + [GhostComponent] + [InternalBufferCapacity(5)] + public struct ProductionQueueElement : IBufferElementData + { + [GhostField] public int UnitDataId; + [GhostField] public float TimeRemaining; + [GhostField] public float TotalTime; + } + + [GhostComponent] + [InternalBufferCapacity(2)] + public struct ResearchQueueElement : IBufferElementData + { + [GhostField] public int TechId; + [GhostField] public float TimeRemaining; + [GhostField] public float TotalTime; + } + + [GhostComponent] + [InternalBufferCapacity(32)] + public struct PlayerTechBufferElement : IBufferElementData + { + [GhostField] public int TechId; + } +} diff --git a/Assets/Scripts/Components/BufferComponents.cs.meta b/Assets/Scripts/Components/BufferComponents.cs.meta new file mode 100644 index 0000000..83e5532 --- /dev/null +++ b/Assets/Scripts/Components/BufferComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d3fc0cacffc268b4f966956f308fbc31 \ No newline at end of file diff --git a/Assets/Scripts/Components/GameplayComponents.cs b/Assets/Scripts/Components/GameplayComponents.cs new file mode 100644 index 0000000..dae14c5 --- /dev/null +++ b/Assets/Scripts/Components/GameplayComponents.cs @@ -0,0 +1,168 @@ +using Unity.Entities; +using Unity.Mathematics; +using Unity.NetCode; +using EE2Clone.Core; + +namespace EE2Clone.Components +{ + [GhostComponent] + public struct Health : IComponentData + { + [GhostField] public float Current; + [GhostField] public float Max; + } + + [GhostComponent] + public struct OwnerPlayer : IComponentData + { + [GhostField] public int PlayerId; + } + + [GhostComponent] + public struct MovementSpeed : IComponentData + { + [GhostField] public float Value; + } + + [GhostComponent] + public struct MoveTarget : IComponentData + { + [GhostField] public float3 Position; + [GhostField] public bool IsActive; + } + + [GhostComponent] + public struct AttackData : IComponentData + { + [GhostField] public float Damage; + [GhostField] public float Range; + [GhostField] public float AttackCooldown; + public float CooldownRemaining; + } + + [GhostComponent] + public struct ArmorData : IComponentData + { + [GhostField] public float Value; + } + + [GhostComponent] + public struct UnitClassComponent : IComponentData + { + [GhostField] public UnitClass Value; + } + + [GhostComponent] + public struct UnitStateComponent : IComponentData + { + [GhostField] public UnitState Value; + } + + [GhostComponent] + public struct ResourceNode : IComponentData + { + [GhostField] public ResourceType Type; + [GhostField] public int RemainingAmount; + } + + [GhostComponent] + public struct CarriedResource : IComponentData + { + [GhostField] public ResourceType Type; + [GhostField] public int Amount; + [GhostField] public int MaxCarryCapacity; + } + + [GhostComponent] + public struct GatherTarget : IComponentData + { + [GhostField] public Entity Target; + } + + [GhostComponent] + public struct BuildTarget : IComponentData + { + [GhostField] public Entity Target; + } + + [GhostComponent] + public struct ConstructionProgress : IComponentData + { + [GhostField] public float Progress; // 0.0 to 1.0 + [GhostField] public float BuildTime; // Total time required + } + + [GhostComponent] + public struct ProductionTimer : IComponentData + { + [GhostField] public float TimeRemaining; + [GhostField] public float TotalTime; + } + + [GhostComponent] + public struct RallyPoint : IComponentData + { + [GhostField] public float3 Position; + } + + [GhostComponent] + public struct TerritorySource : IComponentData + { + [GhostField] public float Radius; + } + + [GhostComponent] + public struct LineOfSight : IComponentData + { + [GhostField] public float Range; + } + + [GhostComponent] + public struct EpochLevel : IComponentData + { + [GhostField] public Epoch Value; + } + + [GhostComponent] + public struct CitizenStateComponent : IComponentData + { + [GhostField] public CitizenState Value; + } + + [GhostComponent] + public struct DropoffBuilding : IComponentData + { + [GhostField] public ResourceType AcceptedType; + } + + [GhostComponent] + public struct CombatTarget : IComponentData + { + [GhostField] public Entity Target; + } + + [GhostComponent] + public struct BuildingTypeComponent : IComponentData + { + [GhostField] public BuildingType Value; + } + + [GhostComponent] + public struct ProvidesPopulation : IComponentData + { + [GhostField] public int Amount; + } + + public struct ProjectileData : IComponentData + { + [GhostField] public Entity Target; + [GhostField] public float Damage; + [GhostField] public float Speed; + [GhostField] public int OwnerPlayerId; + } + + public struct DeathTimer : IComponentData + { + public float TimeRemaining; + } +} diff --git a/Assets/Scripts/Components/GameplayComponents.cs.meta b/Assets/Scripts/Components/GameplayComponents.cs.meta new file mode 100644 index 0000000..1dd35db --- /dev/null +++ b/Assets/Scripts/Components/GameplayComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 43034d84c3a5fa249b16c70c205c781d \ No newline at end of file diff --git a/Assets/Scripts/Components/PlayerComponents.cs b/Assets/Scripts/Components/PlayerComponents.cs new file mode 100644 index 0000000..baf266e --- /dev/null +++ b/Assets/Scripts/Components/PlayerComponents.cs @@ -0,0 +1,61 @@ +using Unity.Entities; +using Unity.NetCode; +using EE2Clone.Core; + +namespace EE2Clone.Components +{ + [GhostComponent(PrefabType = GhostPrefabType.All)] + public struct PlayerStateComponent : IComponentData + { + [GhostField] public int PlayerId; + [GhostField] public Epoch CurrentEpoch; + [GhostField] public int PopulationCurrent; + [GhostField] public int PopulationMax; + [GhostField] public int CivilizationId; + [GhostField] public bool IsAlive; + } + + [GhostComponent(PrefabType = GhostPrefabType.All)] + public struct PlayerResourcesComponent : IComponentData + { + [GhostField] public int Food; + [GhostField] public int Wood; + [GhostField] public int Stone; + [GhostField] public int Gold; + [GhostField] public int Tin; + + public int GetResource(ResourceType type) + { + return type switch + { + ResourceType.Food => Food, + ResourceType.Wood => Wood, + ResourceType.Stone => Stone, + ResourceType.Gold => Gold, + ResourceType.Tin => Tin, + _ => 0 + }; + } + + public void AddResource(ResourceType type, int amount) + { + switch (type) + { + case ResourceType.Food: Food += amount; break; + case ResourceType.Wood: Wood += amount; break; + case ResourceType.Stone: Stone += amount; break; + case ResourceType.Gold: Gold += amount; break; + case ResourceType.Tin: Tin += amount; break; + } + } + + public bool TrySpend(ResourceType type, int amount) + { + if (GetResource(type) < amount) + return false; + + AddResource(type, -amount); + return true; + } + } +} diff --git a/Assets/Scripts/Components/PlayerComponents.cs.meta b/Assets/Scripts/Components/PlayerComponents.cs.meta new file mode 100644 index 0000000..e7b8752 --- /dev/null +++ b/Assets/Scripts/Components/PlayerComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f66e6e599792edc4594f96c856bd7ccd \ No newline at end of file diff --git a/Assets/Scripts/Components/Tags.cs b/Assets/Scripts/Components/Tags.cs new file mode 100644 index 0000000..2adf543 --- /dev/null +++ b/Assets/Scripts/Components/Tags.cs @@ -0,0 +1,22 @@ +using Unity.Entities; + +namespace EE2Clone.Components +{ + public struct UnitTag : IComponentData { } + public struct BuildingTag : IComponentData { } + public struct CitizenTag : IComponentData { } + public struct ProjectileTag : IComponentData { } + public struct ResourceNodeTag : IComponentData { } + public struct SelectedTag : IComponentData { } + public struct DestroyEntityTag : IComponentData { } + + /// + /// Marks an entity as under construction (not yet functional). + /// + public struct UnderConstructionTag : IComponentData { } + + /// + /// Tag for entities that have just spawned and need initialization. + /// + public struct NewlySpawnedTag : IComponentData { } +} diff --git a/Assets/Scripts/Components/Tags.cs.meta b/Assets/Scripts/Components/Tags.cs.meta new file mode 100644 index 0000000..09ad172 --- /dev/null +++ b/Assets/Scripts/Components/Tags.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 38e1791fd078c6a4c923d7fdb0d81da1 \ No newline at end of file diff --git a/Assets/Scripts/Core.meta b/Assets/Scripts/Core.meta new file mode 100644 index 0000000..2cd570b --- /dev/null +++ b/Assets/Scripts/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 584693cd698b6434ea5da7d837864661 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GameConstants.cs b/Assets/Scripts/Core/GameConstants.cs new file mode 100644 index 0000000..cb753d5 --- /dev/null +++ b/Assets/Scripts/Core/GameConstants.cs @@ -0,0 +1,90 @@ +namespace EE2Clone.Core +{ + public enum UnitClass + { + Citizen, + Infantry, + Ranged, + Cavalry, + Siege, + Priest + } + + public enum ResourceType + { + Food, + Wood, + Stone, + Gold, + Tin + } + + public enum Epoch + { + StoneAge = 0, + BronzeAge = 1, + IronAge = 2 + } + + public enum BuildingType + { + TownCenter, + House, + Barracks, + ArcheryRange, + Stable, + SiegeWorkshop, + Temple, + University, + Farm, + LumberCamp, + MiningCamp, + Quarry, + Wall, + Tower + } + + public enum CitizenState + { + Idle, + MovingToGather, + Gathering, + MovingToDropoff, + Depositing, + MovingToBuild, + Building, + Repairing, + Fighting + } + + public enum UnitState + { + Idle, + Moving, + Attacking, + Dying + } + + public static class GameConstants + { + public const int MaxPlayers = 8; + public const int MaxPopulationCap = 200; + public const int PopulationPerHouse = 5; + public const int StartingPopulationCap = 10; + + public const float GatherTickInterval = 1.0f; + public const float ConstructionTickInterval = 0.5f; + + public const int FlowFieldWidth = 256; + public const int FlowFieldHeight = 256; + public const float FlowFieldCellSize = 1.0f; + + public const float MinDamage = 1f; + + // Counter bonus multipliers (rock-paper-scissors) + public const float CounterBonusStrong = 1.5f; + public const float CounterBonusWeak = 0.75f; + public const float CounterBonusNeutral = 1.0f; + public const float SiegeBuildingBonus = 3.0f; + } +} diff --git a/Assets/Scripts/Core/GameConstants.cs.meta b/Assets/Scripts/Core/GameConstants.cs.meta new file mode 100644 index 0000000..a8c50fb --- /dev/null +++ b/Assets/Scripts/Core/GameConstants.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 986c0d6aa51063547b8a637d1a4b4986 \ No newline at end of file diff --git a/Assets/Scripts/Data.meta b/Assets/Scripts/Data.meta new file mode 100644 index 0000000..3d31bf0 --- /dev/null +++ b/Assets/Scripts/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f00ac55dfbdf8748b594e18877c9c5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Data/BuildingDataSO.cs b/Assets/Scripts/Data/BuildingDataSO.cs new file mode 100644 index 0000000..406f389 --- /dev/null +++ b/Assets/Scripts/Data/BuildingDataSO.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using EE2Clone.Core; + +namespace EE2Clone.Data +{ + [CreateAssetMenu(fileName = "NewBuildingData", menuName = "EE2Clone/Building Data")] + public class BuildingDataSO : ScriptableObject + { + [Header("Identity")] + public int Id; + public string BuildingName; + public BuildingType BuildingType; + public Epoch RequiredEpoch; + + [Header("Stats")] + public float MaxHealth = 500; + public float LineOfSightRange = 8f; + public float BuildTime = 20f; + + [Header("Territory")] + public float TerritoryRadius; + + [Header("Population")] + public int ProvidesPopulation; + + [Header("Resource Dropoff")] + public bool IsDropoff; + public ResourceType[] AcceptedResourceTypes; + + [Header("Production")] + public int[] ProducibleUnitIds; + public int[] ResearchableTechIds; + + [Header("Cost")] + public int FoodCost; + public int WoodCost; + public int StoneCost; + public int GoldCost; + public int TinCost; + + [Header("Footprint")] + public Vector2Int FootprintSize = new(3, 3); + + [Header("Visuals")] + public GameObject Prefab; + } +} diff --git a/Assets/Scripts/Data/BuildingDataSO.cs.meta b/Assets/Scripts/Data/BuildingDataSO.cs.meta new file mode 100644 index 0000000..8e3c18f --- /dev/null +++ b/Assets/Scripts/Data/BuildingDataSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ba7586487d870fb4dbfd31fee37961d4 \ No newline at end of file diff --git a/Assets/Scripts/Data/CivilizationDataSO.cs b/Assets/Scripts/Data/CivilizationDataSO.cs new file mode 100644 index 0000000..409694c --- /dev/null +++ b/Assets/Scripts/Data/CivilizationDataSO.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace EE2Clone.Data +{ + [CreateAssetMenu(fileName = "NewCivilizationData", menuName = "EE2Clone/Civilization Data")] + public class CivilizationDataSO : ScriptableObject + { + [Header("Identity")] + public int Id; + public string CivilizationName; + public string Description; + + [Header("Starting Bonuses")] + public int BonusFood; + public int BonusWood; + public int BonusStone; + public int BonusGold; + + [Header("Stat Modifiers")] + public float InfantryAttackModifier = 1f; + public float RangedAttackModifier = 1f; + public float CavalryAttackModifier = 1f; + public float GatherSpeedModifier = 1f; + public float BuildSpeedModifier = 1f; + public float ResearchSpeedModifier = 1f; + } +} diff --git a/Assets/Scripts/Data/CivilizationDataSO.cs.meta b/Assets/Scripts/Data/CivilizationDataSO.cs.meta new file mode 100644 index 0000000..3bdbde2 --- /dev/null +++ b/Assets/Scripts/Data/CivilizationDataSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d5e0e074c1ddf1743bdf4ea4688e7441 \ No newline at end of file diff --git a/Assets/Scripts/Data/EpochDataSO.cs b/Assets/Scripts/Data/EpochDataSO.cs new file mode 100644 index 0000000..445dd3c --- /dev/null +++ b/Assets/Scripts/Data/EpochDataSO.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using EE2Clone.Core; + +namespace EE2Clone.Data +{ + [CreateAssetMenu(fileName = "NewEpochData", menuName = "EE2Clone/Epoch Data")] + public class EpochDataSO : ScriptableObject + { + [Header("Identity")] + public Epoch Epoch; + public string EpochName; + public string Description; + + [Header("Advance Requirements")] + public int FoodCost; + public int WoodCost; + public int StoneCost; + public int GoldCost; + public int TinCost; + public int[] RequiredTechIds; + public float AdvanceTime = 60f; + + [Header("Unlocks")] + public int[] UnlockedBuildingIds; + public int[] UnlockedUnitIds; + public int[] UnlockedTechIds; + } +} diff --git a/Assets/Scripts/Data/EpochDataSO.cs.meta b/Assets/Scripts/Data/EpochDataSO.cs.meta new file mode 100644 index 0000000..1004470 --- /dev/null +++ b/Assets/Scripts/Data/EpochDataSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1a02854ba574df84d84820e3f8feb651 \ No newline at end of file diff --git a/Assets/Scripts/Data/TechDataSO.cs b/Assets/Scripts/Data/TechDataSO.cs new file mode 100644 index 0000000..aa6246f --- /dev/null +++ b/Assets/Scripts/Data/TechDataSO.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using EE2Clone.Core; + +namespace EE2Clone.Data +{ + [CreateAssetMenu(fileName = "NewTechData", menuName = "EE2Clone/Tech Data")] + public class TechDataSO : ScriptableObject + { + [Header("Identity")] + public int Id; + public string TechName; + public string Description; + public Epoch RequiredEpoch; + + [Header("Prerequisites")] + public int[] PrerequisiteTechIds; + + [Header("Research")] + public float ResearchTime = 30f; + public int FoodCost; + public int WoodCost; + public int StoneCost; + public int GoldCost; + public int TinCost; + + [Header("Effects")] + public TechEffect[] Effects; + } + + [System.Serializable] + public struct TechEffect + { + public TechEffectType EffectType; + public UnitClass AffectedUnitClass; + public float Value; + } + + public enum TechEffectType + { + AttackBonus, + ArmorBonus, + SpeedBonus, + HealthBonus, + GatherSpeedBonus, + BuildSpeedBonus, + TrainSpeedBonus + } +} diff --git a/Assets/Scripts/Data/TechDataSO.cs.meta b/Assets/Scripts/Data/TechDataSO.cs.meta new file mode 100644 index 0000000..1fc9dfe --- /dev/null +++ b/Assets/Scripts/Data/TechDataSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 93cdf2b99ef6a4340ab0635822ff6b95 \ No newline at end of file diff --git a/Assets/Scripts/Data/UnitDataSO.cs b/Assets/Scripts/Data/UnitDataSO.cs new file mode 100644 index 0000000..bcfc872 --- /dev/null +++ b/Assets/Scripts/Data/UnitDataSO.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using EE2Clone.Core; + +namespace EE2Clone.Data +{ + [CreateAssetMenu(fileName = "NewUnitData", menuName = "EE2Clone/Unit Data")] + public class UnitDataSO : ScriptableObject + { + [Header("Identity")] + public int Id; + public string UnitName; + public UnitClass UnitClass; + public Epoch RequiredEpoch; + + [Header("Stats")] + public float MaxHealth = 100; + public float MoveSpeed = 4f; + public float AttackDamage = 10f; + public float AttackRange = 1.5f; + public float AttackCooldown = 1f; + public float Armor = 1f; + public float LineOfSightRange = 10f; + + [Header("Gathering (Citizens only)")] + public int MaxCarryCapacity = 10; + public float GatherSpeed = 1f; + public float BuildSpeed = 1f; + + [Header("Cost")] + public int FoodCost; + public int WoodCost; + public int StoneCost; + public int GoldCost; + public int TinCost; + public float TrainTime = 10f; + public int PopulationCost = 1; + + [Header("Counter Bonuses")] + public CounterBonus[] CounterBonuses; + + [Header("Visuals")] + public GameObject Prefab; + } + + [System.Serializable] + public struct CounterBonus + { + public UnitClass TargetClass; + public float Multiplier; + } +} diff --git a/Assets/Scripts/Data/UnitDataSO.cs.meta b/Assets/Scripts/Data/UnitDataSO.cs.meta new file mode 100644 index 0000000..97f65ae --- /dev/null +++ b/Assets/Scripts/Data/UnitDataSO.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c618988cd6fa6fe43a54b0e26bfd691d \ No newline at end of file diff --git a/Assets/Scripts/EE2Clone.asmdef b/Assets/Scripts/EE2Clone.asmdef new file mode 100644 index 0000000..35ad5e7 --- /dev/null +++ b/Assets/Scripts/EE2Clone.asmdef @@ -0,0 +1,24 @@ +{ + "name": "EE2Clone", + "rootNamespace": "EE2Clone", + "references": [ + "Unity.Entities", + "Unity.Entities.Hybrid", + "Unity.Transforms", + "Unity.Mathematics", + "Unity.Collections", + "Unity.Burst", + "Unity.Physics", + "Unity.NetCode", + "Unity.InputSystem" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Assets/Scripts/EE2Clone.asmdef.meta b/Assets/Scripts/EE2Clone.asmdef.meta new file mode 100644 index 0000000..99129af --- /dev/null +++ b/Assets/Scripts/EE2Clone.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1d4b91ddf61b827459f2f7d2db612f5b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hybrid.meta b/Assets/Scripts/Hybrid.meta new file mode 100644 index 0000000..ed9aa5f --- /dev/null +++ b/Assets/Scripts/Hybrid.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eeceb2808c5c7f04e9a5883989ed3bc2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hybrid/CommandDispatcher.cs b/Assets/Scripts/Hybrid/CommandDispatcher.cs new file mode 100644 index 0000000..f4ebebf --- /dev/null +++ b/Assets/Scripts/Hybrid/CommandDispatcher.cs @@ -0,0 +1,219 @@ +using Unity.Entities; +using Unity.Mathematics; +using Unity.Transforms; +using Unity.Collections; +using Unity.Physics; +using UnityEngine; +using EE2Clone.Components; +using EE2Clone.NetCode; + +namespace EE2Clone.Hybrid +{ + /// + /// Processes right-click context commands: move, attack, gather, build/repair. + /// Sends the appropriate RPC to the server based on what was right-clicked. + /// Client-side MonoBehaviour. + /// + public class CommandDispatcher : MonoBehaviour + { + private Camera _mainCamera; + + private void Start() + { + _mainCamera = Camera.main; + } + + private void Update() + { + var input = RTSInputActions.Instance; + if (input == null || _mainCamera == null) return; + + if (input.RightClickPressed) + HandleRightClick(input.MousePosition); + + if (input.StopPressed) + HandleStop(); + } + + private void HandleRightClick(Vector2 screenPos) + { + var selection = SelectionManager.Instance; + if (selection == null || selection.SelectedEntities.Count == 0) return; + + var world = World.DefaultGameObjectInjectionWorld; + if (world == null || !world.IsCreated) return; + + var em = world.EntityManager; + var ray = _mainCamera.ScreenPointToRay(new Vector3(screenPos.x, screenPos.y, 0)); + + // Raycast to find what was clicked + var physicsWorldQuery = em.CreateEntityQuery(typeof(PhysicsWorldSingleton)); + if (physicsWorldQuery.IsEmpty) return; + + var physicsWorld = physicsWorldQuery.GetSingleton(); + var rayInput = new RaycastInput + { + Start = ray.origin, + End = ray.origin + ray.direction * 500f, + Filter = new CollisionFilter + { + BelongsTo = ~0u, + CollidesWith = ~0u, + GroupIndex = 0 + } + }; + + Entity hitEntity = Entity.Null; + float3 hitPosition = float3.zero; + + if (physicsWorld.CastRay(rayInput, out var hit)) + { + hitEntity = physicsWorld.Bodies[hit.RigidBodyIndex].Entity; + hitPosition = hit.Position; + } + else + { + // No hit — use ground plane intersection + if (ray.direction.y != 0) + { + float t = -ray.origin.y / ray.direction.y; + if (t > 0) + hitPosition = new float3(ray.origin.x + ray.direction.x * t, 0, ray.origin.z + ray.direction.z * t); + } + return; // Only move command if no entity hit + } + + // Determine command type based on what was clicked + if (hitEntity != Entity.Null && em.Exists(hitEntity)) + { + if (em.HasComponent(hitEntity)) + { + // Gather command for citizens + SendGatherCommands(hitEntity); + return; + } + + if (em.HasComponent(hitEntity) || em.HasComponent(hitEntity)) + { + if (em.HasComponent(hitEntity)) + { + var owner = em.GetComponentData(hitEntity); + // TODO: compare with local player id + // For now, treat as enemy → attack + SendAttackCommands(hitEntity); + return; + } + } + + if (em.HasComponent(hitEntity) && em.HasComponent(hitEntity)) + { + // Build/repair command for citizens + SendBuildRepairCommands(hitEntity); + return; + } + } + + // Default: move command + SendMoveCommands(hitPosition); + } + + private void SendMoveCommands(float3 position) + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null) return; + var em = world.EntityManager; + + foreach (var unit in SelectionManager.Instance.SelectedEntities) + { + if (!em.Exists(unit) || !em.HasComponent(unit)) continue; + + var rpcEntity = em.CreateEntity(); + em.AddComponentData(rpcEntity, new MoveCommandRpc + { + UnitEntity = unit, + TargetPosition = position + }); + em.AddComponent(rpcEntity); + } + } + + private void SendAttackCommands(Entity target) + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null) return; + var em = world.EntityManager; + + foreach (var unit in SelectionManager.Instance.SelectedEntities) + { + if (!em.Exists(unit) || !em.HasComponent(unit)) continue; + + var rpcEntity = em.CreateEntity(); + em.AddComponentData(rpcEntity, new AttackCommandRpc + { + AttackerEntity = unit, + TargetEntity = target + }); + em.AddComponent(rpcEntity); + } + } + + private void SendGatherCommands(Entity resourceNode) + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null) return; + var em = world.EntityManager; + + foreach (var unit in SelectionManager.Instance.SelectedEntities) + { + if (!em.Exists(unit) || !em.HasComponent(unit)) continue; + + var rpcEntity = em.CreateEntity(); + em.AddComponentData(rpcEntity, new GatherCommandRpc + { + CitizenEntity = unit, + ResourceNodeEntity = resourceNode + }); + em.AddComponent(rpcEntity); + } + } + + private void SendBuildRepairCommands(Entity building) + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null) return; + var em = world.EntityManager; + + foreach (var unit in SelectionManager.Instance.SelectedEntities) + { + if (!em.Exists(unit) || !em.HasComponent(unit)) continue; + + var rpcEntity = em.CreateEntity(); + em.AddComponentData(rpcEntity, new BuildRepairCommandRpc + { + CitizenEntity = unit, + BuildingEntity = building + }); + em.AddComponent(rpcEntity); + } + } + + private void HandleStop() + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null) return; + var em = world.EntityManager; + + foreach (var unit in SelectionManager.Instance.SelectedEntities) + { + if (!em.Exists(unit) || !em.HasComponent(unit)) continue; + + var rpcEntity = em.CreateEntity(); + em.AddComponentData(rpcEntity, new StopCommandRpc + { + UnitEntity = unit + }); + em.AddComponent(rpcEntity); + } + } + } +} diff --git a/Assets/Scripts/Hybrid/CommandDispatcher.cs.meta b/Assets/Scripts/Hybrid/CommandDispatcher.cs.meta new file mode 100644 index 0000000..5570f20 --- /dev/null +++ b/Assets/Scripts/Hybrid/CommandDispatcher.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f074ad7027c0ccc409dcab5f7d5abbde \ No newline at end of file diff --git a/Assets/Scripts/Hybrid/RTSCameraController.cs b/Assets/Scripts/Hybrid/RTSCameraController.cs new file mode 100644 index 0000000..a538b92 --- /dev/null +++ b/Assets/Scripts/Hybrid/RTSCameraController.cs @@ -0,0 +1,106 @@ +using UnityEngine; + +namespace EE2Clone.Hybrid +{ + /// + /// RTS-style camera controller. Supports WASD/arrow pan, edge-of-screen pan, + /// scroll zoom, and Q/E rotation. Client-side only (MonoBehaviour). + /// + public class RTSCameraController : MonoBehaviour + { + [Header("Movement")] + [SerializeField] private float panSpeed = 30f; + [SerializeField] private float edgePanThreshold = 15f; + [SerializeField] private bool enableEdgePan = true; + + [Header("Zoom")] + [SerializeField] private float zoomSpeed = 10f; + [SerializeField] private float minZoomHeight = 10f; + [SerializeField] private float maxZoomHeight = 80f; + + [Header("Rotation")] + [SerializeField] private float rotateSpeed = 100f; + + [Header("Bounds")] + [SerializeField] private Vector2 mapMin = new(-128f, -128f); + [SerializeField] private Vector2 mapMax = new(128f, 128f); + + private Transform _cameraTransform; + + private void Awake() + { + _cameraTransform = transform; + } + + private void LateUpdate() + { + var input = RTSInputActions.Instance; + if (input == null) return; + + HandlePan(input); + HandleZoom(input); + HandleRotation(input); + ClampPosition(); + } + + private void HandlePan(RTSInputActions input) + { + var panInput = input.CameraPan; + var panDir = new Vector3(panInput.x, 0f, panInput.y); + + // Edge-of-screen panning + if (enableEdgePan) + { + var mousePos = input.MousePosition; + if (mousePos.x <= edgePanThreshold) panDir.x -= 1f; + if (mousePos.x >= Screen.width - edgePanThreshold) panDir.x += 1f; + if (mousePos.y <= edgePanThreshold) panDir.z -= 1f; + if (mousePos.y >= Screen.height - edgePanThreshold) panDir.z += 1f; + } + + if (panDir.sqrMagnitude > 0.01f) + { + panDir.Normalize(); + // Move relative to camera's forward (ignoring Y) + var forward = _cameraTransform.forward; + forward.y = 0f; + forward.Normalize(); + var right = _cameraTransform.right; + right.y = 0f; + right.Normalize(); + + var move = (forward * panDir.z + right * panDir.x) * (panSpeed * Time.unscaledDeltaTime); + _cameraTransform.position += move; + } + } + + private void HandleZoom(RTSInputActions input) + { + var zoomInput = input.CameraZoom; + if (Mathf.Abs(zoomInput) > 0.01f) + { + var pos = _cameraTransform.position; + pos.y -= zoomInput * zoomSpeed * Time.unscaledDeltaTime; + pos.y = Mathf.Clamp(pos.y, minZoomHeight, maxZoomHeight); + _cameraTransform.position = pos; + } + } + + private void HandleRotation(RTSInputActions input) + { + var rotateInput = input.CameraRotate; + if (Mathf.Abs(rotateInput) > 0.01f) + { + _cameraTransform.Rotate(Vector3.up, rotateInput * rotateSpeed * Time.unscaledDeltaTime, Space.World); + } + } + + private void ClampPosition() + { + var pos = _cameraTransform.position; + pos.x = Mathf.Clamp(pos.x, mapMin.x, mapMax.x); + pos.z = Mathf.Clamp(pos.z, mapMin.y, mapMax.y); + _cameraTransform.position = pos; + } + } +} diff --git a/Assets/Scripts/Hybrid/RTSCameraController.cs.meta b/Assets/Scripts/Hybrid/RTSCameraController.cs.meta new file mode 100644 index 0000000..1ef80cb --- /dev/null +++ b/Assets/Scripts/Hybrid/RTSCameraController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4a2d497f840a0f54d823f815babd595c \ No newline at end of file diff --git a/Assets/Scripts/Hybrid/RTSInputActions.cs b/Assets/Scripts/Hybrid/RTSInputActions.cs new file mode 100644 index 0000000..28ada48 --- /dev/null +++ b/Assets/Scripts/Hybrid/RTSInputActions.cs @@ -0,0 +1,140 @@ +using UnityEngine; +using UnityEngine.InputSystem; + +namespace EE2Clone.Hybrid +{ + /// + /// MonoBehaviour that reads from the Input System and exposes RTS-specific input state + /// for the hybrid camera, selection, and UI systems. This is the bridge between + /// Unity's Input System and our ECS command pipeline. + /// + public class RTSInputActions : MonoBehaviour + { + public static RTSInputActions Instance { get; private set; } + + [Header("Input Action References")] + [SerializeField] private InputActionAsset inputActions; + + // Camera + public Vector2 CameraPan { get; private set; } + public float CameraZoom { get; private set; } + public float CameraRotate { get; private set; } + + // Selection + public bool LeftClickPressed { get; private set; } + public bool LeftClickReleased { get; private set; } + public bool LeftClickHeld { get; private set; } + public bool RightClickPressed { get; private set; } + public Vector2 MousePosition { get; private set; } + + // Modifiers + public bool ShiftHeld { get; private set; } + public bool CtrlHeld { get; private set; } + + // Actions + public bool AttackMovePressed { get; private set; } + public bool PatrolPressed { get; private set; } + public bool StopPressed { get; private set; } + public bool DeletePressed { get; private set; } + + // Control groups (0-9) + public int ControlGroupPressed { get; private set; } = -1; + + private InputAction _cameraPanAction; + private InputAction _cameraZoomAction; + private InputAction _cameraRotateAction; + private InputAction _leftClickAction; + private InputAction _rightClickAction; + private InputAction _mousePositionAction; + private InputAction _shiftAction; + private InputAction _ctrlAction; + private InputAction _attackMoveAction; + private InputAction _patrolAction; + private InputAction _stopAction; + private InputAction _deleteAction; + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + Instance = this; + DontDestroyOnLoad(gameObject); + } + + private void OnEnable() + { + if (inputActions == null) return; + + var rtsMap = inputActions.FindActionMap("RTS"); + if (rtsMap == null) + { + Debug.LogError("RTS action map not found in Input Actions asset!"); + return; + } + + _cameraPanAction = rtsMap.FindAction("CameraPan"); + _cameraZoomAction = rtsMap.FindAction("CameraZoom"); + _cameraRotateAction = rtsMap.FindAction("CameraRotate"); + _leftClickAction = rtsMap.FindAction("LeftClick"); + _rightClickAction = rtsMap.FindAction("RightClick"); + _mousePositionAction = rtsMap.FindAction("MousePosition"); + _shiftAction = rtsMap.FindAction("Shift"); + _ctrlAction = rtsMap.FindAction("Ctrl"); + _attackMoveAction = rtsMap.FindAction("AttackMove"); + _patrolAction = rtsMap.FindAction("Patrol"); + _stopAction = rtsMap.FindAction("Stop"); + _deleteAction = rtsMap.FindAction("Delete"); + + rtsMap.Enable(); + } + + private void OnDisable() + { + if (inputActions == null) return; + var rtsMap = inputActions.FindActionMap("RTS"); + rtsMap?.Disable(); + } + + private void Update() + { + CameraPan = _cameraPanAction?.ReadValue() ?? Vector2.zero; + CameraZoom = _cameraZoomAction?.ReadValue() ?? 0f; + CameraRotate = _cameraRotateAction?.ReadValue() ?? 0f; + + LeftClickPressed = _leftClickAction?.WasPressedThisFrame() ?? false; + LeftClickReleased = _leftClickAction?.WasReleasedThisFrame() ?? false; + LeftClickHeld = _leftClickAction?.IsPressed() ?? false; + RightClickPressed = _rightClickAction?.WasPressedThisFrame() ?? false; + + MousePosition = _mousePositionAction?.ReadValue() ?? Vector2.zero; + + ShiftHeld = _shiftAction?.IsPressed() ?? false; + CtrlHeld = _ctrlAction?.IsPressed() ?? false; + + AttackMovePressed = _attackMoveAction?.WasPressedThisFrame() ?? false; + PatrolPressed = _patrolAction?.WasPressedThisFrame() ?? false; + StopPressed = _stopAction?.WasPressedThisFrame() ?? false; + DeletePressed = _deleteAction?.WasPressedThisFrame() ?? false; + + // Control groups (keyboard 0-9) + ControlGroupPressed = -1; + for (int i = 0; i <= 9; i++) + { + if (Keyboard.current != null && Keyboard.current[Key.Digit0 + i].wasPressedThisFrame) + { + ControlGroupPressed = i; + break; + } + } + } + + private void OnDestroy() + { + if (Instance == this) + Instance = null; + } + } +} diff --git a/Assets/Scripts/Hybrid/RTSInputActions.cs.meta b/Assets/Scripts/Hybrid/RTSInputActions.cs.meta new file mode 100644 index 0000000..a81ee5e --- /dev/null +++ b/Assets/Scripts/Hybrid/RTSInputActions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ad9c0e075e79563498b1577211b6e351 \ No newline at end of file diff --git a/Assets/Scripts/Hybrid/SelectionBoxUI.cs b/Assets/Scripts/Hybrid/SelectionBoxUI.cs new file mode 100644 index 0000000..2fa218d --- /dev/null +++ b/Assets/Scripts/Hybrid/SelectionBoxUI.cs @@ -0,0 +1,67 @@ +using UnityEngine; + +namespace EE2Clone.Hybrid +{ + /// + /// Draws the rubber-band selection box on screen when the player is drag-selecting. + /// + public class SelectionBoxUI : MonoBehaviour + { + [SerializeField] private Color boxColor = new(0.2f, 0.8f, 0.2f, 0.25f); + [SerializeField] private Color borderColor = new(0.2f, 0.8f, 0.2f, 0.8f); + + private Texture2D _fillTexture; + private Texture2D _borderTexture; + + private void Awake() + { + _fillTexture = new Texture2D(1, 1); + _fillTexture.SetPixel(0, 0, Color.white); + _fillTexture.Apply(); + + _borderTexture = new Texture2D(1, 1); + _borderTexture.SetPixel(0, 0, Color.white); + _borderTexture.Apply(); + } + + private void OnGUI() + { + var sel = SelectionManager.Instance; + if (sel == null || !sel.IsDragging) return; + + var start = sel.DragStart; + var end = sel.DragEnd; + + // Convert to GUI coordinates (Y is flipped) + start.y = Screen.height - start.y; + end.y = Screen.height - end.y; + + var rect = new Rect( + Mathf.Min(start.x, end.x), + Mathf.Min(start.y, end.y), + Mathf.Abs(end.x - start.x), + Mathf.Abs(end.y - start.y) + ); + + // Draw fill + GUI.color = boxColor; + GUI.DrawTexture(rect, _fillTexture); + + // Draw border + GUI.color = borderColor; + float b = 2f; + GUI.DrawTexture(new Rect(rect.x, rect.y, rect.width, b), _borderTexture); + GUI.DrawTexture(new Rect(rect.x, rect.yMax - b, rect.width, b), _borderTexture); + GUI.DrawTexture(new Rect(rect.x, rect.y, b, rect.height), _borderTexture); + GUI.DrawTexture(new Rect(rect.xMax - b, rect.y, b, rect.height), _borderTexture); + + GUI.color = Color.white; + } + + private void OnDestroy() + { + if (_fillTexture != null) Destroy(_fillTexture); + if (_borderTexture != null) Destroy(_borderTexture); + } + } +} diff --git a/Assets/Scripts/Hybrid/SelectionBoxUI.cs.meta b/Assets/Scripts/Hybrid/SelectionBoxUI.cs.meta new file mode 100644 index 0000000..1c92cd4 --- /dev/null +++ b/Assets/Scripts/Hybrid/SelectionBoxUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b197ee7ddd817294f9cd10d38d44efb9 \ No newline at end of file diff --git a/Assets/Scripts/Hybrid/SelectionManager.cs b/Assets/Scripts/Hybrid/SelectionManager.cs new file mode 100644 index 0000000..8481dcf --- /dev/null +++ b/Assets/Scripts/Hybrid/SelectionManager.cs @@ -0,0 +1,243 @@ +using System.Collections.Generic; +using Unity.Entities; +using Unity.Mathematics; +using Unity.Physics; +using Unity.Transforms; +using UnityEngine; +using EE2Clone.Components; + +namespace EE2Clone.Hybrid +{ + /// + /// Handles click-select, shift-add, and box-drag selection of entities. + /// Client-side only. Adds/removes SelectedTag on ECS entities. + /// + public class SelectionManager : MonoBehaviour + { + public static SelectionManager Instance { get; private set; } + + [Header("Settings")] + [SerializeField] private LayerMask selectableLayers = ~0; + [SerializeField] private float dragThreshold = 5f; + + public List SelectedEntities { get; } = new(); + + // Control groups: index 0-9 + private readonly List[] _controlGroups = new List[10]; + + // Box selection state + private bool _isDragging; + private Vector2 _dragStart; + + // Exposed for SelectionBoxUI + public bool IsDragging => _isDragging; + public Vector2 DragStart => _dragStart; + public Vector2 DragEnd { get; private set; } + + private Camera _mainCamera; + + private void Awake() + { + if (Instance != null && Instance != this) { Destroy(gameObject); return; } + Instance = this; + + for (int i = 0; i < 10; i++) + _controlGroups[i] = new List(); + } + + private void Start() + { + _mainCamera = Camera.main; + } + + private void Update() + { + var input = RTSInputActions.Instance; + if (input == null || _mainCamera == null) return; + + HandleSelection(input); + HandleControlGroups(input); + } + + private void HandleSelection(RTSInputActions input) + { + if (input.LeftClickPressed) + { + _dragStart = input.MousePosition; + _isDragging = false; + } + + if (input.LeftClickHeld) + { + DragEnd = input.MousePosition; + if (Vector2.Distance(_dragStart, DragEnd) > dragThreshold) + _isDragging = true; + } + + if (input.LeftClickReleased) + { + DragEnd = input.MousePosition; + + if (_isDragging) + BoxSelect(input.ShiftHeld); + else + ClickSelect(input.MousePosition, input.ShiftHeld); + + _isDragging = false; + } + } + + private void ClickSelect(Vector2 screenPos, bool additive) + { + if (!additive) + ClearSelection(); + + var ray = _mainCamera.ScreenPointToRay(new Vector3(screenPos.x, screenPos.y, 0)); + + // Raycast using Unity Physics (ECS) + var world = World.DefaultGameObjectInjectionWorld; + if (world == null || !world.IsCreated) return; + + var physicsWorld = world.EntityManager + .CreateEntityQuery(typeof(PhysicsWorldSingleton)) + .GetSingleton(); + + var rayInput = new RaycastInput + { + Start = ray.origin, + End = ray.origin + ray.direction * 500f, + Filter = new CollisionFilter + { + BelongsTo = ~0u, + CollidesWith = ~0u, + GroupIndex = 0 + } + }; + + if (physicsWorld.CastRay(rayInput, out var hit)) + { + var em = world.EntityManager; + var entity = physicsWorld.Bodies[hit.RigidBodyIndex].Entity; + + if (em.HasComponent(entity) || em.HasComponent(entity)) + { + if (additive && SelectedEntities.Contains(entity)) + { + SelectedEntities.Remove(entity); + em.RemoveComponent(entity); + } + else if (!SelectedEntities.Contains(entity)) + { + SelectedEntities.Add(entity); + em.AddComponent(entity); + } + } + } + } + + private void BoxSelect(bool additive) + { + if (!additive) + ClearSelection(); + + var world = World.DefaultGameObjectInjectionWorld; + if (world == null || !world.IsCreated) return; + + var em = world.EntityManager; + + var min = Vector2.Min(_dragStart, DragEnd); + var max = Vector2.Max(_dragStart, DragEnd); + + // Query all unit entities and check if their screen position is within the box + var query = em.CreateEntityQuery(typeof(UnitTag), typeof(LocalTransform)); + var entities = query.ToEntityArray(Unity.Collections.Allocator.Temp); + var transforms = query.ToComponentDataArray(Unity.Collections.Allocator.Temp); + + for (int i = 0; i < entities.Length; i++) + { + var screenPos = _mainCamera.WorldToScreenPoint(transforms[i].Position); + if (screenPos.z > 0 && + screenPos.x >= min.x && screenPos.x <= max.x && + screenPos.y >= min.y && screenPos.y <= max.y) + { + var entity = entities[i]; + if (!SelectedEntities.Contains(entity)) + { + SelectedEntities.Add(entity); + if (!em.HasComponent(entity)) + em.AddComponent(entity); + } + } + } + + entities.Dispose(); + transforms.Dispose(); + } + + public void ClearSelection() + { + var world = World.DefaultGameObjectInjectionWorld; + if (world != null && world.IsCreated) + { + var em = world.EntityManager; + foreach (var entity in SelectedEntities) + { + if (em.Exists(entity) && em.HasComponent(entity)) + em.RemoveComponent(entity); + } + } + SelectedEntities.Clear(); + } + + private void HandleControlGroups(RTSInputActions input) + { + int group = input.ControlGroupPressed; + if (group < 0) return; + + if (input.CtrlHeld) + { + // Assign current selection to control group + _controlGroups[group].Clear(); + _controlGroups[group].AddRange(SelectedEntities); + } + else + { + // Recall control group + ClearSelection(); + var world = World.DefaultGameObjectInjectionWorld; + if (world == null || !world.IsCreated) return; + var em = world.EntityManager; + + foreach (var entity in _controlGroups[group]) + { + if (em.Exists(entity)) + { + SelectedEntities.Add(entity); + if (!em.HasComponent(entity)) + em.AddComponent(entity); + } + } + } + } + + public Entity[] GetSelectedEntitiesOfType() where T : unmanaged, IComponentData + { + var world = World.DefaultGameObjectInjectionWorld; + if (world == null || !world.IsCreated) return System.Array.Empty(); + + var em = world.EntityManager; + var result = new List(); + foreach (var entity in SelectedEntities) + { + if (em.Exists(entity) && em.HasComponent(entity)) + result.Add(entity); + } + return result.ToArray(); + } + + private void OnDestroy() + { + if (Instance == this) Instance = null; + } + } +} diff --git a/Assets/Scripts/Hybrid/SelectionManager.cs.meta b/Assets/Scripts/Hybrid/SelectionManager.cs.meta new file mode 100644 index 0000000..dd71792 --- /dev/null +++ b/Assets/Scripts/Hybrid/SelectionManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 666bdebfedde0ad42b1fcc77e0e27843 \ No newline at end of file diff --git a/Assets/Scripts/NetCode.meta b/Assets/Scripts/NetCode.meta new file mode 100644 index 0000000..2e64b08 --- /dev/null +++ b/Assets/Scripts/NetCode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e8c2c9ff1dcf374ca5d87a59403b894 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs b/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs new file mode 100644 index 0000000..c941b9e --- /dev/null +++ b/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs @@ -0,0 +1,32 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.NetCode; + +namespace EE2Clone.NetCode +{ + /// + /// Server-side system that monitors for disconnected players and logs events. + /// + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct ConnectionMonitorSystem : ISystem + { + public void OnCreate(ref SystemState state) + { + state.RequireForUpdate(); + } + + public void OnUpdate(ref SystemState state) + { + // Count active connections for logging/debugging + int connectionCount = 0; + foreach (var _ in SystemAPI.Query>() + .WithAll()) + { + connectionCount++; + } + + // Future: detect disconnections and handle AI takeover + } + } +} diff --git a/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs.meta b/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs.meta new file mode 100644 index 0000000..b0b87d9 --- /dev/null +++ b/Assets/Scripts/NetCode/ConnectionMonitorSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fb810a5f20d826844a1063b2a900fa0a \ No newline at end of file diff --git a/Assets/Scripts/NetCode/GameBootstrap.cs b/Assets/Scripts/NetCode/GameBootstrap.cs new file mode 100644 index 0000000..70a95b4 --- /dev/null +++ b/Assets/Scripts/NetCode/GameBootstrap.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Unity.NetCode; + +namespace EE2Clone.NetCode +{ + /// + /// Custom bootstrap that prevents automatic world creation. + /// We manually create client/server worlds when the player chooses to host or connect. + /// + [UnityEngine.Scripting.Preserve] + public class GameBootstrap : ClientServerBootstrap + { + public override bool Initialize(string defaultWorldName) + { + // Create only the default (local) world on startup. + // Client and server worlds are created manually when the user + // starts hosting or joins a game. + AutoConnectPort = 0; + CreateDefaultClientServerWorlds(); + return true; + } + } +} diff --git a/Assets/Scripts/NetCode/GameBootstrap.cs.meta b/Assets/Scripts/NetCode/GameBootstrap.cs.meta new file mode 100644 index 0000000..46ffc55 --- /dev/null +++ b/Assets/Scripts/NetCode/GameBootstrap.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 278d5b5c203631c42a5f1eb814815e6c \ No newline at end of file diff --git a/Assets/Scripts/NetCode/GoInGameClientSystem.cs b/Assets/Scripts/NetCode/GoInGameClientSystem.cs new file mode 100644 index 0000000..916e651 --- /dev/null +++ b/Assets/Scripts/NetCode/GoInGameClientSystem.cs @@ -0,0 +1,52 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.NetCode; + +namespace EE2Clone.NetCode +{ + /// + /// RPC sent by the client to request going in-game. + /// + public struct GoInGameRequest : IRpcCommand + { + } + + /// + /// Client-side system: when a connection is established and the streaming is done, + /// send a GoInGameRequest RPC to the server. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ClientSimulation | WorldSystemFilterFlags.ThinClientSimulation)] + public partial struct GoInGameClientSystem : ISystem + { + [BurstCompile] + public void OnCreate(ref SystemState state) + { + state.RequireForUpdate(); + } + + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (networkId, entity) in + SystemAPI.Query>() + .WithNone() + .WithEntityAccess()) + { + ecb.AddComponent(entity); + + var requestEntity = ecb.CreateEntity(); + ecb.AddComponent(requestEntity, new GoInGameRequest()); + ecb.AddComponent(requestEntity, new SendRpcCommandRequest { TargetConnection = entity }); + + UnityEngine.Debug.Log($"[Client] Sending GoInGame request (NetworkId={networkId.ValueRO.Value})"); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } +} diff --git a/Assets/Scripts/NetCode/GoInGameClientSystem.cs.meta b/Assets/Scripts/NetCode/GoInGameClientSystem.cs.meta new file mode 100644 index 0000000..3e33747 --- /dev/null +++ b/Assets/Scripts/NetCode/GoInGameClientSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d2bae91c6664cbd4796e97de29d6b1a7 \ No newline at end of file diff --git a/Assets/Scripts/NetCode/GoInGameServerSystem.cs b/Assets/Scripts/NetCode/GoInGameServerSystem.cs new file mode 100644 index 0000000..5e6dcba --- /dev/null +++ b/Assets/Scripts/NetCode/GoInGameServerSystem.cs @@ -0,0 +1,77 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.NetCode +{ + /// + /// Server-side system: processes GoInGameRequest RPCs, marks connections as in-game, + /// and creates a PlayerState entity for each connecting player. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct GoInGameServerSystem : ISystem + { + private int _nextPlayerId; + + [BurstCompile] + public void OnCreate(ref SystemState state) + { + state.RequireForUpdate(); + _nextPlayerId = 1; + } + + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (request, requestSource, requestEntity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var connectionEntity = requestSource.ValueRO.SourceConnection; + + // Mark the connection as in-game + ecb.AddComponent(connectionEntity); + + // Get the NetworkId for this connection + var networkId = state.EntityManager.GetComponentData(connectionEntity); + + // Create a PlayerState entity for this player + var playerEntity = ecb.CreateEntity(); + ecb.AddComponent(playerEntity, new PlayerStateComponent + { + PlayerId = _nextPlayerId, + CurrentEpoch = Epoch.StoneAge, + PopulationCurrent = 0, + PopulationMax = GameConstants.StartingPopulationCap, + CivilizationId = 0, + IsAlive = true + }); + ecb.AddComponent(playerEntity, new PlayerResourcesComponent + { + Food = 200, + Wood = 200, + Stone = 100, + Gold = 100, + Tin = 0 + }); + ecb.AddComponent(playerEntity, new GhostOwner { NetworkId = networkId.Value }); + + UnityEngine.Debug.Log($"[Server] Player {_nextPlayerId} (NetworkId={networkId.Value}) entered game"); + + _nextPlayerId++; + + // Destroy the request entity + ecb.DestroyEntity(requestEntity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } +} diff --git a/Assets/Scripts/NetCode/GoInGameServerSystem.cs.meta b/Assets/Scripts/NetCode/GoInGameServerSystem.cs.meta new file mode 100644 index 0000000..058db5f --- /dev/null +++ b/Assets/Scripts/NetCode/GoInGameServerSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1c5c4cafaa538c64da4f890ef8658f40 \ No newline at end of file diff --git a/Assets/Scripts/NetCode/RpcCommands.cs b/Assets/Scripts/NetCode/RpcCommands.cs new file mode 100644 index 0000000..e7b6a7d --- /dev/null +++ b/Assets/Scripts/NetCode/RpcCommands.cs @@ -0,0 +1,95 @@ +using Unity.Entities; +using Unity.Mathematics; +using Unity.NetCode; +using EE2Clone.Core; + +namespace EE2Clone.NetCode +{ + /// + /// Client requests to move selected units to a position. + /// + public struct MoveCommandRpc : IRpcCommand + { + public Entity UnitEntity; + public float3 TargetPosition; + } + + /// + /// Client requests to attack a target with selected units. + /// + public struct AttackCommandRpc : IRpcCommand + { + public Entity AttackerEntity; + public Entity TargetEntity; + } + + /// + /// Client requests to place a building. + /// + public struct PlaceBuildingRpc : IRpcCommand + { + public BuildingType Type; + public float3 Position; + public quaternion Rotation; + } + + /// + /// Client requests to set a rally point on a building. + /// + public struct SetRallyPointRpc : IRpcCommand + { + public Entity BuildingEntity; + public float3 Position; + } + + /// + /// Client requests to queue unit production in a building. + /// + public struct QueueUnitProductionRpc : IRpcCommand + { + public Entity BuildingEntity; + public int UnitDataId; + } + + /// + /// Client requests to gather from a resource node. + /// + public struct GatherCommandRpc : IRpcCommand + { + public Entity CitizenEntity; + public Entity ResourceNodeEntity; + } + + /// + /// Client requests to assign citizens to build/repair a building. + /// + public struct BuildRepairCommandRpc : IRpcCommand + { + public Entity CitizenEntity; + public Entity BuildingEntity; + } + + /// + /// Client requests to research a technology. + /// + public struct ResearchTechRpc : IRpcCommand + { + public Entity BuildingEntity; + public int TechId; + } + + /// + /// Client requests to advance to the next epoch. + /// + public struct EpochAdvanceRpc : IRpcCommand + { + } + + /// + /// Client requests to stop selected units. + /// + public struct StopCommandRpc : IRpcCommand + { + public Entity UnitEntity; + } +} diff --git a/Assets/Scripts/NetCode/RpcCommands.cs.meta b/Assets/Scripts/NetCode/RpcCommands.cs.meta new file mode 100644 index 0000000..dd893a6 --- /dev/null +++ b/Assets/Scripts/NetCode/RpcCommands.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 62f6a545bb8db214a97318bcba211f01 \ No newline at end of file diff --git a/Assets/Scripts/Systems.meta b/Assets/Scripts/Systems.meta new file mode 100644 index 0000000..9adab1d --- /dev/null +++ b/Assets/Scripts/Systems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53d2d11d9c714444cb6bc94d3154cb00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Systems/BuildingSystems.cs b/Assets/Scripts/Systems/BuildingSystems.cs new file mode 100644 index 0000000..ad0f703 --- /dev/null +++ b/Assets/Scripts/Systems/BuildingSystems.cs @@ -0,0 +1,197 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Mathematics; +using Unity.Transforms; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Systems +{ + /// + /// Server-side: processes PlaceBuildingRpc — validates and spawns building entities. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct PlaceBuildingCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + // TODO: Validate resources, territory, collision + // TODO: Lookup building prefab entity from BuildingType + // TODO: Instantiate the prefab and place it + + // For now just log + UnityEngine.Debug.Log($"[Server] PlaceBuilding request: {cmd.ValueRO.Type} at {cmd.ValueRO.Position}"); + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side: processes BuildRepairCommandRpc — assigns citizens to build/repair buildings. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct BuildRepairCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var citizen = cmd.ValueRO.CitizenEntity; + var building = cmd.ValueRO.BuildingEntity; + + if (state.EntityManager.Exists(citizen) && state.EntityManager.Exists(building) && + state.EntityManager.HasComponent(citizen)) + { + state.EntityManager.SetComponentData(citizen, new BuildTarget { Target = building }); + state.EntityManager.SetComponentData(citizen, new CitizenStateComponent { Value = CitizenState.MovingToBuild }); + + var buildingPos = state.EntityManager.GetComponentData(building).Position; + state.EntityManager.SetComponentData(citizen, new MoveTarget + { + Position = buildingPos, + IsActive = true + }); + } + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side: ticks construction progress for buildings with assigned citizens. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + [UpdateAfter(typeof(BuildRepairCommandSystem))] + public partial struct ConstructionSystem : ISystem + { + private float _timer; + + public void OnCreate(ref SystemState state) + { + _timer = 0f; + } + + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + float dt = SystemAPI.Time.DeltaTime; + _timer += dt; + if (_timer < GameConstants.ConstructionTickInterval) return; + _timer -= GameConstants.ConstructionTickInterval; + + var ecb = new EntityCommandBuffer(Allocator.Temp); + + // Count builders per building + // Simple approach: iterate citizens in Building state + foreach (var (citizenState, buildTarget, transform, moveTarget) in + SystemAPI.Query, RefRO, + RefRO, RefRO>() + .WithAll()) + { + if (citizenState.ValueRO.Value == CitizenState.MovingToBuild && !moveTarget.ValueRO.IsActive) + { + citizenState.ValueRW.Value = CitizenState.Building; + } + + if (citizenState.ValueRO.Value != CitizenState.Building) continue; + + var buildingEntity = buildTarget.ValueRO.Target; + if (buildingEntity == Entity.Null || !state.EntityManager.Exists(buildingEntity)) continue; + + if (!state.EntityManager.HasComponent(buildingEntity)) continue; + + var progress = state.EntityManager.GetComponentData(buildingEntity); + float increment = GameConstants.ConstructionTickInterval / progress.BuildTime; + progress.Progress = math.min(progress.Progress + increment, 1f); + state.EntityManager.SetComponentData(buildingEntity, progress); + + // Complete construction + if (progress.Progress >= 1f) + { + ecb.RemoveComponent(buildingEntity); + ecb.RemoveComponent(buildingEntity); + + // Set health to max + var health = state.EntityManager.GetComponentData(buildingEntity); + health.Current = health.Max; + ecb.SetComponent(buildingEntity, health); + + // Citizen becomes idle + citizenState.ValueRW.Value = CitizenState.Idle; + } + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side: processes production queues on buildings and spawns units. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct ProductionSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + float dt = SystemAPI.Time.DeltaTime; + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (productionQueue, rallyPoint, owner, transform, entity) in + SystemAPI.Query, RefRO, + RefRO, RefRO>() + .WithAll() + .WithNone() + .WithEntityAccess()) + { + if (productionQueue.Length == 0) continue; + + var front = productionQueue[0]; + front.TimeRemaining -= dt; + + if (front.TimeRemaining <= 0) + { + // TODO: Instantiate unit prefab based on front.UnitDataId + // For now just log + UnityEngine.Debug.Log($"[Server] Unit produced: DataId={front.UnitDataId} at {rallyPoint.ValueRO.Position}"); + + productionQueue.RemoveAt(0); + } + else + { + productionQueue[0] = front; + } + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } +} diff --git a/Assets/Scripts/Systems/BuildingSystems.cs.meta b/Assets/Scripts/Systems/BuildingSystems.cs.meta new file mode 100644 index 0000000..67ae670 --- /dev/null +++ b/Assets/Scripts/Systems/BuildingSystems.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e4a7a8d853e94f941b762acafa1de53d \ No newline at end of file diff --git a/Assets/Scripts/Systems/CombatSystems.cs b/Assets/Scripts/Systems/CombatSystems.cs new file mode 100644 index 0000000..ce02931 --- /dev/null +++ b/Assets/Scripts/Systems/CombatSystems.cs @@ -0,0 +1,207 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Mathematics; +using Unity.Transforms; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Systems +{ + /// + /// Server-side: processes AttackCommandRpc — sets combat target on units. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct AttackCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var attacker = cmd.ValueRO.AttackerEntity; + var target = cmd.ValueRO.TargetEntity; + + if (state.EntityManager.Exists(attacker) && state.EntityManager.Exists(target) && + state.EntityManager.HasComponent(attacker)) + { + state.EntityManager.SetComponentData(attacker, new CombatTarget { Target = target }); + state.EntityManager.SetComponentData(attacker, new UnitStateComponent { Value = UnitState.Attacking }); + } + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side: units with a CombatTarget move toward target, then deal damage when in range. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + [UpdateAfter(typeof(AttackCommandSystem))] + public partial struct CombatSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + float dt = SystemAPI.Time.DeltaTime; + + foreach (var (transform, attack, combatTarget, speed, unitState, unitClass, entity) in + SystemAPI.Query, RefRW, RefRW, + RefRO, RefRW, RefRO>() + .WithAll() + .WithEntityAccess()) + { + // Tick cooldown + if (attack.ValueRO.CooldownRemaining > 0) + attack.ValueRW.CooldownRemaining -= dt; + + var target = combatTarget.ValueRO.Target; + if (target == Entity.Null || !state.EntityManager.Exists(target)) + { + // Clear invalid target + if (target != Entity.Null) + { + combatTarget.ValueRW.Target = Entity.Null; + if (unitState.ValueRO.Value == UnitState.Attacking) + unitState.ValueRW.Value = UnitState.Idle; + } + continue; + } + + if (!state.EntityManager.HasComponent(target)) + { + combatTarget.ValueRW.Target = Entity.Null; + unitState.ValueRW.Value = UnitState.Idle; + continue; + } + + var targetTransform = state.EntityManager.GetComponentData(target); + float3 toTarget = targetTransform.Position - transform.ValueRO.Position; + toTarget.y = 0; + float distance = math.length(toTarget); + + if (distance > attack.ValueRO.Range) + { + // Move toward target + float3 moveDir = math.normalize(toTarget); + float moveAmount = math.min(speed.ValueRO.Value * dt, distance - attack.ValueRO.Range * 0.9f); + transform.ValueRW.Position += moveDir * moveAmount; + transform.ValueRW.Rotation = quaternion.LookRotationSafe(moveDir, math.up()); + } + else if (attack.ValueRO.CooldownRemaining <= 0) + { + // Attack + float damage = attack.ValueRO.Damage; + + // Apply counter bonus + if (state.EntityManager.HasComponent(target)) + { + var targetClass = state.EntityManager.GetComponentData(target).Value; + float counterMult = GetCounterMultiplier(unitClass.ValueRO.Value, targetClass); + damage *= counterMult; + } + + // Apply armor + if (state.EntityManager.HasComponent(target)) + { + float armor = state.EntityManager.GetComponentData(target).Value; + damage = math.max(damage - armor, GameConstants.MinDamage); + } + + var targetHealth = state.EntityManager.GetComponentData(target); + targetHealth.Current -= damage; + state.EntityManager.SetComponentData(target, targetHealth); + + attack.ValueRW.CooldownRemaining = attack.ValueRO.AttackCooldown; + + // Face target + if (distance > 0.01f) + transform.ValueRW.Rotation = quaternion.LookRotationSafe(math.normalize(toTarget), math.up()); + } + } + } + + private static float GetCounterMultiplier(UnitClass attacker, UnitClass target) + { + // Rock-paper-scissors: Infantry > Ranged > Cavalry > Infantry + if (attacker == UnitClass.Infantry && target == UnitClass.Ranged) return GameConstants.CounterBonusStrong; + if (attacker == UnitClass.Ranged && target == UnitClass.Cavalry) return GameConstants.CounterBonusStrong; + if (attacker == UnitClass.Cavalry && target == UnitClass.Infantry) return GameConstants.CounterBonusStrong; + + if (attacker == UnitClass.Infantry && target == UnitClass.Cavalry) return GameConstants.CounterBonusWeak; + if (attacker == UnitClass.Ranged && target == UnitClass.Infantry) return GameConstants.CounterBonusWeak; + if (attacker == UnitClass.Cavalry && target == UnitClass.Ranged) return GameConstants.CounterBonusWeak; + + // Siege bonus vs buildings (handled via BuildingTag check in caller if needed) + return GameConstants.CounterBonusNeutral; + } + } + + /// + /// Server-side: destroys entities that have 0 or less HP after a brief delay. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + [UpdateAfter(typeof(CombatSystem))] + public partial struct DeathSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + float dt = SystemAPI.Time.DeltaTime; + + // Tag entities with <=0 HP for destruction + foreach (var (health, entity) in + SystemAPI.Query>() + .WithNone() + .WithEntityAccess()) + { + if (health.ValueRO.Current <= 0) + { + ecb.AddComponent(entity, new DeathTimer { TimeRemaining = 1.0f }); + + if (state.EntityManager.HasComponent(entity)) + { + ecb.SetComponent(entity, new UnitStateComponent { Value = UnitState.Dying }); + } + } + } + + // Tick death timers + foreach (var (deathTimer, entity) in + SystemAPI.Query>() + .WithNone() + .WithEntityAccess()) + { + deathTimer.ValueRW.TimeRemaining -= dt; + if (deathTimer.ValueRO.TimeRemaining <= 0) + { + ecb.AddComponent(entity); + } + } + + // Destroy tagged entities + foreach (var (tag, entity) in + SystemAPI.Query>() + .WithEntityAccess()) + { + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } +} diff --git a/Assets/Scripts/Systems/CombatSystems.cs.meta b/Assets/Scripts/Systems/CombatSystems.cs.meta new file mode 100644 index 0000000..54be820 --- /dev/null +++ b/Assets/Scripts/Systems/CombatSystems.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1163cc3a2970481429c3bd67549beb78 \ No newline at end of file diff --git a/Assets/Scripts/Systems/GatheringSystems.cs b/Assets/Scripts/Systems/GatheringSystems.cs new file mode 100644 index 0000000..33adf08 --- /dev/null +++ b/Assets/Scripts/Systems/GatheringSystems.cs @@ -0,0 +1,172 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Mathematics; +using Unity.Transforms; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Systems +{ + /// + /// Server-side: processes GatherCommandRpc — assigns a gather target to citizens. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct GatherCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var citizen = cmd.ValueRO.CitizenEntity; + var node = cmd.ValueRO.ResourceNodeEntity; + + if (state.EntityManager.Exists(citizen) && state.EntityManager.Exists(node) && + state.EntityManager.HasComponent(citizen) && + state.EntityManager.HasComponent(node)) + { + state.EntityManager.SetComponentData(citizen, new GatherTarget { Target = node }); + state.EntityManager.SetComponentData(citizen, new CitizenStateComponent { Value = CitizenState.MovingToGather }); + + // Set move target to the resource node's position + var nodePos = state.EntityManager.GetComponentData(node).Position; + state.EntityManager.SetComponentData(citizen, new MoveTarget + { + Position = nodePos, + IsActive = true + }); + } + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side: citizen gathering state machine. + /// Handles: MovingToGather → Gathering → MovingToDropoff → Depositing → repeat. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + [UpdateAfter(typeof(GatherCommandSystem))] + public partial struct GatheringSystem : ISystem + { + private float _gatherTimer; + + public void OnCreate(ref SystemState state) + { + _gatherTimer = 0f; + } + + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + float dt = SystemAPI.Time.DeltaTime; + _gatherTimer += dt; + bool gatherTick = _gatherTimer >= GameConstants.GatherTickInterval; + if (gatherTick) _gatherTimer -= GameConstants.GatherTickInterval; + + foreach (var (citizenState, gatherTarget, carried, transform, moveTarget, owner) in + SystemAPI.Query, RefRW, + RefRW, RefRO, RefRW, RefRO>() + .WithAll()) + { + switch (citizenState.ValueRO.Value) + { + case CitizenState.MovingToGather: + // Check if arrived (MoveTarget will be deactivated by movement system) + if (!moveTarget.ValueRO.IsActive) + { + citizenState.ValueRW.Value = CitizenState.Gathering; + } + break; + + case CitizenState.Gathering: + if (!gatherTick) break; + + var targetEntity = gatherTarget.ValueRO.Target; + if (targetEntity == Entity.Null || !state.EntityManager.Exists(targetEntity)) + { + citizenState.ValueRW.Value = CitizenState.Idle; + break; + } + + var node = state.EntityManager.GetComponentData(targetEntity); + if (node.RemainingAmount <= 0) + { + citizenState.ValueRW.Value = CitizenState.Idle; + gatherTarget.ValueRW.Target = Entity.Null; + break; + } + + // Gather one unit + int gatherAmount = math.min(1, node.RemainingAmount); + gatherAmount = math.min(gatherAmount, carried.ValueRO.MaxCarryCapacity - carried.ValueRO.Amount); + + if (gatherAmount > 0) + { + node.RemainingAmount -= gatherAmount; + state.EntityManager.SetComponentData(targetEntity, node); + + carried.ValueRW.Amount += gatherAmount; + carried.ValueRW.Type = node.Type; + } + + // If carrying capacity full, go to dropoff + if (carried.ValueRO.Amount >= carried.ValueRO.MaxCarryCapacity) + { + citizenState.ValueRW.Value = CitizenState.MovingToDropoff; + // TODO: Find nearest dropoff building and set as move target + // For now, move back toward origin as placeholder + moveTarget.ValueRW = new MoveTarget + { + Position = float3.zero, + IsActive = true + }; + } + break; + + case CitizenState.MovingToDropoff: + if (!moveTarget.ValueRO.IsActive) + { + citizenState.ValueRW.Value = CitizenState.Depositing; + } + break; + + case CitizenState.Depositing: + // Deposit resources into player economy + // TODO: Find PlayerResourcesComponent for this owner and add resources + carried.ValueRW.Amount = 0; + + // Go back to gather if the node still exists + if (gatherTarget.ValueRO.Target != Entity.Null && + state.EntityManager.Exists(gatherTarget.ValueRO.Target)) + { + var nodePos = state.EntityManager.GetComponentData(gatherTarget.ValueRO.Target).Position; + moveTarget.ValueRW = new MoveTarget + { + Position = nodePos, + IsActive = true + }; + citizenState.ValueRW.Value = CitizenState.MovingToGather; + } + else + { + citizenState.ValueRW.Value = CitizenState.Idle; + } + break; + } + } + } + } +} diff --git a/Assets/Scripts/Systems/GatheringSystems.cs.meta b/Assets/Scripts/Systems/GatheringSystems.cs.meta new file mode 100644 index 0000000..ae85436 --- /dev/null +++ b/Assets/Scripts/Systems/GatheringSystems.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 35e43773511035f4bb29174417932b52 \ No newline at end of file diff --git a/Assets/Scripts/Systems/MovementSystems.cs b/Assets/Scripts/Systems/MovementSystems.cs new file mode 100644 index 0000000..5e58e79 --- /dev/null +++ b/Assets/Scripts/Systems/MovementSystems.cs @@ -0,0 +1,151 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.Mathematics; +using Unity.Transforms; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Systems +{ + /// + /// Server-side system that processes MoveCommandRpc and sets MoveTarget on units. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct MoveCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var unitEntity = cmd.ValueRO.UnitEntity; + if (state.EntityManager.Exists(unitEntity) && + state.EntityManager.HasComponent(unitEntity)) + { + state.EntityManager.SetComponentData(unitEntity, new MoveTarget + { + Position = cmd.ValueRO.TargetPosition, + IsActive = true + }); + + // Clear combat target when moving + if (state.EntityManager.HasComponent(unitEntity)) + { + state.EntityManager.SetComponentData(unitEntity, new CombatTarget + { + Target = Entity.Null + }); + } + + // Set state to Moving + if (state.EntityManager.HasComponent(unitEntity)) + { + state.EntityManager.SetComponentData(unitEntity, new UnitStateComponent + { + Value = UnitState.Moving + }); + } + } + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } + + /// + /// Server-side system that moves units toward their MoveTarget. + /// Placeholder for flow-field pathfinding — currently uses direct steering. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + [UpdateAfter(typeof(MoveCommandSystem))] + public partial struct UnitMovementSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + float dt = SystemAPI.Time.DeltaTime; + + foreach (var (transform, moveTarget, speed, unitState) in + SystemAPI.Query, RefRW, RefRO, RefRW>() + .WithAll()) + { + if (!moveTarget.ValueRO.IsActive) continue; + + float3 pos = transform.ValueRO.Position; + float3 target = moveTarget.ValueRO.Position; + float3 direction = target - pos; + direction.y = 0; // Keep on ground plane + + float distance = math.length(direction); + + if (distance < 0.5f) + { + // Arrived + moveTarget.ValueRW.IsActive = false; + if (unitState.ValueRO.Value == UnitState.Moving) + unitState.ValueRW.Value = UnitState.Idle; + } + else + { + float3 moveDir = math.normalize(direction); + float moveAmount = speed.ValueRO.Value * dt; + moveAmount = math.min(moveAmount, distance); + + var newPos = pos + moveDir * moveAmount; + transform.ValueRW.Position = newPos; + + // Face movement direction + transform.ValueRW.Rotation = quaternion.LookRotationSafe(moveDir, math.up()); + } + } + } + } + + /// + /// Server-side: processes StopCommandRpc — halts unit movement and clears targets. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct StopCommandSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + var ecb = new EntityCommandBuffer(Allocator.Temp); + + foreach (var (cmd, source, entity) in + SystemAPI.Query, RefRO>() + .WithEntityAccess()) + { + var unitEntity = cmd.ValueRO.UnitEntity; + if (state.EntityManager.Exists(unitEntity)) + { + if (state.EntityManager.HasComponent(unitEntity)) + state.EntityManager.SetComponentData(unitEntity, new MoveTarget { IsActive = false }); + + if (state.EntityManager.HasComponent(unitEntity)) + state.EntityManager.SetComponentData(unitEntity, new CombatTarget { Target = Entity.Null }); + + if (state.EntityManager.HasComponent(unitEntity)) + state.EntityManager.SetComponentData(unitEntity, new UnitStateComponent { Value = UnitState.Idle }); + } + + ecb.DestroyEntity(entity); + } + + ecb.Playback(state.EntityManager); + ecb.Dispose(); + } + } +} diff --git a/Assets/Scripts/Systems/MovementSystems.cs.meta b/Assets/Scripts/Systems/MovementSystems.cs.meta new file mode 100644 index 0000000..58e16f3 --- /dev/null +++ b/Assets/Scripts/Systems/MovementSystems.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ae6e692d140e8c24a9dd56224e814d43 \ No newline at end of file diff --git a/Assets/Scripts/Systems/PopulationSystem.cs b/Assets/Scripts/Systems/PopulationSystem.cs new file mode 100644 index 0000000..042330c --- /dev/null +++ b/Assets/Scripts/Systems/PopulationSystem.cs @@ -0,0 +1,67 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Entities; +using Unity.NetCode; +using EE2Clone.Components; +using EE2Clone.Core; + +namespace EE2Clone.Systems +{ + /// + /// Server-side: sums population-providing buildings per player and updates PopulationMax. + /// + [BurstCompile] + [WorldSystemFilter(WorldSystemFilterFlags.ServerSimulation)] + public partial struct PopulationSystem : ISystem + { + [BurstCompile] + public void OnUpdate(ref SystemState state) + { + // Build a map of playerId → total pop capacity from buildings + var popCapMap = new NativeHashMap(GameConstants.MaxPlayers, Allocator.Temp); + + foreach (var (pop, owner) in + SystemAPI.Query, RefRO>() + .WithAll() + .WithNone()) + { + int playerId = owner.ValueRO.PlayerId; + if (popCapMap.TryGetValue(playerId, out int current)) + popCapMap[playerId] = current + pop.ValueRO.Amount; + else + popCapMap[playerId] = GameConstants.StartingPopulationCap + pop.ValueRO.Amount; + } + + // Count current population per player (units) + var popCurrentMap = new NativeHashMap(GameConstants.MaxPlayers, Allocator.Temp); + + foreach (var owner in SystemAPI.Query>().WithAll()) + { + int playerId = owner.ValueRO.PlayerId; + if (popCurrentMap.TryGetValue(playerId, out int current)) + popCurrentMap[playerId] = current + 1; + else + popCurrentMap[playerId] = 1; + } + + // Update PlayerStateComponent + foreach (var playerState in SystemAPI.Query>()) + { + int pid = playerState.ValueRO.PlayerId; + + if (popCapMap.TryGetValue(pid, out int cap)) + playerState.ValueRW.PopulationMax = System.Math.Min(cap, GameConstants.MaxPopulationCap); + else + playerState.ValueRW.PopulationMax = GameConstants.StartingPopulationCap; + + if (popCurrentMap.TryGetValue(pid, out int current)) + playerState.ValueRW.PopulationCurrent = current; + else + playerState.ValueRW.PopulationCurrent = 0; + } + + popCapMap.Dispose(); + popCurrentMap.Dispose(); + } + } +} diff --git a/Assets/Scripts/Systems/PopulationSystem.cs.meta b/Assets/Scripts/Systems/PopulationSystem.cs.meta new file mode 100644 index 0000000..87ae56d --- /dev/null +++ b/Assets/Scripts/Systems/PopulationSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e2ca22d7e5c3be04fb7f4d58ea50c36b \ No newline at end of file diff --git a/Assets/Settings.meta b/Assets/Settings.meta new file mode 100644 index 0000000..39b94dd --- /dev/null +++ b/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 709f11a7f3c4041caa4ef136ea32d874 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/DefaultVolumeProfile.asset b/Assets/Settings/DefaultVolumeProfile.asset new file mode 100644 index 0000000..6fb1822 --- /dev/null +++ b/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: + 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: + 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: + 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: + 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: + 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: + 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: + 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: + 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 diff --git a/Assets/Settings/DefaultVolumeProfile.asset.meta b/Assets/Settings/DefaultVolumeProfile.asset.meta new file mode 100644 index 0000000..53b314a --- /dev/null +++ b/Assets/Settings/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab09877e2e707104187f6f83e2f62510 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Mobile_RPAsset.asset b/Assets/Settings/Mobile_RPAsset.asset new file mode 100644 index 0000000..fedee07 --- /dev/null +++ b/Assets/Settings/Mobile_RPAsset.asset @@ -0,0 +1,143 @@ +%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: 13 + k_AssetPreviousVersion: 13 + 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: 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: 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_ReflectionProbeAtlas: 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_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 1 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 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_PrefilterAlphaOutput: 0 + 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_PrefilterScreenSpaceIrradiance: 0 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterBicubicLightmapSampling: 0 + m_PrefilterReflectionProbeRotation: 0 + m_PrefilterReflectionProbeBlending: 0 + m_PrefilterReflectionProbeBoxProjection: 0 + m_PrefilterReflectionProbeAtlas: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/Assets/Settings/Mobile_RPAsset.asset.meta b/Assets/Settings/Mobile_RPAsset.asset.meta new file mode 100644 index 0000000..3660d15 --- /dev/null +++ b/Assets/Settings/Mobile_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e6cbd92db86f4b18aec3ed561671858 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Mobile_Renderer.asset b/Assets/Settings/Mobile_Renderer.asset new file mode 100644 index 0000000..ea246b2 --- /dev/null +++ b/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: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 0 diff --git a/Assets/Settings/Mobile_Renderer.asset.meta b/Assets/Settings/Mobile_Renderer.asset.meta new file mode 100644 index 0000000..a3588b1 --- /dev/null +++ b/Assets/Settings/Mobile_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65bc7dbf4170f435aa868c779acfb082 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/PC_RPAsset.asset b/Assets/Settings/PC_RPAsset.asset new file mode 100644 index 0000000..9b2b046 --- /dev/null +++ b/Assets/Settings/PC_RPAsset.asset @@ -0,0 +1,143 @@ +%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: 13 + k_AssetPreviousVersion: 13 + 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_ReflectionProbeAtlas: 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_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 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_PrefilterAlphaOutput: 0 + 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_PrefilterScreenSpaceIrradiance: 0 + m_PrefilterNativeRenderPass: 1 + m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterBicubicLightmapSampling: 0 + m_PrefilterReflectionProbeRotation: 0 + m_PrefilterReflectionProbeBlending: 0 + m_PrefilterReflectionProbeBoxProjection: 0 + m_PrefilterReflectionProbeAtlas: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} diff --git a/Assets/Settings/PC_RPAsset.asset.meta b/Assets/Settings/PC_RPAsset.asset.meta new file mode 100644 index 0000000..e286b2f --- /dev/null +++ b/Assets/Settings/PC_RPAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b83569d67af61e458304325a23e5dfd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/PC_Renderer.asset b/Assets/Settings/PC_Renderer.asset new file mode 100644 index 0000000..475b02e --- /dev/null +++ b/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} diff --git a/Assets/Settings/PC_Renderer.asset.meta b/Assets/Settings/PC_Renderer.asset.meta new file mode 100644 index 0000000..ddae6a5 --- /dev/null +++ b/Assets/Settings/PC_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f288ae1f4751b564a96ac7587541f7a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/RTSInputActions.inputactions b/Assets/Settings/RTSInputActions.inputactions new file mode 100644 index 0000000..aa7f13a --- /dev/null +++ b/Assets/Settings/RTSInputActions.inputactions @@ -0,0 +1,414 @@ +{ + "name": "RTSInputActions", + "maps": [ + { + "name": "RTS", + "id": "a1b2c3d4-1234-5678-9abc-def012345678", + "actions": [ + { + "name": "CameraPan", + "type": "Value", + "id": "10000001-0000-0000-0000-000000000001", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "CameraZoom", + "type": "Value", + "id": "10000001-0000-0000-0000-000000000002", + "expectedControlType": "Axis", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "CameraRotate", + "type": "Value", + "id": "10000001-0000-0000-0000-000000000003", + "expectedControlType": "Axis", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "LeftClick", + "type": "Button", + "id": "10000001-0000-0000-0000-000000000004", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "RightClick", + "type": "Button", + "id": "10000001-0000-0000-0000-000000000005", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "MousePosition", + "type": "Value", + "id": "10000001-0000-0000-0000-000000000006", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Shift", + "type": "Button", + "id": "10000001-0000-0000-0000-000000000007", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Ctrl", + "type": "Button", + "id": "10000001-0000-0000-0000-000000000008", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "AttackMove", + "type": "Button", + "id": "10000001-0000-0000-0000-000000000009", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Patrol", + "type": "Button", + "id": "10000001-0000-0000-0000-00000000000a", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Stop", + "type": "Button", + "id": "10000001-0000-0000-0000-00000000000b", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, + { + "name": "Delete", + "type": "Button", + "id": "10000001-0000-0000-0000-00000000000c", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + } + ], + "bindings": [ + { + "name": "WASD", + "id": "20000001-0000-0000-0000-000000000001", + "path": "", + "interactions": "", + "processors": "", + "groups": "", + "action": "CameraPan", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "20000001-0000-0000-0000-000000000002", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "20000001-0000-0000-0000-000000000003", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "20000001-0000-0000-0000-000000000004", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "20000001-0000-0000-0000-000000000005", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "ArrowKeys", + "id": "20000001-0000-0000-0000-000000000006", + "path": "", + "interactions": "", + "processors": "", + "groups": "", + "action": "CameraPan", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "20000001-0000-0000-0000-000000000007", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "20000001-0000-0000-0000-000000000008", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "20000001-0000-0000-0000-000000000009", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "20000001-0000-0000-0000-00000000000a", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraPan", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "20000001-0000-0000-0000-00000000000b", + "path": "/scroll/y", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraZoom", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "QE", + "id": "20000001-0000-0000-0000-00000000000c", + "path": "", + "interactions": "", + "processors": "", + "groups": "", + "action": "CameraRotate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "negative", + "id": "20000001-0000-0000-0000-00000000000d", + "path": "/q", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraRotate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "positive", + "id": "20000001-0000-0000-0000-00000000000e", + "path": "/e", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "CameraRotate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "20000001-0000-0000-0000-00000000000f", + "path": "/leftButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "LeftClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000010", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "RightClick", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000011", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "MousePosition", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000012", + "path": "/leftShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Shift", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000013", + "path": "/rightShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Shift", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000014", + "path": "/leftCtrl", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Ctrl", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000015", + "path": "/rightCtrl", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Ctrl", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000016", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "AttackMove", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000017", + "path": "/p", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Patrol", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000018", + "path": "/h", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Stop", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "20000001-0000-0000-0000-000000000019", + "path": "/delete", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Delete", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} diff --git a/Assets/Settings/RTSInputActions.inputactions.meta b/Assets/Settings/RTSInputActions.inputactions.meta new file mode 100644 index 0000000..a3a6fa2 --- /dev/null +++ b/Assets/Settings/RTSInputActions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9d588751af40a6c41b500b72d46cb85c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 0 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/Settings/SampleSceneProfile.asset b/Assets/Settings/SampleSceneProfile.asset new file mode 100644 index 0000000..c1b0f63 --- /dev/null +++ b/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 diff --git a/Assets/Settings/SampleSceneProfile.asset.meta b/Assets/Settings/SampleSceneProfile.asset.meta new file mode 100644 index 0000000..b82270c --- /dev/null +++ b/Assets/Settings/SampleSceneProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 10fc4df2da32a41aaa32d77bc913491c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..19fd73a --- /dev/null +++ b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,443 @@ +%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_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: 3879611001403080704 + - rid: 3879611001403080705 + - rid: 3879611001403080706 + - rid: 3879611001403080707 + - rid: 3879611001403080708 + - rid: 3879611001403080709 + - rid: 3879611001403080710 + - rid: 3879611001403080711 + - rid: 3879611001403080712 + - rid: 3879611001403080713 + - rid: 3879611001403080714 + - rid: 3879611001403080715 + - rid: 3879611001403080716 + - rid: 3879611001403080717 + - rid: 3879611001403080718 + m_RuntimeSettings: + m_List: [] + m_AssetVersion: 10 + 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: 3879611001403080704 + type: {class: RayTracingRenderPipelineResources, ns: UnityEngine.Rendering.UnifiedRayTracing, asm: Unity.UnifiedRayTracing.Runtime} + data: + m_Version: 1 + m_GeometryPoolKernels: {fileID: 7200000, guid: 98e3d58cae7210c4786f67f504c9e899, type: 3} + m_CopyBuffer: {fileID: 7200000, guid: 1b95b5dcf48d1914c9e1e7405c7660e3, type: 3} + m_CopyPositions: {fileID: 7200000, guid: 1ad53a96b58d3c3488dde4f14db1aaeb, type: 3} + m_BitHistogram: {fileID: 7200000, guid: 8670f7ce4b60cef43bed36148aa1b0a2, type: 3} + m_BlockReducePart: {fileID: 7200000, guid: 4e034cc8ea2635c4e9f063e5ddc7ea7a, type: 3} + m_BlockScan: {fileID: 7200000, guid: 4d6d5de35fa45ef4a92119397a045cc9, type: 3} + m_BuildHlbvh: {fileID: 7200000, guid: 2d70cd6be91bd7843a39a54b51c15b13, type: 3} + m_RestructureBvh: {fileID: 7200000, guid: 56641cb88dcb31a4398a4997ef7a7a8c, type: 3} + m_Scatter: {fileID: 7200000, guid: a2eaeefdac4637a44b734e85b7be9186, type: 3} + - rid: 3879611001403080705 + type: {class: PostProcessData/ShaderResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + stopNanPS: {fileID: 4800000, guid: 1121bb4e615ca3c48b214e79e841e823, type: 3} + subpixelMorphologicalAntialiasingPS: {fileID: 4800000, guid: 63eaba0ebfb82cc43bde059b4a8c65f6, type: 3} + gaussianDepthOfFieldPS: {fileID: 4800000, guid: 5e7134d6e63e0bc47a1dd2669cedb379, type: 3} + bokehDepthOfFieldPS: {fileID: 4800000, guid: 2aed67ad60045d54ba3a00c91e2d2631, type: 3} + cameraMotionBlurPS: {fileID: 4800000, guid: 1edcd131364091c46a17cbff0b1de97a, type: 3} + paniniProjectionPS: {fileID: 4800000, guid: a15b78cf8ca26ca4fb2090293153c62c, type: 3} + lutBuilderLdrPS: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3} + lutBuilderHdrPS: {fileID: 4800000, guid: ec9fec698a3456d4fb18cf8bacb7a2bc, type: 3} + bloomPS: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3} + temporalAntialiasingPS: {fileID: 4800000, guid: 9c70c1a35ff15f340b38ea84842358bf, type: 3} + LensFlareDataDrivenPS: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, type: 3} + LensFlareScreenSpacePS: {fileID: 4800000, guid: 701880fecb344ea4c9cd0db3407ab287, type: 3} + scalingSetupPS: {fileID: 4800000, guid: e8ee25143a34b8c4388709ea947055d1, type: 3} + easuPS: {fileID: 4800000, guid: 562b7ae4f629f144aa97780546fce7c6, type: 3} + uberPostPS: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3} + finalPostPassPS: {fileID: 4800000, guid: c49e63ed1bbcb334780a3bd19dfed403, type: 3} + m_ShaderResourcesVersion: 0 + - rid: 3879611001403080706 + type: {class: PostProcessData/TextureResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + blueNoise16LTex: + - {fileID: 2800000, guid: 81200413a40918d4d8702e94db29911c, type: 3} + - {fileID: 2800000, guid: d50c5e07c9911a74982bddf7f3075e7b, type: 3} + - {fileID: 2800000, guid: 1134690bf9216164dbc75050e35b7900, type: 3} + - {fileID: 2800000, guid: 7ce2118f74614a94aa8a0cdf2e6062c3, type: 3} + - {fileID: 2800000, guid: 2ca97df9d1801e84a8a8f2c53cb744f0, type: 3} + - {fileID: 2800000, guid: e63eef8f54aa9dc4da9a5ac094b503b5, type: 3} + - {fileID: 2800000, guid: 39451254daebd6d40b52899c1f1c0c1b, type: 3} + - {fileID: 2800000, guid: c94ad916058dff743b0f1c969ddbe660, type: 3} + - {fileID: 2800000, guid: ed5ea7ce59ca8ec4f9f14bf470a30f35, type: 3} + - {fileID: 2800000, guid: 071e954febf155243a6c81e48f452644, type: 3} + - {fileID: 2800000, guid: 96aaab9cc247d0b4c98132159688c1af, type: 3} + - {fileID: 2800000, guid: fc3fa8f108657e14486697c9a84ccfc5, type: 3} + - {fileID: 2800000, guid: bfed3e498947fcb4890b7f40f54d85b9, type: 3} + - {fileID: 2800000, guid: d512512f4af60a442ab3458489412954, type: 3} + - {fileID: 2800000, guid: 47a45908f6db0cb44a0d5e961143afec, type: 3} + - {fileID: 2800000, guid: 4dcc0502f8586f941b5c4a66717205e8, type: 3} + - {fileID: 2800000, guid: 9d92991794bb5864c8085468b97aa067, type: 3} + - {fileID: 2800000, guid: 14381521ff11cb74abe3fe65401c23be, type: 3} + - {fileID: 2800000, guid: d36f0fe53425e08499a2333cf423634c, type: 3} + - {fileID: 2800000, guid: d4044ea2490d63b43aa1765f8efbf8a9, type: 3} + - {fileID: 2800000, guid: c9bd74624d8070f429e3f46d161f9204, type: 3} + - {fileID: 2800000, guid: d5c9b274310e5524ebe32a4e4da3df1f, type: 3} + - {fileID: 2800000, guid: f69770e54f2823f43badf77916acad83, type: 3} + - {fileID: 2800000, guid: 10b6c6d22e73dea46a8ab36b6eebd629, type: 3} + - {fileID: 2800000, guid: a2ec5cbf5a9b64345ad3fab0912ddf7b, type: 3} + - {fileID: 2800000, guid: 1c3c6d69a645b804fa232004b96b7ad3, type: 3} + - {fileID: 2800000, guid: d18a24d7b4ed50f4387993566d9d3ae2, type: 3} + - {fileID: 2800000, guid: c989e1ed85cf7154caa922fec53e6af6, type: 3} + - {fileID: 2800000, guid: ff47e5a0f105eb34883b973e51f4db62, type: 3} + - {fileID: 2800000, guid: fa042edbfc40fbd4bad0ab9d505b1223, type: 3} + - {fileID: 2800000, guid: 896d9004736809c4fb5973b7c12eb8b9, type: 3} + - {fileID: 2800000, guid: 179f794063d2a66478e6e726f84a65bc, type: 3} + filmGrainTex: + - {fileID: 2800000, guid: 654c582f7f8a5a14dbd7d119cbde215d, type: 3} + - {fileID: 2800000, guid: dd77ffd079630404e879388999033049, type: 3} + - {fileID: 2800000, guid: 1097e90e1306e26439701489f391a6c0, type: 3} + - {fileID: 2800000, guid: f0b67500f7fad3b4c9f2b13e8f41ba6e, type: 3} + - {fileID: 2800000, guid: 9930fb4528622b34687b00bbe6883de7, type: 3} + - {fileID: 2800000, guid: bd9e8c758250ef449a4b4bfaad7a2133, type: 3} + - {fileID: 2800000, guid: 510a2f57334933e4a8dbabe4c30204e4, type: 3} + - {fileID: 2800000, guid: b4db8180660810945bf8d55ab44352ad, type: 3} + - {fileID: 2800000, guid: fd2fd78b392986e42a12df2177d3b89c, type: 3} + - {fileID: 2800000, guid: 5cdee82a77d13994f83b8fdabed7c301, type: 3} + smaaAreaTex: {fileID: 2800000, guid: d1f1048909d55cd4fa1126ab998f617e, type: 3} + smaaSearchTex: {fileID: 2800000, guid: 51eee22c2a633ef4aada830eed57c3fd, type: 3} + m_TexturesResourcesVersion: 0 + - rid: 3879611001403080707 + type: {class: OnTilePostProcessResource, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_UberPostShader: {fileID: 4800000, guid: fe4f13c1004a07d4ea1e30bfd0326d9e, type: 3} + - rid: 3879611001403080708 + type: {class: UniversalRenderPipelineEditorAssets, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: eda47df5b85f4f249abf7abd73db2cb2, type: 2} + - rid: 3879611001403080709 + type: {class: UniversalRenderPipelineRuntimeTerrainShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3} + m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3} + m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3} + - rid: 3879611001403080710 + 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: 3879611001403080711 + type: {class: URPReflectionProbeSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Universal.Runtime} + data: + version: 1 + useReflectionProbeRotation: 0 + - rid: 3879611001403080712 + type: {class: ScreenSpaceAmbientOcclusionDynamicResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + 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_Version: 0 + - rid: 3879611001403080713 + type: {class: ScreenSpaceAmbientOcclusionPersistentResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3} + m_Version: 0 + - rid: 3879611001403080714 + type: {class: URPTerrainShaderSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_IncludeTerrainShaders: 1 + - rid: 3879611001403080715 + type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3} + m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3} + m_VisualizationLookupTable: + m_Data: + - {r: 0.785, g: 0.23, b: 0.2, a: 1} + - {r: 1, g: 0.8, b: 0.8, a: 1} + - {r: 0.4, g: 0.2, b: 0.2, a: 1} + - {r: 0.51, g: 0.8, b: 0.6, a: 1} + - {r: 0.6, g: 0.8, b: 1, a: 1} + - {r: 0.2, g: 0.4, b: 0.6, a: 1} + - {r: 0.8, g: 1, b: 0.8, a: 1} + - {r: 0.2, g: 0.4, b: 0.2, a: 1} + - {r: 0.125, g: 0.22, b: 0.36, a: 1} + m_ConversionLookupTable: + m_Data: + - {r: 0.785, g: 0.23, b: 0.2, a: 1} + - {r: 1, g: 0.8, b: 0.8, a: 1} + - {r: 0.4, g: 0.2, b: 0.2, a: 1} + - {r: 0.51, g: 0.8, b: 0.6, a: 1} + - {r: 0.6, g: 0.8, b: 1, a: 1} + - {r: 0.2, g: 0.4, b: 0.6, a: 1} + - {r: 0.8, g: 1, b: 0.8, a: 1} + - {r: 0.2, g: 0.4, b: 0.2, a: 1} + - {r: 0.125, g: 0.22, b: 0.36, a: 1} + - rid: 3879611001403080716 + type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + - rid: 3879611001403080717 + type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_UseBicubicLightmapSampling: 0 + - rid: 3879611001403080718 + type: {class: WorldRenderPipelineResources, ns: UnityEngine.PathTracing.Core, asm: Unity.PathTracing.Runtime} + data: + _version: 3 + _blitCubemap: {fileID: 7200000, guid: 5a992812cb320d146a66cc600200cce7, type: 3} + _blitGrayScaleCookie: {fileID: 7200000, guid: 557fa399e33bf7647bda5697c5c158df, type: 3} + _setAlphaChannelShader: {fileID: 7200000, guid: 5efaea0e81c66334aa9d062d6573e6fd, type: 3} + _environmentImportanceSamplingBuild: {fileID: 7200000, guid: 5bb2534d2411d344cbc54f880232640f, type: 3} + _skyBoxMesh: {fileID: 4300000, guid: 0529e6c5f6dea8c4a8c2835ed7de57cb, type: 2} + _sixFaceSkyBoxMesh: {fileID: 4300000, guid: a80925ceebd011741b42509226cefc74, type: 2} + _buildLightGridShader: {fileID: 7200000, guid: 16e47c1641bd0104e92b624601457bb0, type: 3} + - 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_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_ClusterDeferred: {fileID: 4800000, guid: 222cce62363a44a380c36bf03b392608, type: 3} + m_StencilDitherMaskSeedPS: {fileID: 4800000, guid: 8c3ee818f2efa514c889881ccb2e95a2, 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} + m_TerrainDetailLit: {fileID: 0} + m_TerrainDetailGrassBillboard: {fileID: 0} + m_TerrainDetailGrass: {fileID: 0} + - 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_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} + m_DefaultMesh2DLitMaterial: {fileID: 2100000, guid: 9452ae1262a74094f8a68013fbcd1834, 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 + - 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} diff --git a/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..81b84f2 --- /dev/null +++ b/Assets/Settings/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18dc0cd2c080841dea60987a38ce93fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TutorialInfo.meta b/Assets/TutorialInfo.meta new file mode 100644 index 0000000..a700bca --- /dev/null +++ b/Assets/TutorialInfo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba062aa6c92b140379dbc06b43dd3b9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TutorialInfo/Icons.meta b/Assets/TutorialInfo/Icons.meta new file mode 100644 index 0000000..1d19fb9 --- /dev/null +++ b/Assets/TutorialInfo/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8a0c9218a650547d98138cd835033977 +folderAsset: yes +timeCreated: 1484670163 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TutorialInfo/Icons/URP.png b/Assets/TutorialInfo/Icons/URP.png new file mode 100644 index 0000000000000000000000000000000000000000..6194a807e27158f864a7c7677f4cbf62d8b94503 GIT binary patch literal 24069 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 HejoV