From c466e28d6cd77ed7a0731cb61150c26373d2238b Mon Sep 17 00:00:00 2001 From: Ashby Issac Date: Wed, 7 Jan 2026 19:38:03 +0530 Subject: [PATCH] AI FSM changes. - Protoyped on the AI movement, found solutions for turns and moving after impacting the player. - Created a full base for AI state machine. - Worked on binding the core AI logic with the finite state machine. --- .../Assets/Data/Scriptables/CarSpecs.asset | 2 +- Unity/CarsDash/Assets/Scenes/Main.meta | 8 + Unity/CarsDash/Assets/Scenes/Main.unity | 1415 ++++++++++++++++- .../CarsDash/Assets/Scenes/Main/NavMesh.asset | Bin 0 -> 9484 bytes .../Assets/Scenes/Main/NavMesh.asset.meta | 8 + Unity/CarsDash/Assets/Scripts/AI.meta | 8 + .../Assets/Scripts/AI/AICarController.cs | 163 ++ .../Assets/Scripts/AI/AICarController.cs.meta | 11 + .../CarsDash/Assets/Scripts/AI/AICarDriver.cs | 142 ++ .../Assets/Scripts/AI/AICarDriver.cs.meta | 11 + .../Assets/Scripts/Abstraction/Car/ICar.cs | 5 + .../Scripts/Abstraction/Car/ICar.cs.meta | 11 + .../Assets/Scripts/FSM/AIController.cs | 19 - .../Assets/Scripts/FSM/AIStateProcesser.cs | 25 + ...oller.cs.meta => AIStateProcesser.cs.meta} | 0 .../Scripts/FSM/States/AcquireTargetState.cs | 16 +- .../Assets/Scripts/FSM/States/BaseState.cs | 10 +- .../Assets/Scripts/FSM/States/ChargeState.cs | 8 +- .../Assets/Scripts/FSM/States/IdleState.cs | 6 +- .../Assets/Scripts/FSM/States/ImpactState.cs | 6 +- .../Assets/Scripts/FSM/States/RecoverState.cs | 7 +- .../Assets/Scripts/FSM/States/RoamState.cs | 33 +- ...arController.cs => PlayerCarController.cs} | 22 +- ...er.cs.meta => PlayerCarController.cs.meta} | 0 .../Car/{CarSpecs.cs => PlayerCarSpecs.cs} | 2 +- ...arSpecs.cs.meta => PlayerCarSpecs.cs.meta} | 0 .../Car/{CarSystem.cs => PlayerCarSystem.cs} | 8 +- ...System.cs.meta => PlayerCarSystem.cs.meta} | 0 .../Scripts/Gameplay/GameplayManager.cs | 26 +- .../Assets/Scripts/Timer/TimerSystem.cs | 47 +- .../ProjectSettings/NavMeshAreas.asset | 23 +- 31 files changed, 1977 insertions(+), 65 deletions(-) create mode 100644 Unity/CarsDash/Assets/Scenes/Main.meta create mode 100644 Unity/CarsDash/Assets/Scenes/Main/NavMesh.asset create mode 100644 Unity/CarsDash/Assets/Scenes/Main/NavMesh.asset.meta create mode 100644 Unity/CarsDash/Assets/Scripts/AI.meta create mode 100755 Unity/CarsDash/Assets/Scripts/AI/AICarController.cs create mode 100755 Unity/CarsDash/Assets/Scripts/AI/AICarController.cs.meta create mode 100755 Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs create mode 100755 Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs.meta create mode 100644 Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs create mode 100644 Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs.meta delete mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIController.cs create mode 100644 Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs rename Unity/CarsDash/Assets/Scripts/FSM/{AIController.cs.meta => AIStateProcesser.cs.meta} (100%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarController.cs => PlayerCarController.cs} (88%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarController.cs.meta => PlayerCarController.cs.meta} (100%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarSpecs.cs => PlayerCarSpecs.cs} (92%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarSpecs.cs.meta => PlayerCarSpecs.cs.meta} (100%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarSystem.cs => PlayerCarSystem.cs} (94%) rename Unity/CarsDash/Assets/Scripts/Gameplay/Car/{CarSystem.cs.meta => PlayerCarSystem.cs.meta} (100%) diff --git a/Unity/CarsDash/Assets/Data/Scriptables/CarSpecs.asset b/Unity/CarsDash/Assets/Data/Scriptables/CarSpecs.asset index 5eed79d..af99680 100644 --- a/Unity/CarsDash/Assets/Data/Scriptables/CarSpecs.asset +++ b/Unity/CarsDash/Assets/Data/Scriptables/CarSpecs.asset @@ -22,4 +22,4 @@ MonoBehaviour: rotationSpeed: 2 tireRotationAngle: 20 speedValue: 50 - accelSpeed: 50 + accelSpeed: 100 diff --git a/Unity/CarsDash/Assets/Scenes/Main.meta b/Unity/CarsDash/Assets/Scenes/Main.meta new file mode 100644 index 0000000..2d6d8f4 --- /dev/null +++ b/Unity/CarsDash/Assets/Scenes/Main.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2190dc59a173e463f81234566cee14be +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scenes/Main.unity b/Unity/CarsDash/Assets/Scenes/Main.unity index 0b1be48..2d83600 100644 --- a/Unity/CarsDash/Assets/Scenes/Main.unity +++ b/Unity/CarsDash/Assets/Scenes/Main.unity @@ -121,7 +121,7 @@ NavMeshSettings: preserveTilesOutsideBounds: 0 debug: m_Flags: 0 - m_NavMeshData: {fileID: 0} + m_NavMeshData: {fileID: 23800000, guid: ccc494c7b34894ebdb6ab672fa47804d, type: 2} --- !u!1 &46839391 GameObject: m_ObjectHideFlags: 0 @@ -328,7 +328,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 63.8, y: 56.5} + m_AnchoredPosition: {x: 63.80005, y: 56.5} m_SizeDelta: {x: 65.0237, y: 65.0237} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &95386741 @@ -465,7 +465,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -48.299988, y: -49.299988} + m_AnchoredPosition: {x: -48.30005, y: -49.299988} m_SizeDelta: {x: 65.02368, y: 65.02368} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &358690062 @@ -749,6 +749,37 @@ MonoBehaviour: maxLerpTimer: 0.5 minInputVal: 0 maxInputVal: 1 +--- !u!1 &560243357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 560243358} + m_Layer: 0 + m_Name: Roampoint (6) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &560243358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 560243357} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.4, y: 0, z: 40.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &705507993 GameObject: m_ObjectHideFlags: 0 @@ -874,6 +905,103 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &954806282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 954806286} + - component: {fileID: 954806285} + - component: {fileID: 954806284} + - component: {fileID: 954806283} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &954806283 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954806282} + 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!23 &954806284 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954806282} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &954806285 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954806282} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &954806286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954806282} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 13.14, y: 0.3250731, z: 7.4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &963194225 GameObject: m_ObjectHideFlags: 0 @@ -1020,6 +1148,196 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: carController: {fileID: 2033488866} +--- !u!1 &1121294867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1121294868} + m_Layer: 0 + m_Name: Roampoint (2) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1121294868 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121294867} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 22.3, y: 0, z: -28.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1184999440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1184999441} + m_Layer: 0 + m_Name: Roampoint (3) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1184999441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1184999440} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -37.6, y: 0, z: -23.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1235509163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1235509167} + - component: {fileID: 1235509166} + - component: {fileID: 1235509165} + - component: {fileID: 1235509164} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1235509164 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235509163} + 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!23 &1235509165 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235509163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1235509166 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235509163} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1235509167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235509163} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 17.37, y: 0.3250731, z: 16.71} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1236177011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1236177012} + m_Layer: 0 + m_Name: Roampoint (7) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1236177012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236177011} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 41.7, y: 0, z: -13.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1292197489 GameObject: m_ObjectHideFlags: 0 @@ -1201,6 +1519,99 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74db590d4cc6d4626832487aa20c620d, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1566253552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566253553} + m_Layer: 0 + m_Name: Roampoint (8) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1566253553 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566253552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 27.1, y: 0, z: 26.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1704875203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1704875204} + m_Layer: 0 + m_Name: Roampoint (1) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1704875204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704875203} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.1, y: 0, z: -30.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1707510179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1707510180} + m_Layer: 0 + m_Name: Roampoint (5) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1707510180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707510179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -33, y: 0, z: 24.3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1719941778 GameObject: m_ObjectHideFlags: 0 @@ -1644,6 +2055,108 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 39b4eeca7bf1bb64ba90de27ac5e129f, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &2066846221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2066846222} + m_Layer: 0 + m_Name: Roampoint (4) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2066846222 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066846221} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -41.3, y: 0, z: 0.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2101528534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2101528535} + m_Layer: 0 + m_Name: Roampoint (9) + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2101528535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2101528534} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 38.4, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114961624} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2114961623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2114961624} + m_Layer: 0 + m_Name: RoamingPoints + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2114961624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2114961623} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1704875204} + - {fileID: 1121294868} + - {fileID: 1184999441} + - {fileID: 2066846222} + - {fileID: 1707510180} + - {fileID: 560243358} + - {fileID: 1236177012} + - {fileID: 1566253553} + - {fileID: 2101528535} + m_Father: {fileID: 0} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2120819591 GameObject: m_ObjectHideFlags: 0 @@ -1661,7 +2174,7 @@ GameObject: m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 2147483647 m_IsActive: 1 --- !u!64 &2120819592 MeshCollider: @@ -1742,3 +2255,897 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &27386838942578600 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5160889347855425351} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 778e820d421403340baff47f305c6395, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &1338216341761113286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340135764930720774} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.041999824, y: -0.1010001, z: 0.000000009313226} + m_LocalScale: {x: 0.5, y: 0.6, z: 0.6} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6797954641865245406} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1340135764930720774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1338216341761113286} + - component: {fileID: 1362363050567662754} + - component: {fileID: 1353745397573284110} + m_Layer: 0 + m_Name: FrontLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1353745397573284110 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340135764930720774} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e51619bf18aa21d46b22511553b3bff9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1362363050567662754 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340135764930720774} + m_Mesh: {fileID: 4300004, guid: a9598fb60ca54694ba970cec322d3699, type: 3} +--- !u!33 &1453419896396064743 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5160889347855425351} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1467007060819793882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089586429818234875} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1790943330492743735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6797954641865245406} + m_Layer: 0 + m_Name: FrontLeftWheel + m_TagString: Untagged + m_Icon: {fileID: 7148428337604731935, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2482968990990670843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5160889347855425351} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.167, z: 0} + m_LocalScale: {x: 1.313917, y: 0.45482686, z: 2.3580563} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &2490572385577083784 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490572385577083787} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 71.65 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!81 &2490572385577083785 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490572385577083787} + m_Enabled: 1 +--- !u!114 &2490572385577083786 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490572385577083787} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a36f1c81ee72d784bafe2654c4c8562d, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 7253727573650650161} + followPoint: {fileID: 0} + offset: {x: 0, y: 3.5, z: -7} + smoothSpeed: 5 +--- !u!1 &2490572385577083787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2490572385577083791} + - component: {fileID: 2490572385577083784} + - component: {fileID: 2490572385577083785} + - component: {fileID: 2490572385577083786} + m_Layer: 0 + m_Name: MainCamera (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &2490572385577083791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2490572385577083787} + m_LocalRotation: {x: 0.16899404, y: -0.00028759238, z: 0.00003967434, w: 0.985617} + m_LocalPosition: {x: -0.20226339, y: 2.5728369, z: -5.7549877} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!1 &2671211335767160122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8376214497183604618} + m_Layer: 0 + m_Name: FrontRightWheel + m_TagString: Untagged + m_Icon: {fileID: 7148428337604731935, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &2831397661049833260 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089586429818234875} + 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!1 &3584222965821364895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9151451939317852602} + m_Layer: 0 + m_Name: BackRightWheel + m_TagString: Untagged + m_Icon: {fileID: 7148428337604731935, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &4856835093102582843 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5160889347855425351} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1.43, z: 1} + m_Center: {x: -0.00000023841858, y: -0.18, z: 0} +--- !u!4 &5043075246689908779 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089586429818234875} + m_LocalRotation: {x: 0.06736393, y: -0, z: -0.000000011175868, w: 0.9977285} + m_LocalPosition: {x: 0, y: 0.091, z: 0.067} + m_LocalScale: {x: 1, y: 0.26695186, z: 1.7825314} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 7.725, y: 0, z: 0} +--- !u!33 &5050323863111023401 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5072238790732301441} + m_Mesh: {fileID: 4300002, guid: a9598fb60ca54694ba970cec322d3699, type: 3} +--- !u!23 &5058615113157623049 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5072238790732301441} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e51619bf18aa21d46b22511553b3bff9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &5072238790732301441 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5075661757745948657} + - component: {fileID: 5050323863111023401} + - component: {fileID: 5058615113157623049} + m_Layer: 0 + m_Name: BackRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5075661757745948657 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5072238790732301441} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.075, y: -0.1010001, z: -0.000000011175871} + m_LocalScale: {x: 0.5, y: 0.6, z: 0.6} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9151451939317852602} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5089586429818234875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5043075246689908779} + - component: {fileID: 1467007060819793882} + - component: {fileID: 7251360435747291337} + - component: {fileID: 2831397661049833260} + m_Layer: 7 + m_Name: rr + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5160889347855425351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2482968990990670843} + - component: {fileID: 1453419896396064743} + - component: {fileID: 27386838942578600} + - component: {fileID: 4856835093102582843} + m_Layer: 7 + m_Name: Body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &5992282123100741894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8751592022924568686} + m_Layer: 0 + m_Name: BackLeftWheel + m_TagString: Untagged + m_Icon: {fileID: 7148428337604731935, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &6018959019769450468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039426864078730860} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e51619bf18aa21d46b22511553b3bff9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &6026438873250941380 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039426864078730860} + m_Mesh: {fileID: 4300002, guid: a9598fb60ca54694ba970cec322d3699, type: 3} +--- !u!4 &6036006061933597980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6039426864078730860} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.075, y: -0.101, z: -0} + m_LocalScale: {x: 0.5, y: 0.6, z: 0.6} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8376214497183604618} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6039426864078730860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6036006061933597980} + - component: {fileID: 6026438873250941380} + - component: {fileID: 6018959019769450468} + m_Layer: 0 + m_Name: FrontRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6797954641865245406 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790943330492743735} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.733, y: -0.252, z: 0.809} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1338216341761113286} + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &7018784296841180624 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + serializedVersion: 2 + m_Mass: 10 + m_Drag: 0 + m_AngularDrag: 0.5 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 1 +--- !u!1 &7050368956678127929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7253727573650650161} + - component: {fileID: 8101534912566928538} + - component: {fileID: 7018784296841180624} + - component: {fileID: 8101534912566928540} + - component: {fileID: 8101534912566928539} + - component: {fileID: 8101534912566928542} + m_Layer: 7 + m_Name: Car1 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &7251360435747291337 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089586429818234875} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4810d6b8e360f3248a7e56deea8e9ca4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &7253727573650650161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + m_LocalRotation: {x: 0, y: -1, z: 0, w: 0} + m_LocalPosition: {x: -0.47, y: 0.67, z: 38.63} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8376214497183604618} + - {fileID: 9151451939317852602} + - {fileID: 6797954641865245406} + - {fileID: 8751592022924568686} + - {fileID: 2482968990990670843} + - {fileID: 5043075246689908779} + - {fileID: 2490572385577083791} + m_Father: {fileID: 0} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: -180, z: 0} +--- !u!23 &8101534912566928538 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 778e820d421403340baff47f305c6395, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8101534912566928539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eb59b9c1ad3c8e34999f1b2e07b5774f, type: 3} + m_Name: + m_EditorClassIdentifier: + targetPositionTranform: {fileID: 1235509167} + onImpact: 0 +--- !u!114 &8101534912566928540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0fca7c6ea6b2be241844f325ebfca4c7, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &8101534912566928542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7050368956678127929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a6b3b930b0df4c68b9ddc3c91955866, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &8376214497183604618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2671211335767160122} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.766, y: -0.252, z: 0.8088152} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6036006061933597980} + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8471482830831349535 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8474527707230840799} + - component: {fileID: 8494293957386954683} + - component: {fileID: 8484965199593662999} + m_Layer: 0 + m_Name: BackLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8474527707230840799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8471482830831349535} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.045, y: -0.1010001, z: 0} + m_LocalScale: {x: 0.5, y: 0.6, z: 0.6} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8751592022924568686} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &8484965199593662999 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8471482830831349535} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e51619bf18aa21d46b22511553b3bff9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &8494293957386954683 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8471482830831349535} + m_Mesh: {fileID: 4300004, guid: a9598fb60ca54694ba970cec322d3699, type: 3} +--- !u!4 &8751592022924568686 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5992282123100741894} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.733, y: -0.252, z: -0.804} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8474527707230840799} + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &9151451939317852602 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3584222965821364895} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.766, y: -0.252, z: -0.8040963} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5075661757745948657} + m_Father: {fileID: 7253727573650650161} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity/CarsDash/Assets/Scenes/Main/NavMesh.asset b/Unity/CarsDash/Assets/Scenes/Main/NavMesh.asset new file mode 100644 index 0000000000000000000000000000000000000000..ef141efefb702bd84731f8b9edea650a1fa959e7 GIT binary patch literal 9484 zcmc(jTWnlM8OLYswL`fkKqycyOCeBNNMk4I1(I~**d+;V;=~~hq^)!8J#m)o#q6HV zjY|)86DTbp9(X`hh&;4N&I1Tu=mU}oPpCx#DZJ#N4?uwjgai^V2x0#JneRJ$&Ym4R zNhLDUnKNg8GxN>=`{uH?F-dwyQZnnm=gJ%2=-%spt88@B=*Y&+8@FsdK5G8Eyu4f} zfc%|wdHKp;E*$$s`2F_J{&@7jOS=~S@h#Mz9yDfv80lVPVsu%yAF<7CRxkzg!k~$N zS}<`DH5`(UCUQ<>qG)2iIbN0zm{&0N?Wkvem;{fJyHr4rjTrwfe7+8kvk^Opoa1l7 zJCN~*Y+Zsuv*Qn29w!ZY$6u4<1#@A*#4Q=0b69Eqx8(X~=l}W~FPPoXcL}2D-#3uQ zwBi!xR~UhR_>j|wg>sq?TL0aKG3c8&ky}q`|3PyAeLs(f^L}%V7tHU`cMs}0{#)=~ z7bBC@Ykw{3*DWcft*rfZt7#<3kz!ZznG!lTwvBpfyEVs$Z2xnpr~lsR;S0jw<>Ai?f47H!SNLrn z{sZCf@$erBf3JuCMELtW{6*pK_wdWYOCJ7`@DF(S72(|HS^qo#;ta6<{h){cRrrTI z{GY-%c=&&Wf7ru^5nRUiBRzZowQB)3;Mop#2cEStGD&*AYy;>1`zRi+BTeKNvG#Wh zzZ0MzKO~&zTt9wH_{Ti_r0|b>_$lEVJ^X_3yFL6l;hXw!p5KeYNBZ!K;4cav?Zess zvhd9w{yX73>wEpf{#S)>?ZbIL{Z05ieK`C7TR85y-1zHpY2A$nP0W4dF)~R!|9HM^ z6@EYJ*OryCk2_ztgY$g*1bLk1+4KFAn|KrT5oIuQEYIFwd&$elB=z23pGJMw{;-W7?K6H4Szbc!Qo*dr#P4BLXXE3z z#&4g8Yy9@-xVxX96Md89F)~SrPXT*A`F(N#^(*N+NUojnR{hk+_)q0HYfbzD>~nn| z%JCuVpC5zMKcBI@gxn>Le-Zt4eIG`3)<2G`e;)C0_0N$UclLiS_CK5BS^J;!aJ7Hb z!`1$yIqu@~ONq~83P_d>_M;wh;twcqh@wSOwd zi&o#Qu+R9Nwj7xxp6}1#{w#sRjphuVtbdF4{=W;n0Cv{HM}_n6h-`oMGVvHV&$ln~ zE0y^Bk@vTrZ(p*kl(b-c)A9MThpT_S;^FF_Cvx1`*YhpT@vQx?dbrwu(!A ztN8tJ0RExhp2~6e`&!TU^B%7DFL=1x|C)zC3j16iU(a#O5Ak^%ocGVuIi8*0H#}VD z_l$?@{GQG6f<0fVGQV$H-p%#}rydU5C&q&)Fq4x}YuiMn8Z}!JXQHstt~MJxOnv&n zYAxI|j>2RRoj}31n{0*0gPA>zb`&&bLpGD44xx41q(1D}_36Y+eR_A$K4E6gMq&Ht zrpKf(qJ>c{Y}UdSEo{}oJzBU|3-@W^el3i2hfc;GNd_NDMjuIrAHn!C@3Bs`R+$Q; zsM?roceQ1!gSoH~9XdNt=h*VWpi=F$U3qs{ojVb^@>H!kAG+eMTD3l7YGGwA9B(z} zrByvRv$s>9-#OcAw%g-X=TlR!HV%e!2*S=*7?^s{=mfQ0VXZb*Jr|l;Ex3Am-PT81 z2xezHtsn{~Yr$+-$4oK8nZ3=KN1CmZVXJNCTVXqFoeFKd_IILowGxgsJB>;bJgas* zoaxLZo~ZDPOQIH7zqt9=gZZ{eiZ3#@3 z9JZqBEJ%HNPop9wnOS{$7nFo8FuOz{YI~Fl*>ND#neA_w@eb$7%1OYU5r$n`l&!ODyZt?7|?U&c(sjj8|LXtQA++!q8s?d$6X5;D z=h9+y8L#J!Ie+=m;+>Z_Z(b<#ZOl^Hm=@|5w=d$Gb-m?FiwkJy+PE@rC>%aW1F?y1 z0h!v?Z(3%n0sG${_8GEsE1D*LVSc;YY=u%Bb8T*>PWo{*ot%GHXOz*I)`s<& z=+v^r)7JOViD8Q|vg?TF$s1a?)X0>!<=dZb{ki?g_UZk}FUJ@8FQ25$y6*mDIlDiH zW469Fojf~?-JjMi_G_iAcYm&~)9p_;XSYAy_)F!qHr8?7s%@4XcjuGq->b72v;DR1 zPc|KP&Dm|ml-9|HtLc=%o|ie>b?fSu%6zLfaJxQTohv(SuFcKVNk6Wplk-P2(dqUl zwQ$|0wdtO8%5$K6sdc~49CTo?XNwa+@IIKZuJaG+w$#Cw&7gmyoGkgQ}0H` zFIk^SnSHd4D`#}Z!?D)7yW4#+?|*;3mi?(?t55Sf-Tu^eX`N|pgUotHOm*M( z>MX`=tF~EoDX&w&4ew7KS#9;|6ps7T##8SViDy?EG$W4o>|s1@S;xNFI#meay5F~MzIuP2SDkiE;x_a@tW44U_=H-`nutHLq dZ)kIM>I8u+y{<+P{jtIP>M6ccDW(); + } + + public void Init(GameplayManager gameplayManager) + { + this.GameplayManager = gameplayManager; + } + + private void Update() + { + CalculateAccelaration(); + + if (speed < 0) + { + // Going backwards, invert wheels + // turnAmount = turnAmount * -1f; + } + + if (turnAmount > 0 || turnAmount < 0) + { + // Turning + if ((turnSpeed > 0 && turnAmount < 0) || (turnSpeed < 0 && turnAmount > 0)) + { + // Changing turn direction + float minTurnAmount = 20f; + turnSpeed = turnAmount * minTurnAmount; + } + + turnSpeed += turnAmount * turnSpeedAcceleration * Time.deltaTime; + } + else + { + // Not turning + if (turnSpeed > 0) + { + turnSpeed -= turnIdleSlowdown * Time.deltaTime; + } + if (turnSpeed < 0) + { + turnSpeed += turnIdleSlowdown * Time.deltaTime; + } + if (turnSpeed > -1f && turnSpeed < +1f) { + // Stop rotating + turnSpeed = 0f; + } + } + + float speedNormalized = speed / speedMax; + float invertSpeedNormalized = Mathf.Clamp(1 - speedNormalized, .75f, 1f); + + turnSpeed = Mathf.Clamp(turnSpeed, -turnSpeedMax, turnSpeedMax); + + carRigidbody.angularVelocity = new Vector3(0, turnSpeed * (invertSpeedNormalized * 1f) * Mathf.Deg2Rad, 0); + + if (transform.eulerAngles.x > 2 || transform.eulerAngles.x < -2 || transform.eulerAngles.z > 2 || transform.eulerAngles.z < -2) + { + transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0); + } + } + + private void CalculateAccelaration() + { + if (forwardAmount > 0) + { + // Accelerating + speed += acceleration * Time.deltaTime; + } + else if (forwardAmount < 0) + { + if (speed > 0) + { + // Braking + speed += forwardAmount * brakeSpeed * Time.deltaTime; + } + else + { + // Reversing + speed += forwardAmount * reverseSpeed * Time.deltaTime; + } + } + else + { + // Not accelerating or braking + if (speed > 0) + { + speed -= idleSlowdown * Time.deltaTime; + } + if (speed < 0) + { + speed += idleSlowdown * Time.deltaTime; + } + } + + speed = Mathf.Clamp(speed, speedMin, speedMax); + + carRigidbody.velocity = transform.forward * speed; + } + + public void SetInputs(float forwardAmount, float turnAmount) { + this.forwardAmount = forwardAmount; + this.turnAmount = turnAmount; + } + + public void ClearTurnSpeed() { + turnSpeed = 0f; + } + + public float GetSpeed() { + return speed; + } + + + public void SetSpeedMax(float speedMax) { + this.speedMax = speedMax; + } + + public void SetTurnSpeedMax(float turnSpeedMax) { + this.turnSpeedMax = turnSpeedMax; + } + + public void SetTurnSpeedAcceleration(float turnSpeedAcceleration) { + this.turnSpeedAcceleration = turnSpeedAcceleration; + } + + public void StopCompletely() { + speed = 0f; + turnSpeed = 0f; + } +} diff --git a/Unity/CarsDash/Assets/Scripts/AI/AICarController.cs.meta b/Unity/CarsDash/Assets/Scripts/AI/AICarController.cs.meta new file mode 100755 index 0000000..103e0b2 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/AI/AICarController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fca7c6ea6b2be241844f325ebfca4c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs b/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs new file mode 100755 index 0000000..f2448b4 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs @@ -0,0 +1,142 @@ +using System; +using DG.Tweening; +using Unity.VisualScripting; +using UnityEditor.Callbacks; +using UnityEngine; + +public class AICarDriver : MonoBehaviour +{ + + [SerializeField] private Transform targetPositionTranform; + + private AICarController carDriver; + private Vector3 targetPosition; + + private void Awake() + { + carDriver = GetComponent(); + impactTimer = new TimerSystem(); + + // SetImpactTimer(); + } + + private TimerSystem impactTimer; + private float forwardAmount = 0f; + private float turnAmount = 0f; + + public void UpdateMovement(Action onComplete = null) + { + // provide a roamPoint + SetTargetPosition(targetPositionTranform.position); + + float targetDistReach = 2f; + float distanceToTarget = Vector3.Distance(transform.position, targetPosition); + + Debug.Log($"distanceToTarget :: {distanceToTarget}"); + + if (distanceToTarget > targetDistReach) + { + // Still too far, keep going + Vector3 dirToMovePosition = (targetPosition - transform.position).normalized; + float dot = Vector3.Dot(transform.forward, dirToMovePosition); + + if (dot > 0) + { + // Target in front + forwardAmount = 1f; + + float stoppingDistance = 2f; + float stoppingSpeed = 5f; + + // if (onImpact) + // { + // the target location should be set to next roam point or to another enemy/player + // and then DoReverse() + // DoReverse(); + // } + // else if (canCheck) + // { + if (distanceToTarget < stoppingDistance && carDriver.GetSpeed() > stoppingSpeed) + { + // Within stopping distance and moving forward too fast + forwardAmount = -1f; + } + // } + + // after impact reverse for about 0.5 seconds + } + else + { + // Target behind + float reverseDistance = 25f; + if (distanceToTarget > reverseDistance) + { + // Too far to reverse + forwardAmount = 1f; + // if (onImpact) + // { + // the target location should be set to next roam point or to another enemy/player + // and then DoReverse() + // DoReverse(); + // } + } + else + { + forwardAmount = -1f; + // Check if DoReverse can be called instead + } + } + + turnAmount = FindTurnAmt(); + } + else + { + // Reached target + Debug.Log($"Target reached: {forwardAmount}"); + if (forwardAmount == 1) + onComplete?.Invoke(); + + forwardAmount = carDriver.GetSpeed() > 15f ? -1f : 0f; + turnAmount = 0f; + } + + carDriver.SetInputs(forwardAmount, turnAmount); + } + + public void DoReverse(Action onComplete) + { + // TODO :: Set target position before doing reverse + + Debug.Log($"CarDriverAI :: onImpact"); + + if (impactTimer.IsTimerComplete) + { + impactTimer.Init(0.5f, onComplete: () => + { + Debug.Log($"ImpactTimer :: OnTimerComplete"); + + forwardAmount = 1f; + turnAmount = FindTurnAmt(); + carDriver.SetInputs(forwardAmount, turnAmount); + onComplete?.Invoke(); + }); + } + + impactTimer.UpdateTimer(Time.deltaTime); + forwardAmount = -1f; + turnAmount = FindTurnAmt(); + carDriver.SetInputs(forwardAmount, turnAmount); + } + + private float FindTurnAmt() + { + Vector3 dirToMovePosition = (targetPosition - transform.position).normalized; + float angleToDir = Vector3.SignedAngle(transform.forward, dirToMovePosition, Vector3.up); + return angleToDir > 0 ? 1f : -1f; + } + + public void SetTargetPosition(Vector3 targetPosition) + { + this.targetPosition = targetPosition; + } +} diff --git a/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs.meta b/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs.meta new file mode 100755 index 0000000..90dd6dd --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/AI/AICarDriver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb59b9c1ad3c8e34999f1b2e07b5774f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs b/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs new file mode 100644 index 0000000..d265413 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs @@ -0,0 +1,5 @@ + +public interface ICar +{ + void Init(GameplayManager gameplayManager); +} diff --git a/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs.meta b/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs.meta new file mode 100644 index 0000000..51892c1 --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/Abstraction/Car/ICar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a269c48eac634e32be15927f5f67a83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs b/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs deleted file mode 100644 index 78a25f7..0000000 --- a/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using Unity.VisualScripting; -using UnityEngine; - -public class AIController : MonoBehaviour -{ - private BaseState currentState; - - private void Start() - { - currentState = new IdleState(); - } - - private void Update() - { - currentState = currentState.ProcessStates(); - } -} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs b/Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs new file mode 100644 index 0000000..542bb5e --- /dev/null +++ b/Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; + +public class AIStateProcesser : MonoBehaviour +{ + private BaseState currentState; + private AICarDriver carDriverAI; + private AICarController aiCarController; + + private void Awake() + { + carDriverAI = GetComponent(); + aiCarController = GetComponent(); + } + + private void Start() + { + currentState = new IdleState(carDriverAI, aiCarController.GameplayManager); + } + + private void Update() + { + currentState = currentState.ProcessStates(); + } +} diff --git a/Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta b/Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs.meta similarity index 100% rename from Unity/CarsDash/Assets/Scripts/FSM/AIController.cs.meta rename to Unity/CarsDash/Assets/Scripts/FSM/AIStateProcesser.cs.meta diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs index f779b64..3e86b78 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/AcquireTargetState.cs @@ -2,7 +2,7 @@ using UnityEngine; public class AcquireTargetState : BaseState { - public AcquireTargetState() : base() + public AcquireTargetState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -19,6 +19,14 @@ public class AcquireTargetState : BaseState base.Update(); Debug.Log($"### {this} Update STAGE"); + + // while it's roaming check for targets + // Find the target and once the target is found then charge toward that specific target + if (HasFoundTarget()) + { + base.Exit(); + nextState = new ChargeState(aiCarDriver, gameplayManager); + } } protected override void Exit() @@ -27,4 +35,10 @@ public class AcquireTargetState : BaseState Debug.Log($"### {this} Exit STAGE"); } + + public bool HasFoundTarget() + { + + return false; + } } diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs index 7a23389..6830887 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/BaseState.cs @@ -1,12 +1,20 @@ +using UnityEngine; + public class BaseState { protected STAGE stage; protected BaseState nextState; + protected Transform currentTarget; + protected AICarDriver aiCarDriver; + protected GameplayManager gameplayManager; - public BaseState() + public BaseState(AICarDriver aiCarDriver, GameplayManager gameplayManager) { stage = STAGE.Enter; + + this.aiCarDriver = aiCarDriver; + this.gameplayManager = gameplayManager; } protected virtual void Enter() => stage = STAGE.Update; diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs index 3c1213e..4bb16c2 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ChargeState.cs @@ -2,7 +2,7 @@ using UnityEngine; public class ChargeState : BaseState { - public ChargeState() : base() + public ChargeState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -12,6 +12,7 @@ public class ChargeState : BaseState base.Enter(); Debug.Log($"### {this} Enter STAGE"); + // update the values for charging } protected override void Update() @@ -19,6 +20,11 @@ public class ChargeState : BaseState base.Update(); Debug.Log($"### {this} Update STAGE"); + aiCarDriver.UpdateMovement(() => + { + base.Exit(); + nextState = new ImpactState(aiCarDriver, gameplayManager); + }); } protected override void Exit() diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs index 9add2c4..fa94d47 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/IdleState.cs @@ -3,7 +3,7 @@ using UnityEngine; public class IdleState : BaseState { - public IdleState() : base() + public IdleState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -20,7 +20,9 @@ public class IdleState : BaseState base.Update(); // use a mod timer system and when timer completes then move onto the next state (RoamState) - nextState = new RoamState(); + base.Exit(); + + nextState = new AcquireTargetState(aiCarDriver, gameplayManager); Debug.Log($"### {this} Update STAGE"); } diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs index 01dad6d..b6ad696 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/ImpactState.cs @@ -2,7 +2,7 @@ using UnityEngine; public class ImpactState : BaseState { - public ImpactState() : base() + public ImpactState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -19,6 +19,10 @@ public class ImpactState : BaseState base.Update(); Debug.Log($"### {this} Update STAGE"); + + // do actions when an impact happens + base.Exit(); + nextState = new RecoverState(aiCarDriver, gameplayManager); } protected override void Exit() diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs index 5b69913..c4b4c59 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RecoverState.cs @@ -2,7 +2,7 @@ using UnityEngine; public class RecoverState : BaseState { - public RecoverState() : base() + public RecoverState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -19,6 +19,11 @@ public class RecoverState : BaseState base.Update(); Debug.Log($"### {this} Update STAGE"); + aiCarDriver.DoReverse(() => + { + base.Exit(); + nextState = new RoamState(aiCarDriver, gameplayManager); + }); } protected override void Exit() diff --git a/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs index ea7039d..b838e39 100644 --- a/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs +++ b/Unity/CarsDash/Assets/Scripts/FSM/States/RoamState.cs @@ -2,7 +2,13 @@ using UnityEngine; public class RoamState : BaseState { - public RoamState() : base() + private bool hasCompletedRoaming = false; + private float roamDuration = 2f; + + private Vector3 currentRoamingPoint = Vector3.zero; + private TimerSystem roamTimerSystem = null; + + public RoamState(AICarDriver aiCarDriver, GameplayManager gameplayManager) : base(aiCarDriver, gameplayManager) { Debug.Log($"### {this} constructor"); } @@ -14,20 +20,39 @@ public class RoamState : BaseState Debug.Log($"### {this} Enter STAGE"); // get the target point + currentRoamingPoint = gameplayManager.GetRoamingPoint(); + aiCarDriver.SetTargetPosition(currentRoamingPoint); + + roamTimerSystem = new TimerSystem(); + hasCompletedRoaming = false; + roamTimerSystem.Init(roamDuration, onComplete: () => hasCompletedRoaming = true); } - protected override void Update() + protected override void Update() { base.Update(); - // keeping roaming for a specific duration + // keep roaming for a specific duration // use a set of target points which would be placed on the arena, // get one of the target point and then start roaming towards that point. // if an enemy/player is found within a specific radius and in front of- - // -the player then go to the next state after acquiring the target- + // -the AI then go to the next state after acquiring the target- // -(next state could be ChargeState) + // Set Target location + + if (!hasCompletedRoaming) + { + roamTimerSystem.UpdateTimer(Time.deltaTime); + aiCarDriver.UpdateMovement(); + } + else + { + base.Exit(); + nextState = new AcquireTargetState(aiCarDriver, gameplayManager); + } + Debug.Log($"### {this} Update STAGE"); } diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarController.cs b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarController.cs similarity index 88% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarController.cs rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarController.cs index f574f26..202f669 100644 --- a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarController.cs +++ b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarController.cs @@ -4,10 +4,8 @@ using UnityEngine; using System.Collections; using System.ComponentModel; using UnityEngine.SceneManagement; -using UnityEngine.EventSystems; -using Newtonsoft.Json; -public class CarController : MonoBehaviour +public class PlayerCarController : MonoBehaviour, ICar { [SerializeField] private bool isDebugTest = false; @@ -17,7 +15,7 @@ public class CarController : MonoBehaviour [SerializeField] private Rigidbody carRigidbody; - [SerializeField] private CarSpecs carSpecs; + [SerializeField] private PlayerCarSpecs carSpecs; [SerializeField] private Vector3 customCenterOfMass; [SerializeField] private AnimationCurve steerLeftAnimCurve; [SerializeField] private AnimationCurve steerRightAnimCurve; @@ -33,7 +31,7 @@ public class CarController : MonoBehaviour private float tiresInGround = 0f; [Category("Script-Object-Refs.")] - private CarSystem carSystem; + private PlayerCarSystem carSystem; private TimerSystem timerSystem; [Category("Tags.")] @@ -50,14 +48,22 @@ public class CarController : MonoBehaviour public Action OnCarRotate; public Action OnGameOver; - public void Init() + public GameplayManager GameplayManager { + get; + private set; + } + + public void Init(GameplayManager gameplayManager) + { + this.GameplayManager = gameplayManager; + isGameOver = false; tiresCount = tireTransforms.Length; timerSystem = new TimerSystem(); - remTime = timerSystem.Timer; - carSystem = new CarSystem(this, carRigidbody, carSpecs, frontTireTransforms, steerLeftAnimCurve: steerLeftAnimCurve, steerRightAnimCurve: steerRightAnimCurve, accelAnimCurve: accelAnimCurve); + // remTime = timerSystem.Timer; + carSystem = new PlayerCarSystem(this, carRigidbody, carSpecs, frontTireTransforms, steerLeftAnimCurve: steerLeftAnimCurve, steerRightAnimCurve: steerRightAnimCurve, accelAnimCurve: accelAnimCurve); } private void EnableGameOverState() diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarController.cs.meta b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarController.cs.meta similarity index 100% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarController.cs.meta rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarController.cs.meta diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSpecs.cs b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSpecs.cs similarity index 92% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSpecs.cs rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSpecs.cs index e169e16..62648e3 100644 --- a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSpecs.cs +++ b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSpecs.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "CarSpecs", menuName = "CarSpecs", order = 1)] -public class CarSpecs : ScriptableObject +public class PlayerCarSpecs : ScriptableObject { public float dampingForce = 50; public float strength = 500; diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSpecs.cs.meta b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSpecs.cs.meta similarity index 100% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSpecs.cs.meta rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSpecs.cs.meta diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSystem.cs b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSystem.cs similarity index 94% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSystem.cs rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSystem.cs index bc73271..309b49d 100644 --- a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSystem.cs +++ b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSystem.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.ComponentModel; using UnityEngine; -public class CarSystem : ICarComponents +public class PlayerCarSystem : ICarComponents { [Category("Global Attributes")] private Rigidbody carRigidbody; - private CarSpecs carSpecs; + private PlayerCarSpecs carSpecs; [Category("Animation Curves")] private AnimationCurve steerLeftAnimCurve; [Category("Animation Curves")] private AnimationCurve steerRightAnimCurve; @@ -29,9 +29,9 @@ public class CarSystem : ICarComponents private Vector3 accelForce; private Transform[] frontTireTransforms; - private CarController gameplayControllerInst; + private PlayerCarController gameplayControllerInst; - public CarSystem(CarController gameplayController, Rigidbody carRigidbody = null, CarSpecs carSpecs = null, Transform[] frontTireTransforms = null, + public PlayerCarSystem(PlayerCarController gameplayController, Rigidbody carRigidbody = null, PlayerCarSpecs carSpecs = null, Transform[] frontTireTransforms = null, AnimationCurve steerLeftAnimCurve = null, AnimationCurve steerRightAnimCurve = null, AnimationCurve accelAnimCurve = null) { gameplayControllerInst = gameplayController; diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSystem.cs.meta b/Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSystem.cs.meta similarity index 100% rename from Unity/CarsDash/Assets/Scripts/Gameplay/Car/CarSystem.cs.meta rename to Unity/CarsDash/Assets/Scripts/Gameplay/Car/PlayerCarSystem.cs.meta diff --git a/Unity/CarsDash/Assets/Scripts/Gameplay/GameplayManager.cs b/Unity/CarsDash/Assets/Scripts/Gameplay/GameplayManager.cs index a164319..b3386ed 100644 --- a/Unity/CarsDash/Assets/Scripts/Gameplay/GameplayManager.cs +++ b/Unity/CarsDash/Assets/Scripts/Gameplay/GameplayManager.cs @@ -1,12 +1,17 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader { - [SerializeField] private CarController carController; + [SerializeField] private GameObject[] allCarsInScene; // contains enemy cars and player car + [] + [SerializeField] private PlayerCarController playerCarController; // TODO :: initialize roamPoints here - public CarController CarController => carController; + [SerializeField] private List roamPoints; // TODO :: initialize roamPoints here + + public PlayerCarController CarController => playerCarController; public void Initialize() { @@ -15,6 +20,21 @@ public class GameplayManager : MonoBehaviour, IBase, IBootLoader, IDataLoader public void InitializeData() { - carController.Init(); + foreach (var car in allCarsInScene) + { + car.GetComponent().Init(this); + } + } + + public Vector3 GetRoamingPoint() + { + var randomIndex = Random.Range(0, roamPoints.Count); + return roamPoints[randomIndex].position; + } + + public Transform GetTargetToAttack() + { + var randomIdx = Random.Range(0, allCarsInScene.Length); + return allCarsInScene[randomIdx].transform; } } diff --git a/Unity/CarsDash/Assets/Scripts/Timer/TimerSystem.cs b/Unity/CarsDash/Assets/Scripts/Timer/TimerSystem.cs index a36216a..f79e0e5 100644 --- a/Unity/CarsDash/Assets/Scripts/Timer/TimerSystem.cs +++ b/Unity/CarsDash/Assets/Scripts/Timer/TimerSystem.cs @@ -1,29 +1,50 @@ +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class TimerSystem { - private float timer = 10f; - private float timerIncrement = 5f; + private float timeRem; + private float maxTimeAvail; - public float Timer => timer; - - public float TimerIncrement = 5f; - - public TimerSystem() + private Action onTimerComplete = null; + private Action onTimerInProgress = null; + public bool IsTimerComplete { - CarController.OnCheckpointReached += UpdateTimer; + get; + private set; } - private void IncreaseTimer() + public bool IsInitialized { - timer += timerIncrement; + get; + private set; } - public void UpdateTimer(float remTime) + public void Init(float maxTimeAvail, Action onComplete = null, Action inProgress = null, Action onStart = null) { - timer = remTime; - IncreaseTimer(); + timeRem = 0; + IsTimerComplete = false; + IsInitialized = true; + + this.maxTimeAvail = maxTimeAvail; + this.onTimerComplete = onComplete; + this.onTimerInProgress = inProgress; + } + + public void UpdateTimer(float deltaTime) + { + if (timeRem < maxTimeAvail) + { + timeRem += deltaTime; + onTimerInProgress?.Invoke(); + } + else + { + timeRem = 0; + onTimerComplete?.Invoke(); + IsTimerComplete = true; + } } } diff --git a/Unity/CarsDash/ProjectSettings/NavMeshAreas.asset b/Unity/CarsDash/ProjectSettings/NavMeshAreas.asset index 3b0b7c3..e3bad28 100644 --- a/Unity/CarsDash/ProjectSettings/NavMeshAreas.asset +++ b/Unity/CarsDash/ProjectSettings/NavMeshAreas.asset @@ -69,7 +69,7 @@ NavMeshProjectSettings: cost: 1 - name: cost: 1 - m_LastAgentTypeID: -887442657 + m_LastAgentTypeID: -1372625422 m_Settings: - serializedVersion: 2 agentTypeID: 0 @@ -85,7 +85,28 @@ NavMeshProjectSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + - serializedVersion: 2 + agentTypeID: -1372625422 + agentRadius: 0.5 + agentHeight: 1.2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_SettingNames: - Humanoid + - New Agent