summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/AnimationData.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-08-09 08:47:48 +0800
committerchai <chaifix@163.com>2021-08-09 08:47:48 +0800
commit7669c3afcbd71f06233bce12bb521c582c07ee5b (patch)
tree92a15b1c214385a53362a7e704fef8e67c7102ad /Assets/Scripts/Unit/AnimationData.cs
parent754ceacd8ab62e7094f1827ae45ea16a502725ad (diff)
*misc
Diffstat (limited to 'Assets/Scripts/Unit/AnimationData.cs')
-rw-r--r--Assets/Scripts/Unit/AnimationData.cs121
1 files changed, 92 insertions, 29 deletions
diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs
index 6035978d..465c0806 100644
--- a/Assets/Scripts/Unit/AnimationData.cs
+++ b/Assets/Scripts/Unit/AnimationData.cs
@@ -15,39 +15,86 @@ public enum EAnimationToogle
}
[Serializable]
-public class ToggleTimeDictionary : SerializableDictionary<EAnimationToogle, Vector2> { }
+public struct FromTo
+{
+ [SerializeField] public float from;
+ [SerializeField] public float to;
+ public Vector2 fromTo
+ {
+ get
+ {
+ return new Vector2(from, to);
+ }
+ set
+ {
+ from = value.x;
+ to = value.y;
+ }
+ }
+ public FromTo(float from, float to)
+ {
+ this.from = from;
+ this.to = to;
+ }
+ public FromTo(Vector2 fromTo)
+ {
+ this.from = fromTo.x;
+ this.to = fromTo.y;
+ }
+}
+
+[Serializable]
+public class ToggleTimeDictionary : SerializableDictionary<EAnimationToogle, FromTo> { }
public enum EAnimationCurve
{
TimeScale = 0, //
+ RootMotionScale = 1,
}
[Serializable]
public class CurveDictionary : SerializableDictionary<EAnimationCurve, AnimationCurve> { }
+[Serializable]
+public struct AnimationParameter
+{
+ [Serializable]
+ public struct Setter
+ {
+ [SerializeField] public float normalizedTime;
+ [SerializeField] public float value;
+ }
+ [SerializeField] public List<Setter> setters;
+}
+
+[Serializable]
+public class ParameterDictionary : SerializableDictionary<string, AnimationParameter> { }
+
// 某个动画的数据,包括帧事件、碰撞盒、速度曲线
[CreateAssetMenu(fileName = "Animation Data")]
public class AnimationData : ScriptableObject
{
- public string animationName;
- public string animationPath;
+ public string animationName;
+ public string animationPath;
- public List<AnimationEventBase> animationEvents;
+ public List<AnimationEventBase> animationEvents;
- public List<ColliderData> hurtBoxes;
- public List<ColliderData> hitBoxes;
- public List<ColliderData> throwBoxes;
- public List<ColliderData> blockBoxes;
- public List<ColliderData> defendBoxes;
+ public List<ColliderData> hurtBoxes;
+ public List<ColliderData> hitBoxes;
+ public List<ColliderData> throwBoxes;
+ public List<ColliderData> blockBoxes;
+ public List<ColliderData> defendBoxes;
- // 对应的进度的播放速度,默认是1
+ // 对应的进度的播放速度,默认是1
[UnityEngine.Serialization.FormerlySerializedAs("curve")]
- public AnimationCurve speedCurve;
+ public AnimationCurve speedCurve;
public CurveDictionary curves;
public ToggleTimeDictionary toggles;
+ public ParameterDictionary parameters;
+
public const int FPS = 30;
public AnimationData()
@@ -57,23 +104,39 @@ public class AnimationData : ScriptableObject
speedCurve = new AnimationCurve(frame0, frame1);
}
- public List<ColliderData> GetColliderBoxesByType(ColliderBox.EColliderType type)
- {
- switch(type)
- {
- case ColliderBox.EColliderType.HurtBox:
- return hurtBoxes;
- case ColliderBox.EColliderType.HitBox:
- return hitBoxes;
- case ColliderBox.EColliderType.BlockBox:
- return blockBoxes;
- case ColliderBox.EColliderType.ThrowBox:
- return throwBoxes;
- case ColliderBox.EColliderType.DefendBox:
- return defendBoxes;
- }
- return null;
- }
+ public List<ColliderData> GetColliderBoxesByType(ColliderBox.EColliderType type)
+ {
+ switch (type)
+ {
+ case ColliderBox.EColliderType.HurtBox:
+ return hurtBoxes;
+ case ColliderBox.EColliderType.HitBox:
+ return hitBoxes;
+ case ColliderBox.EColliderType.BlockBox:
+ return blockBoxes;
+ case ColliderBox.EColliderType.ThrowBox:
+ return throwBoxes;
+ case ColliderBox.EColliderType.DefendBox:
+ return defendBoxes;
+ }
+ return null;
+ }
+
+ //public bool HasParameter(string parameterName, float normalizedTime)
+ //{
+ // if (!parameters.ContainsKey(parameterName))
+ // return false;
+ // var parameter = parameters[parameterName];
+ // parameter.setters.Sort((AnimationParameter.Setter a, AnimationParameter.Setter b) =>
+ // {
+ // return a.normalizedTime - b.normalizedTime < 0 ? -1 : 1;
+ // });
+ //}
+
+ //public float GetParameter(string parameter, float normalizedTime)
+ //{
+
+ //}
public bool HasCurve(EAnimationCurve curve)
{
@@ -96,7 +159,7 @@ public class AnimationData : ScriptableObject
{
if (!HasToggle(toggle))
return false;
- return toggles[toggle].y <= normalizedTime && normalizedTime >= toggles[toggle].x;
+ return toggles[toggle].to <= normalizedTime && normalizedTime >= toggles[toggle].from;
}
public ColliderInfo GetColliderInfo(ColliderBox.EColliderType type, int index, float playbackTime)