Ejemplo n.º 1
0
    static int _CreateHumanLimit(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 0);
        HumanLimit obj = new HumanLimit();

        LuaScriptMgr.PushValue(L, obj);
        return(1);
    }
Ejemplo n.º 2
0
 private void Serialize(BinaryWriter bn, HumanLimit value)
 {
     bn.Write(value.axisLength);
     Serialize(bn, value.center);
     Serialize(bn, value.max);
     Serialize(bn, value.min);
     bn.Write(value.useDefaultValues);
 }
    private static HumanDescription ReadHumanDescription()
    {
        HumanDescription humanDescription = new HumanDescription();
        List <HumanBone> humanBones       = new List <HumanBone>();

        HumanTemplate template = Resources.Load(humanTemplateFile) as HumanTemplate;

        string[] boneNames = HumanTrait.BoneName;

        //List<string> mapping = new List<string>();
        foreach (string boneName in boneNames)
        {
            HumanBone newBone = new HumanBone();
            newBone.humanName = boneName;
            newBone.boneName  = template.Find(boneName);

            if (newBone.boneName != "")
            {
                HumanLimit limit = new HumanLimit();
                limit.useDefaultValues = true;
                newBone.limit          = limit;
                humanBones.Add(newBone);
            }
        }

        humanDescription.human             = humanBones.ToArray();
        humanDescription.upperArmTwist     = 0.5f;
        humanDescription.lowerArmTwist     = 0.5f;
        humanDescription.upperLegTwist     = 0.5f;
        humanDescription.lowerLegTwist     = 0.5f;
        humanDescription.armStretch        = 0.05f;
        humanDescription.legStretch        = 0.05f;
        humanDescription.feetSpacing       = 0.0f;
        humanDescription.hasTranslationDoF = true;

        //if (secondPass && _isAnimation)
        {
            //skeletonDescription = modelImporter.humanDescription.skeleton;
            List <SkeletonBone> skeletonBones = new List <SkeletonBone>();
            for (int i = 0; i < skeletonDescription.Length; i++)
            {
                SkeletonBone newSkeletonBone = new SkeletonBone();
                newSkeletonBone.name     = skeletonDescription[i].name;
                newSkeletonBone.position = skeletonDescription[i].position;
                newSkeletonBone.rotation = skeletonDescription[i].rotation;
                newSkeletonBone.scale    = skeletonDescription[i].scale;
                //newSkeletonBone.transformModified = skeletonDescription[i].transformModified;

                skeletonBones.Add(newSkeletonBone);
            }

            humanDescription.skeleton = skeletonBones.ToArray();
        }
        return(humanDescription);
    }
Ejemplo n.º 4
0
        private HumanLimit DeSerializeHumanLimit(BinaryReader br)
        {
            var res = new HumanLimit();

            res.axisLength       = br.ReadSingle();
            res.center           = DeserializeVector3(br);
            res.max              = DeserializeVector3(br);
            res.min              = DeserializeVector3(br);
            res.useDefaultValues = br.ReadBoolean();
            return(res);
        }
        protected override void ReadFromImpl(object obj)
        {
            base.ReadFromImpl(obj);
            HumanLimit uo = (HumanLimit)obj;

            useDefaultValues = uo.useDefaultValues;
            min        = uo.min;
            max        = uo.max;
            center     = uo.center;
            axisLength = uo.axisLength;
        }
        protected override object WriteToImpl(object obj)
        {
            obj = base.WriteToImpl(obj);
            HumanLimit uo = (HumanLimit)obj;

            uo.useDefaultValues = useDefaultValues;
            uo.min        = min;
            uo.max        = max;
            uo.center     = center;
            uo.axisLength = axisLength;
            return(uo);
        }
Ejemplo n.º 7
0
        public HumanAxes(Avatar avatar, HumanBodyBones humanBone)
        {
            // bake non-uniform sign into quaternions
            var sign3 = GetLimitSignFull(avatar, humanBone);
            var signQ = Quaternion.LookRotation(new Vector3(0, 0, sign3.x * sign3.y), new Vector3(0, sign3.x * sign3.z, 0));

            sign              = sign3.x * sign3.y * sign3.z;
            preQ              = (Quaternion)GetPreRotation.Invoke(avatar, new object[] { humanBone }) * signQ;
            postQ             = (Quaternion)GetPostRotation.Invoke(avatar, new object[] { humanBone }) * signQ;
            limit             = GetHumanLimit(avatar, humanBone);
            limit.axisLength *= sign3.y * sign3.z;
        }
Ejemplo n.º 8
0
    public static int constructor(IntPtr l)
    {
        int result;

        try
        {
            HumanLimit humanLimit = default(HumanLimit);
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, humanLimit);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
Ejemplo n.º 9
0
 public HumanAxes(Transform bone, Vector3 dir = new Vector3())
 {
     if (dir == Vector3.zero)      // guess bone direction
     {
         foreach (Transform c in bone)
         {
             dir += c.localPosition;
         }
         if (dir == Vector3.zero)
         {
             dir = -bone.InverseTransformPoint(bone.parent.position);
         }
         dir = bone.InverseTransformVector(Vector3.down);
     }
     sign  = 1;
     postQ = Quaternion.FromToRotation(Vector3.right, dir);
     preQ  = bone.localRotation * postQ;
     limit = new HumanLimit {
     };
 }
Ejemplo n.º 10
0
    static int get_max(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);

        if (o == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name max");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index max on a nil value");
            }
        }

        HumanLimit obj = (HumanLimit)o;

        LuaScriptMgr.PushValue(L, obj.max);
        return(1);
    }
Ejemplo n.º 11
0
    static int set_axisLength(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);

        if (o == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name axisLength");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index axisLength on a nil value");
            }
        }

        HumanLimit obj = (HumanLimit)o;

        obj.axisLength = (float)LuaScriptMgr.GetNumber(L, 3);
        LuaScriptMgr.SetValueObject(L, 1, obj);
        return(0);
    }
Ejemplo n.º 12
0
    static int set_center(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);

        if (o == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name center");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index center on a nil value");
            }
        }

        HumanLimit obj = (HumanLimit)o;

        obj.center = LuaScriptMgr.GetNetObject <Vector3>(L, 3);
        LuaScriptMgr.SetValueObject(L, 1, obj);
        return(0);
    }
Ejemplo n.º 13
0
    static int set_useDefaultValues(IntPtr L)
    {
        object o = LuaScriptMgr.GetLuaObject(L, 1);

        if (o == null)
        {
            LuaTypes types = LuaDLL.lua_type(L, 1);

            if (types == LuaTypes.LUA_TTABLE)
            {
                LuaDLL.luaL_error(L, "unknown member name useDefaultValues");
            }
            else
            {
                LuaDLL.luaL_error(L, "attempt to index useDefaultValues on a nil value");
            }
        }

        HumanLimit obj = (HumanLimit)o;

        obj.useDefaultValues = LuaScriptMgr.GetBoolean(L, 3);
        LuaScriptMgr.SetValueObject(L, 1, obj);
        return(0);
    }
Ejemplo n.º 14
0
        static HumanLimit GetHumanLimit(Avatar avatar, HumanBodyBones humanBone)
        {
            var limit = new HumanLimit {
                useDefaultValues = true
            };

                #if UNITY_EDITOR // this can be improved when avatar.humanDescription is exposed in unity 2019
            var importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(avatar)) as ModelImporter;
            var human    = (importer?.humanDescription)?.human;
            if (human != null)
            {
                for (int i = 0; i < human.Length; i++)
                {
                    if (human[i].humanName == HumanTrait.BoneName[(int)humanBone])
                    {
                        limit = human[i].limit;
                        break;
                    }
                }
            }
                #endif
            limit.axisLength = (float)GetAxisLength.Invoke(avatar, new object[] { humanBone });  // not in humanDescription
            if (limit.useDefaultValues)
            {
                Vector3 min = new Vector3(), max = new Vector3();
                for (int i = 0; i < 3; i++)
                {
                    var m = HumanTrait.MuscleFromBone((int)humanBone, i);
                    min[i] = m >= 0 ? HumanTrait.GetMuscleDefaultMin(m) : 0;             // invalid input will crash
                    max[i] = m >= 0 ? HumanTrait.GetMuscleDefaultMax(m) : 0;
                }
                limit.min = min;
                limit.max = max;
            }
            return(limit);
        }
Ejemplo n.º 15
0
        public override void PostHook(NodeImporter impoter, Transform trans, VGltf.Types.Node gltfNode)
        {
            if (!GE.ContainsExtensionUsed(impoter.Container.Gltf, AvatarType.ExtensionName))
            {
                return;
            }

            AvatarType extAvatar;

            if (!gltfNode.GetExtension(AvatarType.ExtensionName, out extAvatar))
            {
                return;
            }

            var extHD = extAvatar.HumanDescription;

            var hd = new HumanDescription();

            hd.upperArmTwist = extHD.UpperArmTwist;
            hd.lowerArmTwist = extHD.LowerArmTwist;
            hd.upperLegTwist = extHD.UpperLegTwist;
            hd.lowerLegTwist = extHD.LowerLegTwist;
            hd.armStretch    = extHD.ArmStretch;
            hd.legStretch    = extHD.LegStretch;
            hd.feetSpacing   = extHD.FeetSpacing;

            hd.skeleton = extHD.Skeleton.Select(s =>
            {
                // TODO: Coord
                return(new SkeletonBone
                {
                    name = s.Name,
                    position = PrimitiveImporter.AsVector3(s.Position),
                    rotation = PrimitiveImporter.AsQuaternion(s.Rotation),
                    scale = PrimitiveImporter.AsVector3(s.Scale),
                });
            }).ToArray();

            hd.human = extHD.Human.Select(h =>
            {
                var extLimit = h.Limit;
                var limit    = new HumanLimit
                {
                    useDefaultValues = extLimit.UseDefaultValues,
                    min        = PrimitiveImporter.AsVector3(extLimit.Min),
                    max        = PrimitiveImporter.AsVector3(extLimit.Max),
                    center     = PrimitiveImporter.AsVector3(extLimit.Center),
                    axisLength = extLimit.AxisLength,
                };

                return(new HumanBone
                {
                    boneName = h.BoneName,
                    humanName = h.HumanName,
                    limit = limit,
                });
            }).ToArray();

            var go   = trans.gameObject;
            var anim = go.AddComponent <Animator>();

            anim.avatar = AvatarBuilder.BuildHumanAvatar(go, hd);
        }
 public HumanRigBone(string humanBoneName, HumanLimit humanLimit, params string[] boneNames) : this(humanBoneName, boneNames)
 {
     this.humanLimit = humanLimit;
 }