summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Test/SaionjiScript_Ability.cs
blob: 1b248751c3ead06c2241e34932fdac31707fd517 (plain)
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public partial class SaionjiScript : MonoBehaviour
{
	/// <summary>
	/// ability system
	/// </summary>
	AbilitySystem m_AbilitySystem = new AbilitySystem(); 

	ConditionBase And(ConditionBase c1, ConditionBase c2)
	{
		return new ConditionAnd(c1, c2);
	}

	ConditionBase Or(ConditionBase c1, ConditionBase c2)
	{
		return new ConditionOr(c1,c2);
	}

    /// <summary>
    /// 设置abilities
    /// </summary>
    void SetupAbilities()
    {
		IdleAbility idle = new IdleAbility(animator, Anim_Idle);
		MoveAbility move = new MoveAbility(animator, Anim_Run);
		AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1); 
		AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2); 
		AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3); 
		AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4); 
		AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5); 

		ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move);
		ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle);
		ActionSwitchAbility switchToAttk1 = new ActionSwitchAbility(m_AbilitySystem, attk1);
		ActionSwitchAbility switchToAttk2 = new ActionSwitchAbility(m_AbilitySystem, attk2);
		ActionSwitchAbility switchToAttk3 = new ActionSwitchAbility(m_AbilitySystem, attk3);
		ActionSwitchAbility switchToAttk4 = new ActionSwitchAbility(m_AbilitySystem, attk4);
		ActionSwitchAbility switchToAttk5 = new ActionSwitchAbility(m_AbilitySystem, attk5);

		ConditionCommand condRightCmd = new ConditionCommand(GamepadButton.Right);
		ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
		ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);

		Trigger trigger = null; 

		trigger = new Trigger(condRightCmd, switchToMove);
		idle.AddTrigger(trigger);
		trigger = new Trigger(condCircleCmd, switchToAttk1);
		idle.AddTrigger(trigger);

		trigger = new Trigger(condNoMoveButtonHold, switchToIdle);
		move.AddTrigger(trigger);
		trigger = new Trigger(condCircleCmd, switchToAttk1);
		move.AddTrigger(trigger);

		ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack1);
		trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2);
		attk1.AddTrigger(trigger);

		ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack2);
		trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3);
		attk2.AddTrigger(trigger);

		ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack3);
		trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4);
		attk3.AddTrigger(trigger);

		ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack4);
		trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5);
		attk4.AddTrigger(trigger);

		ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack5);
		trigger = new Trigger(condAttk5AtEnd, switchToIdle);
		attk5.AddTrigger(trigger);

		m_AbilitySystem.ForceStart(idle);
	}

}