diff --git a/Assets/Prefabs/BeamObject.prefab b/Assets/Prefabs/BeamObject.prefab index 9f351b8..c05dea1 100644 --- a/Assets/Prefabs/BeamObject.prefab +++ b/Assets/Prefabs/BeamObject.prefab @@ -10,9 +10,11 @@ GameObject: m_Component: - component: {fileID: 4986471857814220672} - component: {fileID: 4250140839191994890} - m_Layer: 0 + - component: {fileID: 4511112775376894642} + - component: {fileID: 9142983110258810315} + m_Layer: 7 m_Name: BeamObject - m_TagString: Untagged + m_TagString: Friendly m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -87,3 +89,62 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!61 &4511112775376894642 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6182044071860294324} + m_Enabled: 1 + serializedVersion: 3 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_CompositeOperation: 0 + m_CompositeOrder: 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 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &9142983110258810315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6182044071860294324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa1b7388657a56c7a91ace02c52cd5ee, type: 3} + m_Name: + m_EditorClassIdentifier: + thisLaser: {fileID: 0} diff --git a/Assets/Prefabs/MasterSpark.prefab b/Assets/Prefabs/MasterSpark.prefab index 969dd85..94f8632 100644 --- a/Assets/Prefabs/MasterSpark.prefab +++ b/Assets/Prefabs/MasterSpark.prefab @@ -51,6 +51,9 @@ MonoBehaviour: length: 100 width: 2 duration: 4 - beamObject: {fileID: 6182044071860294324, guid: 5c95f1061d0b0a13694b57cb8a14866c, type: 3} + beamObject: {fileID: 9142983110258810315, guid: 5c95f1061d0b0a13694b57cb8a14866c, type: 3} turnSpeed: 10 offset: 0.5 + enemyList: [] + damageDebounceTime: 0.5 + damage: 10 diff --git a/Assets/Scripts/BeamCollider.cs b/Assets/Scripts/BeamCollider.cs new file mode 100644 index 0000000..a64b145 --- /dev/null +++ b/Assets/Scripts/BeamCollider.cs @@ -0,0 +1,23 @@ +using System; +using UnityEngine; + +public class BeamCollider : MonoBehaviour +{ + public Laser thisLaser; + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag(thisLaser.thisPlayer.tag) && other.TryGetComponent(out Entity isEntity)) + { + thisLaser.enemyList.Add(isEntity); + } + } + + private void OnTriggerExit2D(Collider2D other) + { + if (!other.CompareTag(thisLaser.thisPlayer.tag) && other.TryGetComponent(out Entity isEntity) && thisLaser.enemyList.Contains(isEntity)) + { + thisLaser.enemyList.Remove(isEntity); + } + } +} diff --git a/Assets/Scripts/BeamCollider.cs.meta b/Assets/Scripts/BeamCollider.cs.meta new file mode 100644 index 0000000..8c7c94f --- /dev/null +++ b/Assets/Scripts/BeamCollider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fa1b7388657a56c7a91ace02c52cd5ee \ No newline at end of file diff --git a/Assets/Scripts/Laser.cs b/Assets/Scripts/Laser.cs index 3129d94..b696c2a 100644 --- a/Assets/Scripts/Laser.cs +++ b/Assets/Scripts/Laser.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Core.Extensions; using UnityEngine; @@ -10,11 +11,15 @@ public class Laser : PlayerAbility public float duration; private float currentDuration; [Header("Beam")] - [SerializeField] private GameObject beamObject; - private GameObject beamObjectInstance; + [SerializeField] private BeamCollider beamObject; + private BeamCollider beamObjectInstance; public float turnSpeed; public float offset; - + [Header("Weapon Properties")] + [HideInInspector] public List enemyList = new(); + public float damageDebounceTime; + private float currentDebounce; + public float damage; private void Start() { CreateBeam(); @@ -24,7 +29,8 @@ public class Laser : PlayerAbility { canCooldown = false; currentDuration = duration; - beamObjectInstance.SetActive(true); + currentDebounce = damageDebounceTime; + beamObjectInstance.gameObject.SetActive(true); transform.Lookat2D(thisPlayer.mouseWorldPos); } @@ -36,10 +42,27 @@ public class Laser : PlayerAbility float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.RotateTowards(beamObjectInstance.transform.rotation, Quaternion.Euler(0,0,angle), turnSpeed * Time.deltaTime); currentDuration -= Time.deltaTime; + if (currentDebounce > 0) + { + currentDebounce -= Time.deltaTime; + if (currentDebounce <= 0) + { + foreach (Entity enemy in enemyList.ToArray()) + { + if (!enemy) + { + enemyList.Remove(enemy); + continue; + } + enemy.TakeDamage(damage); + } + currentDebounce = damageDebounceTime; + } + } if (currentDuration <= 0) { canCooldown = true; - beamObjectInstance.SetActive(false); + beamObjectInstance.gameObject.SetActive(false); } } } @@ -50,11 +73,7 @@ public class Laser : PlayerAbility beamObjectInstance.transform.SetParent(transform); beamObjectInstance.transform.localScale = new Vector3(length, width, 1); beamObjectInstance.transform.Translate(Vector3.right * (beamObjectInstance.transform.localScale.x * 0.5f) + new Vector3(offset, 0, 0)); - beamObjectInstance.SetActive(false); - } - - private void DetectEnemies() - { - + beamObjectInstance.thisLaser = this; + beamObjectInstance.gameObject.SetActive(false); } }