From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Interfaces/IAnimationBinding.h | 69 ++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Runtime/Interfaces/IAnimationBinding.h (limited to 'Runtime/Interfaces/IAnimationBinding.h') 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& 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& attributes, int classID, const std::string& attribute) +{ + attributes.push_back(EditorCurveBinding ("", classID, NULL, attribute, false)); +} + +inline void AddBindingCheckUnique (std::vector& attributes, int startIndex, int classID, const std::string& attribute) +{ + for (int i=startIndex;i& 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); +} + -- cgit v1.1-26-g67d0