summaryrefslogtreecommitdiff
path: root/Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt')
-rw-r--r--Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt250
1 files changed, 250 insertions, 0 deletions
diff --git a/Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt b/Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt
new file mode 100644
index 0000000..641af63
--- /dev/null
+++ b/Runtime/Animation/ScriptBindings/AvatarBuilderBindings.txt
@@ -0,0 +1,250 @@
+C++RAW
+
+#include "UnityPrefix.h"
+#include "Runtime/Mono/MonoBehaviour.h"
+#include "Runtime/Mono/MonoScript.h"
+
+#include "Runtime/Scripting/ScriptingManager.h"
+#include "Runtime/Scripting/ScriptingUtility.h"
+#include "Runtime/Scripting/ScriptingExportUtility.h"
+
+#include "Runtime/Graphics/Transform.h"
+#include "Runtime/Animation/AvatarBuilder.h"
+#include "Runtime/Animation/Avatar.h"
+#include "Runtime/Scripting/Scripting.h"
+
+using namespace Unity;
+
+CSRAW
+
+using System;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Collections;
+
+namespace UnityEngine
+{
+
+STRUCT SkeletonBone
+ CSRAW public string name;
+
+ CSRAW public Vector3 position;
+ CSRAW public Quaternion rotation;
+ CSRAW public Vector3 scale;
+ CSRAW public int transformModified;
+END
+
+C++RAW
+
+struct MonoSkeletonBone {
+ ScriptingStringPtr name;
+ Vector3f position;
+ Quaternionf rotation;
+ Vector3f scale;
+ int transformModified;
+};
+
+void SkeletonBoneToMono (const SkeletonBone &src, MonoSkeletonBone &dest) {
+ dest.name = scripting_string_new(src.m_Name);
+ dest.position = src.m_Position;
+ dest.rotation = src.m_Rotation;
+ dest.scale = src.m_Scale;
+ dest.transformModified = src.m_TransformModified ? 1 : 0;
+}
+
+void SkeletonBoneFromMono (const MonoSkeletonBone &src, SkeletonBone &dest) {
+ dest.m_Name = scripting_cpp_string_for(src.name);
+ dest.m_Position = src.position;
+ dest.m_Rotation = src.rotation;
+ dest.m_Scale = src.scale;
+ dest.m_TransformModified = src.transformModified != 0;
+}
+
+STRUCT HumanLimit
+ CSRAW
+
+ Vector3 m_Min;
+ Vector3 m_Max;
+ Vector3 m_Center;
+ float m_AxisLength;
+ int m_UseDefaultValues;
+
+ public bool useDefaultValues { get { return m_UseDefaultValues != 0; } set { m_UseDefaultValues = value ? 1 : 0; } }
+ public Vector3 min { get { return m_Min; } set { m_Min = value; } }
+ public Vector3 max { get { return m_Max; } set { m_Max = value; } }
+ public Vector3 center { get { return m_Center; } set { m_Center = value; } }
+ public float axisLength { get { return m_AxisLength; } set { m_AxisLength = value; } }
+END
+
+C++RAW
+
+struct MonoHumanLimit {
+
+ Vector3f m_Min;
+ Vector3f m_Max;
+ Vector3f m_Center;
+ float m_AxisLength;
+ int m_UseDefaultValues;
+};
+
+void HumanLimitToMono (const SkeletonBoneLimit &src, MonoHumanLimit &dest) {
+ dest.m_UseDefaultValues = src.m_Modified ? 0 : 1;
+ dest.m_Min = src.m_Min;
+ dest.m_Max = src.m_Max;
+ dest.m_Center = src.m_Value;
+ dest.m_AxisLength = src.m_Length;
+}
+
+void HumanLimitFromMono (const MonoHumanLimit &src, SkeletonBoneLimit &dest) {
+ dest.m_Modified = src.m_UseDefaultValues == 1 ? false : true;
+ dest.m_Min = src.m_Min;
+ dest.m_Max = src.m_Max;
+ dest.m_Value = src.m_Center;
+ dest.m_Length = src.m_AxisLength;
+}
+
+STRUCT HumanBone
+ CSRAW
+ string m_BoneName;
+ string m_HumanName;
+ public HumanLimit limit;
+
+ public string boneName { get { return m_BoneName; } set { m_BoneName = value; } }
+ public string humanName { get { return m_HumanName; } set { m_HumanName = value; } }
+END
+
+C++RAW
+
+struct MonoHumanBone {
+ ScriptingStringPtr m_BoneName;
+ ScriptingStringPtr m_HumanName;
+ MonoHumanLimit m_Limit;
+};
+
+void HumanBoneToMono (const HumanBone &src, MonoHumanBone &dest)
+{
+ dest.m_BoneName = scripting_string_new(src.m_BoneName);
+ dest.m_HumanName = scripting_string_new(src.m_HumanName);
+ HumanLimitToMono(src.m_Limit, dest.m_Limit);
+}
+
+void HumanBoneFromMono (const MonoHumanBone &src, HumanBone &dest)
+{
+ dest.m_BoneName = scripting_cpp_string_for(src.m_BoneName);
+ dest.m_HumanName = scripting_cpp_string_for(src.m_HumanName);
+ HumanLimitFromMono(src.m_Limit, dest.m_Limit);
+}
+
+STRUCT HumanDescription
+ CSRAW
+ public HumanBone[] human;
+ public SkeletonBone[] skeleton;
+
+ float m_ArmTwist;
+ float m_ForeArmTwist;
+ float m_UpperLegTwist;
+ float m_LegTwist;
+ float m_ArmStretch;
+ float m_LegStretch;
+ float m_FeetSpacing;
+
+ public float upperArmTwist { get { return m_ArmTwist; } set { m_ArmTwist = value;} }
+ public float lowerArmTwist { get { return m_ForeArmTwist; } set { m_ForeArmTwist = value;} }
+ public float upperLegTwist { get { return m_UpperLegTwist; } set { m_UpperLegTwist = value;} }
+ public float lowerLegTwist { get { return m_LegTwist; } set { m_LegTwist = value;} }
+ public float armStretch { get { return m_ArmStretch; } set { m_ArmStretch = value;} }
+ public float legStretch { get { return m_LegStretch; } set { m_LegStretch = value;} }
+ public float feetSpacing { get { return m_FeetSpacing; } set { m_FeetSpacing = value;} }
+END
+
+C++RAW
+
+struct MonoHumanDescription {
+ ScriptingArrayPtr m_Human;
+ ScriptingArrayPtr m_Skeleton;
+
+ float m_ArmTwist;
+ float m_ForeArmTwist;
+ float m_UpperLegTwist;
+ float m_LegTwist;
+ float m_ArmStretch;
+ float m_LegStretch;
+ float m_FeetSpacing;
+};
+
+
+void HumanDescriptionToMono (const HumanDescription &src, MonoHumanDescription &dest)
+{
+ if (src.m_Skeleton.size() <= 0)
+ dest.m_Skeleton = CreateEmptyStructArray(MONO_COMMON.skeletonBone);
+ else
+ dest.m_Skeleton = CreateScriptingArray(&src.m_Skeleton[0], src.m_Skeleton.size(), MONO_COMMON.skeletonBone);
+
+ if (src.m_Human.size() <= 0)
+ dest.m_Human = CreateEmptyStructArray(MONO_COMMON.humanBone);
+ else
+ dest.m_Human = CreateScriptingArray(&src.m_Human[0], src.m_Human.size(), MONO_COMMON.humanBone);
+
+ dest.m_ArmTwist = src.m_ArmTwist;
+ dest.m_ForeArmTwist = src.m_ForeArmTwist;
+
+ dest.m_UpperLegTwist = src.m_UpperLegTwist;
+ dest.m_LegTwist = src.m_LegTwist;
+ dest.m_ArmStretch = src.m_ArmStretch;
+ dest.m_LegStretch = src.m_LegStretch;
+ dest.m_FeetSpacing = src.m_FeetSpacing;
+}
+
+void HumanDescriptionFromMono (const MonoHumanDescription &src, HumanDescription &dest)
+{
+ ScriptingStructArrayToVector<SkeletonBone, MonoSkeletonBone>(src.m_Skeleton, dest.m_Skeleton, SkeletonBoneFromMono);
+ ScriptingStructArrayToVector<HumanBone, MonoHumanBone>(src.m_Human, dest.m_Human, HumanBoneFromMono);
+
+ dest.m_ArmTwist = src.m_ArmTwist;
+ dest.m_ForeArmTwist = src.m_ForeArmTwist;
+
+ dest.m_UpperLegTwist = src.m_UpperLegTwist;
+ dest.m_LegTwist = src.m_LegTwist;
+ dest.m_ArmStretch = src.m_ArmStretch;
+ dest.m_LegStretch = src.m_LegStretch;
+ dest.m_FeetSpacing = src.m_FeetSpacing;
+}
+
+CLASS AvatarBuilder
+ CUSTOM static Avatar BuildHumanAvatar(GameObject go, HumanDescription monoHumanDescription) {
+ Avatar* avatar = NEW_OBJECT(Avatar);
+ avatar->Reset();
+
+ HumanDescription humanDescription;
+ HumanDescriptionFromMono(monoHumanDescription, humanDescription);
+
+ AvatarBuilder::Options options;
+ options.avatarType = kHumanoid;
+ options.useMask = true;
+
+ std::string error = AvatarBuilder::BuildAvatar(*avatar, *go, false, humanDescription, options);
+ if(!error.empty())
+ ErrorString(error);
+
+ avatar->AwakeFromLoad(kInstantiateOrCreateFromCodeAwakeFromLoad);
+
+ return Scripting::ScriptingWrapperFor(avatar);
+ }
+
+ CUSTOM static Avatar BuildGenericAvatar(GameObject go, string rootMotionTransformName) {
+ Avatar* avatar = NEW_OBJECT(Avatar);
+ avatar->Reset();
+
+ HumanDescription humanDescription;
+ humanDescription.m_RootMotionBoneName = rootMotionTransformName.AsUTF8().c_str();
+ std::string error = AvatarBuilder::BuildAvatar(*avatar, *go, false, humanDescription);
+ if(!error.empty())
+ ErrorString(error);
+
+ avatar->AwakeFromLoad(kInstantiateOrCreateFromCodeAwakeFromLoad);
+
+ return Scripting::ScriptingWrapperFor(avatar);
+ }
+END
+
+CSRAW }