diff options
Diffstat (limited to 'Assets/Scripts/Avatar')
12 files changed, 162 insertions, 7 deletions
diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index 57e9541b..5a200cf8 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -85,6 +85,11 @@ public class AttackAbility : AbilityBase {
hit.WipeRecords();
}
+
+ foreach(var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
}
public override void OnExit()
diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs index d42308db..e692cc2a 100644 --- a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs @@ -24,7 +24,12 @@ public class IdleAbility : AbilityBase public override void OnEnter()
{
m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
- }
+
+ foreach (var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
+ }
public override void OnInit()
{
diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs index cf9fa106..61efd0cf 100644 --- a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs @@ -31,6 +31,11 @@ public class MoveAbility : AbilityBase public override void OnEnter()
{
m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f);
+
+ foreach (var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
}
public override void OnExit()
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/ActionEffects/ActionActivateAfterImage.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs new file mode 100644 index 00000000..0b2ac361 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs @@ -0,0 +1,18 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionActivateAfterImage : ActionBase
+{
+ private bool m_IsActive;
+
+ public ActionActivateAfterImage(bool isActive)
+ {
+ m_IsActive = isActive;
+ }
+
+ public override void Execute()
+ {
+ AfterImagePool.Instance.Activate(m_IsActive);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta new file mode 100644 index 00000000..189e2f24 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionActivateAfterImage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8df8331b2b9416b499e856b691c2326e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs new file mode 100644 index 00000000..1d5c2f8b --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs @@ -0,0 +1,18 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionAfterImageInterval : ActionBase
+{
+ private int m_Interval;
+
+ public ActionAfterImageInterval(int interval)
+ {
+ m_Interval = interval;
+ }
+
+ public override void Execute()
+ {
+ AfterImagePool.Instance.SetInterval(m_Interval);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta new file mode 100644 index 00000000..fa144bad --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionAfterImageInterval.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e87b2df9fee7956449df7dc2d430b862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs new file mode 100644 index 00000000..6a00aaa8 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs @@ -0,0 +1,49 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 播放特效
+public class ActionPlayEffect : ActionBase
+{
+ enum Type
+ {
+ GivenPosition, // 固定位置
+ FollowObject, // 动态位置
+ Avatar, // 角色
+ }
+
+ Type m_Type;
+
+ string m_Effect;
+ Vector3 m_Position;
+ Vector3 m_Rotation;
+ Vector3 m_Scale;
+ Transform m_Follow;
+ Avatar m_Avatar;
+
+ public ActionPlayEffect(string effect, Vector3 position, Vector3 rotation, Vector3 scale)
+ {
+
+ }
+
+ public ActionPlayEffect(string effect, Transform followPosition, Vector3 rotation, Vector3 scale)
+ {
+
+ }
+
+ public ActionPlayEffect(string effect, Avatar avatar, Vector3 rotation, Vector3 scale)
+ {
+ m_Type = Type.Avatar;
+ m_Effect = effect;
+ m_Avatar = avatar;
+ m_Rotation = rotation;
+ m_Scale = scale;
+ }
+
+ public override void Execute()
+ {
+ if (m_Type == Type.Avatar)
+ m_Position = m_Avatar.GetEffectPosition();
+ EffectsManager.Instance.PlayEffect(m_Effect, m_Position, m_Rotation, m_Scale);
+ }
+}
diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta new file mode 100644 index 00000000..0e085fc4 --- /dev/null +++ b/Assets/Scripts/Avatar/Actions/ActionEffects/ActionPlayEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca4c24da837b8854f8510118217e063d +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 index a8d90fa7..928d2197 100644 --- a/Assets/Scripts/Avatar/Avatar.cs +++ b/Assets/Scripts/Avatar/Avatar.cs @@ -131,4 +131,9 @@ public class Avatar : MonoBehaviour, IInteractable m_AbilitySystem.OnLateUpdate();
}
+ public virtual Vector3 GetEffectPosition()
+ {
+ return Vector3.zero;
+ }
+
}
diff --git a/Assets/Scripts/Avatar/Trigger.cs b/Assets/Scripts/Avatar/Trigger.cs index 70a6d0f4..a885327c 100644 --- a/Assets/Scripts/Avatar/Trigger.cs +++ b/Assets/Scripts/Avatar/Trigger.cs @@ -31,17 +31,23 @@ public sealed class Trigger } private ConditionBase m_Condition; - private List<ActionBase> m_ActionChain = new List<ActionBase>(); - + private List<ActionBase> m_ActionChain = new List<ActionBase>();
+
+ private TriggerOnlyOnce m_OnlyOnce; + + private bool m_IsTriggered; + public Trigger(ConditionBase condition, List<ActionBase> actions, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { - m_Swallow = swallow; + m_OnlyOnce = onlyOnce;
+ 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_OnlyOnce = onlyOnce;
+ m_Swallow = swallow; m_Condition = condition; m_ActionChain.Add(action); } @@ -49,8 +55,8 @@ public sealed class Trigger //重置触发器的参数 public void Reset() { - - } + m_IsTriggered = false; + } /// <summary> /// 如果触发执行了,返回true,否则返回false @@ -58,12 +64,15 @@ public sealed class Trigger /// <returns></returns> public bool Update() { + if (m_IsTriggered && m_OnlyOnce == TriggerOnlyOnce.On) + return false; if (m_Condition.Evaluate()) { foreach(var action in m_ActionChain) { action.Execute(); } + m_IsTriggered = true; return true; } return false; |