using System.Collections; using System.Collections.Generic; using UnityEditor.Rendering; using UnityEngine; using UnityEngine.Events; public class SkinlessMonsterAnimator : MonoBehaviour { [SerializeField] private Animator animator; private float speed = 0f; [SerializeField] [Tooltip("This is the object with the skin dissolve material")] private GameObject modelObject; [SerializeField] private List objectsThatFallOnDeath= new List(); private Material dissolveMaterial; private bool isAlive = true; [SerializeField] private float deathSpeed = 5f; private float curDeathSpeed = 5f; private bool isRunning = false; public bool IsRunning { get { return isRunning; } } [SerializeField] private float fastDeathduration = 1f; [SerializeField] private float deathDuration = 5f; [SerializeField] private string deathAnimationName = "PainScream"; // Start is called before the first frame update void Start() { dissolveMaterial = modelObject.GetComponent().materials[0]; curDeathSpeed = deathSpeed; } // Update is called once per frame void Update() { if (isAlive) { animator.SetFloat("Speed", speed); } else { float quantity = dissolveMaterial.GetFloat("_DissolveQuantity"); quantity = Mathf.Lerp(quantity, -2, Time.deltaTime *curDeathSpeed); dissolveMaterial.SetFloat("_DissolveQuantity", quantity); } } public void StartMoving() { if (isAlive) { isRunning = true; speed = 1; } } public void StopMoving() { if (isAlive) { speed = 0; isRunning = false; } } public void Attack() { if (isAlive) { animator.SetTrigger("Attack"); } } /// /// 0,1,2,3 /// /// public void SetAttackType(int attackType) { animator.SetInteger("AttackIndex", attackType); } public void InLight() { if(isAlive) animator.SetBool("InLight", true); } public void NotInLight() { if(isAlive) animator.SetBool("InLight", false); } public void AttackScream() { if(isAlive) animator.SetTrigger("AttackScream"); } public void Kill(bool fast = false) { //animator.speed = 0; InLight(); //animator.Play(this.deathAnimationName); isAlive = false; foreach(GameObject obj in this.objectsThatFallOnDeath) { obj.AddComponent(); if (obj.GetComponent() != null) { obj.GetComponent().enabled = false; } } float dur = this.deathDuration; if (fast) { dur = this.fastDeathduration; curDeathSpeed = deathSpeed * (this.deathDuration / this.fastDeathduration); } StartCoroutine(destroyAfterSeconds(dur)); } private IEnumerator destroyAfterSeconds(float duration) { yield return new WaitForSeconds(duration); Destroy(this.gameObject); } }