summaryrefslogtreecommitdiff
path: root/Runtime/Interfaces/IAnimationBinding.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Interfaces/IAnimationBinding.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Interfaces/IAnimationBinding.h')
-rw-r--r--Runtime/Interfaces/IAnimationBinding.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/Runtime/Interfaces/IAnimationBinding.h b/Runtime/Interfaces/IAnimationBinding.h
new file mode 100644
index 0000000..c056a27
--- /dev/null
+++ b/Runtime/Interfaces/IAnimationBinding.h
@@ -0,0 +1,69 @@
+#pragma once
+
+class IAnimationBinding
+{
+public:
+#if UNITY_EDITOR
+ virtual void GetAllAnimatableProperties (Object& component, std::vector<EditorCurveBinding>& outProperties) const = 0;
+#endif
+
+ virtual float GetFloatValue (const UnityEngine::Animation::BoundCurve& bound) const = 0;
+ virtual void SetFloatValue (const UnityEngine::Animation::BoundCurve& bound, float value) const = 0;
+
+ virtual void SetPPtrValue (const UnityEngine::Animation::BoundCurve& bound, SInt32 value) const= 0;
+ virtual SInt32 GetPPtrValue (const UnityEngine::Animation::BoundCurve& bound) const = 0;
+
+ virtual bool GenerateBinding (const UnityStr& attribute, bool pptrCurve, UnityEngine::Animation::GenericBinding& outputBinding) const = 0;
+ virtual ClassIDType BindValue (Object& target, const UnityEngine::Animation::GenericBinding& binding, UnityEngine::Animation::BoundCurve& bound) const = 0;
+
+ virtual std::string SerializedPropertyPathToCurveAttribute (Object& target, const char* propertyPath) const { return std::string(); }
+ virtual std::string CurveAttributeToSerializedPath (const UnityEngine::Animation::BoundCurve& bound) const { return std::string(); }
+};
+
+inline const char* ParsePrefixedName (const char* attribute, const char* prefix)
+{
+ if (BeginsWith(attribute, prefix))
+ return attribute + strlen(prefix);
+ else
+ return NULL;
+}
+
+inline void AddBinding (std::vector<EditorCurveBinding>& attributes, int classID, const std::string& attribute)
+{
+ attributes.push_back(EditorCurveBinding ("", classID, NULL, attribute, false));
+}
+
+inline void AddBindingCheckUnique (std::vector<EditorCurveBinding>& attributes, int startIndex, int classID, const std::string& attribute)
+{
+ for (int i=startIndex;i<attributes.size();i++)
+ {
+ if (attributes[i].classID == classID && attributes[i].attribute == attribute)
+ return;
+ }
+
+ attributes.push_back(EditorCurveBinding ("", classID, NULL, attribute, false));
+}
+
+
+inline void AddPPtrBinding (std::vector<EditorCurveBinding>& attributes, int classID, const std::string& attribute)
+{
+ attributes.push_back(EditorCurveBinding ("", classID, NULL, attribute, true));
+}
+
+inline int ParseIndexAttributeIndex (const UnityStr& attribute, const char* preString)
+{
+ const std::string::size_type pos0 = attribute.find_first_of('[');
+ const std::string::size_type pos1 = attribute.find_first_of(']');
+
+ if (pos0 == std::string::npos || pos1 == std::string::npos ||
+ !BeginsWith(attribute, preString))
+ {
+ return -1;
+ }
+
+ Assert(pos0 < pos1);
+ Assert(pos1 - pos0 > 1);
+
+ return StringToInt(attribute.c_str() + pos0);
+}
+