diff --git a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity index b2b02d82cdbf84e6567e0cbb16ef7355b6cb3a2d..9f79613f0bb49b8adc8ea6013139302d0f7ba797 100644 --- a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity +++ b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity @@ -146,7 +146,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: maxHealth: 3 - health: 0 + health: 3 damageable: 0 invulnerableAfterDamage: 0 playerInfo: {fileID: 0} @@ -159,6 +159,28 @@ MonoBehaviour: onHeal: m_PersistentCalls: m_Calls: [] +--- !u!114 &15892653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15892650} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e8ff7d50993ec0343b65319b7664078e, type: 3} + m_Name: + m_EditorClassIdentifier: + layers: 8 + damage: 1 + damageOverTime: 0 + damageEverXSeconds: 1 + damagePerTick: 1 + hasAttack: 1 + attackPosition: {fileID: 1604040539} + attackRange: 2 + affectedActors: 2 + animationFinishTime: 0.9 --- !u!1 &80620903 GameObject: m_ObjectHideFlags: 0 @@ -410,7 +432,7 @@ GameObject: - component: {fileID: 501061644} - component: {fileID: 501061643} - component: {fileID: 501061642} - m_Layer: 0 + m_Layer: 3 m_Name: Cube m_TagString: Untagged m_Icon: {fileID: 0} @@ -426,21 +448,21 @@ MonoBehaviour: m_GameObject: {fileID: 501061641} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5cace9c7ea0a48a4fa7b70997311a98a, type: 3} + m_Script: {fileID: 11500000, guid: 3edb2e826c9590a4d8c46dd2d83caf58, type: 3} m_Name: m_EditorClassIdentifier: - eventTrigger: 0 - layers: 0 - checkByTag: 0 - tag: [] - enterEvents: - - m_PersistentCalls: + maxHealth: 3 + health: 3 + damageable: 1 + invulnerableAfterDamage: 0 + onDamage: + m_PersistentCalls: m_Calls: [] - stayEvents: - - m_PersistentCalls: + onDeath: + m_PersistentCalls: m_Calls: [] - exitEvents: - - m_PersistentCalls: + onHeal: + m_PersistentCalls: m_Calls: [] --- !u!65 &501061643 BoxCollider: @@ -450,7 +472,7 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 501061641} m_Material: {fileID: 0} - m_IsTrigger: 1 + m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 m_Size: {x: 1, y: 1, z: 1} @@ -532,15 +554,15 @@ PrefabInstance: m_Modifications: - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.x - value: -0.000000014901159 + value: -0.000000029802319 objectReference: {fileID: 0} - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.y - value: -0.000000004125767 + value: -0.000000002163767 objectReference: {fileID: 0} - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.z - value: 7.553695e-10 + value: 3.9615505e-10 objectReference: {fileID: 0} - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.x @@ -548,11 +570,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.y - value: -0.000000008645129 + value: -0.0000000069690205 objectReference: {fileID: 0} - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.z - value: 0.0000000015828008 + value: 0.000000001275929 objectReference: {fileID: 0} - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_RootOrder @@ -604,27 +626,31 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.x - value: 0.09041652 + value: 0.09041651 objectReference: {fileID: 0} - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.y - value: 1.5116061e-16 + value: 4.596334e-16 objectReference: {fileID: 0} - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.z - value: 4.255247e-17 + value: -9.266409e-20 objectReference: {fileID: 0} - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.x - value: -0.0000000372529 + value: -0.00000002235174 objectReference: {fileID: 0} - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.y - value: -0.000000008410274 + value: 0.0000000012717155 objectReference: {fileID: 0} - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: m_LocalRotation.z - value: 0.0000000015398018 + value: -2.3283314e-10 + objectReference: {fileID: 0} + - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_Enabled + value: 1 objectReference: {fileID: 0} - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3} propertyPath: stepRayLower @@ -638,6 +664,10 @@ PrefabInstance: propertyPath: stepRayLower2 value: objectReference: {fileID: 380224755} + - target: {fileID: 3398012958249569980, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: a86eab177ff764e97a1897373332925e, type: 3} --- !u!1 &1486070605 stripped @@ -645,6 +675,36 @@ GameObject: m_CorrespondingSourceObject: {fileID: 142786442075079187, guid: a86eab177ff764e97a1897373332925e, type: 3} m_PrefabInstance: {fileID: 1435488303} m_PrefabAsset: {fileID: 0} +--- !u!1 &1604040539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1604040540} + m_Layer: 0 + m_Name: AttackPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1604040540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604040539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.26741314, y: 1.3737164, z: 0.8802147} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 15892651} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1626715799 GameObject: m_ObjectHideFlags: 0 diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs index c9547b77745c85cd6afca1cd71e344678d903915..516d397196cb3008155426b71d48c3937f3914f9 100644 --- a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs @@ -2,15 +2,119 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.InputSystem; public class DamageDealer : MonoBehaviour { + public LayerMask layermask; public int damage = 1; - + public bool damageOverTime = false; + public float damageEveryXSeconds; + public int damagePerTick = 1; + public bool hasAttack = false; + public GameObject attackPosition; + public float attackRange; public DamageActor affectedActors; + + [SerializeField] private float animationFinishTime = 0.9f; + private bool isAttacking; + private int isAttackingHash; + private bool canTakeDamage = true; + + + private Animator animator; + private PlayerInput input; + private InputAction attack; + + private void Awake() + { + input = new PlayerInput(); + animator = GetComponent<Animator>(); + isAttackingHash = Animator.StringToHash("attack"); + } + + private void OnEnable() + { + input.Enable(); + input.Player.Attack.started += Attack; + } + + private void OnDisable() + { + input.Player.Attack.started -= Attack; + input.Disable(); + } + + private void FixedUpdate() + { + if (isAttacking && animator.GetCurrentAnimatorStateInfo(1).normalizedTime >= animationFinishTime) + { + isAttacking = false; + } + } + private void OnTriggerEnter(Collider other) { - throw new NotImplementedException(); + var damageable = other.GetComponent<Damageable>(); + if (hasAttack || !affectedActors.HasFlag(damageable.Actor) || damageOverTime || layermask != (layermask | (1<< other.gameObject.layer))) + return; + + damageable.Damage(damage); + } + + private void OnTriggerStay(Collider other) + { + var damageable = other.GetComponent<Damageable>(); + if (hasAttack || !affectedActors.HasFlag(damageable.Actor) || !damageOverTime || layermask != (layermask | (1<< other.gameObject.layer))) + return; + if (canTakeDamage) + { + StartCoroutine(DamagePerSecond(damageEveryXSeconds)); + damageable.Damage(damagePerTick); + } + + + } + + private IEnumerator DamagePerSecond(float value) + { + canTakeDamage = false; + yield return new WaitForSecondsRealtime(value); + canTakeDamage = true; + } + + + private void Attack(InputAction.CallbackContext obj) + { + if (!isAttacking && hasAttack) + { + animator.SetTrigger(isAttackingHash); + StartCoroutine(InitializeAttack()); + Debug.Log("Attack"); + Collider[] hitEnemies = Physics.OverlapSphere(attackPosition.transform.position, attackRange, layermask); + + foreach (var enemy in hitEnemies) + { + if (layermask == (layermask | (1<< enemy.gameObject.layer))) + Debug.Log("layermask works"); + var damageable = enemy.GetComponent<Damageable>(); + if (!affectedActors.HasFlag(damageable.Actor)) + return; + damageable.Damage(damage); + } + } + } + + IEnumerator InitializeAttack() + { + yield return new WaitForSeconds(0.1f); + isAttacking = true; + } + + private void OnDrawGizmosSelected() + { + Gizmos.DrawWireSphere(attackPosition.transform.position, attackRange); } + } diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs index aec6a2dc1fca4e85ba025ac38c6c80085cafb89a..d28bd665b6b0cf67c6f7873ddb8404716b1e33d5 100644 --- a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs @@ -6,8 +6,8 @@ using UnityEngine; public abstract class Damageable : MonoBehaviour { - public int maxHealth; - public int health; + [SerializeField] protected int maxHealth; + [SerializeField] protected int health; public bool damageable; @@ -18,7 +18,7 @@ public abstract class Damageable : MonoBehaviour private void Awake() { - health = maxHealth; + Health = MaxHealth; } public virtual int MaxHealth @@ -48,8 +48,8 @@ public abstract class Damageable : MonoBehaviour { if (amount == 0) return; amount = Mathf.Abs(amount); - health -= amount; - if (health <= 0) Death(); + Health -= amount; + if (Health <= 0) Death(); if (invulnerableAfterDamage != 0) StartCoroutine(MakeInvulnerable(invulnerableAfterDamage)); } @@ -60,7 +60,7 @@ public abstract class Damageable : MonoBehaviour if (amount == 0) return; amount = Mathf.Abs(amount); - health += amount; + Health += amount; } public virtual void Death() diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs index 5f84b864092b0f72498cf354b5f807bd4470f479..6942d5423660ff2f108ccd175177b8e71428eb72 100644 --- a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs @@ -32,7 +32,7 @@ public class EnemyDamageable : Damageable public override void Damage(int amount) { base.Damage(amount); - + Debug.Log(gameObject.name+ " Hit"); onDamage?.Invoke(); //Animation @@ -52,8 +52,9 @@ public class EnemyDamageable : Damageable public override void Death() { base.Death(); - + onDamage.Invoke(); + Debug.Log(gameObject.name+" Dead"); //Animation //Sound diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs index ce8404863a547ea46f25e62569aad231474d1472..b35da8b68638dfa161ea67ef695c52d99b93ba97 100644 --- a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs @@ -13,9 +13,23 @@ public class PlayerDamageable : Damageable public UnityEvent onHeal; - public override DamageActor Actor { get; } = DamageActor.Player; - + public override DamageActor Actor { get; } = DamageActor.Player; + + + public override int MaxHealth + { + get => playerInfo.maxHealth; + set + { + if (value == playerInfo.maxHealth) + return; + + int difference = value - playerInfo.maxHealth; + playerInfo.maxHealth = value; + Heal(difference); + } + } public override int Health { @@ -34,7 +48,7 @@ public class PlayerDamageable : Damageable public override void Damage(int amount) { base.Damage(amount); - + Debug.Log("Player Damaged"); onDamage?.Invoke(); //Animation @@ -54,7 +68,7 @@ public class PlayerDamageable : Damageable public override void Death() { base.Death(); - + Debug.Log("Player Died"); onDamage.Invoke(); //Animation diff --git a/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs b/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs index 09205709513379a270c25f49e284dc4c5584932e..be38cfc5b518fc7befecfba92a6203be08b57946 100644 --- a/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs +++ b/Tenebrissilva/Assets/_Project/Scripts/Player/PlayerMovement.cs @@ -43,13 +43,12 @@ public class PlayerMovement : MonoBehaviour // Hash references isJumpingUpHash = Animator.StringToHash("jump"); isJumpingDownHash = Animator.StringToHash("down"); - isAttackingHash = Animator.StringToHash("attack"); + } private void OnEnable() { input.Player.Jump.started += DoJump; - input.Player.Attack.started += DoAttack; move = input.Player.Movement; input.Player.Enable(); @@ -58,7 +57,6 @@ public class PlayerMovement : MonoBehaviour private void OnDisable() { input.Player.Jump.started -= DoJump; - input.Player.Attack.started -= DoAttack; input.Player.Disable(); } @@ -137,20 +135,6 @@ public class PlayerMovement : MonoBehaviour } } - private void DoAttack(InputAction.CallbackContext obj) - { - if (!isAttacking) - { - animator.SetTrigger(isAttackingHash); - StartCoroutine(InitializeAttack()); - } - } - - IEnumerator InitializeAttack() - { - yield return new WaitForSeconds(0.1f); - isAttacking = true; - } private bool IsGrounded() { diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset new file mode 100644 index 0000000000000000000000000000000000000000..662253a564761e728dd764d51bc554063fb4ed7e --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset @@ -0,0 +1,18 @@ +%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: 8f1eaa3258b22794fb4240121cb711d3, type: 3} + m_Name: PlayerInfo + m_EditorClassIdentifier: + defaultMaxHealth: 3 + defaultHealth: 3 + maxHealth: 3 + health: 3 diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta new file mode 100644 index 0000000000000000000000000000000000000000..0e565cd5226262840eee49411a85fb31af6daa76 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInfo.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c15ca0934a7074f4b8a85e282b1c0f2c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: