示例#1
0
            protected override DanceMotion ReadTarget(BinaryReader reader, IReadingSession session)
            {
                string name      = reader.ReadMoostaString();
                int    beatCount = reader.ReadInt32();

                string[] array = new string[reader.ReadInt32()];
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] = reader.ReadMoostaString();
                }
                string[] array2 = new string[reader.ReadInt32()];
                for (int j = 0; j < array2.Length; j++)
                {
                    array2[j] = reader.ReadMoostaString();
                }
                DancePose[] array3 = new DancePose[reader.ReadInt32()];
                for (int k = 0; k < array3.Length; k++)
                {
                    BoneState[] array4 = new BoneState[array2.Length];
                    for (int l = 0; l < array2.Length; l++)
                    {
                        array4[l] = new BoneState(new CtQuaternion(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
                    }
                    array3[k] = new DancePose(array2, array4);
                }
                return(new DanceMotion(name, beatCount, array3, null)
                {
                    Tags = array
                });
            }
示例#2
0
            public static NodeState TryGetState(Node node, Animation animation)
            {
                var node3D = node as Node3D;

                if (node3D != null)
                {
                    return(Node3DState.TryGetState(node3D, animation));
                }
                var widget = node as Widget;

                if (widget != null)
                {
                    return(WidgetState.TryGetState(widget, animation));
                }
                var point = node as DistortionMeshPoint;

                if (point != null)
                {
                    return(DistortionMeshPointState.TryGetState(point, animation));
                }
                var bone = node as Bone;

                if (bone != null)
                {
                    return(BoneState.TryGetState(bone, animation));
                }

                return(null);
            }
示例#3
0
    void LoadBoneState(JObject bone, Dictionary <string, BoneState> states, BoneState parent)
    {
        string name = (string)bone["name"];

        if (!states.ContainsKey(name))
        {
            BoneState state = new BoneState();
            JObject   pos   = (JObject)bone["localPosition"];
            state.pos = new Vector3((float)pos["x"], (float)pos["y"], (float)pos["z"]);
            JObject rot = (JObject)bone["localRotation"];
            state.rot = new Quaternion((float)rot["x"], (float)rot["y"], (float)rot["z"], (float)rot["w"]);
            JObject sca = (JObject)bone["localScale"];
            state.sca       = new Vector3((float)sca["x"], (float)sca["y"], (float)sca["z"]);
            state.parent    = parent;
            state.rot_world = state.RotWorld();

            states.Add(name, state);

            JArray children = (JArray)bone["children"];
            for (int i = 0; i < children.Count; ++i)
            {
                JObject child = (JObject)children[i];
                LoadBoneState(child, states, state);
            }
        }
    }
示例#4
0
        private bool setBoneAsNativeBoneName(string boneName, BoneState boneState)
        {
            CtBone bone = this.Mesh.MatrixPallet.GetBone(boneName);

            if (bone != null)
            {
                bone.TransformMatrix = CtMatrix4x4.Rotate(boneState.Rotate);
            }
            return(bone != null);
        }
示例#5
0
        protected AvatarControl.BodyPartColor IsValidBodyPart(BodyPart bodyPart)
        {
            AvatarControl.BodyPartColor bodyPartColor = AvatarControl.BodyPartColor.Off;
            bool flag1  = false;
            int  index1 = (int)bodyPart;

            if (bodyPart != BodyPart.LeftFingers && bodyPart != BodyPart.RightFingers)
            {
                for (int index2 = 0; index2 < this.m_BodyPartHumanBone[index1].Length; ++index2)
                {
                    if (this.m_BodyPartHumanBone[index1][index2] != -1)
                    {
                        BoneState state = this.m_Bones[this.m_BodyPartHumanBone[index1][index2]].state;
                        flag1 |= state == BoneState.Valid;
                        if (HumanTrait.RequiredBone(this.m_BodyPartHumanBone[index1][index2]) && state == BoneState.None || state != BoneState.Valid && state != BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                    }
                }
            }
            else
            {
                bool flag2 = true;
                int  num1  = 3;
                for (int index2 = 0; index2 < this.m_BodyPartHumanBone[index1].Length / num1; ++index2)
                {
                    bool flag3 = false;
                    int  num2  = index2 * num1;
                    for (int index3 = num1 - 1; index3 >= 0; --index3)
                    {
                        bool flag4 = this.m_Bones[this.m_BodyPartHumanBone[index1][num2 + index3]].state == BoneState.Valid;
                        flag2 &= flag4;
                        if (flag3)
                        {
                            if (!flag4)
                            {
                                return(AvatarControl.BodyPartColor.Red | AvatarControl.BodyPartColor.IKRed);
                            }
                        }
                        else
                        {
                            flag1 |= flag3 = !flag3 && flag4;
                        }
                    }
                }
                bodyPartColor = !flag2 ? AvatarControl.BodyPartColor.IKRed : AvatarControl.BodyPartColor.IKGreen;
            }
            if (!flag1)
            {
                return(AvatarControl.BodyPartColor.IKRed);
            }
            return(AvatarControl.BodyPartColor.Green | bodyPartColor);
        }
示例#6
0
        private bool setBoneAsBVHBoneName(string boneName, BoneState boneState)
        {
            BoneAssigner bone;

            if (this.BoneTable.TryGetValue(boneName, out bone))
            {
                MMDDanceModel.SetBoneRotation(bone, CtMatrix4x4.Rotate(boneState.Rotate));
                return(true);
            }
            return(false);
        }
示例#7
0
    void Update()
    {
        if (src_bones == null || dst_bones == null || src_base_pose == null || dst_base_pose == null || bone_map == null)
        {
            return;
        }

        for (int i = 0; i < avatar_bones.Count; ++i)
        {
            JObject pair = (JObject)bone_map.GetValue(avatar_bones[i]);
            if (pair != null)
            {
                string src = (string)pair.GetValue("src");
                string dst = (string)pair.GetValue("dst");

                if (src.Length > 0 && dst.Length > 0)
                {
                    Transform src_bone = src_bones.Find(delegate(Transform t) {
                        return(src == t.name);
                    });
                    Transform dst_bone = dst_bones.Find(delegate(Transform t) {
                        return(dst == t.name);
                    });

                    if (src_bone && dst_bone)
                    {
                        BoneState src_base_state = src_base_pose[src];
                        BoneState dst_base_state = dst_base_pose[dst];

                        Quaternion rot = Quaternion.Inverse(src_base_state.rot) * src_bone.localRotation;
                        if (localRotationDirectMap)
                        {
                            dst_bone.localRotation = dst_base_state.rot * rot;
                        }
                        else
                        {
                            Vector3 euler   = rot.eulerAngles;
                            Vector3 right   = Quaternion.Inverse(dst_base_state.rot_world) * new Vector3(1, 0, 0);
                            Vector3 up      = Quaternion.Inverse(dst_base_state.rot_world) * new Vector3(0, 1, 0);
                            Vector3 forward = Quaternion.Inverse(dst_base_state.rot_world) * new Vector3(0, 0, 1);
                            dst_bone.localRotation = dst_base_state.rot
                                                     * Quaternion.AngleAxis(euler.y, up)
                                                     * Quaternion.AngleAxis(euler.x, right)
                                                     * Quaternion.AngleAxis(euler.z, forward);
                        }

                        float   scale = rootDst.localPosition.y / rootSrc.localPosition.y;
                        Vector3 pos   = src_bone.localPosition - src_base_state.pos;
                        dst_bone.localPosition = dst_base_state.pos + pos * scale;
                    }
                }
            }
        }
    }
示例#8
0
            public void Reset(SerializedProperty humanBoneArray, Dictionary <Transform, bool> bones)
            {
                bone = null;
                SerializedProperty property = GetSerializedProperty(humanBoneArray, false);

                if (property != null)
                {
                    string boneName = property.FindPropertyRelative(sBoneName).stringValue;
                    bone = bones.Keys.FirstOrDefault(b => (b != null && b.name == boneName));
                }
                state = BoneState.Valid;
            }
示例#9
0
 private void SetPoseWithoutPivoting(DancePose pose)
 {
     string[] boneNames = pose.BoneNames;
     for (int i = 0; i < boneNames.Length; i++)
     {
         string    boneName  = boneNames[i];
         BoneState boneState = pose[boneName];
         if (!this.setBoneAsNativeBoneName(boneName, boneState) && !this.setBoneViaMMDBoneName(boneName, boneState))
         {
             this.setBoneAsBVHBoneName(boneName, boneState);
         }
     }
 }
示例#10
0
        /// <summary>
        /// Call twice; before and after changes
        /// </summary>
        public void BoneChange(params IBoneNode[] bones)
        {
            SaveState state = new BoneState
            {
                _bones           = bones,
                _frameStates     = bones.Select(x => x.FrameState).ToArray(),
                _animation       = SelectedCHR0,
                _frameIndex      = CurrentFrame,
                _updateBoneOnly  = CHR0Editor.chkMoveBoneOnly.Checked,
                _updateBindState = CHR0Editor.chkUpdateBindPose.Checked
            };

            AddState(state);
        }
示例#11
0
 private DancePose[] getDancePose(int frameCount, List <MFuriKeyFrameList> keyFrameLists, string[] bones)
 {
     DancePose[] array = new DancePose[frameCount];
     for (int i = 0; i < array.Length; i++)
     {
         array[i] = new DancePose(bones);
         foreach (MFuriKeyFrameList current in keyFrameLists)
         {
             BoneState value = new BoneState(current.KeyFrames[i].Rotation);
             array[i][current.BoneName] = value;
         }
     }
     return(array);
 }
示例#12
0
            protected override DanceMotion ReadTarget(BinaryReader reader, IReadingSession session)
            {
                string         name        = reader.ReadMoostaString();
                int            beatCount   = reader.ReadInt32();
                int            num         = reader.ReadInt32();
                DanceModelInfo sourceModel = (num == 0) ? null : (session.GetObject(num) as DanceModelInfo);

                string[] array = new string[reader.ReadInt32()];
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] = reader.ReadMoostaString();
                }
                string[] array2 = new string[reader.ReadInt32()];
                for (int j = 0; j < array2.Length; j++)
                {
                    array2[j] = reader.ReadMoostaString();
                }
                string[] array3 = new string[reader.ReadInt32()];
                for (int k = 0; k < array3.Length; k++)
                {
                    array3[k] = reader.ReadMoostaString();
                }
                DancePose[] array4 = new DancePose[reader.ReadInt32()];
                for (int l = 0; l < array4.Length; l++)
                {
                    CtVector3D         bodyPos   = new CtVector3D(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                    DancePoseFootState footState = (DancePoseFootState)reader.ReadInt32();
                    BoneState[]        array5    = new BoneState[array2.Length];
                    for (int m = 0; m < array2.Length; m++)
                    {
                        array5[m] = new BoneState(new CtQuaternion(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle()));
                    }
                    SkinState[] array6 = new SkinState[array3.Length];
                    for (int n = 0; n < array3.Length; n++)
                    {
                        array6[n] = new SkinState(reader.ReadSingle());
                    }
                    array4[l] = new DancePose(array2, array5, array3, array6, bodyPos)
                    {
                        FootState = footState
                    };
                }
                return(new DanceMotion(name, beatCount, array4, sourceModel)
                {
                    Tags = array
                });
            }
示例#13
0
 void ApplyBoneState(BoneState state)
 {
     if (TargetModel != state._targetModel)
     {
         _resetCamera = false;
         TargetModel  = state._targetModel;
     }
     SelectedCHR0 = state._animation;
     CurrentFrame = state._frameIndex;
     CHR0Editor.chkUpdateBindPose.Checked = state._updateBindState;
     CHR0Editor.chkMoveBoneOnly.Checked   = state._updateBoneOnly;
     for (int i = 0; i < state._bones.Length; i++)
     {
         SelectedBone = state._bones[i];
         CHR0Editor.ApplyState(state._frameStates[i]);
     }
 }
    public void CopyFrom(Skeleton skeleton, Transform kinect, uint timestamp)
    {
        const float mm2m = 0.001f; // When using 0.001, we get a dwarf. Do they mean cm?

        for (int i = 0; i < 32; i++)
        {
            var joint = skeleton.GetJoint(i);

            var bone = new BoneState();
            bone.position        = kinect.TransformPoint(NumericsUtil.Convert(joint.Position) * mm2m);
            bone.rotation        = kinect.rotation * NumericsUtil.Convert(joint.Quaternion);
            bone.confidenceLevel = joint.ConfidenceLevel;
            bones[i]             = bone;
        }

        this.timestamp = timestamp;
    }
示例#15
0
        private static DancePose createPoseFromBvhPose(BvhNode skeleton, double[] bvhPose, string[] bones)
        {
            Dictionary <string, BoneState> items = new Dictionary <string, BoneState>();
            int num = 0;

            foreach (BvhNode current in skeleton.GetAllNodesRecursively())
            {
                Angle         x        = Angle.Deg000;
                Angle         y        = Angle.Deg000;
                Angle         z        = Angle.Deg000;
                BvhChannels[] channels = current.Channels;
                for (int i = 0; i < channels.Length; i++)
                {
                    switch (channels[i])
                    {
                    case BvhChannels.Xrotation:
                        x = -Angle.FromDegree(bvhPose[num]);
                        break;

                    case BvhChannels.Yrotation:
                        y = -Angle.FromDegree(bvhPose[num]);
                        break;

                    case BvhChannels.Zrotation:
                        z = Angle.FromDegree(bvhPose[num]);
                        break;
                    }
                    num++;
                }
                BoneState value = new BoneState(x, y, z);
                if (current.Name.Equals("Hips"))
                {
                    value.Rotate = new CtQuaternion(new CtVector3D(0f, 1f, 0f), 3.1415926535897931) * value.Rotate;
                }
                items[current.Name] = value;
            }
            return(new DancePose(bones, Array.ConvertAll <string, BoneState>(bones, delegate(string name)
            {
                if (!items.ContainsKey(name))
                {
                    return BoneState.Zero;
                }
                return items[name];
            })));
        }
示例#16
0
        private bool setBoneViaMMDBoneName(string boneName, BoneState boneState)
        {
            string text = Moosta.Common.BoneNames.TryConvertToMmdBone(boneName);

            return(!string.IsNullOrEmpty(text) && this.setBoneAsNativeBoneName(text, boneState));
        }
示例#17
0
 public AnimationFile(string n,int s,int tS,BoneState[] bS)
 {
     name = n;
     samples = s;
     totalSamples = tS;
     bonesStates = bS;
 }
示例#18
0
            /// <summary>
            /// Draws the GUI for a single bone dot.
            /// </summary>
            /// <returns>Returns true if this is being hovered</returns>
            public bool BoneDotGUI(Rect rect, Rect selectRect, Rect tooltipRect, int boneIndex, bool hasHover = false)
            {
                bool  hover   = false;
                Event current = Event.current;
                Color color   = GUI.color;

                if (!hasHover)
                {
                    if (selectRect.Contains(current.mousePosition))
                    {
                        if (state == BoneState.Valid)
                        {
                            if (current.type == EventType.MouseDown)
                            {
                                if (bone == null)
                                {
                                    state = BoneState.None;
                                }
                                else
                                {
                                    Selection.activeTransform = bone;
                                    if (bone != null)
                                    {
                                        EditorGUIUtility.PingObject(bone);
                                    }
                                }

                                current.Use();
                            }
                            else
                            {
                                GUI.color = kBoneSelected;
                                GUI.DrawTexture(rect, DotSelection.image);
                            }
                        }

                        GUI.color = color;
                        GUI.Box(tooltipRect, boneName, EditorStyles.whiteMiniLabel);
                        hover = true;
                    }
                }

                switch (state)
                {
                case BoneState.Valid:
                    GUI.color = kBoneValid;
                    break;

                case BoneState.None:
                    GUI.color = kBoneInactive;
                    break;

                default:
                    GUI.color = kBoneInvalid;
                    break;
                }

                Texture image = HumanTrait.RequiredBone(boneIndex) ? DotFrame.image : DotFrameDotted.image;

                GUI.DrawTexture(rect, image);
                if (bone != null)
                {
                    GUI.DrawTexture(rect, DotFill.image);
                }
                GUI.color = color;
                return(hover);
            }
示例#19
0
 public BoneWrapper(string boneName, Transform bone)
 {
     this.boneName = ObjectNames.NicifyVariableName(boneName);
     this.bone     = bone;
     state         = bone == null ? BoneState.None : BoneState.Valid;
 }
示例#20
0
 public BoneWrapper(string humanBoneName, Transform bone)
 {
     this.m_HumanBoneName = humanBoneName;
     this.bone            = bone;
     this.state           = BoneState.Valid;
 }
示例#21
0
    private static bool IsTouching(BoneState bone, KinectButton button)
    {
        const float threshold = 0.4f;

        return(math.distance(bone.position, button.transform.position) < threshold);
    }