From ea82c44cff87d86293ec1e4277e85edd3022bb31 Mon Sep 17 00:00:00 2001 From: Hazim Bin Ijaz Date: Mon, 10 Mar 2025 15:01:21 +0500 Subject: [PATCH] Added mobile controls --- Assets/Scenes/BossRoom.unity | 114 +- Assets/Scripts/Gameplay/AbilitySystem.cs | 165 +- Assets/Scripts/Gameplay/CNControls.meta | 8 + .../Scripts/Gameplay/CNControls/Editor.meta | 9 + .../Editor/AdditionaHelpingGuidance.cs | 56 + .../Editor/AdditionaHelpingGuidance.cs.meta | 12 + .../CNControls/Editor/ErrorPopupWindow.cs | 54 + .../Editor/ErrorPopupWindow.cs.meta | 12 + .../Scripts/Gameplay/CNControls/Examples.meta | 9 + .../Gameplay/CNControls/Examples/Scenes.meta | 9 + .../CNControls/Examples/Scenes/2D.meta | 9 + .../CNControls/Examples/Scenes/2D.unity | 2319 +++++++++++++++++ .../CNControls/Examples/Scenes/2D.unity.meta | 8 + .../Scenes/2D/Character Graphics.meta | 9 + .../Alien Anim Controller.controller | 284 ++ .../Alien Anim Controller.controller.meta | 8 + .../Scenes/2D/Character Graphics/Alien.prefab | 212 ++ .../2D/Character Graphics/Alien.prefab.meta | 8 + .../Scenes/2D/Character Graphics/Jump.anim | 63 + .../2D/Character Graphics/Jump.anim.meta | 8 + .../Scenes/2D/Character Graphics/Stand.anim | 63 + .../2D/Character Graphics/Stand.anim.meta | 8 + .../Scenes/2D/Character Graphics/Walk.anim | 66 + .../2D/Character Graphics/Walk.anim.meta | 8 + .../2D/Character Graphics/alienGreen_jump.png | Bin 0 -> 7382 bytes .../alienGreen_jump.png.meta | 127 + .../Character Graphics/alienGreen_stand.png | Bin 0 -> 7313 bytes .../alienGreen_stand.png.meta | 127 + .../Character Graphics/alienGreen_walk1.png | Bin 0 -> 7467 bytes .../alienGreen_walk1.png.meta | 127 + .../Character Graphics/alienGreen_walk2.png | Bin 0 -> 7328 bytes .../alienGreen_walk2.png.meta | 127 + .../CNControls/Examples/Scenes/2D/Ground.meta | 9 + .../Scenes/2D/Ground/boxCrate_double.png | Bin 0 -> 2586 bytes .../Scenes/2D/Ground/boxCrate_double.png.meta | 127 + .../Scenes/2D/Ground/colored_grass.png | Bin 0 -> 23375 bytes .../Scenes/2D/Ground/colored_grass.png.meta | 127 + .../Scenes/2D/Ground/grassHalf_left.png | Bin 0 -> 3527 bytes .../Scenes/2D/Ground/grassHalf_left.png.meta | 127 + .../Scenes/2D/Ground/grassHalf_mid.png | Bin 0 -> 3124 bytes .../Scenes/2D/Ground/grassHalf_mid.png.meta | 127 + .../Scenes/2D/Ground/grassHalf_right.png | Bin 0 -> 3552 bytes .../Scenes/2D/Ground/grassHalf_right.png.meta | 127 + .../Examples/Scenes/2D/Scripts.meta | 9 + .../Scenes/2D/Scripts/Camera2DFollow.cs | 53 + .../Scenes/2D/Scripts/Camera2DFollow.cs.meta | 9 + .../2D/Scripts/Platformer2DUserControl.cs | 35 + .../Scripts/Platformer2DUserControl.cs.meta | 12 + .../2D/Scripts/PlatformerCharacter2D.cs | 96 + .../2D/Scripts/PlatformerCharacter2D.cs.meta | 9 + .../Examples/Scenes/2D/Scripts/Restarter.cs | 17 + .../Scenes/2D/Scripts/Restarter.cs.meta | 9 + .../Examples/Scenes/Custom Joystick.meta | 9 + .../Examples/Scenes/Custom Joystick.unity | 1055 ++++++++ .../Scenes/Custom Joystick.unity.meta | 8 + .../Custom Joystick/FourWayController.cs | 43 + .../Custom Joystick/FourWayController.cs.meta | 12 + .../Scenes/Third Person Controller.unity | 677 +++++ .../Scenes/Third Person Controller.unity.meta | 8 + .../Examples/Scenes/Third Person.meta | 9 + .../Third Person/AbstractTargetFollower.cs | 104 + .../AbstractTargetFollower.cs.meta | 9 + .../Examples/Scenes/Third Person/AutoCam.cs | 107 + .../Scenes/Third Person/AutoCam.cs.meta | 9 + .../Third Person/MultipurposeCameraRig.prefab | 194 ++ .../MultipurposeCameraRig.prefab.meta | 5 + .../Third Person/PivotBasedCameraRig.cs | 28 + .../Third Person/PivotBasedCameraRig.cs.meta | 11 + .../ThidPersonExampleController.cs | 42 + .../ThidPersonExampleController.cs.meta | 12 + .../Examples/Scenes/Touchpad Camera.meta | 9 + .../Examples/Scenes/Touchpad Camera.unity | 960 +++++++ .../Scenes/Touchpad Camera.unity.meta | 8 + .../Scenes/Touchpad Camera/RotateCamera.cs | 18 + .../Touchpad Camera/RotateCamera.cs.meta | 8 + .../Touchpad Camera/RotationConstraint.cs | 53 + .../RotationConstraint.cs.meta | 8 + .../Scripts/Gameplay/CNControls/Graphics.meta | 9 + .../CNControls/Graphics/flatDark00.png | Bin 0 -> 1080 bytes .../CNControls/Graphics/flatDark00.png.meta | 127 + .../CNControls/Graphics/flatDark06.png | Bin 0 -> 1668 bytes .../CNControls/Graphics/flatDark06.png.meta | 127 + .../CNControls/Graphics/flatLight05.png | Bin 0 -> 1728 bytes .../CNControls/Graphics/flatLight05.png.meta | 127 + .../CNControls/Graphics/flatLight22.png | Bin 0 -> 977 bytes .../CNControls/Graphics/flatLight22.png.meta | 127 + .../CNControls/Graphics/flatLight46.png | Bin 0 -> 1214 bytes .../CNControls/Graphics/flatLight46.png.meta | 127 + .../CNControls/Graphics/flatLight49.png | Bin 0 -> 1080 bytes .../CNControls/Graphics/flatLight49.png.meta | 127 + .../Scripts/Gameplay/CNControls/Prefabs.meta | 9 + .../Prefabs/2 Ways DPad Horizontal.prefab | 219 ++ .../2 Ways DPad Horizontal.prefab.meta | 8 + .../Prefabs/2 Ways DPad Vertical.prefab | 219 ++ .../Prefabs/2 Ways DPad Vertical.prefab.meta | 8 + .../CNControls/Prefabs/4 Ways DPad.prefab | 373 +++ .../Prefabs/4 Ways DPad.prefab.meta | 8 + .../Gameplay/CNControls/Prefabs/Button.prefab | 92 + .../CNControls/Prefabs/Button.prefab.meta | 8 + .../CNControls/Prefabs/Joystick.prefab | 220 ++ .../CNControls/Prefabs/Joystick.prefab.meta | 8 + .../Prefabs/SensitiveJoystick.prefab | 235 ++ .../Prefabs/SensitiveJoystick.prefab.meta | 8 + .../CNControls/Prefabs/Touchpad.prefab | 91 + .../CNControls/Prefabs/Touchpad.prefab.meta | 8 + Assets/Scripts/Gameplay/CNControls/README.pdf | Bin 0 -> 186617 bytes .../Gameplay/CNControls/README.pdf.meta | 8 + .../Scripts/Gameplay/CNControls/Scripts.meta | 9 + .../CNControls/Scripts/CnInputSystem.meta | 9 + .../Scripts/CnInputSystem/CnInputManager.cs | 336 +++ .../CnInputSystem/CnInputManager.cs.meta | 12 + .../Scripts/CnInputSystem/VirtualAxis.cs | 23 + .../Scripts/CnInputSystem/VirtualAxis.cs.meta | 12 + .../Scripts/CnInputSystem/VirtualButton.cs | 87 + .../CnInputSystem/VirtualButton.cs.meta | 12 + .../CNControls/Scripts/Controllers.meta | 9 + .../Controllers/CommonOnScreenControl.cs | 6 + .../Controllers/CommonOnScreenControl.cs.meta | 12 + .../CNControls/Scripts/Controllers/Dpad.cs | 37 + .../Scripts/Controllers/Dpad.cs.meta | 12 + .../Scripts/Controllers/DpadAxis.cs | 47 + .../Scripts/Controllers/DpadAxis.cs.meta | 12 + .../Scripts/Controllers/SensitiveJoystick.cs | 26 + .../Controllers/SensitiveJoystick.cs.meta | 12 + .../Scripts/Controllers/SimpleButton.cs | 60 + .../Scripts/Controllers/SimpleButton.cs.meta | 12 + .../Scripts/Controllers/SimpleJoystick.cs | 265 ++ .../Controllers/SimpleJoystick.cs.meta | 12 + .../Scripts/Controllers/Touchpad.cs | 112 + .../Scripts/Controllers/Touchpad.cs.meta | 12 + .../RuntimeDataContainers/GameDataSource.cs | 2 + Assets/Standard Assets.meta | 8 + ...versalRenderPipelineAsset_Mobile_Low.asset | 9 +- ...salRenderPipelineAsset_Mobile_Medium.asset | 9 +- ...ersalRenderPipelineAsset_Mobile_High.asset | 7 +- ProjectSettings/InputManager.asset | 113 + 136 files changed, 11849 insertions(+), 66 deletions(-) create mode 100644 Assets/Scripts/Gameplay/CNControls.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Editor.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/boxCrate_double.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/boxCrate_double.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/colored_grass.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/colored_grass.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_left.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_left.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatDark00.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatDark00.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatDark06.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatDark06.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight05.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight05.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight22.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight22.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight49.png create mode 100644 Assets/Scripts/Gameplay/CNControls/Graphics/flatLight49.png.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/2 Ways DPad Horizontal.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/2 Ways DPad Horizontal.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/2 Ways DPad Vertical.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/2 Ways DPad Vertical.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/4 Ways DPad.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/4 Ways DPad.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Button.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Button.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Joystick.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Joystick.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/SensitiveJoystick.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/SensitiveJoystick.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Touchpad.prefab create mode 100644 Assets/Scripts/Gameplay/CNControls/Prefabs/Touchpad.prefab.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/README.pdf create mode 100644 Assets/Scripts/Gameplay/CNControls/README.pdf.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs.meta create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs create mode 100644 Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs.meta create mode 100644 Assets/Standard Assets.meta diff --git a/Assets/Scenes/BossRoom.unity b/Assets/Scenes/BossRoom.unity index 07d60f3c..42134d45 100644 --- a/Assets/Scenes/BossRoom.unity +++ b/Assets/Scenes/BossRoom.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.18194216, g: 0.2276266, b: 0.3074139, a: 1} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -2431,6 +2431,7 @@ GameObject: - component: {fileID: 279428270} - component: {fileID: 279428269} - component: {fileID: 279428268} + - component: {fileID: 279428273} m_Layer: 5 m_Name: Button4CrowForesight m_TagString: Untagged @@ -2575,6 +2576,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 279428266} m_CullTransparentMesh: 1 +--- !u!114 &279428273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 279428266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: CrowsForesight --- !u!1 &283391569 GameObject: m_ObjectHideFlags: 0 @@ -2664,6 +2678,7 @@ GameObject: - component: {fileID: 308008438} - component: {fileID: 308008437} - component: {fileID: 308008436} + - component: {fileID: 308008441} m_Layer: 5 m_Name: Button5VectorFence m_TagString: Untagged @@ -2808,6 +2823,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 308008434} m_CullTransparentMesh: 1 +--- !u!114 &308008441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308008434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: VectorWall --- !u!1 &311713811 GameObject: m_ObjectHideFlags: 0 @@ -4934,6 +4962,7 @@ GameObject: - component: {fileID: 517697843} - component: {fileID: 517697842} - component: {fileID: 517697841} + - component: {fileID: 517697846} m_Layer: 5 m_Name: Button1DashnCrash m_TagString: Untagged @@ -5079,6 +5108,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 517697839} m_CullTransparentMesh: 1 +--- !u!114 &517697846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 517697839} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: DashNCrash --- !u!1 &520530277 GameObject: m_ObjectHideFlags: 0 @@ -5692,7 +5734,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &590786921 RectTransform: m_ObjectHideFlags: 0 @@ -7943,7 +7985,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 1102464587} m_Color: {r: 1, g: 1, b: 1, a: 0} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: @@ -15532,6 +15574,7 @@ GameObject: - component: {fileID: 795118092} - component: {fileID: 795118091} - component: {fileID: 795118090} + - component: {fileID: 795118095} m_Layer: 5 m_Name: StaminaButton m_TagString: Untagged @@ -15677,6 +15720,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 795118088} m_CullTransparentMesh: 1 +--- !u!114 &795118095 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795118088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: Sprint --- !u!1 &795181664 GameObject: m_ObjectHideFlags: 0 @@ -17633,6 +17689,7 @@ GameObject: - component: {fileID: 960617635} - component: {fileID: 960617634} - component: {fileID: 960617633} + - component: {fileID: 960617638} m_Layer: 5 m_Name: Button2FreezeThrow m_TagString: Untagged @@ -17777,6 +17834,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 960617631} m_CullTransparentMesh: 1 +--- !u!114 &960617638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 960617631} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: FreezeThrow --- !u!1 &964267621 GameObject: m_ObjectHideFlags: 0 @@ -18499,6 +18569,7 @@ GameObject: - component: {fileID: 1008470393} - component: {fileID: 1008470392} - component: {fileID: 1008470391} + - component: {fileID: 1008470396} m_Layer: 5 m_Name: Button3Executioner m_TagString: Untagged @@ -18643,6 +18714,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1008470389} m_CullTransparentMesh: 1 +--- !u!114 &1008470396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1008470389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: TheExecutioner --- !u!1 &1010981555 GameObject: m_ObjectHideFlags: 0 @@ -19128,11 +19212,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.y - value: 0.28987604 + value: 0.28987607 objectReference: {fileID: 0} - target: {fileID: 1676734515771252668, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.z - value: -0.1815203 + value: -0.18152031 objectReference: {fileID: 0} - target: {fileID: 1676734516302391364, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_UpdateMethod @@ -19184,7 +19268,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.w - value: 0.80276686 + value: 0.8027669 objectReference: {fileID: 0} - target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.x @@ -19192,11 +19276,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.y - value: 0.2921833 + value: 0.29218328 objectReference: {fileID: 0} - target: {fileID: 1676734516724634599, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_LocalRotation.z - value: -0.17778286 + value: -0.17778282 objectReference: {fileID: 0} - target: {fileID: 1676734516866984540, guid: 0193228de87741d40a42e561901c9083, type: 3} propertyPath: m_VerticalDamping @@ -283073,6 +283157,7 @@ GameObject: - component: {fileID: 5277713032040811807} - component: {fileID: 571521781778937404} - component: {fileID: 3784538605243177490} + - component: {fileID: 5277713032040811808} m_Layer: 5 m_Name: Button0_Swap m_TagString: Untagged @@ -283162,6 +283247,19 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!114 &5277713032040811808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5277713032040811801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f80d719f998a67438e69f9f995732ae, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonName: Swap --- !u!222 &5277713032336524600 CanvasRenderer: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Gameplay/AbilitySystem.cs b/Assets/Scripts/Gameplay/AbilitySystem.cs index d83e9a40..70a91980 100644 --- a/Assets/Scripts/Gameplay/AbilitySystem.cs +++ b/Assets/Scripts/Gameplay/AbilitySystem.cs @@ -7,7 +7,6 @@ using Unity.Multiplayer.Samples.BossRoom; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; -//using static Codice.Client.Common.WebApi.WebApiEndpoints; public class AbilitySystem : NetworkBehaviour { @@ -17,7 +16,7 @@ public class AbilitySystem : NetworkBehaviour public AbilityUI[] abilitiesUI; private Ability activeAbility; - private bool isAbilityActive = false; + public bool isAbilityActive = false; private HashSet abilitiesOnCooldown = new HashSet(); [SerializeField] private GameObject currentAbilityIndicator; @@ -44,19 +43,16 @@ public class AbilitySystem : NetworkBehaviour private Vector3 executionerStartPos; private Vector3 executionerEndPos; - private void InitializeAbilityCursorMap() { abilityCursorMap = new Dictionary - { - { GameDataSource.Instance.DashNCrashAbilityKey, CursorState.Dash }, - { GameDataSource.Instance.FreezeThrowAbilityKey, CursorState.Freeze }, - { GameDataSource.Instance.VectorWallAbilityKey, CursorState.VectorWall }, - { GameDataSource.Instance.TheExecutionerKey, CursorState.Executioner }, - { GameDataSource.Instance.CrowsForesightKey, CursorState.Foresight }, - - - }; + { + { GameDataSource.Instance.DashNCrashAbilityKey, CursorState.Dash }, + { GameDataSource.Instance.FreezeThrowAbilityKey, CursorState.Freeze }, + { GameDataSource.Instance.VectorWallAbilityKey, CursorState.VectorWall }, + { GameDataSource.Instance.TheExecutionerKey, CursorState.Executioner }, + { GameDataSource.Instance.CrowsForesightKey, CursorState.Foresight }, + }; } private void Awake() { @@ -78,7 +74,8 @@ public class AbilitySystem : NetworkBehaviour GameStateManager.Instance.ChangeState(cursorState); } } - void Update() + + private void Update() { HandleAbilityMode(); } @@ -89,29 +86,47 @@ public class AbilitySystem : NetworkBehaviour { if (activeAbility.abilityKey == "VectorFence") { - //GameStateManager.Instance.ChangeState(CursorState.VectorWall); + // For VectorFence, manage wall indicator and placement ManageVectorFenceIndicator(); if (!isWallPlacementStarted) { - UpdateWallIndicatorPosition(); // Follow the mouse when ability is activated + UpdateWallIndicatorPosition(); // Follow pointer when ability is activated } +#if UNITY_ANDROID || UNITY_IOS + if (Input.touchCount > 0) + { + Touch touch = Input.GetTouch(0); + if (!isWallPlacementStarted && touch.phase == TouchPhase.Began) + { + StartWallPlacement(); + } + if (isWallPlacementStarted && (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)) + { + RotateWallIndicator(); // Rotate while touch is moving or held + } + if (isWallPlacementStarted && touch.phase == TouchPhase.Ended) + { + UseActiveAbility(); // Place the wall when touch ends + isWallPlacementStarted = false; + } + } +#else if (Input.GetMouseButtonDown(0)) { StartWallPlacement(); } - if (Input.GetMouseButton(0) && isWallPlacementStarted) { RotateWallIndicator(); // Rotate while holding LMB } - if (Input.GetMouseButtonUp(0) && isWallPlacementStarted) { UseActiveAbility(); // Place the wall when LMB is released isWallPlacementStarted = false; } +#endif } // else if (activeAbility.abilityKey == "TheExecutioner") // { @@ -121,16 +136,26 @@ public class AbilitySystem : NetworkBehaviour { ManageStandardAbilityIndicator(); +#if UNITY_ANDROID || UNITY_IOS + if (Input.touchCount > 0) + { + Touch touch = Input.GetTouch(0); + if (touch.phase == TouchPhase.Began) + { + UseActiveAbility(); + } + } +#else if (Input.GetMouseButtonDown(0)) { UseActiveAbility(); } +#endif } } else { - - // GameStateManager.Instance.ChangeState(CursorState.Default); + // When not in ability mode, ensure indicators are hidden. DeactivateIndicators(); } } @@ -139,19 +164,50 @@ public class AbilitySystem : NetworkBehaviour { lineIndicator.gameObject.SetActive(true); +#if UNITY_ANDROID || UNITY_IOS + if (Input.touchCount > 0) + { + Touch touch = Input.GetTouch(0); + if (touch.phase == TouchPhase.Began) + { + if (Physics.Raycast(mainCamera.ScreenPointToRay(GetPointerPosition()), out var hit)) + { + executionerStartPos = hit.point; + executionerEndPos = hit.point; + lineIndicator.positionCount = 2; + lineIndicator.SetPosition(0, executionerStartPos); + lineIndicator.SetPosition(1, executionerEndPos); + } + } + if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary) + { + if (Physics.Raycast(mainCamera.ScreenPointToRay(GetPointerPosition()), out var hit)) + { + executionerEndPos = hit.point; + lineIndicator.SetPosition(1, executionerEndPos); + } + } + if (touch.phase == TouchPhase.Ended) + { + UseActiveAbility(); + lineIndicator.positionCount = 2; + lineIndicator.SetPosition(0, Vector3.zero); + lineIndicator.SetPosition(1, Vector3.zero); + lineIndicator.gameObject.SetActive(false); + } + } +#else if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out var hit)) { executionerStartPos = hit.point; executionerEndPos = hit.point; - - lineIndicator.positionCount = 2; // Ensure it has enough positions before setting them + lineIndicator.positionCount = 2; lineIndicator.SetPosition(0, executionerStartPos); lineIndicator.SetPosition(1, executionerEndPos); } } - if (Input.GetMouseButton(0)) { if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out var hit)) @@ -160,19 +216,17 @@ public class AbilitySystem : NetworkBehaviour lineIndicator.SetPosition(1, executionerEndPos); } } - if (Input.GetMouseButtonUp(0)) { UseActiveAbility(); - - lineIndicator.positionCount = 2; // Reset to a valid number to prevent out-of-bounds errors - lineIndicator.SetPosition(0, Vector3.zero); // Reset positions to avoid old values + lineIndicator.positionCount = 2; + lineIndicator.SetPosition(0, Vector3.zero); lineIndicator.SetPosition(1, Vector3.zero); lineIndicator.gameObject.SetActive(false); } +#endif } - private void ManageVectorFenceIndicator() { if (wallIndicator != null) @@ -190,9 +244,9 @@ public class AbilitySystem : NetworkBehaviour private void UpdateWallIndicatorPosition() { - if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) + if (Physics.Raycast(mainCamera.ScreenPointToRay(GetPointerPosition()), out RaycastHit hit)) { - //wallIndicator.transform.position = hit.point; // Update position to follow the mouse + // Update position to follow the pointer (only XZ plane) wallIndicator.transform.position = new Vector3(hit.point.x, 0, hit.point.z); isValidPlacement = IsPlacementValid(hit.point, wallIndicator.transform.rotation, playerLayer); } @@ -200,29 +254,28 @@ public class AbilitySystem : NetworkBehaviour private void StartWallPlacement() { - if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) + if (Physics.Raycast(mainCamera.ScreenPointToRay(GetPointerPosition()), out RaycastHit hit)) { wallSpawnPosition = new Vector3(hit.point.x, 0, hit.point.z); // Save spawn position - initialMousePosition = Input.mousePosition; // Store the initial mouse position on click + initialMousePosition = GetPointerPosition(); // Store the initial pointer position on click isWallPlacementStarted = true; Debug.Log($"[AbilitySystem] Wall placement started at {wallSpawnPosition}"); - } } private void RotateWallIndicator() { if (isWallPlacementStarted && wallIndicator != null) { - // Get the current mouse position in screen space - Vector3 currentMousePosition = Input.mousePosition; + // Get the current pointer position + Vector3 currentPointerPosition = GetPointerPosition(); - // Calculate the distance the mouse has moved since the initial click - float mouseDistance = Vector3.Distance(initialMousePosition, currentMousePosition); + // Calculate the distance the pointer has moved since the initial press + float pointerDistance = Vector3.Distance(initialMousePosition, currentPointerPosition); // Check if the movement exceeds the threshold - if (mouseDistance >= mouseMoveThreshold) + if (pointerDistance >= mouseMoveThreshold) { - Ray ray = mainCamera.ScreenPointToRay(currentMousePosition); + Ray ray = mainCamera.ScreenPointToRay(currentPointerPosition); if (Physics.Raycast(ray, out RaycastHit hit)) { Vector3 direction = (new Vector3(hit.point.x, 0, hit.point.z) - wallIndicator.transform.position).normalized; @@ -232,26 +285,20 @@ public class AbilitySystem : NetworkBehaviour wallIndicator.transform.rotation = Quaternion.Lerp(wallIndicator.transform.rotation, targetRotation, 0.5f); isValidPlacement = IsPlacementValid(wallIndicator.transform.position, wallIndicator.transform.rotation, playerLayer); - } } } } - private bool IsPlacementValid(Vector3 position, Quaternion rotation, LayerMask layerMask) { - // Perform overlap check after applying rotation Vector3 halfExtents = new Vector3( wallIndicator.transform.localScale.x / 2f, wallIndicator.transform.localScale.y / 2f, wallIndicator.transform.localScale.z / 2f ); - // Perform a CheckBox for the given parameters bool isOverlap = Physics.CheckBox(position, halfExtents, rotation, layerMask); - - return !isOverlap; // Return true if valid placement (no overlap) } @@ -289,13 +336,13 @@ public class AbilitySystem : NetworkBehaviour } else { - ToggleAbilityMode(ability,key); + ToggleAbilityMode(ability, key); } } public bool IsAbilityModeActive() => isAbilityActive; - private void ToggleAbilityMode(Ability ability,string abilitykey) + private void ToggleAbilityMode(Ability ability, string abilityKey) { if (isAbilityActive && activeAbility == ability) { @@ -304,7 +351,7 @@ public class AbilitySystem : NetworkBehaviour else { ActivateAbilityMode(ability); - UpdateCursorState(abilitykey); + UpdateCursorState(abilityKey); } } @@ -329,13 +376,11 @@ public class AbilitySystem : NetworkBehaviour private bool IsPlacementWithinRadius(Vector3 targetPosition) { - float placementRadius = activeAbility.abilityApplicationRadius; // Fetch radius from the active ability + float placementRadius = activeAbility.abilityApplicationRadius; float distance = Vector3.Distance(transform.position, targetPosition); - return distance <= placementRadius; } - public void UseActiveAbility() { if (activeAbility == null) return; @@ -352,7 +397,7 @@ public class AbilitySystem : NetworkBehaviour { GameObject indicator = activeAbility.abilityKey == "VectorFence" ? wallIndicator : currentAbilityIndicator; startPosition = indicator.transform.position; - direction = indicator.transform.rotation.eulerAngles; + direction = indicator.transform.forward; } if (!IsPlacementWithinRadius(startPosition)) @@ -422,7 +467,7 @@ public class AbilitySystem : NetworkBehaviour private void UpdateIndicatorPosition() { - if (Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) + if (Physics.Raycast(mainCamera.ScreenPointToRay(GetPointerPosition()), out RaycastHit hit)) { currentAbilityIndicator.transform.position = new Vector3(hit.point.x, 0, hit.point.z); currentAbilityIndicator.transform.localScale = Vector3.one * activeAbility.abilityRadius; @@ -440,7 +485,21 @@ public class AbilitySystem : NetworkBehaviour } else { - Debug.Log($"InitiateGlobalCooldown: Count find ability: {abilityKey}"); + Debug.Log($"InitiateGlobalCooldown: Could not find ability: {abilityKey}"); + } + } + + // Helper method to get the current pointer position based on platform + private Vector3 GetPointerPosition() + { +#if UNITY_ANDROID || UNITY_IOS + if (Input.touchCount > 0) + { + return Input.GetTouch(0).position; } + return Vector3.zero; +#else + return Input.mousePosition; +#endif } } diff --git a/Assets/Scripts/Gameplay/CNControls.meta b/Assets/Scripts/Gameplay/CNControls.meta new file mode 100644 index 00000000..f14a4ee0 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96db2d7213172bb4d9afda66fd7b30a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Editor.meta b/Assets/Scripts/Gameplay/CNControls/Editor.meta new file mode 100644 index 00000000..b4e65bb5 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d4d057ffeded3364d979f745117ae501 +folderAsset: yes +timeCreated: 1471342548 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs b/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs new file mode 100644 index 00000000..ea4a24b3 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs @@ -0,0 +1,56 @@ +#if UNITY_EDITOR +using System; +using System.Linq; +using System.Reflection; +using UnityEngine; +using UnityEditor; +using UnityEngine.EventSystems; +using Object = UnityEngine.Object; + +namespace CnControls +{ + /// + /// Some helping and guiding info trying to fix some common CNControls setup mistakes + /// + [InitializeOnLoad] + public class AdditionaHelpingGuidance + { + static AdditionaHelpingGuidance() + { + EditorApplication.playmodeStateChanged += PlaymodeStateChanged; + } + + private static void PlaymodeStateChanged() + { + // If we've just changed our mode to a playmode + if (EditorApplication.isPlaying && EditorApplication.isPlayingOrWillChangePlaymode) + { + var types = from t in Assembly.GetAssembly(typeof(SimpleButton)).GetTypes() + where + t.IsClass + && t.Namespace == "CnControls" + && t.IsSubclassOf(typeof(MonoBehaviour)) + select t; + + // If there are any CnControls on the scene + bool shouldCheckForErrors = types.Any(type => Object.FindObjectOfType(type)); + + if (shouldCheckForErrors) + { + CheckForEventSystemPresence(); + } + } + } + + private static void CheckForEventSystemPresence() + { + var eventSystem = Object.FindObjectOfType(); + + if (eventSystem == null) + { + ErrorPopupWindow.ShowWindow(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs.meta b/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs.meta new file mode 100644 index 00000000..fa92af4d --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Editor/AdditionaHelpingGuidance.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: de2fdbbbfd047264c838afb6aa9e0c4d +timeCreated: 1471342566 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs b/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs new file mode 100644 index 00000000..98b858fb --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs @@ -0,0 +1,54 @@ +#if UNITY_EDITOR +using UnityEngine; +using UnityEditor; +using UnityEngine.EventSystems; + +namespace CnControls +{ + public class ErrorPopupWindow : EditorWindow + { + public static void ShowWindow() + { + var window = EditorWindow.GetWindow(); + window.position = new Rect(Screen.width / 2f, Screen.height / 2f, 250, 133); + window.titleContent = new GUIContent("ERROR"); + } + + void OnGUI() + { + EditorGUILayout.LabelField( + "There's no EventSystem object in your scene (or it is disabled), CnControls won't work. Please add one using GameObject -> UI -> Event System menu or push the button below", + EditorStyles.wordWrappedLabel); + + GUILayout.Space(12); + if (GUILayout.Button("Create now!")) + { + EditorApplication.isPlaying = false; + + EditorApplication.playmodeStateChanged += OnPlaymodeChanged; + } + + GUILayout.Space(6); + + if (GUILayout.Button("Close this window")) + { + Close(); + } + } + + private void OnPlaymodeChanged() + { + if (!EditorApplication.isPlaying && !EditorApplication.isPlayingOrWillChangePlaymode) + { + EditorApplication.playmodeStateChanged -= OnPlaymodeChanged; + + var eventSystemGo = new GameObject("EventSystem"); + eventSystemGo.AddComponent(); + eventSystemGo.AddComponent(); + + Close(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs.meta b/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs.meta new file mode 100644 index 00000000..2b99c300 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Editor/ErrorPopupWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0f2cbf6df83c52e44a58a474d14696bb +timeCreated: 1471371441 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples.meta b/Assets/Scripts/Gameplay/CNControls/Examples.meta new file mode 100644 index 00000000..b6e8c68d --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 73bc353377863994c95e42f3712a5869 +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes.meta new file mode 100644 index 00000000..e51d746f --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c17a05ce6e99c0c488bc748574cc5ef9 +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.meta new file mode 100644 index 00000000..51ed3c15 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d0ae7bc5c14713440a8c655211e93032 +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity new file mode 100644 index 00000000..2dfc3338 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity @@ -0,0 +1,2319 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + 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.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SkyboxMaterial: {fileID: 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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + m_GIWorkflowMode: 1 + m_LightmapsMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 3 + m_Resolution: 1 + m_BakeResolution: 50 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AOMaxDistance: 1 + m_Padding: 2 + m_CompAOExponent: 0 + m_LightmapParameters: {fileID: 0} + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666666 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &74675234 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 74675238} + - 212: {fileID: 74675237} + - 61: {fileID: 74675236} + - 50: {fileID: 74675235} + m_Layer: 1 + m_Name: boxCrate_double (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!50 &74675235 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 74675234} + m_UseAutoMass: 0 + m_Mass: 10 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &74675236 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 74675234} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Size: {x: 1.28, y: 1.28} +--- !u!212 &74675237 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 74675234} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 4 + m_Sprite: {fileID: 21300000, guid: ee8739f042e99cf4598897d7c9f2ac78, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!4 &74675238 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 74675234} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.55, y: 0.51, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 623172105} + m_RootOrder: 0 +--- !u!1 &115822836 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 115822838} + - 212: {fileID: 115822837} + m_Layer: 0 + m_Name: blue_grass (1) 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &115822837 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 115822836} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 664008e3f37538b43bcf3c85cb63eb25, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!4 &115822838 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 115822836} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 14.72, y: 0.03, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1211950371} + m_RootOrder: 2 +--- !u!1 &129731923 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 129731924} + - 223: {fileID: 129731927} + - 114: {fileID: 129731926} + - 114: {fileID: 129731925} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &129731924 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 129731923} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 785156712} + - {fileID: 1315479832} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &129731925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 129731923} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &129731926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 129731923} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 480} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &129731927 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 129731923} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &152223554 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 152223555} + - 212: {fileID: 152223557} + - 61: {fileID: 152223556} + m_Layer: 1 + m_Name: grassHalf_mid (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &152223555 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 152223554} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.74, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 3 +--- !u!61 &152223556 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 152223554} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &152223557 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 152223554} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &209439710 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 209439711} + - 61: {fileID: 209439713} + - 114: {fileID: 209439712} + m_Layer: 1 + m_Name: Restarter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &209439711 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 209439710} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.31, y: -11.4, z: 0} + m_LocalScale: {x: 1, y: 8.3779125, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 12 +--- !u!114 &209439712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 209439710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e053b0a94752146e79954ce4df1b5565, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!61 &209439713 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 209439710} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_Offset: {x: 0.86693573, y: 0.52536076} + serializedVersion: 2 + m_Size: {x: 141.15666, y: 0.22927819} +--- !u!1001 &278910591 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 129731924} + m_Modifications: + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_SizeDelta.x + value: 194.900024 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_SizeDelta.y + value: 185.699997 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 5cd0f2565c094c14c89345b5d6081634, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &299949817 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 299949820} + - 212: {fileID: 299949819} + - 61: {fileID: 299949818} + m_Layer: 1 + m_Name: grassHalf_mid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!61 &299949818 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 299949817} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &299949819 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 299949817} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!4 &299949820 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 299949817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.58, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 0 +--- !u!1 &308732208 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 308732209} + m_Layer: 1 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &308732209 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 308732208} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.4, y: 0.34, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 299949820} + - {fileID: 491082807} + - {fileID: 1753342301} + - {fileID: 152223555} + - {fileID: 632600205} + - {fileID: 762909389} + - {fileID: 1953868706} + - {fileID: 1802928801} + - {fileID: 690007305} + - {fileID: 989402237} + - {fileID: 689995383} + - {fileID: 950005445} + - {fileID: 209439711} + m_Father: {fileID: 0} + m_RootOrder: 1 +--- !u!1 &448351660 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 169500, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1040339737} + - 212: {fileID: 448351666} + - 58: {fileID: 448351665} + - 50: {fileID: 448351664} + - 95: {fileID: 448351663} + - 114: {fileID: 448351662} + - 114: {fileID: 448351661} + m_Layer: 0 + m_Name: Alien + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &448351661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11415998, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: faa4c921e52aa4c4892eeed83f878356, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &448351662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11466618, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d08f91df3bd212f429df17f53ce2f364, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MaxSpeed: 10 + m_JumpForce: 400 + m_AirControl: 0 + m_WhatIsGround: + serializedVersion: 2 + m_Bits: 2 +--- !u!95 &448351663 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 9512448, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 99ca6413d98ec0847bc752657029ca07, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 +--- !u!50 &448351664 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 5086142, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!58 &448351665 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 5804744, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: -0.66} + serializedVersion: 2 + m_Radius: 0.6495655 +--- !u!212 &448351666 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 21299612, guid: 1533e3cbd3874cb49963f3ef4fbba830, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 67eb7e5c33fae9e458ac43dc2fcaedaa, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &491082806 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 491082807} + - 212: {fileID: 491082809} + - 61: {fileID: 491082808} + m_Layer: 1 + m_Name: grassHalf_mid (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &491082807 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491082806} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -9.3, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 1 +--- !u!61 &491082808 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491082806} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &491082809 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491082806} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &517168451 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 517168454} + - 114: {fileID: 517168453} + - 114: {fileID: 517168452} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &517168452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 517168451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &517168453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 517168451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &517168454 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 517168451} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 +--- !u!1 &623172104 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 623172105} + m_Layer: 1 + m_Name: Crates + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &623172105 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 623172104} + 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_Children: + - {fileID: 74675238} + - {fileID: 752394290} + - {fileID: 1123657405} + - {fileID: 1956271411} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!1 &632600204 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 632600205} + - 212: {fileID: 632600207} + - 61: {fileID: 632600206} + m_Layer: 1 + m_Name: grassHalf_mid (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &632600205 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 632600204} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.46, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 4 +--- !u!61 &632600206 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 632600204} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &632600207 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 632600204} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &689995382 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 689995383} + - 212: {fileID: 689995385} + - 61: {fileID: 689995384} + m_Layer: 1 + m_Name: grassHalf_mid (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &689995383 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689995382} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.22, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 10 +--- !u!61 &689995384 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689995382} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &689995385 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 689995382} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 3950b0d7c2916084f8be9d9b9593ee5a, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &690007304 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 690007305} + - 212: {fileID: 690007307} + - 61: {fileID: 690007306} + m_Layer: 1 + m_Name: grassHalf_mid (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &690007305 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 690007304} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.34, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 8 +--- !u!61 &690007306 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 690007304} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &690007307 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 690007304} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &752394289 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 752394290} + - 212: {fileID: 752394293} + - 61: {fileID: 752394292} + - 50: {fileID: 752394291} + m_Layer: 1 + m_Name: boxCrate_double (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &752394290 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 752394289} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.36, y: -0.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 623172105} + m_RootOrder: 1 +--- !u!50 &752394291 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 752394289} + m_UseAutoMass: 0 + m_Mass: 10 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &752394292 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 752394289} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Size: {x: 1.28, y: 1.28} +--- !u!212 &752394293 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 752394289} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 4 + m_Sprite: {fileID: 21300000, guid: ee8739f042e99cf4598897d7c9f2ac78, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &762909388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 762909389} + - 212: {fileID: 762909391} + - 61: {fileID: 762909390} + m_Layer: 1 + m_Name: grassHalf_mid (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &762909389 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 762909388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4.18, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 5 +--- !u!61 &762909390 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 762909388} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &762909391 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 762909388} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &775151539 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 775151540} + - 212: {fileID: 775151541} + m_Layer: 0 + m_Name: blue_grass 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &775151540 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 775151539} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -16, y: 0.03, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1211950371} + m_RootOrder: 3 +--- !u!212 &775151541 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 775151539} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 664008e3f37538b43bcf3c85cb63eb25, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!224 &785156712 stripped +RectTransform: + m_PrefabParentObject: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, + type: 2} + m_PrefabInternal: {fileID: 1083821418} +--- !u!1 &950005444 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 950005445} + - 212: {fileID: 950005447} + - 61: {fileID: 950005446} + m_Layer: 1 + m_Name: grassHalf_mid (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &950005445 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 950005444} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -11.86, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 11 +--- !u!61 &950005446 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 950005444} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &950005447 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 950005444} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: f53852f4446afe347b4c9ea54202a3d6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &989402236 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 989402237} + - 212: {fileID: 989402239} + - 61: {fileID: 989402238} + m_Layer: 1 + m_Name: grassHalf_mid (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &989402237 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 989402236} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.94, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 9 +--- !u!61 &989402238 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 989402236} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &989402239 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 989402236} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!4 &1040339737 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 471762, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 448351660} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.78, y: -0.29, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1616144789} + - {fileID: 1535860039} + m_Father: {fileID: 0} + m_RootOrder: 3 +--- !u!1001 &1083821418 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 129731924} + m_Modifications: + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchoredPosition.x + value: -21.7800007 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchoredPosition.y + value: 24.0300007 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_SizeDelta.x + value: 64 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_SizeDelta.y + value: 64 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_Pivot.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22409286, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 81acfa4b78dfa47499a6c2fd6e521ebd, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1123657404 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1123657405} + - 212: {fileID: 1123657408} + - 61: {fileID: 1123657407} + - 50: {fileID: 1123657406} + m_Layer: 1 + m_Name: boxCrate_double + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1123657405 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1123657404} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.96, y: -0.84, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 623172105} + m_RootOrder: 2 +--- !u!50 &1123657406 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1123657404} + m_UseAutoMass: 0 + m_Mass: 10 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &1123657407 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1123657404} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Size: {x: 1.28, y: 1.28} +--- !u!212 &1123657408 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1123657404} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 4 + m_Sprite: {fileID: 21300000, guid: ee8739f042e99cf4598897d7c9f2ac78, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &1211950366 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1211950371} + - 20: {fileID: 1211950370} + - 92: {fileID: 1211950369} + - 124: {fileID: 1211950368} + - 81: {fileID: 1211950367} + - 114: {fileID: 1211950372} + 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 &1211950367 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + m_Enabled: 1 +--- !u!124 &1211950368 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + m_Enabled: 1 +--- !u!92 &1211950369 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + m_Enabled: 1 +--- !u!20 &1211950370 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + 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: 1 + 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: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!4 &1211950371 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + 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_Children: + - {fileID: 1535694299} + - {fileID: 2006927478} + - {fileID: 115822838} + - {fileID: 775151540} + m_Father: {fileID: 0} + m_RootOrder: 2 +--- !u!114 &1211950372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1211950366} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d8238cc53530b64fbb7828c3d3bb591, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 1040339737} + damping: 1 + lookAheadFactor: 3 + lookAheadReturnSpeed: 0.5 + lookAheadMoveThreshold: 0.1 +--- !u!224 &1315479832 stripped +RectTransform: + m_PrefabParentObject: {fileID: 22493834, guid: 5cd0f2565c094c14c89345b5d6081634, + type: 2} + m_PrefabInternal: {fileID: 278910591} +--- !u!1 &1535694298 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1535694299} + - 212: {fileID: 1535694300} + m_Layer: 0 + m_Name: blue_grass (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1535694299 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1535694298} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.48, y: 0.029999971, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1211950371} + m_RootOrder: 0 +--- !u!212 &1535694300 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1535694298} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 664008e3f37538b43bcf3c85cb63eb25, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &1535860038 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 172026, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1535860039} + m_Layer: 0 + m_Name: CeilingCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1535860039 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 470258, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1535860038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.174, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1040339737} + m_RootOrder: 1 +--- !u!1 &1616144788 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 187154, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1616144789} + m_Layer: 0 + m_Name: GroundCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1616144789 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 433672, guid: 1533e3cbd3874cb49963f3ef4fbba830, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1616144788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1.271, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1040339737} + m_RootOrder: 0 +--- !u!1 &1753342300 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1753342301} + - 212: {fileID: 1753342303} + - 61: {fileID: 1753342302} + m_Layer: 1 + m_Name: grassHalf_mid (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1753342301 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1753342300} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.02, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 2 +--- !u!61 &1753342302 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1753342300} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &1753342303 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1753342300} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &1802928800 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1802928801} + - 212: {fileID: 1802928803} + - 61: {fileID: 1802928802} + m_Layer: 1 + m_Name: grassHalf_mid (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1802928801 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1802928800} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.62, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 7 +--- !u!61 &1802928802 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1802928800} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &1802928803 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1802928800} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &1953868705 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1953868706} + - 212: {fileID: 1953868708} + - 61: {fileID: 1953868707} + m_Layer: 1 + m_Name: grassHalf_mid (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1953868706 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1953868705} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.9, y: -2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 308732209} + m_RootOrder: 6 +--- !u!61 &1953868707 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1953868705} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0.27382135} + serializedVersion: 2 + m_Size: {x: 1.28, y: 0.732358} +--- !u!212 &1953868708 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1953868705} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &1956271410 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1956271411} + - 212: {fileID: 1956271414} + - 61: {fileID: 1956271413} + - 50: {fileID: 1956271412} + m_Layer: 1 + m_Name: boxCrate_double (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1956271411 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1956271410} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.63, y: 1.88, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 623172105} + m_RootOrder: 3 +--- !u!50 &1956271412 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1956271410} + m_UseAutoMass: 0 + m_Mass: 10 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &1956271413 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1956271410} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Size: {x: 1.28, y: 1.28} +--- !u!212 &1956271414 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1956271410} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 4 + m_Sprite: {fileID: 21300000, guid: ee8739f042e99cf4598897d7c9f2ac78, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1 &2006927476 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 2006927478} + - 212: {fileID: 2006927477} + m_Layer: 0 + m_Name: blue_grass + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &2006927477 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2006927476} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000e000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: 664008e3f37538b43bcf3c85cb63eb25, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!4 &2006927478 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2006927476} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.76, y: 0.029999971, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1211950371} + m_RootOrder: 1 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity.meta new file mode 100644 index 00000000..75749099 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6fabbdad66303343829c93cd507d54a +timeCreated: 1438019905 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics.meta new file mode 100644 index 00000000..81ad191f --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 781f7e60845fa6444bc8b9c1e77958b6 +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller new file mode 100644 index 00000000..5c0aa357 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller @@ -0,0 +1,284 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Alien Anim Controller + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Speed + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: Ground + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 110732076} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 0} +--- !u!1101 &110106088 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Ground + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110269928} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: .75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110122226 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Ground + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110235344} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110135298 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Ground + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110205172} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: .75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110177224 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 3 + m_ConditionEvent: Speed + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110205172} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: .75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110186850 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 4 + m_ConditionEvent: Speed + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110269928} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110188276 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Ground + m_EventTreshold: .00999999978 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110235344} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: .25 + m_TransitionOffset: 0 + m_ExitTime: .75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &110205172 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Walk + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110186850} + - {fileID: 110122226} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 88d74c17746135542ab1e2a0f0c11ba9, type: 2} + m_Tag: + m_SpeedParameter: Speed + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &110235344 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Jump + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110106088} + - {fileID: 110135298} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 8c928960558a5a04bb9c4734a29e0c46, type: 2} + m_Tag: + m_SpeedParameter: Speed + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &110269928 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Stand + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110177224} + - {fileID: 110188276} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 1014826b14d1e6d4eb8fd74499642f6e, type: 2} + m_Tag: + m_SpeedParameter: Speed + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &110732076 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 110269928} + m_Position: {x: 264, y: -36, z: 0} + - serializedVersion: 1 + m_State: {fileID: 110205172} + m_Position: {x: 516, y: 12, z: 0} + - serializedVersion: 1 + m_State: {fileID: 110235344} + m_Position: {x: 504, y: 144, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: + data: + first: {fileID: 110732076} + second: [] + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 110269928} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller.meta new file mode 100644 index 00000000..a908b644 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien Anim Controller.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 99ca6413d98ec0847bc752657029ca07 +timeCreated: 1438021991 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab new file mode 100644 index 00000000..375de4c8 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab @@ -0,0 +1,212 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &169500 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 471762} + - 212: {fileID: 21299612} + - 58: {fileID: 5804744} + - 50: {fileID: 5086142} + - 95: {fileID: 9512448} + - 114: {fileID: 11466618} + - 114: {fileID: 11415998} + m_Layer: 0 + m_Name: Alien + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &172026 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 470258} + m_Layer: 0 + m_Name: CeilingCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &187154 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 433672} + m_Layer: 0 + m_Name: GroundCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &433672 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187154} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1.271, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 471762} + m_RootOrder: 0 +--- !u!4 &470258 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 172026} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.174, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 471762} + m_RootOrder: 1 +--- !u!4 &471762 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.78, y: -0.29, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 433672} + - {fileID: 470258} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!50 &5086142 +Rigidbody2D: + serializedVersion: 2 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!58 &5804744 +CircleCollider2D: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_Offset: {x: 0, y: -0.66} + serializedVersion: 2 + m_Radius: 0.6495655 +--- !u!95 &9512448 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 99ca6413d98ec0847bc752657029ca07, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 +--- !u!114 &11415998 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3d7b34a3bb2d4e4b926e7e729d3d410, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &11466618 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d08f91df3bd212f429df17f53ce2f364, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MaxSpeed: 10 + m_JumpForce: 400 + m_AirControl: 0 + m_WhatIsGround: {} +--- !u!212 &21299612 +SpriteRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 169500} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 1 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 5 + m_Sprite: {fileID: 21300000, guid: 67eb7e5c33fae9e458ac43dc2fcaedaa, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 169500} + m_IsPrefabParent: 1 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab.meta new file mode 100644 index 00000000..0666a1dc --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Alien.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1533e3cbd3874cb49963f3ef4fbba830 +timeCreated: 1438022051 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim new file mode 100644 index 00000000..1f75092e --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Jump + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 21300000, guid: 59b0db6244e9f0e4cbb75d49b2a65bbe, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 1 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 0 + attribute: 0 + script: {fileID: 0} + classID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 21300000, guid: 59b0db6244e9f0e4cbb75d49b2a65bbe, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim.meta new file mode 100644 index 00000000..9e11a92e --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Jump.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c928960558a5a04bb9c4734a29e0c46 +timeCreated: 1438022038 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim new file mode 100644 index 00000000..88652008 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Stand + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 21300000, guid: 67eb7e5c33fae9e458ac43dc2fcaedaa, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 1 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 0 + attribute: 0 + script: {fileID: 0} + classID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 21300000, guid: 67eb7e5c33fae9e458ac43dc2fcaedaa, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim.meta new file mode 100644 index 00000000..148d45bc --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Stand.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1014826b14d1e6d4eb8fd74499642f6e +timeCreated: 1438021990 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim new file mode 100644 index 00000000..aa4e08e5 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Walk + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 21300000, guid: 9d04b178abd2fdf4fbda646f08daad4a, type: 3} + - time: .125 + value: {fileID: 21300000, guid: 93f12b17172571b4cafd7fbea9093de5, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 8 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 0 + attribute: 0 + script: {fileID: 0} + classID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 21300000, guid: 9d04b178abd2fdf4fbda646f08daad4a, type: 3} + - {fileID: 21300000, guid: 93f12b17172571b4cafd7fbea9093de5, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_StartTime: 0 + m_StopTime: .25 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim.meta new file mode 100644 index 00000000..09ea88fc --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/Walk.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88d74c17746135542ab1e2a0f0c11ba9 +timeCreated: 1438022004 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png new file mode 100644 index 0000000000000000000000000000000000000000..5a74c7ae972ab280790fd63dca5baa6b870caef7 GIT binary patch literal 7382 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 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png.meta new file mode 100644 index 00000000..c464e80d --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_jump.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 59b0db6244e9f0e4cbb75d49b2a65bbe +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png new file mode 100644 index 0000000000000000000000000000000000000000..51fcef98887f310c6f2c622751b4ec877205d8e9 GIT binary patch literal 7313 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 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png.meta new file mode 100644 index 00000000..59f13547 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_stand.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 67eb7e5c33fae9e458ac43dc2fcaedaa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb7fbf63c33fb5301763b469d7050c5b0028eb5 GIT binary patch literal 7467 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 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png.meta new file mode 100644 index 00000000..cfc19c9c --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk1.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 9d04b178abd2fdf4fbda646f08daad4a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png new file mode 100644 index 0000000000000000000000000000000000000000..464c9100d546722d7777f41fcefe3d62d63f5aba GIT binary patch literal 7328 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 XVTUjA$J_FMy&39g>T7&bw+;V42`B2_ literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png.meta new file mode 100644 index 00000000..04a06e49 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Character Graphics/alienGreen_walk2.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 93f12b17172571b4cafd7fbea9093de5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground.meta new file mode 100644 index 00000000..6f74d5ff --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bae0b59a2c825be4788de7ab461286c0 +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/boxCrate_double.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/boxCrate_double.png new file mode 100644 index 0000000000000000000000000000000000000000..86ed1331cafd87bf951be7539bc9b84c2d57fa7f GIT binary patch literal 2586 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 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_left.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_left.png.meta new file mode 100644 index 00000000..5d94401b --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_left.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: f53852f4446afe347b4c9ea54202a3d6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..f1cd7c1ac7db40456ef853e1cda1613d5347dce4 GIT binary patch literal 3124 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 Y0G%V18b#f`DnL6JzCk{xz1L;`3*nd>0RR91 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png.meta new file mode 100644 index 00000000..aecb1a1f --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_mid.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 9cdcdb98dee6b4b40a82d7e9cff8fa8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png new file mode 100644 index 0000000000000000000000000000000000000000..4b65788d290403c29666777d018b6e7e507c794f GIT binary patch literal 3552 zcmcgvX;f0}7Cty4Sdjw`)hD8vl`<%5;)GL5<&d+M2>~f7gM#yfmR4qEk(Qd`R1S@5 zrdFR=saZjj<&bH!m6ldiMxkBotM2`AyFc$)>zw_*`#k&E``!Cl>#VcO*V|(rL>~eG zz&xU-o1fhB=5DZx{CUNZd_!*Zxb7ibf7TXmA~}u*I8#}hX$T^N97*$|k*UeC*J$0||gGyqs<$hE5{0(O48_?nu9Y zUS9tj%3%CPbGUxAf7kn8i8%quY#Q2+#$mq-ip55_x*|-2=}amsk+b{<+{+73WOBGL#4~72?yp$tzhmA17(1r~23wxljTT2wpix)H zu^5OSC&ttNT#L&e`F_Sy|6GgfA7jz-V$gGQ{f{~Sa>>OrxBRVI`R2FoX-v7;}C}Y zC_^+%l^V&m&;-w3f^}z)=bOQG2`35?!P~2{Jb7AI*D1hFVsq)Y);TpyIF}9g@y9&^ z%QnO_1BcTc>v3;CbH%SEGn0u^Cnw7rGiFD{o@dIv-8V;sJoOyOuTs3xG~dPW^RUIm z>92cK!$r%@R2~-}rQB-j8ck$%e2-Qk6=HYt4VzBb2oon}hoPV^*DeSsK)K)0-la8X z3z~D<=l2k{_m`@7=6S3B%~a1? zx+!Ji(x>C`&&+@+HT0W?b+oSLz4o2xlHG|iw!c-axI51qW1wGZ_AoyD z$+wObNuecBlFP|v;_cVmfU?_cL$Q!9(CJREAfN*H0bMi;{|1vfLCYGR7%&Z&VQ z6PJz0il;utG|sSWn%mjNwNSp1+Ey>i%o$COC3LYkrTkuj_tyhk96xHMlzy_`ZPsyT zUuV}$f9CL0sc;kQ9Qyv-1wyuQ_LhSWHv0D|Y%zA29?eafoXtHy^J=Uyi969&^!)nn z)KqGHIWzrvUd6(O@&qS4L@C^N3ewXxQz&HQl`ZJ6os?{hkV)3=s1m-8jB!UcDbF*R ztgIY(Gz6d6akBoK&$%59{qCLRQ>ALPIquMxq3u5U4MDX|4&F{3DagM%z8FhngLFep zVBLP$THl(~BlCN&+)C`eI^f-mUehHuZ?3quh{*5V5oTBk?}zQf@E$++OL%tOSjU9u zY^NIi^!lS#zwbgJ)~_X{tm59|Ffeegm-_srn&suZH=IUjt$e*add*=l;eHt$LoCUc zJzSZr=dX~!7K3=l z4B1tk^=re_D@hrt>2|Y*eqT04B+a0Pz^xs#>3m!lw>-llqIN7V64;#(c!9vXW9Xv5-lTp zob@RU8xt(b=Mf^;^bT8xXTJ2Cj4H8;P*qqp{UY;Z_i|X?XwLd4+b^rvg-U9Xi$NeD zReGhR%^S@LFMt3=w{enq!%q0cy2^pi=&A%``q%^kc#!rmh|alac~1duS8-P~kOT0~ zaDZ2^lE_&tr3A`GcK>vlwz?I8Q;#&DbfA<-RW}dvmiWHgzoeF9ct0&1{6QmO>%zKb z#^n;H`1i)T_3rs!)3ukjS|tZx&pRy8+Ctvhez(4raW24z+)2s_*F9!_{+1@-6NQyr z-PcU940}JHT#!k(p>3$vl)8%th}kEWgPIvAN(WQJtVH9@Y2nx6@R;X^utKnsFQ)4a zbtEKUW!c*awkL$*!g zy&_JiSl;(?sC_M7bZZ*{#g{g(95MrsTN^+@FIqG;VV;^}l+`RfaIZ+!ADmCz#=D!A zSB}ai_?5C+@$a8B1b<&gAkb&q`u8pbdy4m^syPI*bPHSUWsF{kKCYr`$hm3dHCA@rL zFni8Ul@KaD2w#gxVu-nDxIz-!m{`@IXIJnCCk*<=8$VM6TxAdstAj|rNjY;+Q z#en}9-<5P*J_%8Agl=~FFoY?TeMQ%1aDuBvTQk`y4T#Pt^(@m4%-No)W=nd8Mz#gi z^$VAIrJga^ADyk$F# z^Z>YG=Vl;89oP*bVF5E0UN>+?_y6xat}qk90|5gA5tC3mgZ#OFE~2})+bI`P_P+p` CsO;eY literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png.meta new file mode 100644 index 00000000..73748ab5 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Ground/grassHalf_right.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 3950b0d7c2916084f8be9d9b9593ee5a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts.meta new file mode 100644 index 00000000..60d8abcd --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9ad731d04a25b38429839a27334d916f +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs new file mode 100644 index 00000000..93c90210 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs @@ -0,0 +1,53 @@ +using System; +using UnityEngine; + +namespace UnityStandardAssets._2D +{ + public class Camera2DFollow : MonoBehaviour + { + public Transform target; + public float damping = 1; + public float lookAheadFactor = 3; + public float lookAheadReturnSpeed = 0.5f; + public float lookAheadMoveThreshold = 0.1f; + + private float m_OffsetZ; + private Vector3 m_LastTargetPosition; + private Vector3 m_CurrentVelocity; + private Vector3 m_LookAheadPos; + + // Use this for initialization + private void Start() + { + m_LastTargetPosition = target.position; + m_OffsetZ = (transform.position - target.position).z; + transform.parent = null; + } + + + // Update is called once per frame + private void Update() + { + // only update lookahead pos if accelerating or changed direction + float xMoveDelta = (target.position - m_LastTargetPosition).x; + + bool updateLookAheadTarget = Mathf.Abs(xMoveDelta) > lookAheadMoveThreshold; + + if (updateLookAheadTarget) + { + m_LookAheadPos = lookAheadFactor*Vector3.right*Mathf.Sign(xMoveDelta); + } + else + { + m_LookAheadPos = Vector3.MoveTowards(m_LookAheadPos, Vector3.zero, Time.deltaTime*lookAheadReturnSpeed); + } + + Vector3 aheadTargetPos = target.position + m_LookAheadPos + Vector3.forward*m_OffsetZ; + Vector3 newPos = Vector3.SmoothDamp(transform.position, aheadTargetPos, ref m_CurrentVelocity, damping); + + transform.position = newPos; + + m_LastTargetPosition = target.position; + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs.meta new file mode 100644 index 00000000..81be27c6 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Camera2DFollow.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5d8238cc53530b64fbb7828c3d3bb591 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs new file mode 100644 index 00000000..9e461a82 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs @@ -0,0 +1,35 @@ +using UnityEngine; +using CnControls; + +// Just in case so no "duplicate definition" stuff shows up +namespace UnityStandardAssets.Copy._2D +{ + [RequireComponent(typeof (PlatformerCharacter2D))] + public class Platformer2DUserControl : MonoBehaviour + { + private PlatformerCharacter2D m_Character; + private bool m_Jump; + + private void Awake() + { + m_Character = GetComponent(); + } + + private void Update() + { + if (!m_Jump) + { + // Read the jump input in Update so button presses aren't missed. + m_Jump = CnInputManager.GetButtonDown("Jump"); + } + } + + private void FixedUpdate() + { + float h = CnInputManager.GetAxis("Horizontal"); + // Pass all parameters to the character control script. + m_Character.Move(h, m_Jump); + m_Jump = false; + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs.meta new file mode 100644 index 00000000..98fa9099 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Platformer2DUserControl.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: faa4c921e52aa4c4892eeed83f878356 +timeCreated: 1471678007 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs new file mode 100644 index 00000000..71ec9098 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs @@ -0,0 +1,96 @@ +using System; +using UnityEngine; + +// Just in case so no "duplicate definition" stuff shows up +namespace UnityStandardAssets.Copy._2D +{ + public class PlatformerCharacter2D : MonoBehaviour + { + [SerializeField] + private float m_MaxSpeed = 10f; // The fastest the player can travel in the x axis. + [SerializeField] + private float m_JumpForce = 400f; // Amount of force added when the player jumps. + [SerializeField] + private bool m_AirControl = false; // Whether or not a player can steer while jumping; + [SerializeField] + private LayerMask m_WhatIsGround; // A mask determining what is ground to the character + + private Transform m_GroundCheck; // A position marking where to check if the player is grounded. + const float k_GroundedRadius = .2f; // Radius of the overlap circle to determine if grounded + private bool m_Grounded; // Whether or not the player is grounded. + private Animator m_Anim; // Reference to the player's animator component. + private Rigidbody2D m_Rigidbody2D; + private bool m_FacingRight = true; // For determining which way the player is currently facing. + + private void Awake() + { + // Setting up references. + m_GroundCheck = transform.Find("GroundCheck"); + m_Anim = GetComponent(); + m_Rigidbody2D = GetComponent(); + } + + + private void FixedUpdate() + { + m_Grounded = false; + + // The player is grounded if a circlecast to the groundcheck position hits anything designated as ground + // This can be done using layers instead but Sample Assets will not overwrite your project settings. + Collider2D[] colliders = Physics2D.OverlapCircleAll(m_GroundCheck.position, k_GroundedRadius, m_WhatIsGround); + for (int i = 0; i < colliders.Length; i++) + { + if (colliders[i].gameObject != gameObject) + m_Grounded = true; + } + m_Anim.SetBool("Ground", m_Grounded); + } + + + public void Move(float move, bool jump) + { + //only control the player if grounded or airControl is turned on + if (m_Grounded || m_AirControl) + { + // The Speed animator parameter is set to the absolute value of the horizontal input. + m_Anim.SetFloat("Speed", Mathf.Abs(move)); + + // Move the character + m_Rigidbody2D.velocity = new Vector2(move * m_MaxSpeed, m_Rigidbody2D.velocity.y); + + // If the input is moving the player right and the player is facing left... + if (move > 0 && !m_FacingRight) + { + // ... flip the player. + Flip(); + } + // Otherwise if the input is moving the player left and the player is facing right... + else if (move < 0 && m_FacingRight) + { + // ... flip the player. + Flip(); + } + } + // If the player should jump... + if (m_Grounded && jump && m_Anim.GetBool("Ground")) + { + // Add a vertical force to the player. + m_Grounded = false; + m_Anim.SetBool("Ground", false); + m_Rigidbody2D.AddForce(new Vector2(0f, m_JumpForce)); + } + } + + + private void Flip() + { + // Switch the way the player is labelled as facing. + m_FacingRight = !m_FacingRight; + + // Multiply the player's x local scale by -1. + Vector3 theScale = transform.localScale; + theScale.x *= -1; + transform.localScale = theScale; + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs.meta new file mode 100644 index 00000000..5dd33b1a --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/PlatformerCharacter2D.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d08f91df3bd212f429df17f53ce2f364 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs new file mode 100644 index 00000000..9574f4b0 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UnityStandardAssets._2D +{ + public class Restarter : MonoBehaviour + { + private void OnTriggerEnter2D(Collider2D other) + { + if (other.tag == "Player") + { + SceneManager.LoadScene(SceneManager.GetActiveScene().name); + } + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs.meta new file mode 100644 index 00000000..7fc891b7 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/2D/Scripts/Restarter.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e053b0a94752146e79954ce4df1b5565 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.meta new file mode 100644 index 00000000..145d637f --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 31d92ce00799e3c4e90a9f94ec23c4fc +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity new file mode 100644 index 00000000..d6e1450b --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity @@ -0,0 +1,1055 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + 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_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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + m_GIWorkflowMode: 0 + m_LightmapsMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 3 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AOMaxDistance: 1 + m_Padding: 2 + m_CompAOExponent: 0 + m_LightmapParameters: {fileID: 0} + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666667 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &97171752 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 97171753} + - 222: {fileID: 97171755} + - 114: {fileID: 97171754} + m_Layer: 5 + m_Name: Image 3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &97171753 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 97171752} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 281994580} + m_RootOrder: 3 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 42} + m_SizeDelta: {x: 53.333332, y: 53.333332} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &97171754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 97171752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 2cd0473fd8ba8a9478a6ea98025a16f0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &97171755 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 97171752} +--- !u!1 &281994577 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 151076, guid: 943b21e331e945146beb63726ff855df, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 281994580} + - 222: {fileID: 281994579} + - 114: {fileID: 281994578} + m_Layer: 5 + m_Name: Base + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &281994578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11480696, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 281994577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &281994579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22277172, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 281994577} +--- !u!224 &281994580 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22486632, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 281994577} + 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_Children: + - {fileID: 2065463895} + - {fileID: 1927415593} + - {fileID: 367104073} + - {fileID: 97171753} + m_Father: {fileID: 1567391646} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 100, y: 93} + m_SizeDelta: {x: 106.66666, y: 106.66666} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &367104072 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 367104073} + - 222: {fileID: 367104075} + - 114: {fileID: 367104074} + m_Layer: 5 + m_Name: Image 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &367104073 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 367104072} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 281994580} + m_RootOrder: 2 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -42} + m_SizeDelta: {x: 53.333332, y: 53.333332} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &367104074 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 367104072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 2cd0473fd8ba8a9478a6ea98025a16f0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &367104075 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 367104072} +--- !u!1 &730601709 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 730601713} + - 33: {fileID: 730601712} + - 135: {fileID: 730601711} + - 23: {fileID: 730601710} + - 114: {fileID: 730601714} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &730601710 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 730601709} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!135 &730601711 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 730601709} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &730601712 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 730601709} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &730601713 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 730601709} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 +--- !u!114 &730601714 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 730601709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7231e344bf4fee244a3cbea5541b7188, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &735024638 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 133826, guid: 943b21e331e945146beb63726ff855df, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 735024639} + - 222: {fileID: 735024641} + - 114: {fileID: 735024640} + m_Layer: 5 + m_Name: Stick + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &735024639 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22483060, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 735024638} + 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_Children: [] + m_Father: {fileID: 1567391646} + m_RootOrder: 1 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -25.000053, y: -28.499987} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &735024640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11489796, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 735024638} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 4bc4df1939d750840a6c849a32296205, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &735024641 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22232102, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 735024638} +--- !u!1 &912352042 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 912352046} + - 33: {fileID: 912352045} + - 64: {fileID: 912352044} + - 23: {fileID: 912352043} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &912352043 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 912352042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &912352044 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 912352042} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &912352045 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 912352042} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &912352046 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 912352042} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 +--- !u!1 &916033643 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 916033645} + - 108: {fileID: 916033644} + 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 &916033644 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 916033643} + m_Enabled: 1 + serializedVersion: 6 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_AreaSize: {x: 1, y: 1} +--- !u!4 &916033645 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 916033643} + m_LocalRotation: {x: 0.063045286, y: 0.4630129, z: -0.29958537, w: 0.831801} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 +--- !u!1 &1056959022 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1056959026} + - 114: {fileID: 1056959025} + - 114: {fileID: 1056959024} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1056959024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1056959022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1056959025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1056959022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1056959026 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1056959022} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 +--- !u!1 &1374478143 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1374478147} + - 223: {fileID: 1374478146} + - 114: {fileID: 1374478145} + - 114: {fileID: 1374478144} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1374478144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1374478143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1374478145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1374478143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1374478146 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1374478143} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1374478147 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1374478143} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1567391646} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1378331519 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1378331524} + - 20: {fileID: 1378331523} + - 92: {fileID: 1378331522} + - 124: {fileID: 1378331521} + - 81: {fileID: 1378331520} + 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 &1378331520 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1378331519} + m_Enabled: 1 +--- !u!124 &1378331521 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1378331519} + m_Enabled: 1 +--- !u!92 &1378331522 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1378331519} + m_Enabled: 1 +--- !u!20 &1378331523 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1378331519} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + 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: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!4 &1378331524 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1378331519} + m_LocalRotation: {x: -0.16710004, y: -0.7265909, z: 0.19007656, w: -0.63876} + m_LocalPosition: {x: -5.74, y: 3.2, z: 0.04} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!1 &1567391645 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 144978, guid: 943b21e331e945146beb63726ff855df, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1567391646} + - 222: {fileID: 1567391649} + - 114: {fileID: 1567391648} + - 114: {fileID: 1567391647} + m_Layer: 5 + m_Name: Custom D-Pad-like Joystick + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1567391646 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1567391645} + 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_Children: + - {fileID: 281994580} + - {fileID: 735024639} + m_Father: {fileID: 1374478147} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 250, y: 243} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1567391647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11421910, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1567391645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eeb64258239543b4db1c80658a0d4f2c, type: 3} + m_Name: + m_EditorClassIdentifier: + MovementRange: 50 + HorizontalAxisName: Horizontal + VerticalAxisName: Vertical + HideOnRelease: 0 + MoveBase: 0 + SnapsToFinger: 0 + JoystickMoveAxis: 3 + JoystickBase: {fileID: 281994578} + Stick: {fileID: 735024640} + TouchZone: {fileID: 1567391646} +--- !u!114 &1567391648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 11487462, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1567391645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1567391649 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 22252930, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1567391645} +--- !u!1 &1927415592 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1927415593} + - 222: {fileID: 1927415595} + - 114: {fileID: 1927415594} + m_Layer: 5 + m_Name: Image 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1927415593 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927415592} + m_LocalRotation: {x: 0, y: 0, z: 1, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 281994580} + m_RootOrder: 1 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 42, y: 0} + m_SizeDelta: {x: 53.333332, y: 53.333332} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1927415594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927415592} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 2cd0473fd8ba8a9478a6ea98025a16f0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1927415595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927415592} +--- !u!1 &2065463894 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2065463895} + - 222: {fileID: 2065463897} + - 114: {fileID: 2065463896} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2065463895 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2065463894} + 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_Children: [] + m_Father: {fileID: 281994580} + m_RootOrder: 0 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -42, y: 0} + m_SizeDelta: {x: 53.333332, y: 53.333332} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2065463896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2065463894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 2cd0473fd8ba8a9478a6ea98025a16f0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &2065463897 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2065463894} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity.meta new file mode 100644 index 00000000..f34bddc9 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e4b49b8277684a4a8a8688003742b24 +timeCreated: 1441002883 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs new file mode 100644 index 00000000..c959e5b2 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs @@ -0,0 +1,43 @@ +using CnControls; +using UnityEngine; + +namespace CustomJoystick +{ + public class FourWayController : MonoBehaviour + { + private Vector3[] directionalVectors = { Vector3.forward, Vector3.back, Vector3.right, Vector3.left }; + + private Transform _mainCameraTransform; + + private void Awake() + { + _mainCameraTransform = Camera.main.transform; + } + + private void Update() + { + var movementVector = new Vector3(CnInputManager.GetAxis("Horizontal"), 0f, CnInputManager.GetAxis("Vertical")); + if (movementVector.sqrMagnitude < 0.00001f) return; + + // Clamping + Vector3 closestDirectionVector = directionalVectors[0]; + float closestDot = Vector3.Dot(movementVector, closestDirectionVector); + for (int i = 1; i < directionalVectors.Length; i++) + { + float dot = Vector3.Dot(movementVector, directionalVectors[i]); + if (dot < closestDot) + { + closestDirectionVector = directionalVectors[i]; + closestDot = dot; + } + } + + // closestDirectionVector is what we need + var transformedDirection = _mainCameraTransform.InverseTransformDirection(closestDirectionVector); + transformedDirection.y = 0f; + transformedDirection.Normalize(); + + transform.position += transformedDirection * Time.deltaTime; + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs.meta new file mode 100644 index 00000000..0483bfdc --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Custom Joystick/FourWayController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7231e344bf4fee244a3cbea5541b7188 +timeCreated: 1441003344 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity new file mode 100644 index 00000000..d3eaa1f7 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity @@ -0,0 +1,677 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + 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_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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + m_GIWorkflowMode: 0 + m_LightmapsMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 3 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AOMaxDistance: 1 + m_Padding: 2 + m_CompAOExponent: 0 + m_LightmapParameters: {fileID: 0} + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666667 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &682570992 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 682570996} + - 114: {fileID: 682570995} + - 114: {fileID: 682570994} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &682570994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 682570992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &682570995 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 682570992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &682570996 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 682570992} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 +--- !u!224 &1079495580 stripped +RectTransform: + m_PrefabParentObject: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, + type: 2} + m_PrefabInternal: {fileID: 1893938830} +--- !u!1001 &1137826725 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalRotation.x + value: 0.10889492 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_LocalRotation.w + value: 0.9940533 + objectReference: {fileID: 0} + - target: {fileID: 400004, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 11400000, guid: baec086904791744185aaa07a6cf55c2, type: 2} + propertyPath: m_Target + value: + objectReference: {fileID: 1690425256} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: baec086904791744185aaa07a6cf55c2, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1690425252 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1690425256} + - 33: {fileID: 1690425255} + - 23: {fileID: 1690425253} + - 143: {fileID: 1690425257} + - 114: {fileID: 1690425254} + m_Layer: 0 + m_Name: Capsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1690425253 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1690425252} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!114 &1690425254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1690425252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b36d7fcb935d73f4a8abfba088463d27, type: 3} + m_Name: + m_EditorClassIdentifier: + MovementSpeed: 10 +--- !u!33 &1690425255 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1690425252} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1690425256 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1690425252} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.61, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1767188603} + m_Father: {fileID: 0} + m_RootOrder: 2 +--- !u!143 &1690425257 +CharacterController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1690425252} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1729815485 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1729815486} + - 223: {fileID: 1729815489} + - 114: {fileID: 1729815488} + - 114: {fileID: 1729815487} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1729815486 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1729815485} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1079495580} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1729815487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1729815485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1729815488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1729815485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 480} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1729815489 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1729815485} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1767188599 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1767188603} + - 33: {fileID: 1767188602} + - 135: {fileID: 1767188601} + - 23: {fileID: 1767188600} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1767188600 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1767188599} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!135 &1767188601 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1767188599} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1767188602 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1767188599} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1767188603 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1767188599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.44, z: 0.33} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1690425256} + m_RootOrder: 0 +--- !u!1 &1768681292 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1768681294} + - 108: {fileID: 1768681293} + 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 &1768681293 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1768681292} + m_Enabled: 1 + serializedVersion: 6 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 0.64 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: 1 + m_Strength: 1 + m_Bias: 0.1 + m_NormalBias: 0.35 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_AreaSize: {x: 1, y: 1} +--- !u!4 &1768681294 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1768681292} + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.109381676, w: 0.87542605} + m_LocalPosition: {x: 2.31, y: 0.94, z: 5.59} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!1001 &1893938830 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1729815486} + m_Modifications: + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_SizeDelta.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_SizeDelta.y + value: 243 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22450750, guid: 943b21e331e945146beb63726ff855df, type: 2} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 943b21e331e945146beb63726ff855df, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &2129100250 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 2129100254} + - 33: {fileID: 2129100253} + - 64: {fileID: 2129100252} + - 23: {fileID: 2129100251} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2129100251 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2129100250} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &2129100252 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2129100250} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &2129100253 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2129100250} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2129100254 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2129100250} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 1, z: 10} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity.meta new file mode 100644 index 00000000..264163de --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person Controller.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c67192132829c4a4b885c55c2544033d +timeCreated: 1437985576 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person.meta new file mode 100644 index 00000000..b0670a11 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4515d448bf13ebe4a8a6b4baaa41bb1f +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs new file mode 100644 index 00000000..092bbb28 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs @@ -0,0 +1,104 @@ +using System; +using UnityEngine; + +namespace UnityStandardAssets.Cameras +{ + public abstract class AbstractTargetFollower : MonoBehaviour + { + public enum UpdateType // The available methods of updating are: + { + FixedUpdate, // Update in FixedUpdate (for tracking rigidbodies). + LateUpdate, // Update in LateUpdate. (for tracking objects that are moved in Update) + ManualUpdate, // user must call to update camera + } + + [SerializeField] protected Transform m_Target; // The target object to follow + [SerializeField] private bool m_AutoTargetPlayer = true; // Whether the rig should automatically target the player. + [SerializeField] private UpdateType m_UpdateType; // stores the selected update type + + protected Rigidbody targetRigidbody; + + + protected virtual void Start() + { + // if auto targeting is used, find the object tagged "Player" + // any class inheriting from this should call base.Start() to perform this action! + if (m_AutoTargetPlayer) + { + FindAndTargetPlayer(); + } + if (m_Target == null) return; + targetRigidbody = m_Target.GetComponent(); + } + + + private void FixedUpdate() + { + // we update from here if updatetype is set to Fixed, or in auto mode, + // if the target has a rigidbody, and isn't kinematic. + if (m_AutoTargetPlayer && (m_Target == null || !m_Target.gameObject.activeSelf)) + { + FindAndTargetPlayer(); + } + if (m_UpdateType == UpdateType.FixedUpdate) + { + FollowTarget(Time.deltaTime); + } + } + + + private void LateUpdate() + { + // we update from here if updatetype is set to Late, or in auto mode, + // if the target does not have a rigidbody, or - does have a rigidbody but is set to kinematic. + if (m_AutoTargetPlayer && (m_Target == null || !m_Target.gameObject.activeSelf)) + { + FindAndTargetPlayer(); + } + if (m_UpdateType == UpdateType.LateUpdate) + { + FollowTarget(Time.deltaTime); + } + } + + + public void ManualUpdate() + { + // we update from here if updatetype is set to Late, or in auto mode, + // if the target does not have a rigidbody, or - does have a rigidbody but is set to kinematic. + if (m_AutoTargetPlayer && (m_Target == null || !m_Target.gameObject.activeSelf)) + { + FindAndTargetPlayer(); + } + if (m_UpdateType == UpdateType.ManualUpdate) + { + FollowTarget(Time.deltaTime); + } + } + + protected abstract void FollowTarget(float deltaTime); + + + public void FindAndTargetPlayer() + { + // auto target an object tagged player, if no target has been assigned + var targetObj = GameObject.FindGameObjectWithTag("Player"); + if (targetObj) + { + SetTarget(targetObj.transform); + } + } + + + public virtual void SetTarget(Transform newTransform) + { + m_Target = newTransform; + } + + + public Transform Target + { + get { return m_Target; } + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs.meta new file mode 100644 index 00000000..da819d75 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AbstractTargetFollower.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 89a534d869bfccd49bebf7cb6fb244b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs new file mode 100644 index 00000000..906ae0f5 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs @@ -0,0 +1,107 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR + +#endif + +namespace UnityStandardAssets.Cameras +{ + [ExecuteInEditMode] + public class AutoCam : PivotBasedCameraRig + { + [SerializeField] private float m_MoveSpeed = 3; // How fast the rig will move to keep up with target's position + [SerializeField] private float m_TurnSpeed = 1; // How fast the rig will turn to keep up with target's rotation + [SerializeField] private float m_RollSpeed = 0.2f;// How fast the rig will roll (around Z axis) to match target's roll. + [SerializeField] private bool m_FollowVelocity = false;// Whether the rig will rotate in the direction of the target's velocity. + [SerializeField] private bool m_FollowTilt = true; // Whether the rig will tilt (around X axis) with the target. + [SerializeField] private float m_SpinTurnLimit = 90;// The threshold beyond which the camera stops following the target's rotation. (used in situations where a car spins out, for example) + [SerializeField] private float m_TargetVelocityLowerLimit = 4f;// the minimum velocity above which the camera turns towards the object's velocity. Below this we use the object's forward direction. + [SerializeField] private float m_SmoothTurnTime = 0.2f; // the smoothing for the camera's rotation + + private float m_LastFlatAngle; // The relative angle of the target and the rig from the previous frame. + private float m_CurrentTurnAmount; // How much to turn the camera + private float m_TurnSpeedVelocityChange; // The change in the turn speed velocity + private Vector3 m_RollUp = Vector3.up;// The roll of the camera around the z axis ( generally this will always just be up ) + + + protected override void FollowTarget(float deltaTime) + { + // if no target, or no time passed then we quit early, as there is nothing to do + if (!(deltaTime > 0) || m_Target == null) + { + return; + } + + // initialise some vars, we'll be modifying these in a moment + var targetForward = m_Target.forward; + var targetUp = m_Target.up; + + if (m_FollowVelocity && Application.isPlaying) + { + // in follow velocity mode, the camera's rotation is aligned towards the object's velocity direction + // but only if the object is traveling faster than a given threshold. + + if (targetRigidbody.velocity.magnitude > m_TargetVelocityLowerLimit) + { + // velocity is high enough, so we'll use the target's velocty + targetForward = targetRigidbody.velocity.normalized; + targetUp = Vector3.up; + } + else + { + targetUp = Vector3.up; + } + m_CurrentTurnAmount = Mathf.SmoothDamp(m_CurrentTurnAmount, 1, ref m_TurnSpeedVelocityChange, m_SmoothTurnTime); + } + else + { + // we're in 'follow rotation' mode, where the camera rig's rotation follows the object's rotation. + + // This section allows the camera to stop following the target's rotation when the target is spinning too fast. + // eg when a car has been knocked into a spin. The camera will resume following the rotation + // of the target when the target's angular velocity slows below the threshold. + var currentFlatAngle = Mathf.Atan2(targetForward.x, targetForward.z)*Mathf.Rad2Deg; + if (m_SpinTurnLimit > 0) + { + var targetSpinSpeed = Mathf.Abs(Mathf.DeltaAngle(m_LastFlatAngle, currentFlatAngle))/deltaTime; + var desiredTurnAmount = Mathf.InverseLerp(m_SpinTurnLimit, m_SpinTurnLimit*0.75f, targetSpinSpeed); + var turnReactSpeed = (m_CurrentTurnAmount > desiredTurnAmount ? .1f : 1f); + if (Application.isPlaying) + { + m_CurrentTurnAmount = Mathf.SmoothDamp(m_CurrentTurnAmount, desiredTurnAmount, + ref m_TurnSpeedVelocityChange, turnReactSpeed); + } + else + { + // for editor mode, smoothdamp won't work because it uses deltaTime internally + m_CurrentTurnAmount = desiredTurnAmount; + } + } + else + { + m_CurrentTurnAmount = 1; + } + m_LastFlatAngle = currentFlatAngle; + } + + // camera position moves towards target position: + transform.position = Vector3.Lerp(transform.position, m_Target.position, deltaTime*m_MoveSpeed); + + // camera's rotation is split into two parts, which can have independend speed settings: + // rotating towards the target's forward direction (which encompasses its 'yaw' and 'pitch') + if (!m_FollowTilt) + { + targetForward.y = 0; + if (targetForward.sqrMagnitude < float.Epsilon) + { + targetForward = transform.forward; + } + } + var rollRotation = Quaternion.LookRotation(targetForward, m_RollUp); + + // and aligning with the target object's up direction (i.e. its 'roll') + m_RollUp = m_RollSpeed > 0 ? Vector3.Slerp(m_RollUp, targetUp, m_RollSpeed*deltaTime) : Vector3.up; + transform.rotation = Quaternion.Lerp(transform.rotation, rollRotation, m_TurnSpeed*m_CurrentTurnAmount*deltaTime); + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs.meta new file mode 100644 index 00000000..77830cf1 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/AutoCam.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a8d3968294210ba4a9d2bb96dfa74a16 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab new file mode 100644 index 00000000..22b16f88 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab @@ -0,0 +1,194 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400000} + m_Layer: 0 + m_Name: Pivot + m_TagString: Untagged + m_Icon: {fileID: -1500306622, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &100002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400002} + - 20: {fileID: 2000000} + - 92: {fileID: 9200000} + - 124: {fileID: 12400000} + - 81: {fileID: 8100000} + m_Layer: 0 + m_Name: MainCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &100004 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400004} + - 54: {fileID: 5400000} + - 114: {fileID: 11400000} + m_Layer: 0 + m_Name: MultipurposeCameraRig + m_TagString: Untagged + m_Icon: {fileID: -215833656, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.34, z: -5.98} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 400002} + m_Father: {fileID: 400004} + m_RootOrder: 0 +--- !u!4 &400002 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_LocalRotation: {x: 0.064484455, y: 0, z: 0, w: 0.9979187} + m_LocalPosition: {x: 0, y: 0.11, z: -3.26} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 400000} + m_RootOrder: 0 +--- !u!4 &400004 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100004} + m_LocalRotation: {x: 0.10889492, y: 0, z: 0, w: 0.9940533} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 400000} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!20 &2000000 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.61960787, g: 0.6745098, b: 0.76862746, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.2 + far clip plane: 5000 + field of view: 50 + orthographic: 0 + orthographic size: 4.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: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!54 &5400000 +Rigidbody: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100004} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0.2 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!81 &8100000 +AudioListener: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 +--- !u!92 &9200000 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a8d3968294210ba4a9d2bb96dfa74a16, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Target: {fileID: 0} + m_AutoTargetPlayer: 1 + m_UpdateType: 0 + m_MoveSpeed: 3 + m_TurnSpeed: 1 + m_RollSpeed: 0.2 + m_FollowVelocity: 0 + m_FollowTilt: 1 + m_SpinTurnLimit: 90 + m_TargetVelocityLowerLimit: 4 + m_SmoothTurnTime: 0.2 +--- !u!124 &12400000 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 100004} + m_IsPrefabParent: 1 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab.meta new file mode 100644 index 00000000..2dde8162 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/MultipurposeCameraRig.prefab.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: baec086904791744185aaa07a6cf55c2 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs new file mode 100644 index 00000000..cc76a6a7 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + + +namespace UnityStandardAssets.Cameras +{ + public abstract class PivotBasedCameraRig : AbstractTargetFollower + { + // This script is designed to be placed on the root object of a camera rig, + // comprising 3 gameobjects, each parented to the next: + + // Camera Rig + // Pivot + // Camera + + protected Transform m_Cam; // the transform of the camera + protected Transform m_Pivot; // the point at which the camera pivots around + protected Vector3 m_LastTargetPosition; + + + protected virtual void Awake() + { + // find the camera in the object hierarchy + m_Cam = GetComponentInChildren().transform; + m_Pivot = m_Cam.parent; + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs.meta new file mode 100644 index 00000000..701f56f8 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/PivotBasedCameraRig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58cb183e16853564e9ed457f8a296db1 +labels: +- Done +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs new file mode 100644 index 00000000..5d7686ed --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using CnControls; + +// This is merely an example, it's for an example purpose only +// Your game WILL require a custom controller scripts, there's just no generic character control systems, +// they at least depend on the animations + +[RequireComponent(typeof(CharacterController))] +public class ThidPersonExampleController : MonoBehaviour +{ + public float MovementSpeed = 10f; + + private Transform _mainCameraTransform; + private Transform _transform; + private CharacterController _characterController; + + private void OnEnable() + { + _mainCameraTransform = Camera.main.GetComponent(); + _characterController = GetComponent(); + _transform = GetComponent(); + } + + public void Update() + { + // Just use CnInputManager. instead of Input. and you're good to go + var inputVector = new Vector3(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical")); + Vector3 movementVector = Vector3.zero; + + // If we have some input + if (inputVector.sqrMagnitude > 0.001f) + { + movementVector = _mainCameraTransform.TransformDirection(inputVector); + movementVector.y = 0f; + movementVector.Normalize(); + _transform.forward = movementVector; + } + + movementVector += Physics.gravity; + _characterController.Move(movementVector * Time.deltaTime); + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs.meta new file mode 100644 index 00000000..652d724b --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Third Person/ThidPersonExampleController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b36d7fcb935d73f4a8abfba088463d27 +timeCreated: 1438017452 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.meta new file mode 100644 index 00000000..dbf1c39c --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3dd7b86f784fa8949ba6bee7858c4425 +folderAsset: yes +timeCreated: 1471272982 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity new file mode 100644 index 00000000..168e6318 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity @@ -0,0 +1,960 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + 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.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SkyboxMaterial: {fileID: 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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 6 + m_GIWorkflowMode: 1 + m_LightmapsMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 3 + m_Resolution: 1 + m_BakeResolution: 50 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AOMaxDistance: 1 + m_Padding: 2 + m_CompAOExponent: 0 + m_LightmapParameters: {fileID: 0} + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666666 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &55403299 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 55403300} + - 108: {fileID: 55403301} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &55403300 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 55403299} + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: 0.62, y: 3.29, z: 0.84} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 1 +--- !u!108 &55403301 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 55403299} + m_Enabled: 1 + serializedVersion: 6 + m_Type: 1 + m_Color: {r: 0.9981744, g: 1, b: 0.86764705, a: 1} + m_Intensity: 0.8 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_AreaSize: {x: 1, y: 1} +--- !u!1 &213368247 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 213368248} + - 33: {fileID: 213368251} + - 135: {fileID: 213368250} + - 23: {fileID: 213368249} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &213368248 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 213368247} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.54, y: 0.59, z: 0.25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 3 +--- !u!23 &213368249 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 213368247} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!135 &213368250 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 213368247} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &213368251 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 213368247} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &368366861 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 368366865} + - 223: {fileID: 368366864} + - 114: {fileID: 368366863} + - 114: {fileID: 368366862} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &368366862 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 368366861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &368366863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 368366861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &368366864 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 368366861} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &368366865 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 368366861} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 914997947} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &849750725 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 849750726} + m_Layer: 0 + m_Name: Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &849750726 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 849750725} + 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_Children: + - {fileID: 1650487428} + - {fileID: 55403300} + - {fileID: 1644587487} + - {fileID: 213368248} + - {fileID: 967508021} + - {fileID: 1403237442} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!1 &892656175 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 892656179} + - 114: {fileID: 892656178} + - 114: {fileID: 892656177} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &892656177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 892656175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &892656178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 892656175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &892656179 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 892656175} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 +--- !u!224 &914997947 stripped +RectTransform: + m_PrefabParentObject: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, + type: 2} + m_PrefabInternal: {fileID: 2027539251} +--- !u!1 &967508020 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 967508021} + - 33: {fileID: 967508024} + - 135: {fileID: 967508023} + - 23: {fileID: 967508022} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &967508021 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 967508020} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.67, y: 0.59, z: -0.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 4 +--- !u!23 &967508022 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 967508020} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!135 &967508023 +SphereCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 967508020} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &967508024 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 967508020} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1403237441 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1403237442} + - 33: {fileID: 1403237445} + - 65: {fileID: 1403237444} + - 23: {fileID: 1403237443} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1403237442 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1403237441} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.52, y: 0.68, z: 1.17} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 5 +--- !u!23 &1403237443 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1403237441} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &1403237444 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1403237441} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1403237445 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1403237441} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1644587486 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1644587487} + - 33: {fileID: 1644587490} + - 65: {fileID: 1644587489} + - 23: {fileID: 1644587488} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1644587487 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644587486} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.53, y: 0.68, z: -0.74} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 2 +--- !u!23 &1644587488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644587486} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &1644587489 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644587486} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1644587490 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1644587486} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1650487424 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1650487428} + - 33: {fileID: 1650487427} + - 64: {fileID: 1650487426} + - 23: {fileID: 1650487425} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1650487425 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650487424} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!64 &1650487426 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650487424} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1650487427 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650487424} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1650487428 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1650487424} + 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_Children: [] + m_Father: {fileID: 849750726} + m_RootOrder: 0 +--- !u!1 &1770100850 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100000, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1770100851} + m_Layer: 0 + m_Name: CameraOffset + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1770100851 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400004, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1770100850} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.9410808, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2098868493} + m_Father: {fileID: 1854435950} + m_RootOrder: 0 +--- !u!1 &1854435949 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100002, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1854435950} + - 114: {fileID: 1854435951} + - 114: {fileID: 1854435952} + m_Layer: 0 + m_Name: CameraSetup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1854435950 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400000, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854435949} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.01858, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1770100851} + m_Father: {fileID: 0} + m_RootOrder: 1 +--- !u!114 &1854435951 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854435949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b96484bda987c4449e27b6505453998, type: 3} + m_Name: + m_EditorClassIdentifier: + Min: -15 + Max: 15 +--- !u!114 &1854435952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854435949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 60aafd75dd462f2449b270080f141917, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: 5 + OriginTransform: {fileID: 1854435950} +--- !u!1001 &2027539251 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 368366865} + m_Modifications: + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_SizeDelta.x + value: 264 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_SizeDelta.y + value: 248 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 22455830, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 844d770c99f6cf24da670a158eaf4fe1, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &2098868492 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100004, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 2098868493} + - 20: {fileID: 2098868497} + - 92: {fileID: 2098868496} + - 124: {fileID: 2098868495} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2098868493 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400002, guid: 12694413a7cd86d47807dffb0c0b2368, type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2098868492} + m_LocalRotation: {x: 0.30070582, y: 0, z: 0, w: 0.95371693} + m_LocalPosition: {x: 0, y: 3.6879168, z: -5.126153} + m_LocalScale: {x: 1, y: 1, z: 0.9999997} + m_Children: [] + m_Father: {fileID: 1770100851} + m_RootOrder: 0 +--- !u!124 &2098868495 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 12400000, guid: 12694413a7cd86d47807dffb0c0b2368, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2098868492} + m_Enabled: 1 +--- !u!92 &2098868496 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 9200000, guid: 12694413a7cd86d47807dffb0c0b2368, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2098868492} + m_Enabled: 1 +--- !u!20 &2098868497 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 2000000, guid: 12694413a7cd86d47807dffb0c0b2368, + type: 2} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2098868492} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.5 + far clip plane: 5000 + field of view: 60 + orthographic: 0 + orthographic size: 100 + 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: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity.meta new file mode 100644 index 00000000..ca039235 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3420cd9431c710b48afd18a9303834d9 +timeCreated: 1440872649 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs new file mode 100644 index 00000000..78a31e14 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs @@ -0,0 +1,18 @@ +using CnControls; +using UnityEngine; + +namespace Examples.Scenes.TouchpadCamera +{ + public class RotateCamera : MonoBehaviour + { + public float RotationSpeed = 15f; + public Transform OriginTransform; + + public void Update() + { + var horizontalMovement = CnInputManager.GetAxis("Horizontal"); + + OriginTransform.Rotate(Vector3.up, horizontalMovement * Time.deltaTime * RotationSpeed); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs.meta new file mode 100644 index 00000000..20b982d6 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotateCamera.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60aafd75dd462f2449b270080f141917 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs new file mode 100644 index 00000000..fa749982 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using System.Collections; + +namespace Examples.Scenes.TouchpadCamera +{ + public class RotationConstraint : MonoBehaviour + { + public float Min = -15f; + public float Max = 15f; + + private Transform _transformCache; + private Quaternion _minQuaternion; + private Quaternion _maxQuaternion; + private Vector3 _rotateAround; + private float _range; + + private void Awake() + { + _transformCache = transform; + + _rotateAround = Vector3.right; + var axisRotation = Quaternion.AngleAxis(_transformCache.localRotation.eulerAngles[0], _rotateAround); + _minQuaternion = axisRotation * Quaternion.AngleAxis(Min, _rotateAround); + _maxQuaternion = axisRotation * Quaternion.AngleAxis(Max, _rotateAround); + _range = Max - Min; + } + + private void LateUpdate() + { + var localRotation = _transformCache.localRotation; + var axisRotation = Quaternion.AngleAxis(localRotation.eulerAngles[0], _rotateAround); + var angleFromMin = Quaternion.Angle(axisRotation, _minQuaternion); + var angleFromMax = Quaternion.Angle(axisRotation, _maxQuaternion); + + if (angleFromMin <= _range && angleFromMax <= _range) + { + return; // within range + } + else + { + // Let's keep the current rotations around other axes and only + // correct the axis that has fallen out of range. + var euler = localRotation.eulerAngles; + if (angleFromMin > angleFromMax) + euler[0] = _maxQuaternion.eulerAngles[0]; + else + euler[0] = _minQuaternion.eulerAngles[0]; + + _transformCache.localEulerAngles = euler; + } + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs.meta b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs.meta new file mode 100644 index 00000000..0fb25af5 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Examples/Scenes/Touchpad Camera/RotationConstraint.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b96484bda987c4449e27b6505453998 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics.meta b/Assets/Scripts/Gameplay/CNControls/Graphics.meta new file mode 100644 index 00000000..a0e0eecc --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Graphics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 31f2b5961af776749bdc0738cb10c279 +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatDark00.png b/Assets/Scripts/Gameplay/CNControls/Graphics/flatDark00.png new file mode 100644 index 0000000000000000000000000000000000000000..e124dbfc67955be08610b81fbba4d955073c4336 GIT binary patch literal 1080 zcmV-81jqY{P)fC)pD4ip6uCFKN4eM3 zMm#j|_Y`3s_`zWC*QYa8Fijuw4Ca9E_xpb&>aYrYg(42}OqQaWA{Fp|L{1qx_<3r; zS4B*a*{UTc>%&RIWZ5pJFWLhBrAboH9mFQK4fqO0WUT{#KA)e~>-D#+R;$x&HfxU( z#QtfHy3J;D+U<5%BA-pCQ%xmwqk*q!^B0T74ftnSE|=P2YFH(>1gk(B{gHRPKtg zAD~>0CL;oXrbsXpJ7SKM#gepwkd}x-(&dCaWqv5BDF8DkIX57#+{~0=Myxz}n`Q`L zni9>B@v-@sPSqWf3kt2xQ!K+004gK8+iUF z&d1u=Q+s6Xi_IyZmO5O*gF{uKSibg&d!G zL*!h!hFnXo8EmWBHXOpxctor`*FWYP@Ex^VbNm1R04;PySaefwW^{L9a%BKwc`jmX yZ*OE|c`jped2n=ZE@^FHXJsx>PDe5{MQ&qnWMy)w27m4V0000005u}1^@s6i_d2*000IONkl$95A zjlhoo-9JA+A6#(!_x>~j)iccJ^Pj9p0)lJA=1OQ?&@aG|oxG))M0ez z(z^{T$nBA}{$E(pKuinftC#C3$eqG9E9`0FAa4hgm)&HQ6jTO z4UUCZmpAsQ3h#_pM2Ieghv3?UNYXN})!8f_uS1=YqW1t+7m5+y?H=)iWaS1^XCTH> zilGp4=tc4h#2t!Xc z#A2~%6<h5hA#J6GvxxN40aI`yo+0MU2blGS+5ds*K9J!9Fg>)y3CHk%!a zqCkKMutHjpCY*-gb0S25X$i28_e>a6KDX3UJE>m0+6zb44$hX273~mjWgU2#E-oCLnxK z4Vd(R`Km7PX8*^R)qv^#k9r_D-2d(P!fNoN{&CV;a6gbQJqatw?@HG=xAlWdCg|wAjV`RfH>hw#SQIrNJ#pg@LH)z6u$;Y3pt1%-8PLq%Cl9A&N?sF9;)t-u>03mkWhy<^;=JT=8G2u^URm-2srP0 zbm)$}^MYZpo^MxUU=>C$yD%>Zx1w!Y=E9ho2B)EyPz>gwmrxAOvtA~r!AZNVPl1}j zRZh8?+GH}hr%OVw*VNSaV^PvdI^=jVpNxS8>U}?|8LZ9m=x23jN&>d%I?1 zRSYn+ljr%>0xXImG_UvJ&0qnw!m~q{m9VZ6pZ+d2zHmgii$#P1if@x){~vk}B_y8{ zVMyXr)hAc*Tb%~BrN(70Eu9NfqkW`(;?)0o=vhj!N zx7tI#TkhrRL~2cFMU?k-*xm?PDe5{MQ&qnWMy)w27m4V O0000%ck literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatDark06.png.meta b/Assets/Scripts/Gameplay/CNControls/Graphics/flatDark06.png.meta new file mode 100644 index 00000000..6befd028 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Graphics/flatDark06.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: b29ef1894836dc440b43ab036ca764cb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight05.png b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight05.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8f6efa2df93b72979987976b66934e424a0973 GIT binary patch literal 1728 zcmV;x20!_UP)005u}1^@s6i_d2*000I~NklohH#3reaJ6h(577r;H|`WIb*;=;;Jm!N{H4j%r1lxz zTnf3n{_!qC4)lLvMgu_;=4+H|Dde5fH8bpK;h<=-O@KNwlBPXLv0Bh?6Gf3;5g!}+ z7cUQSUDst)M8uxNL$_uTDOwy;RkK9A3-%e=^mbFx-XdNr5hoNYSD=%D7`IXki9VvtaQAeo-T-6w7o^7?7DTK!MHdg%8!&huNoajf#iAYl~^ zou$Iv8^J9HVn5MY#w!u}O4yGr5bYkM2gt{Qwsgg>?OK%z&s=dA?(~{iwOu=3s zSW7svmM>=-sEo~e`ndg|wSVuugjIJ7MF-STaMG)Qp|@5+!0SQw``{-!-ybCPLPIKE za?T6ZsW_+V1yeeyis@{I3$|wN=yCy5oV^H%vtGEeAenI72G$Y|*mi+%w`GWaU>XHk z`+->$r1AyRC`j}Jvx=Bg4{*&zjS93|foslw&y2QSxLx2HZRb&Zfd9n^Pq{&dQSfw= zg4$@fP0%GLA86ONQgVyHEDe)>!7L3^{X$>xv>RBb;aeU!0yB<2L(DTD&|?Igu>J#o z)`2u1K;IlZv_$7K7_0+xx?jMIgZ)67PrfRCuS;AG`ICUyOOZAfQ!ZA&qX0%Is$5F?o9<;tyTvYgn(%Y zs38YT1Ux1m0;VTmTM4fcuwINJAOhCo`T4m&0n4)7&SoNLyrLIOE8wqiOTeT6p%4Mn0)#KB0fY75h_C7bf7X9|Sq+%3|JV2$_G59`0-j{?$|0A2H^0pTauj)4xNUy(II8iuae1-C(?fK=*(2dZJ{ zApMTBb74~&Tyu2uxk17uw+$Sv{g&CK&?5-F79Yook=^wB_Pcj|)<9!R>{H z!eg9u1r4jv`L+xFg3w~^cboMAUDMEO>LnF}dFmwdiAN6n1G`O@_m(%bR30zqby`7Oei>z5Ym+o36T#80r|cj+l6>`yjU!@)9LiAp+6g- zcuTXkDjFD?xxc?ZTfo_D7Mgq$ZyF2OD?HA6z21v;j(qyF?C}L6VMtA_O%etuU!K9g z550$yl7EsgB>9wiylbbjMh`lLl9Inm7?ONSxyh~fVyu#D2}6-jRW4EQvMQMeo``y^ z4Flg)X07Mw1SLnO^U;Ua+qU_Tw`@4dYZgx*R?=<9)v`n+H6Ioj60h;AP{Dab9HlH` zEgm-5AL$KJdIUh7=B)8N-M&#&jPZ3Lq}jkwYmwH9AoV*0b7x z*R@i~#-FMsPDe5{MQ&qn WWMy)w27m4V0000L}a8bae+PpAt4EQa{)9l5g8#Xks!pw+dpbX^e{C2 zvg>c#C0Ro-(~pmOxop=2fuI}?hu^2u>Em*_gvp4K5f>cz-4Xs4*9cq@yewY)dcDri z=krE2B)Ar?iEHn6yI)p8!wV%ZI7r5)G9=Ja+|veaixSQFr-TIehI?q0nWx}lMJD(% zsX@Y2r8TagM)LW|-AbqCKELr4sRohBDLS|S+p>u_I&`=@Ap-w)5(l(x2v|>Ew3+RNSa^4yN~gB%$rmxrOH)h;V}Wsl)Ksjj|m{;YmrDI&+GMi zrQxvwye&eR_J4qfoURJIDgz0*t|a{C2Tjg>O~bnnXuGz#v8lSB6g-`#f2$Lk04NPl zD?k_E=?p%B3-DSAkO^KZ0anfPJit_#;CT&n5#VC6a08&u&Ec3v*$fcuv?tOm5Va-J zCTf8U5Vh3=O)X_gL)4^!q0!YiDTqkuHTl4S@q(&ph=8|TF7*{uB})2rAkvler52TD zvstSFW)_vCmNly++boh<)|6aWFAI@Ho_1+TZtW-okwKoeb}($~Edo(jI#SDgAGfzj zKiE5nEW5K_ZuMn2RFel0Rc-?9o6>LbMdJIo?E{}zs}*PP@JG8E(msDe>22a%{KOK= zW^*#_3(Fof+<0tXdEcf|Zv>C-Th*n)fy2<7Zb{Sir#3V2V&5;J#(cN2z6rMWipfh^ z8t)Z)9b1s0M%T00000NkvXXu0mjfZY0Lz literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight22.png.meta b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight22.png.meta new file mode 100644 index 00000000..34c6b6f1 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight22.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 2cd0473fd8ba8a9478a6ea98025a16f0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 150 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png new file mode 100644 index 0000000000000000000000000000000000000000..1e29068d8280abdb2930572fd54f03661361592b GIT binary patch literal 1214 zcmV;v1VQ_WP)L`I6l1$+PkLP8R9xB!}%h>VbxND$)F>t`8cnEv@w z)or^=YVF9Mw);{4F4uNC4(W6{{k~i-e{Z+jI37_vR+arPZemTi0>$j*mVGZmeor-Mj!OMck zCenD2&xWFmfguMGZa@>k%YsPe>NG{?Injx20gnts1nQz?gf+L`&#S;soRtC(84b~L zDxB46y2T~8%sysR9E$QPFL=WMTfw*)<~xY4T$HU`8|3r?T$MdCyC3<|oU@q&&!VR1CJ_gC$Kz3ae0&&IGQ(jq2u1J5JJc4yJmPEXB&$HtiE%3c%p0-=00V%<0hGn6 zWkpyQYm)&;T^z2mjGRV9NGCZ#>a9%O!c=i8xC^qmDYi#zD zDU+!$n@U`1eOo^d;J_&c0NH_Kwj1$fvfP#iWawmLopMi@b8q-Zl@@1d2Srr^XLZ7l z(he8Z2^1UbT!lu`a$l5e31%`y9kxRioludo)YsKVHQ<~)nV77T%w685{rJXpi7%|I zseI#6_Q6rQVP!nRr(G3sU-&}F=s4Sdu@s8U6`7Zu9~$lgY?;h+k=_Uay0@%Lfe#MH zL3DG9Zun~R1-w=0mrx?!t*mcCQ+vheT$ajv$g~AS(gr+DYxyJ-Tk`HjP1T94O~{%C zqLU78X~)V{19aZPX-7-n+kWbdg*TmkLkrLfo6y!Ex)^qRrqo|tcnI9gJFe3a`rP{f zWbJ@cH0B<28XD+0JhO3q^~ey&N&)+F+2Z{_ zU?$pehh&t*0000jbVXQnQ*UN;cVTj60AhJAVr*}3WMp|RV{&KQK cGBibQV{c?-a;OG>?f?J)07*qoM6N<$f@niOiU0rr literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png.meta b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png.meta new file mode 100644 index 00000000..09755479 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight46.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 22802cebf78d3434b9d715f82bbe80c7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight49.png b/Assets/Scripts/Gameplay/CNControls/Graphics/flatLight49.png new file mode 100644 index 0000000000000000000000000000000000000000..b26ca4fd14ef7afd214452317fb65934cdcdae0c GIT binary patch literal 1080 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 literal 0 HcmV?d00001 diff --git a/Assets/Scripts/Gameplay/CNControls/README.pdf.meta b/Assets/Scripts/Gameplay/CNControls/README.pdf.meta new file mode 100644 index 00000000..92e6b059 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/README.pdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a797d1f86cc2df40818ef3ddcb472ae +timeCreated: 1441024113 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts.meta b/Assets/Scripts/Gameplay/CNControls/Scripts.meta new file mode 100644 index 00000000..4bc58d0c --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 91095ab7683a9564da040e25c8b796de +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem.meta new file mode 100644 index 00000000..4c592a6a --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d9deab3a09ed6124e8cbc43ca7eebd76 +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs new file mode 100644 index 00000000..9b25aa28 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs @@ -0,0 +1,336 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace CnControls +{ + /// + /// Common input manager class + /// Can be used instead of Input logic, as it replicates the standard behaviour but adds additional logic + /// + public class CnInputManager + { + private static CnInputManager _instance; + + private static CnInputManager Instance + { + get { return _instance ?? (_instance = new CnInputManager()); } + } + + private CnInputManager() { } + + /// + /// Dictionary of virtual axis + /// Every axis can be mapped to a number of actual virtual axis, + /// as with standard Unity Input system where you can create different buttons for, say, "Horizontal" axis + /// + private Dictionary> _virtualAxisDictionary = + new Dictionary>(); + + /// + /// Dictionary of virtual buttons + /// Every button can be mapped to a number of actual virtual buttons, + /// as with standard Unity Input system where you can create different buttons for, say, "Jump" button + /// + private Dictionary> _virtualButtonsDictionary = + new Dictionary>(); + + /// + /// Additional logic for touch retreival + /// It's possible to add some reflection-based emulated touches + /// + public static int TouchCount + { + get + { + return Input.touchCount; + } + } + + /// + /// Additional logic for touch retreival + /// It's possible to add some reflection-based emulated touches + /// + public static Touch GetTouch(int touchIndex) + { + return Input.GetTouch(touchIndex); + } + + /// + /// GetAxis method for getting current values for any desired axis + /// + /// The name of the axis to get value from + /// + /// Current value of FIRST NON ZERO axis that are registered for that name + /// ZERO if non if the virtual axis are being tweaked + /// + public static float GetAxis(string axisName) + { + return GetAxis(axisName, false); + } + + /// + /// "Copy" of the Input.GetAxisRaw method + /// + /// The name of the axis to get value from + /// + /// Current value of FIRST NON ZERO axis that are registered for that name + /// ZERO if non if the virtual axis are being tweaked + /// + public static float GetAxisRaw(string axisName) + { + return GetAxis(axisName, true); + } + + /// + /// Common private method for getting the axis values + /// + /// The name of the axis to get value from + /// Whether the method sould return the raw value of the axis + /// + private static float GetAxis(string axisName, bool isRaw) + { + // If we have the axis registered as virtual, we call the retreival logic + if (AxisExists(axisName)) + { + return GetVirtualAxisValue(Instance._virtualAxisDictionary[axisName], axisName, isRaw); + } + + // If we don't have the desired virtual axis registered, we just fallback to the default Unity Input behaviour + return isRaw ? Input.GetAxisRaw(axisName) : Input.GetAxis(axisName); + } + + /// + /// Method for retrieval of the desired button pressed state + /// + /// The name of the desired button + /// Is the button being currently pressed? + public static bool GetButton(string buttonName) + { + // We first check the stadard Button behaviour + var standardInputButtonState = Input.GetButton(buttonName); + // If the stadard Unity Input button is being pressed, we just retur true + if (standardInputButtonState == true) return true; + + // If not, we check our virtual buttons + if (ButtonExists(buttonName)) + { + return GetAnyVirtualButton(Instance._virtualButtonsDictionary[buttonName]);; + } + + // If there is no such button registered, we return false; + return false; + } + + /// + /// Method for retrieval of the desired button "has just been pressed" state + /// + /// The name of the desired button + /// Is the button has just been pressed? + public static bool GetButtonDown(string buttonName) + { + // We first check the stadard Button behaviour + var standardInputButtonState = Input.GetButtonDown(buttonName); + // If the stadard Unity Input button is being pressed, we just retur true + if (standardInputButtonState == true) return true; + + // If not, we check our virtual buttons + if (ButtonExists(buttonName)) + { + return GetAnyVirtualButtonDown(Instance._virtualButtonsDictionary[buttonName]); + } + + // If there is no such button registered, we return false; + return false; + } + + /// + /// Method for retrieval of the desired button "has just been released" state + /// + /// The name of the desired button + /// Is the button has just been released? + public static bool GetButtonUp(string buttonName) + { + // We first check the stadard Button behaviour + var standardInputButtonState = Input.GetButtonUp(buttonName); + // If the stadard Unity Input button is being pressed, we just retur true + if (standardInputButtonState == true) return true; + + // If not, we check our virtual buttons + if (ButtonExists(buttonName)) + { + return GetAnyVirtualButtonUp(Instance._virtualButtonsDictionary[buttonName]); + } + + // If there is no such button registered, we return false; + return false; + } + + /// + /// Check whether the specified axis exists + /// + /// Name of the axis to check + /// Does this axis exist? + public static bool AxisExists(string axisName) + { + return Instance._virtualAxisDictionary.ContainsKey(axisName); + } + + /// + /// Check whether the specified button exists + /// + /// Name of the button to check + /// Does this button exist? + public static bool ButtonExists(string buttonName) + { + return Instance._virtualButtonsDictionary.ContainsKey(buttonName); + } + + /// + /// Registers the provided virtual axis + /// + /// Virtual axis to register + public static void RegisterVirtualAxis(VirtualAxis virtualAxis) + { + // If it's the first such virtual axis, create a new list for that axis name + if (!Instance._virtualAxisDictionary.ContainsKey(virtualAxis.Name)) + { + Instance._virtualAxisDictionary[virtualAxis.Name] = new List(); + } + + Instance._virtualAxisDictionary[virtualAxis.Name].Add(virtualAxis); + } + + /// + /// Unregisters the provided virtual axis + /// + /// Virtual axis to unregister + public static void UnregisterVirtualAxis(VirtualAxis virtualAxis) + { + // If it's the first such virtual axis, create a new list for that axis name + if (Instance._virtualAxisDictionary.ContainsKey(virtualAxis.Name)) + { + if (!Instance._virtualAxisDictionary[virtualAxis.Name].Remove(virtualAxis)) + { + Debug.LogError("Requested axis " + virtualAxis.Name + " exists, but there's no such virtual axis that you're trying to unregister"); + } + } + else + { + Debug.LogError("Trying to unregister an axis " + virtualAxis.Name + " that was never registered"); + } + } + + /// + /// Registers the provided virtual button + /// + /// Virtual button to register + public static void RegisterVirtualButton(VirtualButton virtualButton) + { + if (!Instance._virtualButtonsDictionary.ContainsKey(virtualButton.Name)) + { + Instance._virtualButtonsDictionary[virtualButton.Name] = new List(); + } + + Instance._virtualButtonsDictionary[virtualButton.Name].Add(virtualButton); + } + + /// + /// Unregisters the provided virtual button + /// + /// Virtual button to unregister + public static void UnregisterVirtualButton(VirtualButton virtualButton) + { + if (Instance._virtualButtonsDictionary.ContainsKey(virtualButton.Name)) + { + if (!Instance._virtualButtonsDictionary[virtualButton.Name].Remove(virtualButton)) + { + Debug.LogError("Requested button axis exists, but there's no such virtual button that you're trying to unregister"); + } + } + else + { + Debug.LogError("Trying to unregister a button that was never registered"); + } + } + + /// + /// Private method that get's the value of the first non-zero virtual axis, registered with the specified name + /// + /// List of virtual axis to search through + /// Name of the axis (for the standard Input behaviour) + /// Whether the method should return the Raw value of the axis + /// + private static float GetVirtualAxisValue(List virtualAxisList, string axisName, bool isRaw) + { + // The method is really straightforward here + // First, we check the standard Input.GetAxis method + // If it's not zero, we return the value + // If it IS zero, we return first non-zero value of any of the passed virtual axis + // Or zero if all of them are zero + + float axisValue = isRaw ? Input.GetAxisRaw(axisName) : Input.GetAxis(axisName); + if (!Mathf.Approximately(axisValue, 0f)) + { + return axisValue; + } + + for (int i = 0; i < virtualAxisList.Count; i++) + { + var currentAxisValue = virtualAxisList[i].Value; + if (!Mathf.Approximately(currentAxisValue, 0f)) + { + return currentAxisValue; + } + } + + return 0f; + } + + /// + /// Simple logic for checking whether is any of the virtual buttons has been just pressed + /// + /// Virtual buttons to search through + /// Is any of the buttons has just been pressed? + private static bool GetAnyVirtualButtonDown(List virtualButtons) + { + for (int i = 0; i < virtualButtons.Count; i++) + { + if (virtualButtons[i].GetButtonDown) return true; + } + + return false; + } + + /// + /// Simple logic for checking whether is any of the virtual buttons has been just released + /// + /// Virtual buttons to search through + /// Is any of the buttons has just been released? + private static bool GetAnyVirtualButtonUp(List virtualButtons) + { + for (int i = 0; i < virtualButtons.Count; i++) + { + if (virtualButtons[i].GetButtonUp) return true; + } + + return false; + } + + /// + /// Simple logic for checking whether is any of the virtual buttons is currently pressed + /// + /// Virtual buttons to search through + /// Is any of the buttons currently pressed? + private static bool GetAnyVirtualButton(List virtualButtons) + { + for (int i = 0; i < virtualButtons.Count; i++) + { + if (virtualButtons[i].GetButton) return true; + } + + return false; + } + + } +} + diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs.meta new file mode 100644 index 00000000..303aba42 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/CnInputManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2cfc89c3e4780c94b9c4bf0df5faf591 +timeCreated: 1437294313 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs new file mode 100644 index 00000000..46289f0a --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs @@ -0,0 +1,23 @@ +namespace CnControls +{ + /// + /// Virtual axis class + /// + public class VirtualAxis + { + /// + /// Name of the axis for which this virtual axis has to be registered + /// + public string Name { get; set; } + + /// + /// Curret value of the axis + /// + public float Value { get; set; } + + public VirtualAxis(string name) + { + Name = name; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs.meta new file mode 100644 index 00000000..6c3ab450 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualAxis.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1088a533affeb5e48971abf7fcc1d038 +timeCreated: 1437295312 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs new file mode 100644 index 00000000..7e60353d --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs @@ -0,0 +1,87 @@ +using UnityEngine; + +namespace CnControls +{ + /// + /// Virtual button class + /// + public class VirtualButton + { + /// + /// Name of the button for which this virtual button has to be registered + /// + public string Name { get; set; } + + /// + /// Is this button currently pressed? + /// + public bool IsPressed { get; private set; } + + /// + /// The last frame this button was pressed + /// + private int _lastPressedFrame = -1; + + /// + /// The last frame this butto was released + /// + private int _lastReleasedFrame = -1; + + public VirtualButton(string name) + { + Name = name; + } + + /// + /// Press logic sets the current state of the button to "IsPressed" untill the Release() method is called + /// + public void Press() + { + if (IsPressed) + { + return; + } + IsPressed = true; + _lastPressedFrame = Time.frameCount; + } + + /// + /// Release logic frees the button from its "IsPressed" state + /// + public void Release() + { + IsPressed = false; + _lastReleasedFrame = Time.frameCount; + } + + /// + /// Is this button currently pressed? + /// + public bool GetButton + { + get { return IsPressed; } + } + + /// + /// Check whether this button has just been pressed + /// + public bool GetButtonDown + { + get + { + return _lastPressedFrame != -1 && _lastPressedFrame - Time.frameCount == -1; + } + } + + /// + /// Check whether this button has just been released + /// + public bool GetButtonUp + { + get + { + return _lastReleasedFrame != -1 && _lastReleasedFrame == Time.frameCount - 1; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs.meta new file mode 100644 index 00000000..28dfe2b9 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/CnInputSystem/VirtualButton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 31e002a3108352a4ba5d5ff7719fe265 +timeCreated: 1437295313 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers.meta new file mode 100644 index 00000000..44ae9807 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ad022afeb51162240a2e4d9b119d7532 +folderAsset: yes +timeCreated: 1471272981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs new file mode 100644 index 00000000..92ccc9bb --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class CommonOnScreenControl : MonoBehaviour +{ + +} diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs.meta new file mode 100644 index 00000000..1a59a6d6 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/CommonOnScreenControl.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2cc30ec9654a3874699b5f5a8af57270 +timeCreated: 1471369077 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs new file mode 100644 index 00000000..68be85dd --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +namespace CnControls +{ + public class Dpad : MonoBehaviour, IPointerDownHandler, IPointerUpHandler + { + public DpadAxis[] DpadAxis; + + /// + /// Current event camera reference. Needed for the sake of Unity Remote input + /// + public Camera CurrentEventCamera { get; set; } + + public void OnPointerDown(PointerEventData eventData) + { + CurrentEventCamera = eventData.pressEventCamera ?? CurrentEventCamera; + + foreach (var dpadAxis in DpadAxis) + { + if (RectTransformUtility.RectangleContainsScreenPoint(dpadAxis.RectTransform, eventData.position, + CurrentEventCamera)) + { + dpadAxis.Press(eventData.position, CurrentEventCamera, eventData.pointerId); + } + } + } + + public void OnPointerUp(PointerEventData eventData) + { + foreach (var dpadAxis in DpadAxis) + { + dpadAxis.TryRelease(eventData.pointerId); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs.meta new file mode 100644 index 00000000..b1af2b2d --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Dpad.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2fa290c3290a9e04cb780c61b130e5af +timeCreated: 1437919838 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs new file mode 100644 index 00000000..349c5042 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs @@ -0,0 +1,47 @@ +using UnityEngine; + +namespace CnControls +{ + public class DpadAxis : MonoBehaviour + { + public string AxisName; + public float AxisMultiplier; + + public RectTransform RectTransform { get; private set; } + public int LastFingerId { get; set; } + private VirtualAxis _virtualAxis; + + private void Awake() + { + RectTransform = GetComponent(); + } + + private void OnEnable() + { + _virtualAxis = _virtualAxis ?? new VirtualAxis(AxisName); + LastFingerId = -1; + + CnInputManager.RegisterVirtualAxis(_virtualAxis); + } + + private void OnDisable() + { + CnInputManager.UnregisterVirtualAxis(_virtualAxis); + } + + public void Press(Vector2 screenPoint, Camera eventCamera, int pointerId) + { + _virtualAxis.Value = Mathf.Clamp(AxisMultiplier, -1f, 1f); + LastFingerId = pointerId; + } + + public void TryRelease(int pointerId) + { + if (LastFingerId == pointerId) + { + _virtualAxis.Value = 0f; + LastFingerId = -1; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs.meta new file mode 100644 index 00000000..2be73f52 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/DpadAxis.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0f6ae34570738c447a8f81bcb10d610c +timeCreated: 1437920835 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs new file mode 100644 index 00000000..48ee8539 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs @@ -0,0 +1,26 @@ +using UnityEngine.EventSystems; +using UnityEngine; + +namespace CnControls +{ + public class SensitiveJoystick : SimpleJoystick + { + public AnimationCurve SensitivityCurve = new AnimationCurve( + new Keyframe(0f, 0f, 1f, 1f), + new Keyframe(1f, 1f, 1f, 1f)); + + public override void OnDrag(PointerEventData eventData) + { + base.OnDrag(eventData); + + var linearHorizontalValue = HorizintalAxis.Value; + var linearVecticalValue = VerticalAxis.Value; + + var horizontalSign = Mathf.Sign(linearHorizontalValue); + var verticalSign = Mathf.Sign(linearVecticalValue); + + HorizintalAxis.Value = horizontalSign * SensitivityCurve.Evaluate(horizontalSign * linearHorizontalValue); + VerticalAxis.Value = verticalSign * SensitivityCurve.Evaluate(verticalSign * linearVecticalValue); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs.meta new file mode 100644 index 00000000..1eceb14e --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SensitiveJoystick.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 82b762eb0f3558f409212c8907843e62 +timeCreated: 1440831255 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs new file mode 100644 index 00000000..752a0138 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +namespace CnControls +{ + /// + /// Simple button class + /// Handles press, hold and release, just like a normal button + /// + public class SimpleButton : MonoBehaviour, IPointerUpHandler, IPointerDownHandler + { + /// + /// The name of the button + /// + public string ButtonName = "Jump"; + + /// + /// Utility object that is registered in the system + /// + private VirtualButton _virtualButton; + + /// + /// It's pretty simple here + /// When we enable, we register our button in the input system + /// + private void OnEnable() + { + _virtualButton = _virtualButton ?? new VirtualButton(ButtonName); + CnInputManager.RegisterVirtualButton(_virtualButton); + } + + /// + /// When we disable, we unregister our button + /// + private void OnDisable() + { + CnInputManager.UnregisterVirtualButton(_virtualButton); + } + + /// + /// uGUI Event system stuff + /// It's also utilised by the editor input helper + /// + /// Data of the passed event + public void OnPointerUp(PointerEventData eventData) + { + _virtualButton.Release(); + } + + /// + /// uGUI Event system stuff + /// It's also utilised by the editor input helper + /// + /// Data of the passed event + public void OnPointerDown(PointerEventData eventData) + { + _virtualButton.Press(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs.meta new file mode 100644 index 00000000..59444862 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleButton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f80d719f998a67438e69f9f995732ae +timeCreated: 1437737392 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs new file mode 100644 index 00000000..ca45fde6 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs @@ -0,0 +1,265 @@ +using System; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace CnControls +{ + [Flags] + public enum ControlMovementDirection + { + Horizontal = 0x1, + Vertical = 0x2, + Both = Horizontal | Vertical + } + + /// + /// Simple joystick class + /// Contains logic for creating a simple joystick + /// + public class SimpleJoystick : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler + { + /// + /// Current event camera reference. Needed for the sake of Unity Remote input + /// + public Camera CurrentEventCamera { get; set; } + + // ------- Inspector visible variables --------------------------------------- + + /// + /// The range in non-scaled pixels for which we can drag the joystick around + /// + public float MovementRange = 50f; + + /// + /// The name of the horizontal axis for this joystick to update + /// + public string HorizontalAxisName = "Horizontal"; + + /// + /// The name of the vertical axis for this joystick to update + /// + public string VerticalAxisName = "Vertical"; + + /// + /// Should the joystick be hidden when the user releases the finger? + /// [Space(15f)] attribute is needed only for the editor, it creates some spacing in the inspector + /// + [Space(15f)] + [Tooltip("Should the joystick be hidden on release?")] + public bool HideOnRelease; + + /// + /// Should the joystick be moved along with the finger + /// + [Tooltip("Should the Base image move along with the finger without any constraints?")] + public bool MoveBase = true; + + /// + /// Should the joystick be moved along with the finger + /// + [Tooltip("Should the joystick snap to finger? If it's FALSE, the MoveBase checkbox logic will be ommited")] + public bool SnapsToFinger = true; + + /// + /// Joystick movement direction + /// Specifies the axis along which it can move + /// + [Tooltip("Constraints on the joystick movement axis")] + public ControlMovementDirection JoystickMoveAxis = ControlMovementDirection.Both; + + /// + /// Image of the joystick base + /// + [Tooltip("Image of the joystick base")] + public Image JoystickBase; + + /// + /// Image of the stick itself + /// + [Tooltip("Image of the stick itself")] + public Image Stick; + + /// + /// Rect Transform of the touch zone + /// + [Tooltip("Touch Zone transform")] + public RectTransform TouchZone; + + // --------------------------------------------------------------------------- + + private Vector2 _initialStickPosition; + private Vector2 _intermediateStickPosition; + private Vector2 _initialBasePosition; + private RectTransform _baseTransform; + private RectTransform _stickTransform; + + private float _oneOverMovementRange; + + protected VirtualAxis HorizintalAxis; + protected VirtualAxis VerticalAxis; + + private void Awake() + { + _stickTransform = Stick.GetComponent(); + _baseTransform = JoystickBase.GetComponent(); + + _initialStickPosition = _stickTransform.anchoredPosition; + _intermediateStickPosition = _initialStickPosition; + _initialBasePosition = _baseTransform.anchoredPosition; + + _stickTransform.anchoredPosition = _initialStickPosition; + _baseTransform.anchoredPosition = _initialBasePosition; + + _oneOverMovementRange = 1f / MovementRange; + + if (HideOnRelease) + { + Hide(true); + } + } + + private void OnEnable() + { + // When we enable, we get our virtual axis + + HorizintalAxis = HorizintalAxis ?? new VirtualAxis(HorizontalAxisName); + VerticalAxis = VerticalAxis ?? new VirtualAxis(VerticalAxisName); + + // And register them in our input system + CnInputManager.RegisterVirtualAxis(HorizintalAxis); + CnInputManager.RegisterVirtualAxis(VerticalAxis); + } + + private void OnDisable() + { + // When we disable, we just unregister our axis + // It also happens before the game object is Destroyed + CnInputManager.UnregisterVirtualAxis(HorizintalAxis); + CnInputManager.UnregisterVirtualAxis(VerticalAxis); + } + + public virtual void OnDrag(PointerEventData eventData) + { + // Unity remote multitouch related thing + // When we feed fake PointerEventData we can't really provide a camera, + // it has a lot of private setters via not created objects, so even the Reflection magic won't help a lot here + // Instead, we just provide an actual event camera as a public property so we can easily set it in the Input Helper class + CurrentEventCamera = eventData.pressEventCamera ?? CurrentEventCamera; + + // We get the local position of the joystick + Vector3 worldJoystickPosition; + RectTransformUtility.ScreenPointToWorldPointInRectangle(_stickTransform, eventData.position, + CurrentEventCamera, out worldJoystickPosition); + + // Then we change it's actual position so it snaps to the user's finger + _stickTransform.position = worldJoystickPosition; + // We then query it's anchored position. It's calculated internally and quite tricky to do from scratch here in C# + var stickAnchoredPosition = _stickTransform.anchoredPosition; + + // Some bitwise logic for constraining the joystick along one of the axis + // If the "Both" option was selected, non of these two checks will yield "true" + if ((JoystickMoveAxis & ControlMovementDirection.Horizontal) == 0) + { + stickAnchoredPosition.x = _intermediateStickPosition.x; + } + if ((JoystickMoveAxis & ControlMovementDirection.Vertical) == 0) + { + stickAnchoredPosition.y = _intermediateStickPosition.y; + } + + _stickTransform.anchoredPosition = stickAnchoredPosition; + + // Find current difference between the previous central point of the joystick and it's current position + Vector2 difference = new Vector2(stickAnchoredPosition.x, stickAnchoredPosition.y) - _intermediateStickPosition; + + // Normalisation stuff + var diffMagnitude = difference.magnitude; + var normalizedDifference = difference / diffMagnitude; + + // If the joystick is being dragged outside of it's range + if (diffMagnitude > MovementRange) + { + if (MoveBase && SnapsToFinger) + { + // We move the base so it maps the new joystick center position + var baseMovementDifference = difference.magnitude - MovementRange; + var addition = normalizedDifference * baseMovementDifference; + _baseTransform.anchoredPosition += addition; + _intermediateStickPosition += addition; + } + else + { + _stickTransform.anchoredPosition = _intermediateStickPosition + normalizedDifference * MovementRange; + } + } + + // We should now calculate axis values based on final position and not on "virtual" one + var finalStickAnchoredPosition = _stickTransform.anchoredPosition; + // Sanity recalculation + Vector2 finalDifference = new Vector2(finalStickAnchoredPosition.x, finalStickAnchoredPosition.y) - _intermediateStickPosition; + // We don't need any values that are greater than 1 or less than -1 + var horizontalValue = Mathf.Clamp(finalDifference.x * _oneOverMovementRange, -1f, 1f); + var verticalValue = Mathf.Clamp(finalDifference.y * _oneOverMovementRange, -1f, 1f); + + // Finally, we update our virtual axis + HorizintalAxis.Value = horizontalValue; + VerticalAxis.Value = verticalValue; + } + + public void OnPointerUp(PointerEventData eventData) + { + // When we lift our finger, we reset everything to the initial state + _baseTransform.anchoredPosition = _initialBasePosition; + _stickTransform.anchoredPosition = _initialStickPosition; + _intermediateStickPosition = _initialStickPosition; + + HorizintalAxis.Value = VerticalAxis.Value = 0f; + + // We also hide it if we specified that behaviour + if (HideOnRelease) + { + Hide(true); + } + } + + public void OnPointerDown(PointerEventData eventData) + { + // When we press, we first want to snap the joystick to the user's finger + if (SnapsToFinger) + { + CurrentEventCamera = eventData.pressEventCamera ?? CurrentEventCamera; + + Vector3 localStickPosition; + Vector3 localBasePosition; + RectTransformUtility.ScreenPointToWorldPointInRectangle(_stickTransform, eventData.position, + CurrentEventCamera, out localStickPosition); + RectTransformUtility.ScreenPointToWorldPointInRectangle(_baseTransform, eventData.position, + CurrentEventCamera, out localBasePosition); + + _baseTransform.position = localBasePosition; + _stickTransform.position = localStickPosition; + _intermediateStickPosition = _stickTransform.anchoredPosition; + } + else + { + OnDrag(eventData); + } + // We also want to show it if we specified that behaviour + if (HideOnRelease) + { + Hide(false); + } + } + + /// + /// Simple "Hide" behaviour + /// + /// Whether the joystick should be hidden + private void Hide(bool isHidden) + { + JoystickBase.gameObject.SetActive(!isHidden); + Stick.gameObject.SetActive(!isHidden); + } + } +} diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs.meta new file mode 100644 index 00000000..8e8bfc91 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/SimpleJoystick.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eeb64258239543b4db1c80658a0d4f2c +timeCreated: 1437298014 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs new file mode 100644 index 00000000..cb010d75 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs @@ -0,0 +1,112 @@ +using UnityEngine; +using UnityEngine.EventSystems; + +namespace CnControls +{ + public class Touchpad : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler + { + /// + /// Current event camera reference. Needed for the sake of Unity Remote input + /// + public Camera CurrentEventCamera { get; set; } + + /// + /// The name of the horizontal axis for this touchpad to update + /// + public string HorizontalAxisName = "Horizontal"; + + /// + /// The name of the vertical axis for this touchpad to update + /// + public string VerticalAxisName = "Vertical"; + + /// + /// Whether this touchpad should preserve inertia when the finger is lifted + /// + public bool PreserveInertia = true; + + /// + /// The speed of decay of inertia + /// + public float Friction = 3f; + + private VirtualAxis _horizintalAxis; + private VirtualAxis _verticalAxis; + private int _lastDragFrameNumber; + private bool _isCurrentlyTweaking; + + /// + /// Joystick movement direction + /// Specifies the axis along which it can move + /// + [Tooltip("Constraints on the joystick movement axis")] + public ControlMovementDirection ControlMoveAxis = ControlMovementDirection.Both; + + private void OnEnable() + { + // When we enable, we get our virtual axis + + _horizintalAxis = _horizintalAxis ?? new VirtualAxis(HorizontalAxisName); + _verticalAxis = _verticalAxis ?? new VirtualAxis(VerticalAxisName); + + // And register them in our input system + CnInputManager.RegisterVirtualAxis(_horizintalAxis); + CnInputManager.RegisterVirtualAxis(_verticalAxis); + } + + private void OnDisable() + { + // When we disable, we just unregister our axis + // It also happens before the game object is Destroyed + CnInputManager.UnregisterVirtualAxis(_horizintalAxis); + CnInputManager.UnregisterVirtualAxis(_verticalAxis); + } + + public virtual void OnDrag(PointerEventData eventData) + { + // Some bitwise logic for constraining the touchpad along one of the axis + // If the "Both" option was selected, non of these two checks will yield "true" + if ((ControlMoveAxis & ControlMovementDirection.Horizontal) != 0) + { + _horizintalAxis.Value = eventData.delta.x; + } + if ((ControlMoveAxis & ControlMovementDirection.Vertical) != 0) + { + _verticalAxis.Value = eventData.delta.y; + } + + _lastDragFrameNumber = Time.renderedFrameCount; + } + + public void OnPointerUp(PointerEventData eventData) + { + _isCurrentlyTweaking = false; + if (!PreserveInertia) + { + _horizintalAxis.Value = 0f; + _verticalAxis.Value = 0f; + } + } + + public void OnPointerDown(PointerEventData eventData) + { + _isCurrentlyTweaking = true; + OnDrag(eventData); + } + + private void Update() + { + if (_isCurrentlyTweaking && _lastDragFrameNumber < Time.renderedFrameCount - 2) + { + _horizintalAxis.Value = 0f; + _verticalAxis.Value = 0f; + } + + if (PreserveInertia && !_isCurrentlyTweaking) + { + _horizintalAxis.Value = Mathf.Lerp(_horizintalAxis.Value, 0f, Friction * Time.deltaTime); + _verticalAxis.Value = Mathf.Lerp(_verticalAxis.Value, 0f, Friction * Time.deltaTime); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs.meta b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs.meta new file mode 100644 index 00000000..48fda625 --- /dev/null +++ b/Assets/Scripts/Gameplay/CNControls/Scripts/Controllers/Touchpad.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 15aa632517b93b5438ffbbbdfe98661d +timeCreated: 1440872696 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Gameplay/GameplayObjects/RuntimeDataContainers/GameDataSource.cs b/Assets/Scripts/Gameplay/GameplayObjects/RuntimeDataContainers/GameDataSource.cs index bc64e6a4..eb9600ee 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/RuntimeDataContainers/GameDataSource.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/RuntimeDataContainers/GameDataSource.cs @@ -87,6 +87,8 @@ namespace Unity.BossRoom.Gameplay.GameplayObjects public string VectorWallAbilityKey = "VectorWall"; public string TheExecutionerKey = "TheExecutioner"; public string CrowsForesightKey = "CrowsForesight"; + public string SwapButtonKey = "Swap"; + public string SprintButtonKey = "Sprint"; public List m_AllActions; diff --git a/Assets/Standard Assets.meta b/Assets/Standard Assets.meta new file mode 100644 index 00000000..86ac627c --- /dev/null +++ b/Assets/Standard Assets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5da83ca3c987d754aa5da08b78f5b219 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/URP/Mobile/0_UniversalRenderPipelineAsset_Mobile_Low.asset b/Assets/URP/Mobile/0_UniversalRenderPipelineAsset_Mobile_Low.asset index d979ed1e..3299a873 100644 --- a/Assets/URP/Mobile/0_UniversalRenderPipelineAsset_Mobile_Low.asset +++ b/Assets/URP/Mobile/0_UniversalRenderPipelineAsset_Mobile_Low.asset @@ -72,6 +72,7 @@ MonoBehaviour: m_ColorGradingMode: 0 m_ColorGradingLutSize: 16 m_UseFastSRGBLinearConversion: 1 + m_SupportDataDrivenLensFlare: 1 m_ShadowType: 1 m_LocalShadowsSupported: 0 m_LocalShadowsAtlasResolution: 256 @@ -81,9 +82,9 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 + m_PrefilteringModeMainLightShadows: 0 m_PrefilteringModeAdditionalLight: 1 - m_PrefilteringModeAdditionalLightShadows: 2 + m_PrefilteringModeAdditionalLightShadows: 0 m_PrefilterXRKeywords: 1 m_PrefilteringModeForwardPlus: 0 m_PrefilteringModeDeferredRendering: 0 @@ -103,6 +104,10 @@ MonoBehaviour: m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT2: 1 m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 0 m_PrefilterScreenCoord: 1 m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 diff --git a/Assets/URP/Mobile/1_UniversalRenderPipelineAsset_Mobile_Medium.asset b/Assets/URP/Mobile/1_UniversalRenderPipelineAsset_Mobile_Medium.asset index f94e1b10..c0b99f1a 100644 --- a/Assets/URP/Mobile/1_UniversalRenderPipelineAsset_Mobile_Medium.asset +++ b/Assets/URP/Mobile/1_UniversalRenderPipelineAsset_Mobile_Medium.asset @@ -72,6 +72,7 @@ MonoBehaviour: m_ColorGradingMode: 0 m_ColorGradingLutSize: 16 m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 m_ShadowType: 1 m_LocalShadowsSupported: 0 m_LocalShadowsAtlasResolution: 256 @@ -81,9 +82,9 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 + m_PrefilteringModeMainLightShadows: 0 m_PrefilteringModeAdditionalLight: 3 - m_PrefilteringModeAdditionalLightShadows: 2 + m_PrefilteringModeAdditionalLightShadows: 0 m_PrefilterXRKeywords: 1 m_PrefilteringModeForwardPlus: 0 m_PrefilteringModeDeferredRendering: 0 @@ -103,6 +104,10 @@ MonoBehaviour: m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT2: 1 m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 0 m_PrefilterScreenCoord: 1 m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 diff --git a/Assets/URP/Mobile/2_UniversalRenderPipelineAsset_Mobile_High.asset b/Assets/URP/Mobile/2_UniversalRenderPipelineAsset_Mobile_High.asset index f401c041..538f3206 100644 --- a/Assets/URP/Mobile/2_UniversalRenderPipelineAsset_Mobile_High.asset +++ b/Assets/URP/Mobile/2_UniversalRenderPipelineAsset_Mobile_High.asset @@ -72,6 +72,7 @@ MonoBehaviour: m_ColorGradingMode: 0 m_ColorGradingLutSize: 16 m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 m_ShadowType: 1 m_LocalShadowsSupported: 0 m_LocalShadowsAtlasResolution: 256 @@ -81,7 +82,7 @@ MonoBehaviour: m_Textures: blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} - m_PrefilteringModeMainLightShadows: 1 + m_PrefilteringModeMainLightShadows: 0 m_PrefilteringModeAdditionalLight: 3 m_PrefilteringModeAdditionalLightShadows: 2 m_PrefilterXRKeywords: 1 @@ -103,6 +104,10 @@ MonoBehaviour: m_PrefilterDBufferMRT1: 1 m_PrefilterDBufferMRT2: 1 m_PrefilterDBufferMRT3: 1 + m_PrefilterSoftShadowsQualityLow: 1 + m_PrefilterSoftShadowsQualityMedium: 1 + m_PrefilterSoftShadowsQualityHigh: 1 + m_PrefilterSoftShadows: 0 m_PrefilterScreenCoord: 1 m_PrefilterNativeRenderPass: 1 m_ShaderVariantLogLevel: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset index b16147e9..2e3408b8 100644 --- a/ProjectSettings/InputManager.asset +++ b/ProjectSettings/InputManager.asset @@ -101,6 +101,118 @@ InputManager: type: 0 axis: 0 joyNum: 0 + - serializedVersion: 3 + m_Name: Sprint + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Swap + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: CrowsForesight + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: TheExecutioner + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: VectorWall + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: FreezeThrow + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: DashNCrash + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 - serializedVersion: 3 m_Name: Mouse X descriptiveName: @@ -485,3 +597,4 @@ InputManager: type: 2 axis: 5 joyNum: 0 + m_UsePhysicalKeys: 1