From 7e2278dc7cdfbb82118d4bea5066ad8f18ae78d9 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Mon, 13 Aug 2018 02:58:16 +0200 Subject: [PATCH] Add basic AI --- Assets/Prefabs/Enemy.prefab | 169 +++++++++++++++++++++++++++ Assets/Prefabs/Enemy.prefab.meta | 8 ++ Assets/Prefabs/Harpoon.prefab | 4 +- Assets/Prefabs/Ship.prefab | 8 +- Assets/Scenes/Game.unity | 178 +++++++++++++++++++++++------ Assets/Scripts/Cannon.cs | 3 + Assets/Scripts/EnemyShipAi.cs | 129 +++++++++++++++++++++ Assets/Scripts/EnemyShipAi.cs.meta | 11 ++ Assets/Scripts/FishAi.cs | 1 + Assets/Scripts/Harpoon.cs | 13 ++- Assets/Scripts/PlayerMovement.cs | 6 +- 11 files changed, 483 insertions(+), 47 deletions(-) create mode 100644 Assets/Prefabs/Enemy.prefab create mode 100644 Assets/Prefabs/Enemy.prefab.meta create mode 100644 Assets/Scripts/EnemyShipAi.cs create mode 100644 Assets/Scripts/EnemyShipAi.cs.meta diff --git a/Assets/Prefabs/Enemy.prefab b/Assets/Prefabs/Enemy.prefab new file mode 100644 index 0000000..acb4233 --- /dev/null +++ b/Assets/Prefabs/Enemy.prefab @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1195403025493360} + m_IsPrefabAsset: 1 +--- !u!1 &1195403025493360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4056561897088050} + - component: {fileID: 212864900431362760} + - component: {fileID: 50337207293964320} + - component: {fileID: 61036691294505782} + - component: {fileID: 114327601929205558} + - component: {fileID: 114122030605112200} + m_Layer: 9 + m_Name: Enemy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4056561897088050 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 21.96, y: 36.57, z: 0} + m_LocalScale: {x: 2.648, y: 0.903, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &50337207293964320 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 1 + m_Mass: 2.391144 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 6200000, guid: 704f912fbe8bba74ebedd5a5f7bff08f, type: 2} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!61 &61036691294505782 +BoxCollider2D: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 1, y: 1} + newSize: {x: 1, y: 1} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &114122030605112200 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e1de68aef1b6a89419a36f3455e25bf3, type: 3} + m_Name: + m_EditorClassIdentifier: + fishCaught: 0 +--- !u!114 &114327601929205558 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 705389440a45f5f48aa5ede6519821e4, type: 3} + m_Name: + m_EditorClassIdentifier: + maximumDistanceFromFish: 1 + timeBeforeChangingTarget: 10 + horizontalSpeed: 5 + verticalSpeed: 30 + shootForce: 5 + harpoon: {fileID: 1737609814504882, guid: 288f16ae5eaa16440b89da431723b1c2, type: 2} + harpoonAvailable: 1 + maxJetFuel: 1 + jetFuelRechargeSpeed: 0.1 +--- !u!212 &212864900431362760 +SpriteRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1195403025493360} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10754, 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_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: be5eaf9abd3481b489d582a8f1a41508, type: 3} + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/Prefabs/Enemy.prefab.meta b/Assets/Prefabs/Enemy.prefab.meta new file mode 100644 index 0000000..7ec45f9 --- /dev/null +++ b/Assets/Prefabs/Enemy.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a1e5fa769b403340be7a2808b56d69c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Harpoon.prefab b/Assets/Prefabs/Harpoon.prefab index 4071cb4..455d342 100644 --- a/Assets/Prefabs/Harpoon.prefab +++ b/Assets/Prefabs/Harpoon.prefab @@ -21,7 +21,7 @@ GameObject: - component: {fileID: 4347951085211458} - component: {fileID: 120926356996093036} - component: {fileID: 114113591002818490} - m_Layer: 8 + m_Layer: 0 m_Name: Chain m_TagString: Untagged m_Icon: {fileID: 0} @@ -40,7 +40,7 @@ GameObject: - component: {fileID: 50840653617852040} - component: {fileID: 114633804764434460} - component: {fileID: 61123955855276598} - m_Layer: 8 + m_Layer: 0 m_Name: Harpoon m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/Ship.prefab b/Assets/Prefabs/Ship.prefab index 632045d..27a0a88 100644 --- a/Assets/Prefabs/Ship.prefab +++ b/Assets/Prefabs/Ship.prefab @@ -85,7 +85,7 @@ Transform: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1506768218425990} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 4.27, y: 42.06, z: 0} + m_LocalPosition: {x: 4.27, y: 40.291958, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 4419769467158982} @@ -126,7 +126,7 @@ Transform: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1884810528837284} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: 0.4695518, w: 0.88290495} m_LocalPosition: {x: -0.08000004, y: 0.61999893, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] @@ -263,7 +263,7 @@ SpriteRenderer: m_SortingOrder: 0 m_Sprite: {fileID: 21300000, guid: bdd08b099cc1c614096f43a9ccf99b59, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 + m_FlipX: 1 m_FlipY: 0 m_DrawMode: 0 m_Size: {x: 0.48, y: 1.02} @@ -309,7 +309,7 @@ SpriteRenderer: m_SortingOrder: 2 m_Sprite: {fileID: 21300000, guid: 1f841006c9147454d8eca3d3cae86c0f, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 1 + m_FlipX: 0 m_FlipY: 0 m_DrawMode: 0 m_Size: {x: 1.34, y: 0.65} diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 15e81dc..13be52b 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -150,7 +150,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} propertyPath: m_RootOrder - value: 11 + value: 12 objectReference: {fileID: 0} - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, type: 2} @@ -212,6 +212,16 @@ Prefab: propertyPath: m_Name value: Fish Spawner (1) objectReference: {fileID: 0} + - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, + type: 2} + propertyPath: spawnTime + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, + type: 2} + propertyPath: randomFactor + value: 30 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} m_IsPrefabAsset: 0 @@ -252,66 +262,56 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4978811670595372, guid: 633eed510cb97614896a65613c2eb772, type: 2} propertyPath: m_RootOrder - value: 4 + value: 6 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 633eed510cb97614896a65613c2eb772, type: 2} m_IsPrefabAsset: 0 ---- !u!1001 &284866319 +--- !u!1001 &317854633 Prefab: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalPosition.x - value: 7.9 + value: 21.96 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalPosition.y - value: 29.9 + value: 36.57 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_RootOrder - value: 12 + value: 2 objectReference: {fileID: 0} - - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, - type: 2} - propertyPath: sea - value: - objectReference: {fileID: 2008841353} - - target: {fileID: 1634593922401586, guid: 343a89599f7365845937eb14b4669b20, type: 2} + - target: {fileID: 1195403025493360, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} propertyPath: m_Name - value: Fish Spawner (5) - objectReference: {fileID: 0} - - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, - type: 2} - propertyPath: spawnTime - value: 20 + value: Enemy (1) objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} + m_SourcePrefab: {fileID: 100100000, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} m_IsPrefabAsset: 0 --- !u!1001 &391017218 Prefab: @@ -350,7 +350,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4059627635461364, guid: acb6270a21e7fa744878210a4df90d27, type: 2} propertyPath: m_RootOrder - value: 2 + value: 4 objectReference: {fileID: 0} - target: {fileID: 114070643257783382, guid: acb6270a21e7fa744878210a4df90d27, type: 2} @@ -447,7 +447,7 @@ RectTransform: m_Children: - {fileID: 949267804} m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -505,7 +505,12 @@ Prefab: - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, type: 2} propertyPath: spawnTime - value: 35 + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, + type: 2} + propertyPath: randomFactor + value: 10 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} @@ -547,7 +552,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4023639078503100, guid: 0514a38f22bae454d821a12517a141c4, type: 2} propertyPath: m_RootOrder - value: 3 + value: 5 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0514a38f22bae454d821a12517a141c4, type: 2} @@ -782,6 +787,16 @@ Prefab: propertyPath: sea value: objectReference: {fileID: 2008841353} + - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, + type: 2} + propertyPath: spawnTime + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, + type: 2} + propertyPath: randomFactor + value: 30 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} m_IsPrefabAsset: 0 @@ -841,6 +856,52 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} m_IsPrefabAsset: 0 +--- !u!1001 &1105789933 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.x + value: 39.292458 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.y + value: 36.612633 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1195403025493360, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_Name + value: Enemy (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + m_IsPrefabAsset: 0 --- !u!1 &1147089289 GameObject: m_ObjectHideFlags: 0 @@ -901,7 +962,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1240811157 Prefab: @@ -940,7 +1001,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} propertyPath: m_RootOrder - value: 9 + value: 10 objectReference: {fileID: 0} - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, type: 2} @@ -991,7 +1052,12 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4279439219186522, guid: 1cf703958a669d942a42326499701367, type: 2} propertyPath: m_RootOrder - value: 1 + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 212928515413584804, guid: 1cf703958a669d942a42326499701367, + type: 2} + propertyPath: m_FlipX + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 1cf703958a669d942a42326499701367, type: 2} @@ -1150,7 +1216,7 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 4955254497044876, guid: 343a89599f7365845937eb14b4669b20, type: 2} propertyPath: m_RootOrder - value: 10 + value: 11 objectReference: {fileID: 0} - target: {fileID: 114324088513504716, guid: 343a89599f7365845937eb14b4669b20, type: 2} @@ -1169,6 +1235,48 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 343a89599f7365845937eb14b4669b20, type: 2} m_IsPrefabAsset: 0 +--- !u!1001 &1861714896 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.x + value: -31.72 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.y + value: 37.1 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4056561897088050, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + propertyPath: m_RootOrder + value: 19 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8a1e5fa769b403340be7a2808b56d69c, type: 2} + m_IsPrefabAsset: 0 --- !u!1 &2008841353 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1259758189242624, guid: 4dc0408b236da9847b1c799161bbd70a, diff --git a/Assets/Scripts/Cannon.cs b/Assets/Scripts/Cannon.cs index ff7acb4..33be0d4 100644 --- a/Assets/Scripts/Cannon.cs +++ b/Assets/Scripts/Cannon.cs @@ -19,7 +19,9 @@ public class Cannon : MonoBehaviour { { hullSpriteRenderer = hull.GetComponent(); spriteRenderer = GetComponent(); + //Disable enemy and player collisions Physics2D.IgnoreLayerCollision(8, 8); + Physics2D.IgnoreLayerCollision(9, 9); } private void Update () @@ -41,6 +43,7 @@ public class Cannon : MonoBehaviour { harpoonInstance.transform.rotation = transform.rotation; harpoonInstance.GetComponent().AddForce(direction * force); harpoonInstance.GetComponent().flipX = spriteRenderer.flipX; + harpoonInstance.layer = 8; Linker linker = harpoonInstance.GetComponentInChildren(); linker.firstObject = gameObject; linker.secondObject = harpoonInstance; diff --git a/Assets/Scripts/EnemyShipAi.cs b/Assets/Scripts/EnemyShipAi.cs new file mode 100644 index 0000000..d666195 --- /dev/null +++ b/Assets/Scripts/EnemyShipAi.cs @@ -0,0 +1,129 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EnemyShipAi : MonoBehaviour { + + public float maximumDistanceFromFish = 2f; + public float timeBeforeChangingTarget = 10f; + public float horizontalSpeed = 5f; + public float verticalSpeed = 30f; + public float shootForce = 5f; + public GameObject harpoon; + public bool harpoonAvailable = true; + public float maxJetFuel = 2f; + public float jetFuelRechargeSpeed = 0.1f; + + private GameObject target = null; + private Rigidbody2D rb; + private SpriteRenderer spriteRenderer; + private float timeSinceLastTarget = 0f; + private float jetFuel; + private bool usingJet; + + void Start () { + rb = GetComponent(); + spriteRenderer = GetComponent(); + jetFuel = maxJetFuel; + } + + void Update () { + timeBeforeChangingTarget += Time.deltaTime; + //Find a target fish + if(target == null || timeSinceLastTarget > timeBeforeChangingTarget) + { + if(target != null) + { + target.GetComponent().targetedBy = null; + } + target = FindClosestFish(GameObject.FindGameObjectsWithTag("Fish")); + if (target != null) + { + target.GetComponent().targetedBy = gameObject; + } + timeBeforeChangingTarget = 0f; + } + } + + void FixedUpdate() + { + //If the bot has a target + if(target != null) + { + //Slow down when near the fish + float power = Mathf.Clamp((Mathf.Abs(transform.position.x - target.transform.position.x) / maximumDistanceFromFish) - 1f, 0f, 1f); + //Shoot an harpoon if it's close enough and it's available + if (power == 0f && harpoonAvailable) + { + //Disable the jetpack + usingJet = false; + //Find the direction between the fish and the ship + Vector3 direction = (target.transform.position - transform.position).normalized; + //Shoot the harpoon + GameObject harpoonInstance = Instantiate(harpoon); + harpoonInstance.transform.position = transform.position + direction; + harpoonInstance.transform.rotation = transform.rotation; + harpoonInstance.GetComponent().AddForce(direction * shootForce); + harpoonInstance.GetComponent().flipX = spriteRenderer.flipX; + harpoonInstance.layer = 9; + Linker linker = harpoonInstance.GetComponentInChildren(); + linker.firstObject = gameObject; + linker.secondObject = harpoonInstance; + harpoonAvailable = false; + } + //Apply a force towards that direction if too far away + else + { + //Right + if (transform.position.x - target.transform.position.x < 0f) + { + rb.AddForce(Vector2.right * horizontalSpeed * power); + spriteRenderer.flipX = true; + } + //Left + else + { + rb.AddForce(Vector2.right * -horizontalSpeed * power); + spriteRenderer.flipX = false; + } + //Enable the jetpack + if(jetFuel == maxJetFuel) + { + usingJet = true; + } + //Use the jetpack + if(usingJet) + { + jetFuel -= Time.fixedDeltaTime; + rb.AddForce(Vector2.up * verticalSpeed); + if(jetFuel <= 0) + { + usingJet = false; + } + } + else + { + jetFuel = Mathf.Clamp(jetFuel + Time.fixedDeltaTime * jetFuelRechargeSpeed, 0f, maxJetFuel); + } + } + } + } + + GameObject FindClosestFish(GameObject[] fish) + { + GameObject result = null; + float minimumDistance = Mathf.Infinity; + foreach (GameObject fishInstance in fish) + { + if (fishInstance.GetComponent().targetedBy != null) continue; + float distance = Vector3.Distance(fishInstance.transform.position, transform.position); + if (distance < minimumDistance) + { + minimumDistance = distance; + result = fishInstance; + } + } + return result; + } + +} diff --git a/Assets/Scripts/EnemyShipAi.cs.meta b/Assets/Scripts/EnemyShipAi.cs.meta new file mode 100644 index 0000000..244137d --- /dev/null +++ b/Assets/Scripts/EnemyShipAi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 705389440a45f5f48aa5ede6519821e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/FishAi.cs b/Assets/Scripts/FishAi.cs index af05b34..d151f09 100644 --- a/Assets/Scripts/FishAi.cs +++ b/Assets/Scripts/FishAi.cs @@ -8,6 +8,7 @@ public class FishAi : MonoBehaviour { public float speed = 2f; public GameObject hook = null; public GameObject sea; + public GameObject targetedBy; private Vector3 direction; private Rigidbody2D rb; diff --git a/Assets/Scripts/Harpoon.cs b/Assets/Scripts/Harpoon.cs index d07bb75..17ce830 100644 --- a/Assets/Scripts/Harpoon.cs +++ b/Assets/Scripts/Harpoon.cs @@ -27,18 +27,25 @@ public class Harpoon : MonoBehaviour { { if (transform.position.y > linker.firstObject.transform.position.y) { - rb.MoveRotation(Vector2.Angle(transform.position - linker.firstObject.transform.position, Vector2.right) - 90f); } else { - rb.MoveRotation(-Vector2.Angle(transform.position - linker.firstObject.transform.position, Vector2.right) - 90f); } rb.MovePosition(Vector3.MoveTowards(transform.position, linker.firstObject.transform.position, returnSpeed * Time.deltaTime)); if(Vector3.Distance(transform.position, linker.firstObject.transform.position) < 0.2f) { - linker.firstObject.GetComponent().harpoonAvailable = true; + Cannon cannon = linker.firstObject.GetComponent(); + if(cannon != null) + { + cannon.harpoonAvailable = true; + } + else + { + EnemyShipAi enemyShipAi = linker.firstObject.GetComponent(); + enemyShipAi.harpoonAvailable = true; + } Destroy(gameObject); } } diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/Scripts/PlayerMovement.cs index b7bd480..f6a40e1 100644 --- a/Assets/Scripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerMovement.cs @@ -6,10 +6,10 @@ public class PlayerMovement : MonoBehaviour { private Rigidbody2D rb; public GameObject hull; - public float horizontalShipSpeed = 50; - public float verticalShipSpeed = 20; + public float horizontalShipSpeed = 5f; + public float verticalShipSpeed = 30; public float maxJetFuel = 2f; - public float jetFuelRechargeSpeed = 0.5f; + public float jetFuelRechargeSpeed = 0.1f; private float jetFuel; void Start () {