summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Avatar
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Avatar')
-rw-r--r--Assets/Scripts/Avatar/Abilities.meta8
-rw-r--r--Assets/Scripts/Avatar/Abilities/AbilityBase.cs66
-rw-r--r--Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/AttackAbility.cs143
-rw-r--r--Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/DashAbility.cs18
-rw-r--r--Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/DodgeAbility.cs16
-rw-r--r--Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/HurtAbility.cs21
-rw-r--r--Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/IdleAbility.cs52
-rw-r--r--Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/JumpAbility.cs241
-rw-r--r--Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/MoveAbility.cs68
-rw-r--r--Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/AbilitySystem.cs90
-rw-r--r--Assets/Scripts/Avatar/AbilitySystem.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions.meta8
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs23
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionBase.cs23
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionBase.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionEffects.meta8
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs14
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionFreeze.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionFreeze.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJump.cs21
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJump.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpBack.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpBack.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpForward.cs21
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpForward.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionLog.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionLog.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPlaySound.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPlaySound.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionRush.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionRush.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetPosition.cs15
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetPosition.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs21
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs21
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTowardRight.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTowardRight.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTurn180.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionTurn180.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionUseGravity.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionUseGravity.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/CameraActions.meta8
-rw-r--r--Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs16
-rw-r--r--Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/EffectActions.meta8
-rw-r--r--Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs19
-rw-r--r--Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/UberActions.meta8
-rw-r--r--Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs18
-rw-r--r--Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs62
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Bahaviours.meta8
-rw-r--r--Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs14
-rw-r--r--Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions.meta8
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs26
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs21
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionBase.cs196
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionBase.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCombo.cs14
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCombo.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCommand.cs22
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCommand.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs54
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionInair.cs21
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionInair.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs31
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs28
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs16
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs19
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs18
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/Interactive.meta8
-rw-r--r--Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs21
-rw-r--r--Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs20
-rw-r--r--Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/HitDef.cs9
-rw-r--r--Assets/Scripts/Avatar/HitDef.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/IInteractable.cs21
-rw-r--r--Assets/Scripts/Avatar/IInteractable.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Trigger.cs72
-rw-r--r--Assets/Scripts/Avatar/Trigger.cs.meta11
143 files changed, 2923 insertions, 0 deletions
diff --git a/Assets/Scripts/Avatar/Abilities.meta b/Assets/Scripts/Avatar/Abilities.meta
new file mode 100644
index 00000000..4b958769
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 962b8b798c2077c4db88f3828ba14d55
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs
new file mode 100644
index 00000000..8b1a5549
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs
@@ -0,0 +1,66 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 同一个角色同一个时间只能有一个ability
+/// </summary>
+public abstract class AbilityBase
+{
+ protected int m_AbilityID;
+ public int ID
+ {
+ get
+ {
+ return m_AbilityID;
+ }
+ }
+
+ public AbilityBase()
+ {
+ m_AbilityID = UIDManager.Acquire();
+ }
+
+ public virtual void OnInit() { }
+
+ /// <summary>
+ /// 进入当前ability的回调
+ /// </summary>
+ public virtual void OnEnter() { }
+
+ /// <summary>
+ /// 退出当前ability的回调
+ /// </summary>
+ public virtual void OnExit() { }
+
+ /// <summary>
+ /// 当前ability的update函数
+ /// </summary>
+ public virtual void OnUpdate() { }
+
+ /// <summary>
+ /// 在物理模拟之后更新
+ /// </summary>
+ public virtual void OnLateUpdate() { }
+
+ /// <summary>
+ /// 过渡到下一个ability的回调
+ /// </summary>
+ /// <param name="to"></param>
+ public virtual void OnTranslate(AbilityBase to) { }
+
+ /// <summary>
+ /// 检测到hitbox碰撞时的回调
+ /// </summary>
+ public virtual void OnHit() { }
+
+ /// <summary>
+ /// 检测到hurtbox碰撞时的回调
+ /// </summary>
+ public virtual void OnHurt() { }
+
+ /// <summary>
+ /// 检测到defendbox碰撞时的回调
+ /// </summary>
+ public virtual void OnDefend() { }
+}
diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta
new file mode 100644
index 00000000..79a6b7eb
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a3b3cfab4bd1dd74bb539687535b58f1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs
new file mode 100644
index 00000000..9ca52a4c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs
@@ -0,0 +1,143 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public struct AttackAbilityConfig
+{
+ public Vector3 velocity; // velocity setup
+ public int motion;
+ public Animator animator;
+ public PhysicsBody body;
+}
+
+// 单独的一个招式
+public class AttackAbility : AbilityBase
+{
+ AttackAbilityConfig m_Config = new AttackAbilityConfig();
+
+ /// <summary>
+ /// 在跑动状态时可以切换的ability
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ private List<Trigger> m_LateTriggers = new List<Trigger>();
+
+ /// <summary>
+ /// 这个招式所有hit的效果
+ /// </summary>
+ public HitDefination[] HitDef;
+
+ /// <summary>
+ /// 从动画结束开始计时
+ /// </summary>
+ float m_TimeCount;
+ public float ExpireTime
+ {
+ get
+ {
+ return m_TimeCount;
+ }
+ }
+
+ /// <summary>
+ /// 这个招式的hit个数
+ /// </summary>
+ public int HitCount
+ {
+ get
+ {
+ return HitDef != null ? HitDef.Length : 0;
+ }
+ }
+
+
+ public AttackAbility(Animator animator, int animation, PhysicsBody body = null)
+ {
+ m_Config.animator = animator;
+ m_Config.motion = animation;
+ m_Config.velocity = Vector3.zero;
+ m_Config.body = body;
+ }
+
+ public AttackAbility(AttackAbilityConfig config)
+ {
+ m_Config = config;
+ }
+
+ public override void OnInit()
+ {
+ }
+
+ public override void OnDefend()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public override void OnEnter()
+ {
+ m_TimeCount = 0;
+
+ m_Config.animator.CrossFade(m_Config.motion, 0);
+
+ if(m_Config.body != null)
+ {
+ m_Config.body.LocalVelocity = m_Config.velocity;
+ }
+ }
+
+ public override void OnExit()
+ {
+ m_TimeCount = 0;
+ }
+
+ public override void OnHit()
+ {
+ }
+
+ public override void OnHurt()
+ {
+ }
+
+ public override void OnTranslate(AbilityBase to)
+ {
+ }
+
+ public override void OnUpdate()
+ {
+ AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0);
+ if(info.shortNameHash == m_Config.motion && info.normalizedTime >= 0.99f)
+ {
+ m_TimeCount += Time.deltaTime;
+ }
+ foreach (var abilityTrigger in m_Triggers)
+ {
+ if (abilityTrigger.Update() && abilityTrigger.Swallow)
+ break;
+ }
+ }
+
+ // 在物理模拟之后
+ public override void OnLateUpdate()
+ {
+ foreach (var trigger in m_LateTriggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+ public void AddLateTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_LateTriggers.Contains(trigger))
+ return;
+ m_LateTriggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta
new file mode 100644
index 00000000..4159d2bc
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eefcc728a2660c0459b0d79230cc4dec
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/DashAbility.cs b/Assets/Scripts/Avatar/Abilities/DashAbility.cs
new file mode 100644
index 00000000..b9a479b5
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/DashAbility.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DashAbility : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta
new file mode 100644
index 00000000..c246c665
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6d5a31f4a65fbba429d0a2ff3b3a49a4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs b/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs
new file mode 100644
index 00000000..79e8fc61
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+/// <summary>
+/// Dodge ability
+/// </summary>
+public class DodgeAbility : AbilityBase
+{
+ public DodgeAbility()
+ {
+
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta
new file mode 100644
index 00000000..e7297a88
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 838e30895704e13479bfb0f5c06229e5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs
new file mode 100644
index 00000000..c12c89c6
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 将伤害类型进行分类,决定不同的motion类型
+/// </summary>
+public enum HurtType
+{
+ Light = 0, // 轻击
+ Medium, // 中击
+ Hard, // 重击
+ Back,
+ Up,
+ Diagup
+}
+
+public class HurtAbility : AbilityBase
+{
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta
new file mode 100644
index 00000000..0e70d0be
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6984a899f4c7f574a8dbffe0372c6c2e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs
new file mode 100644
index 00000000..d42308db
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs
@@ -0,0 +1,52 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+public class IdleAbility : AbilityBase
+{
+ Animator m_Animator;
+
+ int m_AnimHash;
+
+ /// <summary>
+ /// 在Idle状态时可以切换的ability
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public IdleAbility(Animator animator, int animation)
+ : base()
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
+ }
+
+ public override void OnInit()
+ {
+ base.OnInit();
+ }
+
+ public override void OnUpdate()
+ {
+ foreach(var trigger in m_Triggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+
+ base.OnUpdate();
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta
new file mode 100644
index 00000000..07d0c292
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 367ca0f7efe3fe14baf88eb3ce60a78b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs
new file mode 100644
index 00000000..e0f73efa
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs
@@ -0,0 +1,241 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public struct JumpAbilityConfig
+{
+ public PhysicsBody body;
+ public PhysicsPrimitive collider;
+ public Animator animator;
+
+ public float neutralJumpSpeedY; // 垂直跳跃的基础速度
+ public float fowardJumpSpeedX; // 向前跳跃的水平速度
+ public float backwardJumpSpeedX; // 向后跳跃的水平速度(一般来说是负值)
+
+ public int animJump;
+ public int animNU;
+ public int animFU;
+ public int animBU;
+ public int animND;
+ public int animFD;
+ public int animBD;
+ public int animJumpEnd;
+}
+
+public class JumpAbility : AbilityBase
+{
+ public enum Direction
+ {
+ Neutral,
+ Forward,
+ Backward
+ }
+
+ private enum State
+ {
+ Ready,
+ Up,
+ Down,
+ End,
+ }
+
+ Direction m_Dir;
+
+ PhysicsBody m_Body;
+ PhysicsPrimitive m_Collider;
+
+ Animator m_Animator;
+
+ public float m_NeutralJumpSpeedY; // 垂直跳跃的基础速度
+ public float m_FowardJumpSpeedX; // 向前跳跃的水平速度
+ public float m_BackwardJumpSpeedX; // 向后跳跃的水平速度(一般来说是负值)
+
+ // jump motions
+ int m_AnimJumpStart; // on ground
+ int m_AnimJumpNeutralUpwards;
+ int m_AnimJumpNeutralDownwards;
+ int m_AnimJumpFwdUpwards;
+ int m_AnimJumpFwdDownwards;
+ int m_AnimJumpBackUpwards;
+ int m_AnimJumpBackDownwards;
+ int m_AnimJumpEnd; // on ground again
+
+ int m_CurAnim;
+ State m_CurState;
+ int m_CurUpMotion;
+ int m_CurDownMotion;
+ Vector3 m_CurInitVelocity;
+
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public JumpAbility(JumpAbilityConfig config)
+ {
+ m_Body = config.body;
+ m_Collider = config.collider;
+ m_Animator = config.animator;
+ m_NeutralJumpSpeedY = config.neutralJumpSpeedY;
+ m_FowardJumpSpeedX = config.fowardJumpSpeedX;
+ m_BackwardJumpSpeedX = config.backwardJumpSpeedX;
+ m_AnimJumpStart = config.animJump;
+ m_AnimJumpNeutralUpwards = config.animNU;
+ m_AnimJumpNeutralDownwards = config.animND;
+ m_AnimJumpFwdUpwards = config.animFU;
+ m_AnimJumpFwdDownwards = config.animFD;
+ m_AnimJumpBackUpwards = config.animBU;
+ m_AnimJumpBackDownwards = config.animBD;
+ m_AnimJumpEnd = config.animJumpEnd; // on ground again
+ }
+
+ public void SetDir(Direction dir)
+ {
+ m_Dir = dir;
+ }
+
+ public override void OnEnter()
+ {
+ base.OnEnter();
+
+ m_CurAnim = 0;
+
+ switch(m_Dir)
+ {
+ case Direction.Neutral:
+ m_CurUpMotion = m_AnimJumpNeutralUpwards;
+ m_CurDownMotion = m_AnimJumpNeutralDownwards;
+ m_CurInitVelocity = new Vector3(0, m_NeutralJumpSpeedY, 0);
+ break;
+ case Direction.Forward:
+ m_CurUpMotion = m_AnimJumpFwdUpwards;
+ m_CurDownMotion = m_AnimJumpFwdDownwards;
+ m_CurInitVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0);
+ break;
+ case Direction.Backward:
+ m_CurUpMotion = m_AnimJumpBackUpwards;
+ m_CurDownMotion = m_AnimJumpBackDownwards;
+ m_CurInitVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0);
+ break;
+ }
+
+ bool isOnGround = m_Collider.IsOnGround;
+ bool isUp = m_Body.Velocity.y > 0;
+ bool isDown = m_Body.Velocity.y < 0;
+ bool isFreeFall = Mathf.Approximately(m_Body.Velocity.y, 0);
+
+ if (isOnGround)
+ m_CurState = State.Ready;
+ else if (isUp)
+ m_CurState = State.Up;
+ else if (isDown || isFreeFall)
+ m_CurState = State.Down;
+ }
+
+ public override void OnUpdate()
+ {
+ foreach (var abilityTrigger in m_Triggers)
+ {
+ if (abilityTrigger.Update() && abilityTrigger.Swallow)
+ return;
+ }
+
+ AnimatorStateInfo motionInfo = m_Animator.GetCurrentAnimatorStateInfo(0);
+
+ switch (m_CurState)
+ {
+ case State.Ready:
+ if(m_CurAnim != m_AnimJumpStart)
+ {
+ m_Animator.CrossFade(m_AnimJumpStart, 0.2f);
+ m_CurAnim = m_AnimJumpStart;
+ }
+ if(motionInfo.shortNameHash == m_AnimJumpStart && motionInfo.normalizedTime >= 1f)
+ {
+ m_Body.LocalVelocity = m_CurInitVelocity;
+ m_CurState = State.Up;
+ }
+ break;
+ case State.Up:
+ if(m_CurAnim != m_CurUpMotion)
+ {
+ m_Animator.CrossFade(m_CurUpMotion, 0.2f);
+ m_CurAnim = m_CurUpMotion;
+ }
+ if(m_Body.Velocity.y <= 0)
+ {
+ m_CurState = State.Down;
+ }
+ break;
+ case State.Down:
+ if(m_CurAnim != m_CurDownMotion)
+ {
+ m_Animator.CrossFade(m_CurDownMotion, 0.2f);
+ m_CurAnim = m_CurDownMotion;
+ }
+ if(m_Collider.IsOnGround)
+ {
+ m_CurState = State.End;
+ }
+ break;
+ case State.End:
+ if(m_CurAnim != m_AnimJumpEnd)
+ {
+ m_Animator.CrossFade(m_AnimJumpEnd, 0.2f);
+ m_CurAnim = m_AnimJumpEnd;
+ }
+ break;
+ }
+ }
+
+ public override void OnLateUpdate()
+ {
+ base.OnLateUpdate();
+ }
+
+ /// <summary>
+ /// 跳跃准备动作已经完毕
+ /// </summary>
+ /// <returns></returns>
+ public bool IsJumpReady()
+ {
+ if (m_CurAnim != m_AnimJumpStart)
+ return false;
+
+ AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0);
+ if (state.shortNameHash == m_CurAnim && state.normalizedTime >= 1f)
+ return true;
+
+ return false;
+ }
+
+ /// <summary>
+ /// 结束
+ /// </summary>
+ /// <returns></returns>
+ public bool IsJumpDone()
+ {
+ if (m_CurState == State.End)
+ {
+ AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0);
+ return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= 1f;
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// 着地
+ /// </summary>
+ /// <returns></returns>
+ public bool IsJumpGround()
+ {
+ return m_CurState == State.End && m_Collider.IsOnGround;
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta
new file mode 100644
index 00000000..6c67c462
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ed5b337c63528354f8b4f2ba0a59481d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs
new file mode 100644
index 00000000..757cd2d1
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs
@@ -0,0 +1,68 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class MoveAbility : AbilityBase
+{
+ Animator m_Animator;
+ int m_AnimHash;
+
+ /// <summary>
+ /// 在跑动状态时可以切换的ability
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public MoveAbility(Animator animator, int animation)
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnInit()
+ {
+
+ }
+
+ public override void OnDefend()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f);
+ }
+
+ public override void OnExit()
+ {
+ }
+
+ public override void OnHit()
+ {
+ }
+
+ public override void OnHurt()
+ {
+ }
+
+ public override void OnTranslate(AbilityBase to)
+ {
+ }
+
+ public override void OnUpdate()
+ {
+ foreach (var abilityTrigger in m_Triggers)
+ {
+ if (abilityTrigger.Update() && abilityTrigger.Swallow)
+ break;
+ }
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta
new file mode 100644
index 00000000..08b2954c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4581355020e27084f869d6001787e11e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs b/Assets/Scripts/Avatar/AbilitySystem.cs
new file mode 100644
index 00000000..46156c55
--- /dev/null
+++ b/Assets/Scripts/Avatar/AbilitySystem.cs
@@ -0,0 +1,90 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 每个角色拥有一个ablity system
+/// </summary>
+public class AbilitySystem
+{
+ private static List<AbilitySystem> AbilitySystems = new List<AbilitySystem>();
+
+ /// <summary>
+ /// 当前执行的ability
+ /// </summary>
+ private AbilityBase m_Currrent;
+
+ public AbilityBase Current
+ {
+ get
+ {
+ return m_Currrent;
+ }
+ }
+
+ private List<AbilityBase> m_Abilities = new List<AbilityBase>();
+
+ public AbilitySystem()
+ {
+ AbilitySystems.Add(this);
+ }
+
+ public static void Update()
+ {
+ foreach(var systems in AbilitySystems)
+ {
+ systems.OnUpdate();
+ }
+ }
+
+ public static void LateUpdate()
+ {
+ foreach (var systems in AbilitySystems)
+ {
+ systems.OnLateUpdate();
+ }
+ }
+
+ public void ForceStart(AbilityBase ability)
+ {
+ if (ability == null)
+ return;
+
+ if (m_Currrent != null)
+ m_Currrent.OnExit();
+
+ m_Currrent = ability;
+ m_Currrent.OnEnter();
+ }
+
+ public void AddAbility(AbilityBase ability)
+ {
+ m_Abilities.Add(ability);
+ }
+
+ public void OnUpdate()
+ {
+ if(m_Currrent != null)
+ {
+ m_Currrent.OnUpdate();
+ }
+ }
+
+ public void OnLateUpdate()
+ {
+ if(m_Currrent != null)
+ {
+ m_Currrent.OnLateUpdate();
+ }
+ }
+
+
+ public void SwitchToAbility(AbilityBase targetAbility)
+ {
+ if (m_Currrent != null)
+ m_Currrent.OnExit();
+ m_Currrent = targetAbility;
+ m_Currrent.OnEnter();
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs.meta b/Assets/Scripts/Avatar/AbilitySystem.cs.meta
new file mode 100644
index 00000000..52e8267c
--- /dev/null
+++ b/Assets/Scripts/Avatar/AbilitySystem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2cf426be55a8b8b48a1b794fa6938e94
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions.meta b/Assets/Scripts/Avatar/Actions.meta
new file mode 100644
index 00000000..d3b985d9
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 11a73902b983ea045bd5fb50d69dc802
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs b/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs
new file mode 100644
index 00000000..6f2252d7
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionAnimCrossFade : ActionBase
+{
+ Animator m_Animator;
+ int m_TargetAnimation;
+ float m_Duration;
+
+ public ActionAnimCrossFade(Animator animator, int toAnim, float duration = 0)
+ {
+ m_Animator = animator;
+ m_TargetAnimation = toAnim;
+ m_Duration = duration;
+ }
+
+ public override void Execute()
+ {
+ m_Animator.CrossFade(m_TargetAnimation, m_Duration);
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs.meta b/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs.meta
new file mode 100644
index 00000000..6eed1575
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionAnimCrossFade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 86ec4b9e82965164ba7d950129542f85
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionBase.cs b/Assets/Scripts/Avatar/Actions/ActionBase.cs
new file mode 100644
index 00000000..1458e340
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionBase.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class ActionBase
+{
+ private int m_ID;
+ public int ID
+ {
+ get
+ {
+ return m_ID;
+ }
+ }
+
+ protected ActionBase()
+ {
+ m_ID = UIDManager.Acquire();
+ }
+
+ public abstract void Execute();
+
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionBase.cs.meta b/Assets/Scripts/Avatar/Actions/ActionBase.cs.meta
new file mode 100644
index 00000000..8ef84b69
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bbdb3ec1494e7c8418f9068fb2815cfc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs b/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs
new file mode 100644
index 00000000..82b176fd
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionDontUseGravity : ActionBase
+{
+ PhysicsBody m_Body;
+
+ public ActionDontUseGravity(PhysicsBody body)
+ {
+ m_Body = body;
+ }
+
+ public override void Execute()
+ {
+ m_Body.UseGravity = false;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs.meta b/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs.meta
new file mode 100644
index 00000000..9957eef0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionDontUseGravity.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 500bcab3888d71747971dfa5f364fcd6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects.meta b/Assets/Scripts/Avatar/Actions/ActionEffects.meta
new file mode 100644
index 00000000..17a426dd
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionEffects.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0b5ccfefc2e6b104a8566f4da9a16c5f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs b/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs
new file mode 100644
index 00000000..c411c3fa
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 创建角色残影
+/// </summary>
+public class ActionFlashEffect : ActionBase
+{
+ public override void Execute()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs.meta b/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs.meta
new file mode 100644
index 00000000..ea99c96b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionFlashEffect.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a193a2045f759e4abaff6bfef12658f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionFreeze.cs b/Assets/Scripts/Avatar/Actions/ActionFreeze.cs
new file mode 100644
index 00000000..7f26f35a
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionFreeze.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionFreze : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionFreeze.cs.meta b/Assets/Scripts/Avatar/Actions/ActionFreeze.cs.meta
new file mode 100644
index 00000000..eb9fe77a
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionFreeze.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 32c173c981e85414c83ec9b0fc7d9722
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionJump.cs b/Assets/Scripts/Avatar/Actions/ActionJump.cs
new file mode 100644
index 00000000..cb3da106
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJump.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 垂直跳跃,切换到jump ability
+public class ActionJump : ActionSwitchAbility
+{
+ private JumpAbility m_JumpAbility;
+
+ public ActionJump(AbilitySystem system, JumpAbility jumpAbility)
+ : base(system, jumpAbility)
+ {
+ m_JumpAbility = jumpAbility;
+ }
+
+ public override void Execute()
+ {
+ m_JumpAbility.SetDir(JumpAbility.Direction.Neutral);
+ base.Execute(); // switch to jump ability
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionJump.cs.meta b/Assets/Scripts/Avatar/Actions/ActionJump.cs.meta
new file mode 100644
index 00000000..8c48a0a7
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJump.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 987cd3139a86b4c4fa0acdbb621e9e14
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs b/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs
new file mode 100644
index 00000000..c21fce77
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionJumpBack : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs.meta b/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs.meta
new file mode 100644
index 00000000..c8db01c7
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpBack.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1b4b55d531ec4084294169cddfbeb57a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs b/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs
new file mode 100644
index 00000000..0751d659
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionJumpBackward : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs.meta b/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs.meta
new file mode 100644
index 00000000..99c729b3
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpBackward.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 635bcce72805fc14ebc1cb057db4e1b2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs
new file mode 100644
index 00000000..4e71dcf6
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 垂直跳跃,切换到jump ability
+public class ActionJumpForward : ActionSwitchAbility
+{
+ private JumpAbility m_JumpAbility;
+
+ public ActionJumpForward(AbilitySystem system, JumpAbility jumpAbility)
+ : base(system, jumpAbility)
+ {
+ m_JumpAbility = jumpAbility;
+ }
+
+ public override void Execute()
+ {
+ m_JumpAbility.SetDir(JumpAbility.Direction.Forward);
+ base.Execute(); // switch to jump ability
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs.meta b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs.meta
new file mode 100644
index 00000000..27f6ba43
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0c97763c6fe099c43bab267ccc3888a9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionLog.cs b/Assets/Scripts/Avatar/Actions/ActionLog.cs
new file mode 100644
index 00000000..b276d2ef
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionLog.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionLog : ActionBase
+{
+ string m_Content = "";
+
+ public ActionLog(string content)
+ {
+ m_Content = content;
+ }
+
+ public override void Execute()
+ {
+ Debug.Log(m_Content);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionLog.cs.meta b/Assets/Scripts/Avatar/Actions/ActionLog.cs.meta
new file mode 100644
index 00000000..92995276
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionLog.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 012a5a398b677f94abeb0aa12659d5ec
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs b/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs
new file mode 100644
index 00000000..442ce999
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionPlaySfx : ActionBase
+{
+ GameObject m_Sfx;
+ Vector3 m_TargetPos;
+
+ public ActionPlaySfx(GameObject sfx, Vector3 position)
+ {
+ m_Sfx = sfx;
+ m_TargetPos = position;
+ }
+
+ public override void Execute()
+ {
+ }
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs.meta b/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs.meta
new file mode 100644
index 00000000..2b206e8f
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPlaySfx.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 302075a0d3527d44f9188351f0f6d070
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs b/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs
new file mode 100644
index 00000000..237b7455
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionPlaySound : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs.meta b/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs.meta
new file mode 100644
index 00000000..a9bbf014
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPlaySound.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c43194c5e437d5d4fb02a7b0618a7b0e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs b/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs
new file mode 100644
index 00000000..9db10173
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionPosAdd : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs.meta b/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs.meta
new file mode 100644
index 00000000..209f3795
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionPositionAdd.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fc9cfba8e327546488ec1c83add3e127
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionRush.cs b/Assets/Scripts/Avatar/Actions/ActionRush.cs
new file mode 100644
index 00000000..19f1b625
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionRush.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionRush : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionRush.cs.meta b/Assets/Scripts/Avatar/Actions/ActionRush.cs.meta
new file mode 100644
index 00000000..760ef5f0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionRush.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 43fb6de9baefcab4087468f33ae40a51
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs b/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs
new file mode 100644
index 00000000..8869801d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionSetFeetPosition : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs.meta b/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs.meta
new file mode 100644
index 00000000..87656dc0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetFeetPosition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: da4e331f7a5282e4ca369384e69e98a4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs b/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs
new file mode 100644
index 00000000..a4e62294
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionSetPosition : ActionBase
+{
+ public ActionSetPosition()
+ {
+ }
+
+ public override void Execute()
+ {
+ throw new System.NotImplementedException();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs.meta b/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs.meta
new file mode 100644
index 00000000..466f5692
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetPosition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6125833c9bb56f546bbd74cb0c7c32b3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs b/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs
new file mode 100644
index 00000000..3289ac81
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionSetVelocity : ActionBase
+{
+ PhysicsBody m_Body;
+
+ Vector3 m_Velocity;
+
+ public ActionSetVelocity(PhysicsBody body, Vector3 velocity)
+ {
+ m_Body = body;
+ m_Velocity = velocity;
+ }
+
+ public override void Execute()
+ {
+ m_Body.Velocity = m_Velocity;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs.meta b/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs.meta
new file mode 100644
index 00000000..3f677ed0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSetVelocity.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0334529cb8b95d5449a4d50a41099c0e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs b/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs
new file mode 100644
index 00000000..d55270ab
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionShakeCamera : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs.meta b/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs.meta
new file mode 100644
index 00000000..93a39df8
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionShakeCamera.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a5f356ae9f970af40b86475bc21a0d5c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs
new file mode 100644
index 00000000..1e214d72
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 基础的切换 ability
+public class ActionSwitchAbility : ActionBase
+{
+ AbilitySystem m_AbilitySystem;
+ AbilityBase m_TargetAbility;
+
+ public ActionSwitchAbility(AbilitySystem abilitySystem, AbilityBase targetAbility)
+ {
+ m_AbilitySystem = abilitySystem;
+ m_TargetAbility = targetAbility;
+ }
+
+ public override void Execute()
+ {
+ m_AbilitySystem.SwitchToAbility(m_TargetAbility);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs.meta b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs.meta
new file mode 100644
index 00000000..3059d95d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce17bc5eca89ffc468e536284af75c4f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs b/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs
new file mode 100644
index 00000000..8d888d30
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionTowardLeft : ActionBase
+{
+ Transform m_Obj;
+ Vector3 m_Angel = new Vector3(0, -90, 0);
+
+ public ActionTowardLeft(Transform obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override void Execute()
+ {
+ m_Obj.rotation = Quaternion.Euler(m_Angel);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs.meta b/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs.meta
new file mode 100644
index 00000000..313b4775
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTowardLeft.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 44aaf2eda01524845942fae69a26b5e1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs b/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs
new file mode 100644
index 00000000..b7dadf3a
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionTowardRight : ActionBase
+{
+ Transform m_Obj;
+ Vector3 m_Angel = new Vector3(0, 90, 0);
+
+ public ActionTowardRight(Transform obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override void Execute()
+ {
+ m_Obj.rotation = Quaternion.Euler(m_Angel);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs.meta b/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs.meta
new file mode 100644
index 00000000..1477951b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTowardRight.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a2b93c99bf228014392dcff8416c8fe0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionTurn180.cs b/Assets/Scripts/Avatar/Actions/ActionTurn180.cs
new file mode 100644
index 00000000..325a3e88
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTurn180.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionTurn180 : ActionBase
+{
+ Transform m_Obj;
+ Vector3 m_Angel = new Vector3(0, 180, 0);
+
+ public ActionTurn180(Transform obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override void Execute()
+ {
+ m_Obj.Rotate(m_Angel);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionTurn180.cs.meta b/Assets/Scripts/Avatar/Actions/ActionTurn180.cs.meta
new file mode 100644
index 00000000..ee218a48
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionTurn180.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fcc6f64fbe0e7cb48a2db882fe5611c7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs b/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs
new file mode 100644
index 00000000..92cf3261
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionUseGravity : ActionBase
+{
+ PhysicsBody m_Body;
+
+ public ActionUseGravity(PhysicsBody body)
+ {
+ m_Body = body;
+ }
+
+ public override void Execute()
+ {
+ m_Body.UseGravity = true;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs.meta b/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs.meta
new file mode 100644
index 00000000..42eeb7aa
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionUseGravity.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5b25d9149f0503645907db055a0e94f5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs b/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs
new file mode 100644
index 00000000..b3bdd3fa
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionWipeCmdRecord : ActionBase
+{
+ public override void Execute()
+ {
+ InputManager.Instance.CommandRecord.Clear();
+ }
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs.meta b/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs.meta
new file mode 100644
index 00000000..86c5ec59
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/ActionWipeCmdRecord.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6124291d136fa604bafde35cb10af76b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/CameraActions.meta b/Assets/Scripts/Avatar/Actions/CameraActions.meta
new file mode 100644
index 00000000..a4650ff8
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/CameraActions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7d30a503b2bf1b04284baaadbf080a1f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs b/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs
new file mode 100644
index 00000000..607473c2
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionMoveCamera : ActionBase
+{
+ public ActionMoveCamera()
+ {
+
+ }
+
+ public override void Execute()
+ {
+ throw new System.NotImplementedException();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs.meta b/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs.meta
new file mode 100644
index 00000000..3812e732
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/CameraActions/ActionMoveCamera.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 67f15f0e55848fe4187e667a2e3e7d76
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs b/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs
new file mode 100644
index 00000000..5a22bc1e
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionPauseTime : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs.meta b/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs.meta
new file mode 100644
index 00000000..5cca5838
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/CameraActions/ActionPauseTime.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4f2e2377ca8624a4097987aa981db53d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/EffectActions.meta b/Assets/Scripts/Avatar/Actions/EffectActions.meta
new file mode 100644
index 00000000..8b300c5b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/EffectActions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c8aea8ed2489dde4fba46dde6f2a8d09
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs b/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs
new file mode 100644
index 00000000..2da01daf
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 残影特效
+public class ActionDisableGhost : ActionBase
+{
+ CharacterGhostEffect m_GhostEffect;
+
+ public ActionDisableGhost(CharacterGhostEffect effect)
+ {
+ m_GhostEffect = effect;
+ }
+
+ public override void Execute()
+ {
+ m_GhostEffect.IsEnable = false;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs.meta b/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs.meta
new file mode 100644
index 00000000..185da50b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/EffectActions/ActionDisableGhost.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8548d7836b8033643954ca68cc3a5948
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs b/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs
new file mode 100644
index 00000000..fa2d8e74
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 残影特效
+public class ActionEffectGhost : ActionBase
+{
+ CharacterGhostEffect m_GhostEffect;
+
+ public ActionEffectGhost(CharacterGhostEffect effect)
+ {
+ m_GhostEffect = effect;
+ }
+
+ public override void Execute()
+ {
+ m_GhostEffect.IsEnable = true;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs.meta b/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs.meta
new file mode 100644
index 00000000..6a55db7d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/EffectActions/ActionEffectGhost.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 68cbffdb70cd84041b2aa7b2134a10e8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/UberActions.meta b/Assets/Scripts/Avatar/Actions/UberActions.meta
new file mode 100644
index 00000000..c2620d0e
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/UberActions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 74422fa2d75a19040b26845660f7b51b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs b/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs
new file mode 100644
index 00000000..b62d3b37
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionUber : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs.meta b/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs.meta
new file mode 100644
index 00000000..69d003aa
--- /dev/null
+++ b/Assets/Scripts/Avatar/Actions/UberActions/ActionUber.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5986fb71b8f521d4c9bffe103916f1c5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs
new file mode 100644
index 00000000..47d8c4b7
--- /dev/null
+++ b/Assets/Scripts/Avatar/Avatar.cs
@@ -0,0 +1,62 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+/// <summary>
+/// 角色,包括player和opponents
+/// </summary>
+public class Avatar : MonoBehaviour, IInteractable
+{
+
+
+ public PhysicsBody m_Body;
+ public PhysicsBox m_BodyCollider;
+ public PhysicsBox[] m_Hitbox;
+ public PhysicsBox[] m_Hurtbox;
+
+ public PhysicsPrimitive[] GetAllPrimitive()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public PhysicsBox GetHitbox()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public PhysicsBox GetHurtbox()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public PhysicsPrimitive[] GetAllHit()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public bool IsHit()
+ {
+ for (int i = 0; i < m_Hitbox.Length; ++i)
+ {
+ if (PhysicsWorld.Instance.HasCollision(m_Hitbox[i]))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public bool IsHurt()
+ {
+ for (int i = 0; i < m_Hitbox.Length; ++i)
+ {
+ if (PhysicsWorld.Instance.HasCollision(m_Hurtbox[i]))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Avatar.cs.meta b/Assets/Scripts/Avatar/Avatar.cs.meta
new file mode 100644
index 00000000..88269a31
--- /dev/null
+++ b/Assets/Scripts/Avatar/Avatar.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4a9cb2414b4a10143919919cfe80537e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Bahaviours.meta b/Assets/Scripts/Avatar/Bahaviours.meta
new file mode 100644
index 00000000..982222bf
--- /dev/null
+++ b/Assets/Scripts/Avatar/Bahaviours.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d10a8e3e46f321146b54b9f74ca76db6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs b/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs
new file mode 100644
index 00000000..cbc9c632
--- /dev/null
+++ b/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class GhostEffectSpwan : MonoBehaviour
+{
+ public CharacterGhostEffect GhostEffect;
+
+ public void SpawnGhost()
+ {
+ GhostEffect.CreateGhost();
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs.meta b/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs.meta
new file mode 100644
index 00000000..4acfc78c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Bahaviours/GhostEffectSpwan.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 12bdc2613cfcd9043ad58b1bcc15c8ce
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions.meta b/Assets/Scripts/Avatar/Conditions.meta
new file mode 100644
index 00000000..0bfa1b8d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2d3b745adf374e14b9f4e095c52ef3d6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs
new file mode 100644
index 00000000..b55cacb8
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 记录之前的ability序列满足某个序列
+/// combo的时候根据当前序列决定combo
+/// </summary>
+public class ConditionAbilitySeq : ConditionBase
+{
+ List<int> m_TargetAbilitySeq = new List<int>();
+
+ public ConditionAbilitySeq(List<int> commandSeq)
+ : base()
+ {
+ m_TargetAbilitySeq = commandSeq;
+ }
+
+ public override bool Evaluate()
+ {
+ // 验证记录的abilitySeq是否满足
+
+
+ throw new System.NotImplementedException();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs.meta
new file mode 100644
index 00000000..5070f1cc
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7bbf0480c45c29843b8ba41229bb29b1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs
new file mode 100644
index 00000000..a3944600
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionAttkExpireTime : ConditionBase
+{
+ AttackAbility m_Ability;
+ float m_ExpireTime;
+
+ public ConditionAttkExpireTime(AttackAbility attack, float expireTime)
+ {
+ m_Ability = attack;
+ m_ExpireTime = expireTime;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_Ability.ExpireTime > m_ExpireTime;
+ }
+}
+
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs.meta
new file mode 100644
index 00000000..80b4d7a7
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 385e621dcc66179459c6f2a2b3b81319
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionBase.cs b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs
new file mode 100644
index 00000000..8dff29da
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs
@@ -0,0 +1,196 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 触发条件基类
+/// </summary>
+public abstract class ConditionBase
+{
+
+ public ConditionBase()
+ {
+ }
+
+ public abstract bool Evaluate();
+
+}
+
+/// <summary>
+/// 两个condition都达成才会返回真
+/// </summary>
+public sealed class ConditionNot : ConditionBase
+{
+ ConditionBase m_Condition;
+
+
+ public ConditionNot(ConditionBase cond)
+ : base()
+ {
+ m_Condition = cond;
+ }
+
+ public override bool Evaluate()
+ {
+ return !m_Condition.Evaluate();
+ }
+}
+
+/// <summary>
+/// 总是满足
+/// </summary>
+public sealed class ConditionAlways : ConditionBase
+{
+ public override bool Evaluate()
+ {
+ return true;
+ }
+}
+
+/// <summary>
+/// 总是不满足
+/// </summary>
+public sealed class ConditionAlwaysNot : ConditionBase
+{
+ public override bool Evaluate()
+ {
+ return false;
+ }
+}
+
+/// <summary>
+/// 两个condition都达成才会返回真
+/// </summary>
+public sealed class ConditionAnd : ConditionBase
+{
+ ConditionBase m_FirstCondition, m_LastCondition;
+
+
+ public ConditionAnd(ConditionBase first, ConditionBase last)
+ : base()
+ {
+ m_FirstCondition = first;
+ m_LastCondition = last;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_FirstCondition.Evaluate() && m_LastCondition.Evaluate();
+ }
+}
+
+/// <summary>
+/// 两个condition至少一个达成才会返回真
+/// </summary>
+public sealed class ConditionOr : ConditionBase
+{
+ ConditionBase m_FirstCondition, m_LastCondition;
+
+
+ public ConditionOr(ConditionBase first, ConditionBase last)
+ : base()
+ {
+ m_FirstCondition = first;
+ m_LastCondition = last;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_FirstCondition.Evaluate() || m_LastCondition.Evaluate();
+ }
+}
+
+
+/// <summary>
+/// 两个condition都不达成才会返回真
+/// </summary>
+public sealed class ConditionNone : ConditionBase
+{
+ ConditionBase m_FirstCondition, m_LastCondition;
+
+ public ConditionNone(ConditionBase first, ConditionBase last)
+ : base()
+ {
+ m_FirstCondition = first;
+ m_LastCondition = last;
+ }
+
+ public override bool Evaluate()
+ {
+ return !m_FirstCondition.Evaluate() && !m_LastCondition.Evaluate();
+ }
+}
+
+
+/// <summary>
+/// 多个condition都达成才会返回真
+/// </summary>
+public sealed class ConditionMultiAnd : ConditionBase
+{
+ List<ConditionBase> m_Conditions = new List<ConditionBase>();
+
+ public ConditionMultiAnd(List<ConditionBase> conditions)
+ : base()
+ {
+ m_Conditions.AddRange(conditions);
+ }
+
+ public override bool Evaluate()
+ {
+ foreach(var condition in m_Conditions)
+ {
+ if(!condition.Evaluate())
+ return false;
+ }
+ return true;
+ }
+}
+
+/// <summary>
+/// 多个condition至少一个达成才会返回真
+/// </summary>
+public sealed class ConditionMultiOr : ConditionBase
+{
+ List<ConditionBase> m_Conditions;
+
+ public ConditionMultiOr(List<ConditionBase> conditions)
+ : base()
+ {
+ m_Conditions.AddRange(conditions);
+ }
+
+ public override bool Evaluate()
+ {
+ foreach (var condition in m_Conditions)
+ {
+ if (condition.Evaluate())
+ return true;
+ }
+ return false;
+ }
+}
+
+/// <summary>
+/// 多个condition都不达成才会返回真
+/// </summary>
+public sealed class ConditionMultiNone : ConditionBase
+{
+ List<ConditionBase> m_Conditions;
+
+ public ConditionMultiNone(List<ConditionBase> conditions)
+ : base()
+ {
+ m_Conditions.AddRange(conditions);
+ }
+
+ public override bool Evaluate()
+ {
+ foreach (var condition in m_Conditions)
+ {
+ if (condition.Evaluate())
+ return false;
+ }
+ return true;
+ }
+}
+
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionBase.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs.meta
new file mode 100644
index 00000000..4c321ffd
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21029775aaf8cdd4a868a45725313c3a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs b/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs
new file mode 100644
index 00000000..52abad03
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionButtonHold : ConditionBase
+{
+ GamepadButton m_Button;
+
+ public ConditionButtonHold(GamepadButton button)
+ {
+ m_Button = button;
+ }
+
+ public override bool Evaluate()
+ {
+ return InputManager.Instance.IsButtonHold(m_Button);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs.meta
new file mode 100644
index 00000000..82d350e2
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2b0cd6f63cbe32649a15ab38d5bb6ee3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs b/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs
new file mode 100644
index 00000000..ec4e489c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionCheckHp : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs.meta
new file mode 100644
index 00000000..e5b205b2
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCheckHp.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e4b80b2be76ae9149af7b8a57f1e68ef
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs b/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs
new file mode 100644
index 00000000..c14bff3c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionCheckMp : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs.meta
new file mode 100644
index 00000000..d920a18f
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCheckMp.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a603843f7ac083c45ba5b2ec23d4cc0b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs b/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs
new file mode 100644
index 00000000..1b6159cb
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 连击操作,综合ConditionMotionRange和ConditionCommand
+/// </summary>
+public class ConditionCombo : ConditionBase
+{
+ public override bool Evaluate()
+ {
+ throw new System.NotImplementedException();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs.meta
new file mode 100644
index 00000000..45582943
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCombo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 015528a2fbc923f45b1e25c11a6ade2b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs b/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs
new file mode 100644
index 00000000..d735ef5b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs
@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 按下某个command
+/// </summary>
+public class ConditionCommand : ConditionBase
+{
+ GamepadButton m_TargetCommand;
+
+ public ConditionCommand(GamepadButton command)
+ {
+ m_TargetCommand = command;
+ }
+
+ public override bool Evaluate()
+ {
+ return InputManager.Instance.CurrentCommand.code == m_TargetCommand;
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs.meta
new file mode 100644
index 00000000..100638e6
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCommand.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6334908b568b7c046bbeb3f526f95841
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs b/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs
new file mode 100644
index 00000000..71a7dbf3
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs
@@ -0,0 +1,54 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 一个command序列,用来触发连击
+/// </summary>
+public class ConditionCommandSeq : ConditionBase
+{
+ List<GamepadButton> m_CommandSeq = new List<GamepadButton>();
+ float m_DeltaTime = 0;
+ List<int> m_LastCmdID = new List<int>();
+
+ List<int> id = new List<int>();
+
+ public ConditionCommandSeq(List<GamepadButton> commandSeq, float maxDeltaTime)
+ {
+ m_CommandSeq.AddRange(commandSeq);
+ m_DeltaTime = maxDeltaTime;
+ }
+
+ public override bool Evaluate()
+ {
+ List<Command> commandRecord = InputManager.Instance.CommandRecord;
+ if (commandRecord == null || commandRecord.Count < m_CommandSeq.Count)
+ return false;
+ id.Clear();
+ for (int i = 1; i < m_CommandSeq.Count; ++i)
+ {
+ GamepadButton button = m_CommandSeq[i];
+ GamepadButton preButton = m_CommandSeq[i-1];
+ int j = commandRecord.Count - m_CommandSeq.Count + i;
+ Command cmd = commandRecord[j];
+ Command preCmd = commandRecord[j-1];
+ if (preCmd.code != preButton || cmd.code != button)
+ return false;
+ if (cmd.time - preCmd.time > m_DeltaTime)
+ return false;
+ id.Add(preCmd.id);
+ if (j == commandRecord.Count - 1)
+ id.Add(cmd.id);
+ }
+
+ //for (int i = 0; i < id.Count; ++i)
+ //{
+ // if (m_LastCmdID.Contains(id[i]))
+ // return false;
+ //}
+ //m_LastCmdID.Clear();
+ //m_LastCmdID.AddRange(id);
+
+ return true;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs.meta
new file mode 100644
index 00000000..fc77bd3c
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCommandSeq.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7316354e3f99412419c866e0fc3906c6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionInair.cs b/Assets/Scripts/Avatar/Conditions/ConditionInair.cs
new file mode 100644
index 00000000..2c631970
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionInair.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 某个角色是否浮空
+/// </summary>
+public class ConditionInAir : ConditionBase
+{
+ PhysicsPrimitive m_Prim;
+
+ public ConditionInAir(PhysicsPrimitive prim)
+ {
+ m_Prim = prim;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_Prim.Bound.w > PhysicsWorld.Ground;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionInair.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionInair.cs.meta
new file mode 100644
index 00000000..8bbf610f
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionInair.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8855eebdb67a2cc4baeb2a21e5b40ed4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs
new file mode 100644
index 00000000..8d900348
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionJumpDone : ConditionBase
+{
+ JumpAbility m_Jump;
+
+ public ConditionJumpDone(JumpAbility jump)
+ {
+ m_Jump = jump;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_Jump.IsJumpDone();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs.meta
new file mode 100644
index 00000000..34a9de96
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 734f6d264357f2c43b13f8203f7ecd41
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs
new file mode 100644
index 00000000..47f74cab
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionJumpOnGround : ConditionBase
+{
+ JumpAbility m_Jump;
+
+ public ConditionJumpOnGround(JumpAbility jump)
+ {
+ m_Jump = jump;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_Jump.IsJumpGround();
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs.meta
new file mode 100644
index 00000000..33f0341b
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1a04452218ec0b849bbed3d0ba35cd12
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs b/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs
new file mode 100644
index 00000000..a6bd96c0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionJumpReady : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs.meta
new file mode 100644
index 00000000..d947e116
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpReady.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 300b4929ffe151c43bfce427115a05a9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs b/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs
new file mode 100644
index 00000000..18d71e86
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs
@@ -0,0 +1,31 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 动画已经播放完毕
+/// </summary>
+public class ConditionMotionAtEnd : ConditionBase
+{
+ Animator m_Animator;
+ int m_AnimationHash;
+
+ public ConditionMotionAtEnd(Animator animator, int animationHash)
+ : base()
+ {
+ m_Animator = animator;
+ m_AnimationHash = animationHash;
+ }
+
+ public override bool Evaluate()
+ {
+ AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0);
+ if(info.shortNameHash == m_AnimationHash)
+ {
+ float t = info.normalizedTime;
+ if (t >= 0.99f)
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs.meta
new file mode 100644
index 00000000..1688dd68
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionAtEnd.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f5cbdf2ebe12b5d46afa21a62609d15c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs b/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs
new file mode 100644
index 00000000..282ef929
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionAnimFrameRange : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs.meta
new file mode 100644
index 00000000..3fc88fb1
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionFrameRange.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 28e7aa2c7b5a9d74b936ec5731eeec36
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs b/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs
new file mode 100644
index 00000000..c902ae26
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 某个动画是否播放到了某个时间(归一化了的)范围内
+/// </summary>
+public sealed class ConditionMotionRange : ConditionBase
+{
+ Vector2 m_TimeRange = new Vector2();
+ Animator m_Animator;
+
+ public ConditionMotionRange(Animator animator, float start, float end)
+ {
+ m_Animator = animator;
+
+ m_TimeRange.Set(start, end);
+ }
+
+ public override bool Evaluate()
+ {
+ AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0);
+ float time = info.normalizedTime;
+ bool result = time >= m_TimeRange.x && time <= m_TimeRange.y;
+ return result;
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs.meta
new file mode 100644
index 00000000..926a8560
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMotionRange.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 56b6b5bfaf0d4e147a2f0f1809e7739b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs b/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs
new file mode 100644
index 00000000..1084f191
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionMoveButtonHold : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs.meta
new file mode 100644
index 00000000..45cf47bb
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionMoveButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 77299e998cbe9d1429c2d0b731bff6e3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs b/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs
new file mode 100644
index 00000000..06a76784
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionNoMoveButtonHold : ConditionBase
+{
+ public ConditionNoMoveButtonHold()
+ {
+ }
+
+ public override bool Evaluate()
+ {
+ bool isMoveButtonDown = InputManager.Instance.IsButtonHold(GamepadButton.Left) || InputManager.Instance.IsButtonHold(GamepadButton.Right);
+ return !isMoveButtonDown;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs.meta
new file mode 100644
index 00000000..db883c19
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNoMoveButtonHold.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce1302d58bf3a7043b6e2e25d13525d9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs b/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs
new file mode 100644
index 00000000..8db94951
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionNotHit : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs.meta
new file mode 100644
index 00000000..7058713f
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNotHit.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b0d86b3d8867b144f90fcedf4a6351c3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs b/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs
new file mode 100644
index 00000000..9604677a
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionNotHurt : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs.meta
new file mode 100644
index 00000000..bbe77240
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionNotHurt.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ab089a23fff18a647856f2e33a145784
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs b/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs
new file mode 100644
index 00000000..36cbfd05
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionTowardLeft : ConditionBase
+{
+ Transform m_Obj;
+
+ public ConditionTowardLeft(Transform obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override bool Evaluate()
+ {
+ return Mathf.Approximately(m_Obj.rotation.eulerAngles.y, 270f)
+ || Mathf.Approximately(m_Obj.rotation.eulerAngles.y, -90f);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs.meta
new file mode 100644
index 00000000..e3a399a6
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionTowardLeft.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e2f90baa8b157234f93cdb949b43cd24
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs b/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs
new file mode 100644
index 00000000..d26a1fd0
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionTowardRight : ConditionBase
+{
+ Transform m_Obj;
+
+ public ConditionTowardRight(Transform obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override bool Evaluate()
+ {
+ return Mathf.Approximately(m_Obj.rotation.eulerAngles.y, 90f);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs.meta b/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs.meta
new file mode 100644
index 00000000..901efb57
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/ConditionTowardRight.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ab6f3e1b40a1eff4196b069e4fd25469
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/Interactive.meta b/Assets/Scripts/Avatar/Conditions/Interactive.meta
new file mode 100644
index 00000000..cf125393
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/Interactive.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 38b2530cdab57854e90007371516c2bf
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs
new file mode 100644
index 00000000..d36cc538
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// hitbox击中
+public class ConditionHit : ConditionBase
+{
+ IInteractable m_Obj;
+
+ public ConditionHit(IInteractable obj)
+ {
+ m_Obj = obj;
+
+ }
+
+ public override bool Evaluate()
+ {
+ bool isHit = m_Obj.IsHit();
+ return isHit;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs.meta b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs.meta
new file mode 100644
index 00000000..9c607983
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHit.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c354907230901bf45849e4bb93601b60
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs
new file mode 100644
index 00000000..8a76528d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// hurtbox被击中
+public class ConditionHurt : ConditionBase
+{
+ IInteractable m_Obj;
+
+ public ConditionHurt(IInteractable obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override bool Evaluate()
+ {
+ bool isHit = m_Obj.IsHit();
+ return isHit;
+ }
+}
diff --git a/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs.meta b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs.meta
new file mode 100644
index 00000000..e54feb2d
--- /dev/null
+++ b/Assets/Scripts/Avatar/Conditions/Interactive/ConditionHurt.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62448f0af4616f64c987ac12131db584
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/HitDef.cs b/Assets/Scripts/Avatar/HitDef.cs
new file mode 100644
index 00000000..a0361753
--- /dev/null
+++ b/Assets/Scripts/Avatar/HitDef.cs
@@ -0,0 +1,9 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 一个hit的效果,如果一个attack有多个hit,需要定义多个HitDef
+public struct HitDefination
+{
+
+}
diff --git a/Assets/Scripts/Avatar/HitDef.cs.meta b/Assets/Scripts/Avatar/HitDef.cs.meta
new file mode 100644
index 00000000..d542f9ff
--- /dev/null
+++ b/Assets/Scripts/Avatar/HitDef.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 25b7556b2c9481e49938afa25157f3fc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/IInteractable.cs b/Assets/Scripts/Avatar/IInteractable.cs
new file mode 100644
index 00000000..23e49912
--- /dev/null
+++ b/Assets/Scripts/Avatar/IInteractable.cs
@@ -0,0 +1,21 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public interface IInteractable
+{
+ PhysicsPrimitive[] GetAllPrimitive();
+
+ PhysicsBox GetHitbox();
+
+ PhysicsBox GetHurtbox();
+
+ PhysicsPrimitive[] GetAllHit();
+
+ bool IsHit();
+
+ bool IsHurt();
+
+
+
+}
diff --git a/Assets/Scripts/Avatar/IInteractable.cs.meta b/Assets/Scripts/Avatar/IInteractable.cs.meta
new file mode 100644
index 00000000..ae065c04
--- /dev/null
+++ b/Assets/Scripts/Avatar/IInteractable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f6f243903bde9804488701c6d0f7920a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Trigger.cs b/Assets/Scripts/Avatar/Trigger.cs
new file mode 100644
index 00000000..70a6d0f4
--- /dev/null
+++ b/Assets/Scripts/Avatar/Trigger.cs
@@ -0,0 +1,72 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public enum TriggerOnlyOnce
+{
+ Off = 0,
+ On = 1,
+}
+
+public enum TriggerSwallow
+{
+ Off = 0,
+ On = 1
+}
+
+
+/// <summary>
+/// 不同效果的trigger继承这个基类
+/// </summary>
+
+public sealed class Trigger
+{
+ private TriggerSwallow m_Swallow;
+ public bool Swallow
+ {
+ get
+ {
+ return m_Swallow == TriggerSwallow.On;
+ }
+ }
+
+ private ConditionBase m_Condition;
+ private List<ActionBase> m_ActionChain = new List<ActionBase>();
+
+ public Trigger(ConditionBase condition, List<ActionBase> actions, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On)
+ {
+ m_Swallow = swallow;
+ m_Condition = condition;
+ m_ActionChain.AddRange(actions);
+ }
+ public Trigger(ConditionBase condition, ActionBase action, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On)
+ {
+ m_Swallow = swallow;
+ m_Condition = condition;
+ m_ActionChain.Add(action);
+ }
+
+ //重置触发器的参数
+ public void Reset()
+ {
+
+ }
+
+ /// <summary>
+ /// 如果触发执行了,返回true,否则返回false
+ /// </summary>
+ /// <returns></returns>
+ public bool Update()
+ {
+ if (m_Condition.Evaluate())
+ {
+ foreach(var action in m_ActionChain)
+ {
+ action.Execute();
+ }
+ return true;
+ }
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/Trigger.cs.meta b/Assets/Scripts/Avatar/Trigger.cs.meta
new file mode 100644
index 00000000..91d7d1b8
--- /dev/null
+++ b/Assets/Scripts/Avatar/Trigger.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8c2bda4ac997ddc4e8e9e38c7c718882
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: