From 3a526fe8f4b58b3ca0c5115c429781ae7c37ecd4 Mon Sep 17 00:00:00 2001 From: Adam Salah Date: Mon, 28 Jul 2025 21:35:38 -0400 Subject: [PATCH] revamped projectile system --- Assets/Prefabs/CastleProjectile.prefab | 159 ++++++------ Assets/Prefabs/baseProjectile.prefab | 148 +++++------ Assets/Prefabs/bolasProjectile.prefab | 27 +- Assets/Prefabs/oldBaseProjectile.prefab | 230 ++++++++++++++++++ Assets/Prefabs/oldBaseProjectile.prefab.meta | 7 + Assets/Prefabs/scorpionProjectile.prefab | 147 +++++------ Assets/Scripts/Ally/Archer.cs | 2 +- Assets/Scripts/Projectile/BolasProjectile.cs | 19 -- .../{Projectile.meta => Projectiles.meta} | 2 +- Assets/Scripts/Projectiles/ArcProjectile.cs | 61 +++++ .../Scripts/Projectiles/ArcProjectile.cs.meta | 11 + Assets/Scripts/Projectiles/BolasProjectile.cs | 20 ++ .../BolasProjectile.cs.meta | 0 Assets/Scripts/Projectiles/Projectile.cs | 58 +++++ Assets/Scripts/Projectiles/Projectile.cs.meta | 11 + .../ProjectileOld.cs} | 2 +- .../ProjectileOld.cs.meta} | 0 .../Scripts/Projectiles/StraightProjectile.cs | 43 ++++ .../Projectiles/StraightProjectile.cs.meta | 11 + .../Scripts/Projectiles/TargetedProjectile.cs | 17 ++ .../Projectiles/TargetedProjectile.cs.meta | 11 + Assets/Scripts/Root.cs | 7 +- 22 files changed, 703 insertions(+), 290 deletions(-) create mode 100644 Assets/Prefabs/oldBaseProjectile.prefab create mode 100644 Assets/Prefabs/oldBaseProjectile.prefab.meta delete mode 100644 Assets/Scripts/Projectile/BolasProjectile.cs rename Assets/Scripts/{Projectile.meta => Projectiles.meta} (77%) create mode 100644 Assets/Scripts/Projectiles/ArcProjectile.cs create mode 100644 Assets/Scripts/Projectiles/ArcProjectile.cs.meta create mode 100644 Assets/Scripts/Projectiles/BolasProjectile.cs rename Assets/Scripts/{Projectile => Projectiles}/BolasProjectile.cs.meta (100%) create mode 100644 Assets/Scripts/Projectiles/Projectile.cs create mode 100644 Assets/Scripts/Projectiles/Projectile.cs.meta rename Assets/Scripts/{Projectile.cs => Projectiles/ProjectileOld.cs} (99%) rename Assets/Scripts/{Projectile.cs.meta => Projectiles/ProjectileOld.cs.meta} (100%) create mode 100644 Assets/Scripts/Projectiles/StraightProjectile.cs create mode 100644 Assets/Scripts/Projectiles/StraightProjectile.cs.meta create mode 100644 Assets/Scripts/Projectiles/TargetedProjectile.cs create mode 100644 Assets/Scripts/Projectiles/TargetedProjectile.cs.meta diff --git a/Assets/Prefabs/CastleProjectile.prefab b/Assets/Prefabs/CastleProjectile.prefab index b2ae9f5..1ca5bdc 100644 --- a/Assets/Prefabs/CastleProjectile.prefab +++ b/Assets/Prefabs/CastleProjectile.prefab @@ -1,5 +1,77 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &298534009199319999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2287864536556935619} + - component: {fileID: 246610560728595982} + - component: {fileID: 634419449123047291} + m_Layer: 0 + m_Name: collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2287864536556935619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 298534009199319999} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6962989255644195631} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &246610560728595982 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 298534009199319999} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0.16277367, y: 0.016521543} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.3744527, y: 0.17825907} + m_EdgeRadius: 0 +--- !u!114 &634419449123047291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 298534009199319999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} + m_Name: + m_EditorClassIdentifier: + _entityLinked: {fileID: 0} --- !u!1 &6962989255644195630 GameObject: m_ObjectHideFlags: 0 @@ -10,7 +82,7 @@ GameObject: m_Component: - component: {fileID: 6962989255644195631} - component: {fileID: -1491803373025033585} - - component: {fileID: 8133954670424616578} + - component: {fileID: 621676283081164958} m_Layer: 0 m_Name: CastleProjectile m_TagString: Untagged @@ -31,7 +103,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6962989256011107500} - - {fileID: 6802302589573039538} + - {fileID: 2287864536556935619} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -56,7 +128,7 @@ Rigidbody2D: m_SleepingMode: 1 m_CollisionDetection: 0 m_Constraints: 4 ---- !u!114 &8133954670424616578 +--- !u!114 &621676283081164958 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -65,13 +137,12 @@ MonoBehaviour: m_GameObject: {fileID: 6962989255644195630} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 01782bd631a6e1446956ed140a24c530, type: 3} + m_Script: {fileID: 11500000, guid: 93457b8199dbf2f48b89f680687dbd6e, type: 3} m_Name: m_EditorClassIdentifier: - _detectionLinked: {fileID: 4130391605812397686} - straightProjectile: 1 + _speed: 5 + _direction: 0 _angle: 10 - _speed: 1 --- !u!1 &6962989256011107503 GameObject: m_ObjectHideFlags: 0 @@ -83,7 +154,7 @@ GameObject: - component: {fileID: 6962989256011107500} - component: {fileID: 6962989256011107501} m_Layer: 0 - m_Name: exmeple + m_Name: sprite m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -156,75 +227,3 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!1 &8726647054546243319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6802302589573039538} - - component: {fileID: 7006189111012443782} - - component: {fileID: 4130391605812397686} - m_Layer: 0 - m_Name: detection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6802302589573039538 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6962989255644195631} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &7006189111012443782 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IsTrigger: 1 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0.16277367, y: 0.016521543} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 0.3744527, y: 0.17825907} - m_EdgeRadius: 0 ---- !u!114 &4130391605812397686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} - m_Name: - m_EditorClassIdentifier: - _entityLinked: {fileID: 0} diff --git a/Assets/Prefabs/baseProjectile.prefab b/Assets/Prefabs/baseProjectile.prefab index bba972b..153eaf4 100644 --- a/Assets/Prefabs/baseProjectile.prefab +++ b/Assets/Prefabs/baseProjectile.prefab @@ -1,5 +1,63 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &2082922348827363435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4569873279010216557} + - component: {fileID: 3167830415449792895} + m_Layer: 0 + m_Name: collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4569873279010216557 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2082922348827363435} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6962989255644195631} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &3167830415449792895 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2082922348827363435} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: -0.1, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.2, y: 0.1} + m_EdgeRadius: 0 --- !u!1 &6962989255644195630 GameObject: m_ObjectHideFlags: 0 @@ -10,7 +68,7 @@ GameObject: m_Component: - component: {fileID: 6962989255644195631} - component: {fileID: -1491803373025033585} - - component: {fileID: 8133954670424616578} + - component: {fileID: 6762493969386267100} m_Layer: 0 m_Name: baseProjectile m_TagString: Untagged @@ -31,7 +89,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6962989256011107500} - - {fileID: 6802302589573039538} + - {fileID: 4569873279010216557} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -43,7 +101,7 @@ Rigidbody2D: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6962989255644195630} - m_BodyType: 0 + m_BodyType: 1 m_Simulated: 1 m_UseFullKinematicContacts: 0 m_UseAutoMass: 0 @@ -56,7 +114,7 @@ Rigidbody2D: m_SleepingMode: 1 m_CollisionDetection: 0 m_Constraints: 4 ---- !u!114 &8133954670424616578 +--- !u!114 &6762493969386267100 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -65,12 +123,12 @@ MonoBehaviour: m_GameObject: {fileID: 6962989255644195630} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 01782bd631a6e1446956ed140a24c530, type: 3} + m_Script: {fileID: 11500000, guid: 93457b8199dbf2f48b89f680687dbd6e, type: 3} m_Name: m_EditorClassIdentifier: - _detectionLinked: {fileID: 4130391605812397686} - _angle: 10 - _speed: 1 + _speed: 5 + _direction: 0 + _angle: 30 --- !u!1 &6962989256011107503 GameObject: m_ObjectHideFlags: 0 @@ -82,7 +140,7 @@ GameObject: - component: {fileID: 6962989256011107500} - component: {fileID: 6962989256011107501} m_Layer: 0 - m_Name: exmeple + m_Name: sprite m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -155,75 +213,3 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 ---- !u!1 &8726647054546243319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6802302589573039538} - - component: {fileID: 7006189111012443782} - - component: {fileID: 4130391605812397686} - m_Layer: 0 - m_Name: detection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6802302589573039538 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6962989255644195631} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &7006189111012443782 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IsTrigger: 1 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0.16277367, y: 0.016521543} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 0.3744527, y: 0.17825907} - m_EdgeRadius: 0 ---- !u!114 &4130391605812397686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} - m_Name: - m_EditorClassIdentifier: - _entityLinked: {fileID: 0} diff --git a/Assets/Prefabs/bolasProjectile.prefab b/Assets/Prefabs/bolasProjectile.prefab index 5288fd8..e4eae30 100644 --- a/Assets/Prefabs/bolasProjectile.prefab +++ b/Assets/Prefabs/bolasProjectile.prefab @@ -68,10 +68,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: af32629f84318134799756134098abf9, type: 3} m_Name: m_EditorClassIdentifier: - _detectionLinked: {fileID: 4130391605812397686} - straightProjectile: 1 - _angle: 0 - _speed: 2 + _speed: 5 + _direction: 0 + _maxHitEntities: 1 _slowIntensity: 0.25 _slowDuration: 5 --- !u!1 &6962989256011107503 @@ -168,9 +167,8 @@ GameObject: m_Component: - component: {fileID: 6802302589573039538} - component: {fileID: 7006189111012443782} - - component: {fileID: 4130391605812397686} m_Layer: 0 - m_Name: detection + m_Name: collider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -204,7 +202,7 @@ BoxCollider2D: m_IsTrigger: 1 m_UsedByEffector: 0 m_UsedByComposite: 0 - m_Offset: {x: 0.16277367, y: 0.016521543} + m_Offset: {x: -0.1, y: 0} m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} pivot: {x: 0, y: 0} @@ -215,18 +213,5 @@ BoxCollider2D: adaptiveTiling: 0 m_AutoTiling: 0 serializedVersion: 2 - m_Size: {x: 0.3744527, y: 0.17825907} + m_Size: {x: 0.2, y: 0.1} m_EdgeRadius: 0 ---- !u!114 &4130391605812397686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} - m_Name: - m_EditorClassIdentifier: - _entityLinked: {fileID: 0} diff --git a/Assets/Prefabs/oldBaseProjectile.prefab b/Assets/Prefabs/oldBaseProjectile.prefab new file mode 100644 index 0000000..64c81db --- /dev/null +++ b/Assets/Prefabs/oldBaseProjectile.prefab @@ -0,0 +1,230 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6962989255644195630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6962989255644195631} + - component: {fileID: -1491803373025033585} + - component: {fileID: 8133954670424616578} + m_Layer: 0 + m_Name: oldBaseProjectile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6962989255644195631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6962989255644195630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.61, y: -0.638, z: 1.8112363} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6962989256011107500} + - {fileID: 6802302589573039538} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!50 &-1491803373025033585 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6962989255644195630} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 0 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 +--- !u!114 &8133954670424616578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6962989255644195630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01782bd631a6e1446956ed140a24c530, type: 3} + m_Name: + m_EditorClassIdentifier: + _detectionLinked: {fileID: 4130391605812397686} + straightProjectile: 0 + _angle: 10 + _speed: 1 +--- !u!1 &6962989256011107503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6962989256011107500} + - component: {fileID: 6962989256011107501} + m_Layer: 0 + m_Name: exmeple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6962989256011107500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6962989256011107503} + m_LocalRotation: {x: 0, y: -0, z: 0.7071068, w: -0.7071068} + m_LocalPosition: {x: 0.0259, y: 0.01, z: 0} + m_LocalScale: {x: 0.5394133, y: 0.56488746, z: 0.9686} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6962989255644195631} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 270} +--- !u!212 &6962989256011107501 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6962989256011107503} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 364159097 + m_SortingLayer: 1 + m_SortingOrder: 4 + m_Sprite: {fileID: 21300000, guid: b28a7c5aeb45b224983f69339965c55d, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.06, y: 1.69} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &8726647054546243319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6802302589573039538} + - component: {fileID: 7006189111012443782} + - component: {fileID: 4130391605812397686} + m_Layer: 0 + m_Name: detection + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6802302589573039538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726647054546243319} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6962989255644195631} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &7006189111012443782 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726647054546243319} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0.16277367, y: 0.016521543} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.3744527, y: 0.17825907} + m_EdgeRadius: 0 +--- !u!114 &4130391605812397686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726647054546243319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} + m_Name: + m_EditorClassIdentifier: + _entityLinked: {fileID: 0} diff --git a/Assets/Prefabs/oldBaseProjectile.prefab.meta b/Assets/Prefabs/oldBaseProjectile.prefab.meta new file mode 100644 index 0000000..d63ba41 --- /dev/null +++ b/Assets/Prefabs/oldBaseProjectile.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61e75a685be726940abc2cf555836e96 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/scorpionProjectile.prefab b/Assets/Prefabs/scorpionProjectile.prefab index ea278a3..a7eb2a3 100644 --- a/Assets/Prefabs/scorpionProjectile.prefab +++ b/Assets/Prefabs/scorpionProjectile.prefab @@ -1,5 +1,63 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &300123471756193662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1663512243480751314} + - component: {fileID: 3915641876488228129} + m_Layer: 0 + m_Name: collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1663512243480751314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300123471756193662} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6962989255644195631} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!61 &3915641876488228129 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300123471756193662} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: -0.27199745, y: -0.0008074939} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.5439949, y: 0.259885} + m_EdgeRadius: 0 --- !u!1 &6962989255644195630 GameObject: m_ObjectHideFlags: 0 @@ -10,7 +68,7 @@ GameObject: m_Component: - component: {fileID: 6962989255644195631} - component: {fileID: -1491803373025033585} - - component: {fileID: 8133954670424616578} + - component: {fileID: -6001325168800467254} m_Layer: 0 m_Name: scorpionProjectile m_TagString: Untagged @@ -30,8 +88,8 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 6802302589573039538} - {fileID: 3815555280328424213} + - {fileID: 1663512243480751314} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -56,7 +114,7 @@ Rigidbody2D: m_SleepingMode: 1 m_CollisionDetection: 0 m_Constraints: 4 ---- !u!114 &8133954670424616578 +--- !u!114 &-6001325168800467254 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -65,85 +123,12 @@ MonoBehaviour: m_GameObject: {fileID: 6962989255644195630} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 01782bd631a6e1446956ed140a24c530, type: 3} + m_Script: {fileID: 11500000, guid: 5ceb014877ce6be4fb369fcfd8234952, type: 3} m_Name: m_EditorClassIdentifier: - _detectionLinked: {fileID: 4130391605812397686} - straightProjectile: 1 - _angle: 90 - _speed: 14 ---- !u!1 &8726647054546243319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6802302589573039538} - - component: {fileID: 7006189111012443782} - - component: {fileID: 4130391605812397686} - m_Layer: 0 - m_Name: detection - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &6802302589573039538 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 6962989255644195631} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!61 &7006189111012443782 -BoxCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_Density: 1 - m_Material: {fileID: 0} - m_IsTrigger: 1 - m_UsedByEffector: 0 - m_UsedByComposite: 0 - m_Offset: {x: 0.2813213, y: 0.016521543} - m_SpriteTilingProperty: - border: {x: 0, y: 0, z: 0, w: 0} - pivot: {x: 0, y: 0} - oldSize: {x: 0, y: 0} - newSize: {x: 0, y: 0} - adaptiveTilingThreshold: 0 - drawMode: 0 - adaptiveTiling: 0 - m_AutoTiling: 0 - serializedVersion: 2 - m_Size: {x: 0.61154795, y: 0.17825907} - m_EdgeRadius: 0 ---- !u!114 &4130391605812397686 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8726647054546243319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} - m_Name: - m_EditorClassIdentifier: - _entityLinked: {fileID: 0} + _speed: 5 + _direction: 0 + _maxHitEntities: 3 --- !u!1 &8978875623871672114 GameObject: m_ObjectHideFlags: 0 @@ -174,7 +159,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6962989255644195631} - m_RootOrder: 1 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &8544502696280423281 SpriteRenderer: diff --git a/Assets/Scripts/Ally/Archer.cs b/Assets/Scripts/Ally/Archer.cs index c63c3a1..b3f00bf 100644 --- a/Assets/Scripts/Ally/Archer.cs +++ b/Assets/Scripts/Ally/Archer.cs @@ -13,7 +13,7 @@ public class Archer : Ally public override void Update() { base.Update(); - if(IsEnemyDetected) { + if (IsEnemyDetected && Enemy.Hp > 0) { AttackEnemy(); } diff --git a/Assets/Scripts/Projectile/BolasProjectile.cs b/Assets/Scripts/Projectile/BolasProjectile.cs deleted file mode 100644 index 4285796..0000000 --- a/Assets/Scripts/Projectile/BolasProjectile.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class BolasProjectile : Projectile -{ - [SerializeField] - private float _slowIntensity = 0.25f; - [SerializeField] - private float _slowDuration = 5f; - - protected override void ApplyEffects() - { - if (Target.StatusHandler) - { - Target.StatusHandler.ApplySlow(_slowIntensity, _slowDuration); - } - } -} diff --git a/Assets/Scripts/Projectile.meta b/Assets/Scripts/Projectiles.meta similarity index 77% rename from Assets/Scripts/Projectile.meta rename to Assets/Scripts/Projectiles.meta index 579c88f..ad9c0f4 100644 --- a/Assets/Scripts/Projectile.meta +++ b/Assets/Scripts/Projectiles.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 796c5970b01ebd249b04e1a0598abc7c +guid: e5b82afdc49c5c74dbc9bcc51c0ace0d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Projectiles/ArcProjectile.cs b/Assets/Scripts/Projectiles/ArcProjectile.cs new file mode 100644 index 0000000..a384e54 --- /dev/null +++ b/Assets/Scripts/Projectiles/ArcProjectile.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ArcProjectile : TargetedProjectile +{ + [Header("Arc Projectile")] + [SerializeField, Range(0, 90)] + private float _angle = 45.0f; + + protected override void ApplyMovement() + { + if (Target != null) + { + EndPos = Target.Position; + } + + // position: + // k(ax^2 + x) + // k: angle comme ratio opposé / adjacent + // a: -1 / distance + // x: position x sur l'arc + // y: position y sur l'arc + float distance = (EndPos.x - StartPos.x); + float k = Mathf.Sign(distance) * Mathf.Tan(_angle * Mathf.Deg2Rad); + float a = -1.0f / distance; + float x = (transform.position.x - StartPos.x) + Speed * Time.deltaTime; + float y = k * (a * x * x + x); + Vector2 newPos = new Vector2(StartPos.x + x, StartPos.y + y); + transform.position = newPos; + + // rotation: + // k(2ax + 1) + // (c'est la dérivée de la position) + float dDx = k * (2 * a * x + 1); + float rotationAngle = Mathf.Atan(dDx) * Mathf.Rad2Deg; + transform.eulerAngles = new Vector3(0, 0, rotationAngle); + + if (y < 0) + { + Destroy(gameObject); + } + } + + protected override void HandleCollision(Collider2D other) + { + if (Target == null) return; + if (other.gameObject != Target.gameObject) return; + + if (other.TryGetComponent(out Entity target)) + { + ApplyEffects(target); + target.Hit(Damage); + if (target.Hp <= 0) + { + target.Death(); + } + Destroy(gameObject); + } + } +} diff --git a/Assets/Scripts/Projectiles/ArcProjectile.cs.meta b/Assets/Scripts/Projectiles/ArcProjectile.cs.meta new file mode 100644 index 0000000..1f6ad20 --- /dev/null +++ b/Assets/Scripts/Projectiles/ArcProjectile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93457b8199dbf2f48b89f680687dbd6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Projectiles/BolasProjectile.cs b/Assets/Scripts/Projectiles/BolasProjectile.cs new file mode 100644 index 0000000..2e110e3 --- /dev/null +++ b/Assets/Scripts/Projectiles/BolasProjectile.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class BolasProjectile : StraightProjectile +{ + [Header("Bolas Projectile")] + [SerializeField] + private float _slowIntensity = 0.25f; + [SerializeField, Range(0, float.MaxValue)] + private float _slowDuration = 5f; + + protected override void ApplyEffects(Entity target) + { + if (target.StatusHandler) + { + target.StatusHandler.ApplySlow(_slowIntensity, _slowDuration); + } + } +} diff --git a/Assets/Scripts/Projectile/BolasProjectile.cs.meta b/Assets/Scripts/Projectiles/BolasProjectile.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/BolasProjectile.cs.meta rename to Assets/Scripts/Projectiles/BolasProjectile.cs.meta diff --git a/Assets/Scripts/Projectiles/Projectile.cs b/Assets/Scripts/Projectiles/Projectile.cs new file mode 100644 index 0000000..b236aaa --- /dev/null +++ b/Assets/Scripts/Projectiles/Projectile.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class Projectile : MonoBehaviour +{ + [Header("Projectile")] + [SerializeField, Range(0, float.MaxValue)] + private float _speed = 5.0f; + [SerializeField] + private DirectionEnum _direction; + + private int _damage; + private Entity _origin; + private Vector2 _startPos; + + protected virtual void Start() + { + if (Direction == DirectionEnum.Left) + { + _speed = -_speed; + } + _startPos = new Vector2(_origin.transform.position.x, _origin.transform.position.y); + } + + private void Update() + { + ApplyMovement(); + if (transform.position.x < -100.0f || transform.position.x > 100.0f) + { + Destroy(gameObject); + } + } + + private void OnTriggerEnter2D(Collider2D other) + { + HandleCollision(other); + } + + protected virtual void ApplyEffects(Entity target) { } + + protected abstract void ApplyMovement(); + + protected abstract void HandleCollision(Collider2D other); + + public float Speed { get => _speed; set => _speed = value; } + public int Damage { get => _damage; set => _damage = value; } + private DirectionEnum Direction { get => _direction; set => _direction = value; } + public Entity Origin { get => _origin; set => _origin = value; } + public Vector2 StartPos { get => _startPos; set => _startPos = value; } + + protected enum DirectionEnum + { + Right, + Left + } +} diff --git a/Assets/Scripts/Projectiles/Projectile.cs.meta b/Assets/Scripts/Projectiles/Projectile.cs.meta new file mode 100644 index 0000000..d803885 --- /dev/null +++ b/Assets/Scripts/Projectiles/Projectile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f3a7a4a2b2f8a04ebf99682d8e0f808 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Projectile.cs b/Assets/Scripts/Projectiles/ProjectileOld.cs similarity index 99% rename from Assets/Scripts/Projectile.cs rename to Assets/Scripts/Projectiles/ProjectileOld.cs index 5862d26..4e9867f 100644 --- a/Assets/Scripts/Projectile.cs +++ b/Assets/Scripts/Projectiles/ProjectileOld.cs @@ -3,7 +3,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class Projectile : MonoBehaviour +public class ProjectileOld : MonoBehaviour { [SerializeField] diff --git a/Assets/Scripts/Projectile.cs.meta b/Assets/Scripts/Projectiles/ProjectileOld.cs.meta similarity index 100% rename from Assets/Scripts/Projectile.cs.meta rename to Assets/Scripts/Projectiles/ProjectileOld.cs.meta diff --git a/Assets/Scripts/Projectiles/StraightProjectile.cs b/Assets/Scripts/Projectiles/StraightProjectile.cs new file mode 100644 index 0000000..fdbe9e2 --- /dev/null +++ b/Assets/Scripts/Projectiles/StraightProjectile.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class StraightProjectile : Projectile +{ + [Header("Straight Projectile")] + [SerializeField, Range(0, int.MaxValue)] + private int _maxHitEntities = 1; + + private List _hitEntities = new List(); + + protected override void ApplyMovement() + { + transform.position += new Vector3(Speed * Time.deltaTime, 0.0f, 0.0f); + } + + protected override void HandleCollision(Collider2D other) + { + if (other.CompareTag(Origin.tag)) return; + + if (other.TryGetComponent(out Entity target) && + !HitEntities.Contains(target) && + HitEntities.Count < MaxHitEntities) + { + ApplyEffects(target); + target.Hit(Damage); + HitEntities.Add(target); + if (target.Hp <= 0) + { + target.Death(); + } + } + + if (HitEntities.Count >= MaxHitEntities) + { + Destroy(gameObject); + } + } + + public List HitEntities { get => _hitEntities; set => _hitEntities = value; } + public int MaxHitEntities { get => _maxHitEntities; set => _maxHitEntities = value; } +} diff --git a/Assets/Scripts/Projectiles/StraightProjectile.cs.meta b/Assets/Scripts/Projectiles/StraightProjectile.cs.meta new file mode 100644 index 0000000..c80a4df --- /dev/null +++ b/Assets/Scripts/Projectiles/StraightProjectile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ceb014877ce6be4fb369fcfd8234952 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Projectiles/TargetedProjectile.cs b/Assets/Scripts/Projectiles/TargetedProjectile.cs new file mode 100644 index 0000000..c0aec81 --- /dev/null +++ b/Assets/Scripts/Projectiles/TargetedProjectile.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class TargetedProjectile : Projectile +{ + private Vector2 _endPos; + + protected override void Start() + { + base.Start(); + _endPos = Target.Position; + } + + public Vector2 EndPos { get => _endPos; set => _endPos = value; } + public Entity Target { get => Origin.Enemy;} +} diff --git a/Assets/Scripts/Projectiles/TargetedProjectile.cs.meta b/Assets/Scripts/Projectiles/TargetedProjectile.cs.meta new file mode 100644 index 0000000..3071c9b --- /dev/null +++ b/Assets/Scripts/Projectiles/TargetedProjectile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce23527d40bdc4f429d5a976b66d7146 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Root.cs b/Assets/Scripts/Root.cs index b5a6d3e..1ad27bc 100644 --- a/Assets/Scripts/Root.cs +++ b/Assets/Scripts/Root.cs @@ -37,11 +37,8 @@ public class Root : MonoBehaviour GameObject _newArrow = Instantiate(_projectile, spawnPos, Quaternion.identity); //Warning : the Speed of the arrow is equal to the speed of this unit, if this unit need to move, use an other variable ! - _newArrow.GetComponent().Damage = _entity.AttackDamage; - _newArrow.GetComponent().EnemySpeed = _entity.Enemy.Speed; - _newArrow.GetComponent().VectorStart = _rigidbodyAlly.position; - _newArrow.GetComponent().VectorEnd = _rigidbodyOpponent.position; - _newArrow.GetComponent().Target = _entity.Enemy; + _newArrow.GetComponent().Damage = _entity.AttackDamage; + _newArrow.GetComponent().Origin = _entity; } public void PlaySound(string soundName)