Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class player_dmg : MonoBehaviour
- {
- [Header("Vie")]
- public float invTimer = 0.6f;
- public int maxHP = 100, HP, DEF;
- public float knockDelay;
- [Header("Sons")]
- public AudioClip[] hurtSounds;
- AudioSource audsource;
- Coroutine invCor, knocked;
- SpriteRenderer spre;
- player_input pl_input;
- player_mvt pl_mvt;
- Rigidbody2D rb;
- void Start()
- {
- audsource = GetComponent<AudioSource>();
- spre = GetComponent<SpriteRenderer>();
- pl_input = GetComponent<player_input>();
- pl_mvt = GetComponent<player_mvt>();
- rb = GetComponent<Rigidbody2D>();
- HP = player_stats.MAXHP();
- StartCoroutine(HPCheck());
- }
- IEnumerator HPCheck()
- {
- int hp = HP;
- while(true)
- {
- yield return new WaitUntil(() => HP != hp);
- hp = HP;
- if(HP > player_stats.MAXHP())
- {
- HP = player_stats.MAXHP();
- }
- }
- }
- void OnTriggerEnter2D(Collider2D target)
- {
- if(target.gameObject.tag == "noDmg") return;
- if(target.gameObject.layer == 8 || target.gameObject.layer == 15) GetDmg(target);
- }
- void OnTriggerStay2D(Collider2D target)
- {
- if(target.gameObject.tag == "noDmg") return;
- if(target.gameObject.layer == 8 || target.gameObject.layer == 15) GetDmg(target);
- }
- public void GetDmg(int dmg, float knock, Collider2D target)
- {
- if(invCor != null) return;
- GetInv();
- SendMessage("GotHit", null, SendMessageOptions.DontRequireReceiver);
- if(audsource != null && hurtSounds.Length > 0)
- {
- audsource.clip = hurtSounds[Random.Range(0,hurtSounds.Length)];
- audsource.Play();
- }
- Vector2 knockPos = target.bounds.center;
- if(knocked == null)
- {
- knocked = StartCoroutine(KnockBack(knock, knockPos));
- }
- HP -= CalcDmg(dmg);
- }
- public void GetDmg(Collider2D target)
- {
- monster_engine mnr = target?.attachedRigidbody?.GetComponent<monster_engine>();
- if (mnr == null) return;
- if(invCor != null) return;
- GetInv();
- SendMessage("GotHit", null, SendMessageOptions.DontRequireReceiver);
- if(audsource != null && hurtSounds.Length > 0)
- {
- audsource.clip = hurtSounds[Random.Range(0,hurtSounds.Length)];
- audsource.Play();
- }
- Vector2 knockPos = target.bounds.center;
- if(knocked == null)
- {
- knocked = StartCoroutine(KnockBack(mnr.Knockback, knockPos));
- }
- HP -= CalcDmg(mnr.DMG);
- }
- public void GetInv()
- {
- if(invCor != null) return;
- invCor = StartCoroutine(invCoroutine());
- }
- IEnumerator KnockBack(float knockback, Vector2 hitPos)
- {
- pl_input.enabled = false;
- pl_mvt.can_move = false;
- Vector2 direction = (Vector2)transform.position - hitPos;
- Vector2 knk = direction.normalized * KnockCalc(knockback, timst.DEF(DEF));
- //print("base kb: " + knockback + ", dir: " + direction.normalized + "\n knb: " + KnockCalc(knockback, timst.DEF(DEF)) + ", total: " + knk + ", delay: " + knockDelayCalc());
- if(knockDelayCalc() != 0)
- {
- rb.AddForce(knk, ForceMode2D.Impulse);
- print(rb.angularVelocity);
- }
- yield return new WaitForSeconds(knockDelayCalc());
- pl_input.enabled = true;
- pl_mvt.can_move = true;
- knocked = null;
- }
- float knockDelayCalc()
- {
- float knk = knockDelay;
- float def = timst.DEF(DEF)/33;
- if(knk - def < 0) return 0;
- return knk - def;
- }
- float KnockCalc(float knockback, int def)
- {
- float modifier = def - 33;
- if(modifier < 1) modifier = 0;
- return (knockback - modifier < 0)? 0 : knockback - modifier;
- }
- IEnumerator invCoroutine()
- {
- Color cola = spre.color;
- Color colb = cola;
- colb.a = 0.5f;
- spre.color = colb;
- yield return new WaitForSeconds(invTimer);
- spre.color = cola;
- invCor = null;
- }
- int CalcDmg(int dmg)
- {
- int def = player_stats.DEF();
- if(def < 0) def = 0;
- float DMG = dmg - def * 0.75f;
- if(DMG < 1) DMG = 1;
- return (int)DMG;
- }
- public void ChangeAudio(AudioClip[] newhurt)
- {
- hurtSounds = newhurt;
- }
- }
Add Comment
Please, Sign In to add comment