using UnityEngine;
|
using UnityEngine.Events;
|
|
public class ChangeMat : MonoBehaviour
|
{
|
|
//自身
|
public Material matAttack_Self;//攻击
|
public Material matDie_Self;//死亡
|
public Material matGetHit_Self;//被攻击
|
public Material matMove_Self;//移动
|
|
//敌人
|
public Material matAttack_Oppo;//攻击
|
public Material matDie_Oppo;//死亡
|
public Material matGetHit_Oppo;//被攻击
|
public Material matMove_Oppo;//移动
|
|
private bool isSelf;
|
private MeshRenderer m_renderer;
|
|
FsmManager fsmManager;
|
private void Awake()
|
{
|
m_renderer = transform.Find("Mat").GetComponent<MeshRenderer>();
|
}
|
|
private void ChangeState(sbyte stateIndex)
|
{
|
fsmManager.ChangeState(stateIndex);
|
}
|
|
void Update()
|
{
|
fsmManager.Update();
|
}
|
|
UnityAction dieCallBack;
|
|
public void SetSelf(bool isSelf,UnityAction ac)
|
{
|
this.isSelf = isSelf;
|
|
fsmManager = new FsmManager((byte)AnimaState.MaxValue);
|
|
EnemyMove tmpMove = new EnemyMove(m_renderer, isSelf ? matMove_Self : matMove_Oppo);
|
fsmManager.AddState(tmpMove);
|
EnemyAttack tmpAttack = new EnemyAttack(m_renderer, isSelf ? matAttack_Self : matAttack_Oppo, AfterAttack);
|
fsmManager.AddState(tmpAttack);
|
EnemyGetHit tmpGetHit = new EnemyGetHit(m_renderer, isSelf ? matGetHit_Self : matGetHit_Oppo, AfterGetHit);
|
fsmManager.AddState(tmpGetHit);
|
EnemyDie tmpDie = new EnemyDie(m_renderer, isSelf ? matDie_Self : matDie_Oppo, AfterDie);
|
fsmManager.AddState(tmpDie);
|
|
dieCallBack = ac;
|
|
SetMove();
|
}
|
|
//移动
|
public void SetMove()
|
{
|
if (m_renderer != null)
|
{
|
ChangeState(0);
|
}
|
}
|
|
//攻击
|
public void SetAttack()
|
{
|
if (m_renderer != null)
|
{
|
ChangeState(1);
|
}
|
}
|
|
private void AfterAttack()
|
{
|
dieCallBack();
|
}
|
|
//被攻击
|
public void SetGetHit()
|
{
|
if (m_renderer != null)
|
{
|
ChangeState(2);
|
}
|
}
|
|
private void AfterGetHit()
|
{
|
SetMove();
|
}
|
|
//matDie_Oppo
|
public void SetDie()
|
{
|
if (m_renderer != null)
|
{
|
ChangeState(3);
|
}
|
}
|
|
private void AfterDie()
|
{
|
dieCallBack();
|
}
|
}
|