wangguan
2020-12-10 5f6fb6dccd1330b5b0bcb2d721167a6ac062f3ad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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 checkCallBack;
 
    UnityAction dieCallBack;
 
    public void SetSelf(bool isSelf,UnityAction checkAC,UnityAction dieAC)
    {
        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);
 
        checkCallBack = checkAC;
        dieCallBack = dieAC;
 
        SetMove();
    }
 
    //移动
    public void SetMove()
    {
        if (m_renderer != null)
        {
            ChangeState(0);
        }
    }
 
    //攻击
    public void SetAttack()
    {
        if (m_renderer != null)
        {
            ChangeState(1);
        }
    }
 
    private void AfterAttack()
    {
        checkCallBack();
    }
 
    //被攻击
    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();
    }
}