From a09be91a00d3fc9ec88a6628b0bf8292022cbd9a Mon Sep 17 00:00:00 2001 From: Hazim Bin Ijaz Date: Tue, 12 Aug 2025 12:39:09 +0500 Subject: [PATCH] Added fireball Ability --- .../Scenes/DemoExterior.unity | 129 ++++++++++++++++- Assets/Prefabs/Abilities.meta | 8 ++ Assets/Prefabs/Abilities/PF_Fireball.prefab | 135 ++++++++++++++++++ .../Prefabs/Abilities/PF_Fireball.prefab.meta | 7 + Assets/ScriptableObjects.meta | 8 ++ Assets/ScriptableObjects/Abilities.meta | 8 ++ .../Abilities/New Fireball Ability.asset | 24 ++++ .../Abilities/New Fireball Ability.asset.meta | 8 ++ Assets/Scripts/Abilities/AbilityClasses.meta | 8 ++ .../AbilityClasses/FireballAbility.cs | 25 ++++ .../AbilityClasses/FireballAbility.cs.meta | 11 ++ Assets/Scripts/Abilities/AbilityInput.cs | 8 +- Assets/Scripts/Behvaiours.meta | 8 ++ Assets/Scripts/Behvaiours/ProjectileDamage.cs | 16 +++ .../Behvaiours/ProjectileDamage.cs.meta | 11 ++ 15 files changed, 407 insertions(+), 7 deletions(-) create mode 100644 Assets/Prefabs/Abilities.meta create mode 100644 Assets/Prefabs/Abilities/PF_Fireball.prefab create mode 100644 Assets/Prefabs/Abilities/PF_Fireball.prefab.meta create mode 100644 Assets/ScriptableObjects.meta create mode 100644 Assets/ScriptableObjects/Abilities.meta create mode 100644 Assets/ScriptableObjects/Abilities/New Fireball Ability.asset create mode 100644 Assets/ScriptableObjects/Abilities/New Fireball Ability.asset.meta create mode 100644 Assets/Scripts/Abilities/AbilityClasses.meta create mode 100644 Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs create mode 100644 Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs.meta create mode 100644 Assets/Scripts/Behvaiours.meta create mode 100644 Assets/Scripts/Behvaiours/ProjectileDamage.cs create mode 100644 Assets/Scripts/Behvaiours/ProjectileDamage.cs.meta diff --git a/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity b/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity index 6550a208..3340d236 100644 --- a/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity +++ b/Assets/Polyart/PolyartStudio/DreamscapeCastle/Scenes/DemoExterior.unity @@ -99977,6 +99977,37 @@ Transform: type: 3} m_PrefabInstance: {fileID: 630270317} m_PrefabAsset: {fileID: 0} +--- !u!1 &630530475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 630530476} + m_Layer: 0 + m_Name: AbilityCastPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &630530476 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 630530475} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.77, z: 0.36} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2042403783257441065} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &630923973 PrefabInstance: m_ObjectHideFlags: 0 @@ -354579,7 +354610,7 @@ PrefabInstance: - target: {fileID: 6446424649472988537, guid: 576abe9759f86e542b8cee9ae2f0ffd7, type: 3} propertyPath: m_LocalPosition.y - value: 29.097 + value: 26.63 objectReference: {fileID: 0} - target: {fileID: 6446424649472988537, guid: 576abe9759f86e542b8cee9ae2f0ffd7, type: 3} @@ -354628,9 +354659,101 @@ PrefabInstance: objectReference: {fileID: 1053253996} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 6446424649472988537, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + insertIndex: -1 + addedObject: {fileID: 630530476} + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 3960509566317876621, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + insertIndex: -1 + addedObject: {fileID: 2042403783257441066} + - targetCorrespondingSourceObject: {fileID: 3960509566317876621, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + insertIndex: -1 + addedObject: {fileID: 2042403783257441067} m_SourcePrefab: {fileID: 100100000, guid: 576abe9759f86e542b8cee9ae2f0ffd7, type: 3} +--- !u!1 &2042403783257441061 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3960509566317876621, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + m_PrefabInstance: {fileID: 2042403783257441060} + m_PrefabAsset: {fileID: 0} +--- !u!20 &2042403783257441062 stripped +Camera: + m_CorrespondingSourceObject: {fileID: 4646540326165960552, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + m_PrefabInstance: {fileID: 2042403783257441060} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2042403783257441063 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4580555029999605212, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + m_PrefabInstance: {fileID: 2042403783257441060} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042403783257441061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6ae53beee9ce9b24097289adbb0d7d5e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2042403783257441064 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8831903355050671002, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + m_PrefabInstance: {fileID: 2042403783257441060} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042403783257441061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7318ee1be010c1e43b9f45dbbe3a8d9d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &2042403783257441065 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6446424649472988537, guid: 576abe9759f86e542b8cee9ae2f0ffd7, + type: 3} + m_PrefabInstance: {fileID: 2042403783257441060} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2042403783257441066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042403783257441061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 95ffed1a18429d741a7b4ac71866c387, type: 3} + m_Name: + m_EditorClassIdentifier: + mana: {fileID: 2042403783257441063} + health: {fileID: 2042403783257441064} + castPoint: {fileID: 630530476} + aimCamera: {fileID: 2042403783257441062} +--- !u!114 &2042403783257441067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042403783257441061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02e60274ecd4ed74089814d705df7000, type: 3} + m_Name: + m_EditorClassIdentifier: + user: {fileID: 2042403783257441066} + slots: + - ability: {fileID: 11400000, guid: 238ff629516647b448b2d6517f15b364, type: 2} + cdTimer: 0 + - ability: {fileID: 0} + cdTimer: 0 + - ability: {fileID: 0} + cdTimer: 0 + - ability: {fileID: 0} + cdTimer: 0 --- !u!1001 &2612565535725099600 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Abilities.meta b/Assets/Prefabs/Abilities.meta new file mode 100644 index 00000000..368afc0a --- /dev/null +++ b/Assets/Prefabs/Abilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c10cb4b344900df4caf569cca8d6863a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Abilities/PF_Fireball.prefab b/Assets/Prefabs/Abilities/PF_Fireball.prefab new file mode 100644 index 00000000..e2751545 --- /dev/null +++ b/Assets/Prefabs/Abilities/PF_Fireball.prefab @@ -0,0 +1,135 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3827511859912074849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7202875268415372754} + - component: {fileID: 2480732417337178815} + - component: {fileID: 4256647660557216355} + - component: {fileID: 6161152517530157023} + - component: {fileID: 6947929681936346855} + m_Layer: 0 + m_Name: PF_Fireball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7202875268415372754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3827511859912074849} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 123.2, y: 27.22, z: 338.63} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2480732417337178815 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3827511859912074849} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &4256647660557216355 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3827511859912074849} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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!135 &6161152517530157023 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3827511859912074849} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &6947929681936346855 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3827511859912074849} + serializedVersion: 4 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 1, y: 1, z: 1} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 1 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 1 diff --git a/Assets/Prefabs/Abilities/PF_Fireball.prefab.meta b/Assets/Prefabs/Abilities/PF_Fireball.prefab.meta new file mode 100644 index 00000000..7522854f --- /dev/null +++ b/Assets/Prefabs/Abilities/PF_Fireball.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7cd636e775c99374a9b0878b0d4d09c3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableObjects.meta b/Assets/ScriptableObjects.meta new file mode 100644 index 00000000..82897adf --- /dev/null +++ b/Assets/ScriptableObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f670900e550e404996454bb6993d55a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableObjects/Abilities.meta b/Assets/ScriptableObjects/Abilities.meta new file mode 100644 index 00000000..bc041c3e --- /dev/null +++ b/Assets/ScriptableObjects/Abilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69e6a2499ffb1c04ab6dc9e755d31545 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset b/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset new file mode 100644 index 00000000..c111d70a --- /dev/null +++ b/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9285d1b57504d78469204d8011a14dff, type: 3} + m_Name: New Fireball Ability + m_EditorClassIdentifier: + displayName: Fireball + icon: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + manaCost: 20 + cooldown: 2 + description: + projectilePrefab: {fileID: 3827511859912074849, guid: 7cd636e775c99374a9b0878b0d4d09c3, + type: 3} + speed: 22 + damage: 20 + lifeTime: 4 diff --git a/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset.meta b/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset.meta new file mode 100644 index 00000000..17d578ec --- /dev/null +++ b/Assets/ScriptableObjects/Abilities/New Fireball Ability.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 238ff629516647b448b2d6517f15b364 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Abilities/AbilityClasses.meta b/Assets/Scripts/Abilities/AbilityClasses.meta new file mode 100644 index 00000000..a2365b32 --- /dev/null +++ b/Assets/Scripts/Abilities/AbilityClasses.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 026385d9b22c43446ae9a9fa767605af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs b/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs new file mode 100644 index 00000000..5a84c42a --- /dev/null +++ b/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +[CreateAssetMenu(menuName = "Abilities/Fireball")] +public class FireballAbility : Ability +{ + public GameObject projectilePrefab; + public float speed = 22f; + public float damage = 20f; + public float lifeTime = 4f; + + public override void Activate(AbilityUser user) + { + if (!user || !projectilePrefab) return; + + var go = Instantiate(projectilePrefab, user.CastPos(), Quaternion.LookRotation(user.Forward())); + var rb = go.GetComponent(); + if (rb) rb.velocity = user.Forward() * speed; + + var dmg = go.GetComponent(); + if (!dmg) dmg = go.AddComponent(); + dmg.damage = damage; + + Destroy(go, lifeTime); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs.meta b/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs.meta new file mode 100644 index 00000000..b70c5db1 --- /dev/null +++ b/Assets/Scripts/Abilities/AbilityClasses/FireballAbility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9285d1b57504d78469204d8011a14dff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Abilities/AbilityInput.cs b/Assets/Scripts/Abilities/AbilityInput.cs index 0e6b36cf..9f9ec784 100644 --- a/Assets/Scripts/Abilities/AbilityInput.cs +++ b/Assets/Scripts/Abilities/AbilityInput.cs @@ -11,10 +11,10 @@ public class AbilityInput : MonoBehaviour foreach (var s in slots) s?.Tick(Time.deltaTime); // Quick default bindings: 1..4 - if (Input.GetKeyDown(KeyCode.Alpha1)) Use(0); - if (Input.GetKeyDown(KeyCode.Alpha2)) Use(1); - if (Input.GetKeyDown(KeyCode.Alpha3)) Use(2); - if (Input.GetKeyDown(KeyCode.Alpha4)) Use(3); + if (Input.GetKeyDown(KeyCode.Q)) Use(0); + if (Input.GetKeyDown(KeyCode.E)) Use(1); + if (Input.GetKeyDown(KeyCode.R)) Use(2); + if (Input.GetKeyDown(KeyCode.T)) Use(3); } public void Use(int index) diff --git a/Assets/Scripts/Behvaiours.meta b/Assets/Scripts/Behvaiours.meta new file mode 100644 index 00000000..cbdc336c --- /dev/null +++ b/Assets/Scripts/Behvaiours.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 505184d3d89903d4f949ece1cdea43ec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Behvaiours/ProjectileDamage.cs b/Assets/Scripts/Behvaiours/ProjectileDamage.cs new file mode 100644 index 00000000..8516ea3a --- /dev/null +++ b/Assets/Scripts/Behvaiours/ProjectileDamage.cs @@ -0,0 +1,16 @@ +// ProjectileDamage.cs +using UnityEngine; + +public class ProjectileDamage : MonoBehaviour +{ + public float damage = 10f; + + void OnTriggerEnter(Collider other) + { + if (other.TryGetComponent(out var target)) + { + target.ApplyDamage(damage); + } + Destroy(gameObject); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Behvaiours/ProjectileDamage.cs.meta b/Assets/Scripts/Behvaiours/ProjectileDamage.cs.meta new file mode 100644 index 00000000..9e146d04 --- /dev/null +++ b/Assets/Scripts/Behvaiours/ProjectileDamage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbafe4dad51b43c40a1c3879c53d5fb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: