diff --git a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity index 60dabcd742046f7f88d7720e04e613774a927b81..9f79613f0bb49b8adc8ea6013139302d0f7ba797 100644 --- a/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity +++ b/Tenebrissilva/Assets/_Project/Scenes/Sandbox.unity @@ -123,6 +123,64 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &15892650 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 894685680894697031, guid: a86eab177ff764e97a1897373332925e, type: 3} + m_PrefabInstance: {fileID: 1435488303} + m_PrefabAsset: {fileID: 0} +--- !u!4 &15892651 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 513796622886044925, guid: a86eab177ff764e97a1897373332925e, type: 3} + m_PrefabInstance: {fileID: 1435488303} + m_PrefabAsset: {fileID: 0} +--- !u!114 &15892652 +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: 00fc180867ed6bb49a4c324f4c933ef5, type: 3} + m_Name: + m_EditorClassIdentifier: + maxHealth: 3 + health: 3 + damageable: 0 + invulnerableAfterDamage: 0 + playerInfo: {fileID: 0} + onDamage: + m_PersistentCalls: + m_Calls: [] + onDeath: + m_PersistentCalls: + m_Calls: [] + 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 @@ -331,6 +389,36 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &380224755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 380224756} + m_Layer: 0 + m_Name: StepRayLower (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &380224756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380224755} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.324} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 15892651} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &501061641 GameObject: m_ObjectHideFlags: 0 @@ -344,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} @@ -360,20 +448,20 @@ 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: + maxHealth: 3 + health: 3 + damageable: 1 + invulnerableAfterDamage: 0 + onDamage: m_PersistentCalls: m_Calls: [] - stayEvents: + onDeath: m_PersistentCalls: m_Calls: [] - exitEvents: + onHeal: m_PersistentCalls: m_Calls: [] --- !u!65 &501061643 @@ -384,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} @@ -452,7 +540,142 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &999645247 +--- !u!1 &1418784925 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 142786442390584196, guid: a86eab177ff764e97a1897373332925e, type: 3} + m_PrefabInstance: {fileID: 1435488303} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1435488303 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000029802319 + objectReference: {fileID: 0} + - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.y + value: -0.000000002163767 + objectReference: {fileID: 0} + - target: {fileID: 2964776070120258367, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.z + value: 3.9615505e-10 + objectReference: {fileID: 0} + - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000002235174 + objectReference: {fileID: 0} + - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.y + value: -0.0000000069690205 + objectReference: {fileID: 0} + - target: {fileID: 2964776070640493478, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000001275929 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalPosition.x + value: 5.2267866 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalPosition.y + value: -2.5166266 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalPosition.z + value: 6.149029 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462466, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2964776070906462467, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_Name + value: PLAYER + objectReference: {fileID: 0} + - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.x + value: 0.09041651 + objectReference: {fileID: 0} + - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.y + value: 4.596334e-16 + objectReference: {fileID: 0} + - target: {fileID: 2964776071172871079, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.z + value: -9.266409e-20 + objectReference: {fileID: 0} + - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000002235174 + objectReference: {fileID: 0} + - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0000000012717155 + objectReference: {fileID: 0} + - target: {fileID: 2964776071241958025, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: m_LocalRotation.z + 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 + value: + objectReference: {fileID: 1486070605} + - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3} + propertyPath: stepRayUpper + value: + objectReference: {fileID: 1418784925} + - target: {fileID: 3158857365447649064, guid: a86eab177ff764e97a1897373332925e, type: 3} + 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 +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} @@ -460,80 +683,27 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 999645250} - - component: {fileID: 999645249} - - component: {fileID: 999645248} + - component: {fileID: 1604040540} m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera + m_Name: AttackPosition + m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &999645248 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999645247} - m_Enabled: 1 ---- !u!20 &999645249 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999645247} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &999645250 +--- !u!4 &1604040540 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 999645247} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + 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: 0} - m_RootOrder: 0 + m_Father: {fileID: 15892651} + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1626715799 GameObject: diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta new file mode 100644 index 0000000000000000000000000000000000000000..5e437c58eb20fe9d8253866df2dfadf64154f484 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 020eb23c4b2f86d47bc1232b21c5e182 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs new file mode 100644 index 0000000000000000000000000000000000000000..516d397196cb3008155426b71d48c3937f3914f9 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs @@ -0,0 +1,120 @@ +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) + { + 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/DamageDealer.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..7f74e60b0df8fdd9104255c0568f909c1a53bdfc --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/DamageDealer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8ff7d50993ec0343b65319b7664078e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs new file mode 100644 index 0000000000000000000000000000000000000000..d28bd665b6b0cf67c6f7873ddb8404716b1e33d5 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +public abstract class Damageable : MonoBehaviour +{ + [SerializeField] protected int maxHealth; + [SerializeField] protected int health; + + public bool damageable; + + public float invulnerableAfterDamage = 0; + + public abstract DamageActor Actor { get; } + + + private void Awake() + { + Health = MaxHealth; + } + + public virtual int MaxHealth + { + get => maxHealth; + set + { + if (value == maxHealth) + return; + + int difference = value - maxHealth; + maxHealth = value; + Heal(difference); + } + } + + public virtual int Health + { + get => health; + set => health = Mathf.Clamp(value,0,MaxHealth); + } + + + public virtual void Damage(int amount) + { + if (damageable) + { + if (amount == 0) return; + amount = Mathf.Abs(amount); + Health -= amount; + if (Health <= 0) Death(); + + if (invulnerableAfterDamage != 0) StartCoroutine(MakeInvulnerable(invulnerableAfterDamage)); + } + } + + public virtual void Heal(int amount) + { + if (amount == 0) + return; + amount = Mathf.Abs(amount); + Health += amount; + } + + public virtual void Death() + { + return; + } + + public IEnumerator MakeInvulnerable(float value) + { + damageable = false; + yield return new WaitForSecondsRealtime(value); + damageable = true; + } + +} + +public enum DamageActor +{ + Player = 1<<0, + Enemy = 1<<1, + Environment = 1<<2 +} diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..ff5609d01143dcc102fea7c4985a192a5ca95e84 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/Damageable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28e94e39546edd74696e0ff7c1e0de23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs new file mode 100644 index 0000000000000000000000000000000000000000..6942d5423660ff2f108ccd175177b8e71428eb72 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class EnemyDamageable : Damageable +{ + public UnityEvent onDamage; + + public UnityEvent onDeath; + + public UnityEvent onHeal; + + public override DamageActor Actor { get; } = DamageActor.Enemy; + + + + public override int Health + { + get => health; + set + { + health = Mathf.Clamp(value, 0, MaxHealth); + if (health == 0) + { + Death(); + } + } + } + + + public override void Damage(int amount) + { + base.Damage(amount); + Debug.Log(gameObject.name+ " Hit"); + onDamage?.Invoke(); + + //Animation + //Sound + } + + public override void Heal(int amount) + { + base.Heal(amount); + + onHeal?.Invoke(); + + //Animation + //Sound + } + + public override void Death() + { + base.Death(); + + onDamage.Invoke(); + Debug.Log(gameObject.name+" Dead"); + + //Animation + //Sound + } +} diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..19662aa70ecdc957ccbd1d5536c19e0f23a1d330 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/EnemyDamageable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3edb2e826c9590a4d8c46dd2d83caf58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs new file mode 100644 index 0000000000000000000000000000000000000000..b35da8b68638dfa161ea67ef695c52d99b93ba97 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs @@ -0,0 +1,77 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class PlayerDamageable : Damageable +{ + public PlayerInformation playerInfo; + + public UnityEvent onDamage; + + public UnityEvent onDeath; + + public UnityEvent onHeal; + + + 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 + { + get => playerInfo.health; + set + { + playerInfo.health = Mathf.Clamp(value, 0, MaxHealth); + if (playerInfo.health == 0) + { + Death(); + } + } + } + + + public override void Damage(int amount) + { + base.Damage(amount); + Debug.Log("Player Damaged"); + onDamage?.Invoke(); + + //Animation + //Sound + } + + public override void Heal(int amount) + { + base.Heal(amount); + + onHeal?.Invoke(); + + //Animation + //Sound + } + + public override void Death() + { + base.Death(); + Debug.Log("Player Died"); + onDamage.Invoke(); + + //Animation + //Sound + } +} diff --git a/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..2c1e73b8d20c7778f3bb49aa43d49c6c9601dacf --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/Kampfsystem/PlayerDamageable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00fc180867ed6bb49a4c324f4c933ef5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: 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.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects.meta new file mode 100644 index 0000000000000000000000000000000000000000..70421ddde42f92db3a8f09b0a77102432dd1224c --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87e131775170c7a42b1c932d93f8bd95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: 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: diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs new file mode 100644 index 0000000000000000000000000000000000000000..562e31531bda2ab1076dc749873ef9326c3db096 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(fileName = "PlayerInfo")] +public class PlayerInformation : ScriptableObject +{ + [SerializeField] public int defaultMaxHealth = 3; + [SerializeField] public int defaultHealth = 3; + + public int maxHealth; + public int health; + + private void OnEnable() + { + maxHealth = defaultMaxHealth; + health = defaultHealth; + } +} diff --git a/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..304a9916c2dd4d9bc18a12cacc89f79e1897e9d4 --- /dev/null +++ b/Tenebrissilva/Assets/_Project/Scripts/ScriptableObjects/PlayerInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f1eaa3258b22794fb4240121cb711d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: