using UnityEngine;
using System.Collections;
public class CsMonster : MonoBehaviour {
public enum STATE { IDLE, MOVE, DIE };
private Animator anim;
public Transform effect;
public float moveSpeed;
public AudioClip sndHit;
private int monsterMaxHP;
private int monsterHP;
private int monsterDamage;
bool isDeath;
// Use this for initialization
void Start()
{
isDeath = false;
var gameManagerObj = GameObject.Find("GameManager");
CsGameManager GMInstance = gameManagerObj.GetComponent<CsGameManager>().GetInstance();
monsterMaxHP = monsterHP = GMInstance.GetMonsterHP();
monsterDamage = GMInstance.GetMonsterDamage();
anim = GetComponent<Animator>();
StartCoroutine("ChangeState", STATE.IDLE);
}
// Update is called once per frame
void Update()
{
}
public int GetMaxHP()
{
return monsterMaxHP;
}
public int GetHP()
{
return monsterHP;
}
public int GetDamage()
{
return monsterDamage;
}
void OnCollisionEnter(Collision coll)
{
if (coll.transform.tag == "HERO")
{
if (isDeath) return;
Vector3 effectPosition = transform.position;
effectPosition.y += 0.03f;
Instantiate(effect, effectPosition, Quaternion.identity);
AudioSource.PlayClipAtPoint(sndHit, transform.position);
monsterHP -= coll.transform.GetComponent<CsPlayer>().GetDamage();
coll.transform.GetComponent<CsPlayer>().AddHP(-GetDamage());
if (monsterHP <= 0)
{
isDeath = true;
StartCoroutine("ChangeState", STATE.DIE);
var Score = GameObject.Find("Score");
CsScore CScore = Score.GetComponent<CsScore>().GetInstance();
CScore.RenderScore();
}
}
}
Vector3 CalculateDistance(Transform obj)
{
Vector3 dist = obj.position - transform.position;
dist = Vector3.Normalize(dist);
return dist;
}
IEnumerator ChangeState(STATE _state)
{
switch (_state)
{
case STATE.IDLE:
StartCoroutine("IdleProc");
break;
case STATE.MOVE:
StartCoroutine("MoveProc");
break;
case STATE.DIE:
StartCoroutine("DieProc");
break;
}
yield return null;
}
IEnumerator IdleProc()
{
Debug.Log("idleproc");
anim.SetTrigger("tIdle");
yield return new WaitForSeconds(1.0f);
StartCoroutine("ChangeState", STATE.MOVE);
}
IEnumerator MoveProc()
{
anim.SetTrigger("tMove");
GameObject hero = GameObject.Find("Hero");
Vector3 dist = CalculateDistance(hero.transform);
if(dist.x <= -0.1f)
{
transform.localScale = new Vector3(1, 1, 1);
}
if(dist.x >= 0.1f)
{
transform.localScale = new Vector3(-1, 1, 1);
}
transform.Translate(dist * (moveSpeed * Time.smoothDeltaTime));
yield return new WaitForEndOfFrame();
StartCoroutine("ChangeState", STATE.MOVE);
}
IEnumerator DieProc()
{
anim.SetTrigger("tDie");
yield return new WaitForSeconds(1.0f);
var gameManagerObj = GameObject.Find("GameManager");
CsGameManager GMInstance = gameManagerObj.GetComponent<CsGameManager>().GetInstance();
GMInstance.DownMonsterCount();
Destroy(gameObject);
}
}