Esempio n. 1
0
        static void MakeHead(Transform _headPoint, Transform _chestPoint, Vector3 _headTop)
        {
            float headScale = Vector3.Distance(_chestPoint.position, _headPoint.position) * .01f;


            Selection.activeObject = GameObject.Find("Spine_05");

            Puppet2D_BoneCreation.CreateBoneTool();
            Puppet2D_BoneCreation.BoneCreationMode(_headPoint.position);
            Puppet2D_BoneCreation.BoneCreationMode(_headTop);

            Puppet2D_BoneCreation.BoneFinishCreation();
            GameObject head = GameObject.Find("bone_1");

            head.name = "Head";
            Selection.activeGameObject = head;
            GameObject headEnd = GameObject.Find("bone_2");

            headEnd.name = "HeadEnd";

            Puppet2D_CreateControls.CreateOrientControl();
            GameObject headControl = GameObject.Find("Head_CTRL");

            headControl.GetComponent <Puppet2D_ParentControl>().ConstrianedPosition = true;
            GameObject headControlParent = GameObject.Find("Head_CTRL_GRP");

            headControlParent.transform.localScale = Vector3.one * headScale * 2f;
            //GameObject.Find ("bone_22").name = ("a");
        }
Esempio n. 2
0
        public static void CreateSplineTool()
        {
            Puppet2D_Editor.SplineCreation = true;

            SplineCreationGroup = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_GRP"));
            Undo.RegisterCreatedObjectUndo(SplineCreationGroup, "undo create Spline");
            splineStoreData = SplineCreationGroup.AddComponent <Puppet2D_FFDStoreData>();
        }
Esempio n. 3
0
        static void MakeClav(GameObject parentTo, string boneName)
        {
            Selection.activeObject = parentTo;
            Puppet2D_BoneCreation.CreateBoneTool();
            Puppet2D_BoneCreation.BoneCreationMode(parentTo.transform.position + Vector3.one * .1f);
            Puppet2D_BoneCreation.BoneFinishCreation();
            GameObject clav = GameObject.Find("bone_1");

            clav.name = boneName;
        }
Esempio n. 4
0
        public static void FFDCreationMode(Vector3 mousePos)
        {
            string newCtrlName    = "FFD_CTRL";
            string newCtrlGRPName = "FFD_CTRL_GRP";

            if (Puppet2D_Editor.FFDGameObject)
            {
                newCtrlName    = Puppet2D_Editor.FFDGameObject.name + "_Ctrl";
                newCtrlGRPName = Puppet2D_Editor.FFDGameObject.name + "_Ctrl_GRP";
            }

            GameObject newCtrl    = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName(newCtrlName));
            GameObject newCtrlGRP = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName(newCtrlGRPName));

            newCtrl.transform.parent = newCtrlGRP.transform;

            Undo.RegisterCreatedObjectUndo(newCtrl, "Created newCtrl");
            Undo.RegisterCreatedObjectUndo(newCtrlGRP, "Created newCtrlGRP");

            Undo.RecordObject(ffdStoreData, "Adding FFD Control");
            ffdStoreData.FFDCtrls.Add(newCtrl.transform);


            Puppet2D_FFDLineDisplay ffdline = newCtrl.AddComponent <Puppet2D_FFDLineDisplay>();

            if (ffdStoreData.FFDCtrls.Count > 1)
            {
                if (ffdStoreData.FFDPathNumber.Count > 0)
                {
                    if (ffdStoreData.FFDCtrls.Count - 1 > ffdStoreData.FFDPathNumber[ffdStoreData.FFDPathNumber.Count - 1])
                    {
                        ffdline.target = ffdStoreData.FFDCtrls[ffdStoreData.FFDCtrls.Count - 2];
                    }
                }
                else
                {
                    ffdline.target = ffdStoreData.FFDCtrls[ffdStoreData.FFDCtrls.Count - 2];
                }
            }



            newCtrlGRP.transform.position = new Vector3(mousePos.x, mousePos.y, 0);

            SpriteRenderer spriteRenderer = newCtrl.AddComponent <SpriteRenderer>();

            spriteRenderer.sortingLayerName = Puppet2D_Editor._controlSortingLayer;
            string path = (Puppet2D_Editor._puppet2DPath + "/Textures/GUI/ffdBone.psd");

            Sprite sprite = AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite;

            spriteRenderer.sprite           = sprite;
            spriteRenderer.sortingLayerName = Puppet2D_Editor._controlSortingLayer;
        }
Esempio n. 5
0
        static void MakeLimb(Transform _thighLPoint, Transform _footLPoint, Transform _kneePoint, Vector3 FootEnd, GameObject parentTo, string controlName, string controlName3, string controlName2, string controlName1, bool flip = false)
        {
            Selection.activeObject = parentTo;

            float   limbScale     = Vector3.Distance(_footLPoint.position, _thighLPoint.position) * .01f;
            Vector3 scaledFootPos = (_footLPoint.position - _thighLPoint.position) / limbScale;

            scaledFootPos += _thighLPoint.position;

            Vector3 scaledKneePos = (_kneePoint.position - _thighLPoint.position) / limbScale;

            scaledKneePos += _thighLPoint.position;

            Puppet2D_BoneCreation.CreateBoneTool();
            Puppet2D_BoneCreation.BoneCreationMode(_thighLPoint.position);

            Puppet2D_BoneCreation.BoneCreationMode(scaledKneePos);
            GameObject endLimbGO = Puppet2D_BoneCreation.BoneCreationMode(scaledFootPos);

            Vector3 scaledFinalEndLimbGO = (FootEnd - _thighLPoint.position) / limbScale;

            scaledFinalEndLimbGO += _thighLPoint.position;

            GameObject finalEndLimbGO = Puppet2D_BoneCreation.BoneCreationMode(scaledFinalEndLimbGO);

            finalEndLimbGO.name = (controlName1 + "End");

            Puppet2D_BoneCreation.BoneFinishCreation();

            Selection.activeGameObject = endLimbGO;
            endLimbGO.name             = controlName1;
            Puppet2D_CreateControls.IKCreateTool(true);
            GameObject limbControlParent = GameObject.Find(controlName1 + "_CTRL_GRP");

            Transform elbow        = endLimbGO.transform.parent;
            Transform shoulderBone = endLimbGO.transform.parent.parent;

            elbow.name        = (controlName2);
            shoulderBone.name = (controlName3);

            Transform limbParent = limbControlParent.transform.parent;

            limbControlParent.transform.parent = shoulderBone;
            shoulderBone.localScale            = shoulderBone.localScale * limbScale;
            limbControlParent.transform.parent = limbParent;
            GameObject.Find(controlName1 + "_CTRL").GetComponent <Puppet2D_IKHandle>().Flip = flip;
        }
Esempio n. 6
0
 public static void FFDSetFirstPath()
 {
     FFDControlsGrp = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("FFD_Ctrls_GRP"));
     Undo.RegisterCreatedObjectUndo(FFDControlsGrp, "undo create FFD");
     ffdStoreData = FFDControlsGrp.AddComponent <Puppet2D_FFDStoreData>();
     ffdStoreData.OriginalSpritePosition = Puppet2D_Editor.FFDGameObject.transform.position;
     Puppet2D_Editor.FFDGameObject.transform.position = new Vector3(ffdStoreData.OriginalSpritePosition.x, ffdStoreData.OriginalSpritePosition.y, 0);
     if ((Puppet2D_Editor.FFDGameObject != null) && Puppet2D_Editor.FFDGameObject.GetComponent <PolygonCollider2D>())
     {
         Vector2[] firstPath = Puppet2D_Editor.FFDGameObject.GetComponent <PolygonCollider2D>().GetPath(0);
         foreach (Vector2 pos in firstPath)
         {
             FFDCreationMode(pos);
         }
         CloseFFDPath();
     }
 }
Esempio n. 7
0
        public static void SplineCreationMode(Vector3 mousePos)
        {
            GameObject newCtrl = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_Ctrl"));

            Undo.RegisterCreatedObjectUndo(newCtrl, "Created newCtrl");
            GameObject newCtrlGrp = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_Ctrl_GRP"));

            Undo.RegisterCreatedObjectUndo(newCtrlGrp, "Created newCtrlGrp");
            newCtrl.transform.parent = newCtrlGrp.transform;

            Undo.RecordObject(splineStoreData, "Adding To Spline Control");

            splineStoreData.FFDCtrls.Add(newCtrl.transform);


            // start and end
            if (splineStoreData.FFDCtrls.Count == 1)
            {
                GameObject tangentCtrl = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_Tangent"));
                Undo.RegisterCreatedObjectUndo(tangentCtrl, "Created splineTangent");
                splineStoreData.FFDCtrls.Add(tangentCtrl.transform);
                tangentCtrl.transform.parent = splineStoreData.FFDCtrls[0].transform;
            }



            newCtrlGrp.transform.position = mousePos;
            newCtrlGrp.transform.position = new Vector3(newCtrlGrp.transform.position.x, newCtrlGrp.transform.position.y, 0);

            SpriteRenderer spriteRenderer = newCtrl.AddComponent <SpriteRenderer>();

            spriteRenderer.sortingLayerName = Puppet2D_Editor._controlSortingLayer;
            string path = (Puppet2D_Editor._puppet2DPath + "/Textures/GUI/splineMiddleControl.psd");

            if (splineStoreData.FFDCtrls.Count == 2)
            {
                path = (Puppet2D_Editor._puppet2DPath + "/Textures/GUI/splineControl.psd");
            }

            Sprite sprite = AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite;

            spriteRenderer.sprite = sprite;
        }
        public static void IKCreateTool(bool worldSpace = false)
        {
            GameObject bone = Selection.activeObject as GameObject;

            if (bone)
            {
                if (bone.GetComponent <SpriteRenderer>())
                {
                    if (!bone.GetComponent <SpriteRenderer>().sprite.name.Contains("Bone"))
                    {
                        Debug.LogWarning("This is not a Puppet2D Bone");
                        return;
                    }
                }
                else
                {
                    Debug.LogWarning("This is not a Puppet2D Bone");
                    return;
                }
            }
            else
            {
                Debug.LogWarning("This is not a Puppet2D Bone");
                return;
            }
            GameObject globalCtrl = CreateGlobalControl();

            foreach (Puppet2D_ParentControl parentControl in globalCtrl.GetComponent <Puppet2D_GlobalControl>()._ParentControls)
            {
                if ((parentControl.bone.transform == bone.transform) || (parentControl.bone.transform == bone.transform.parent.transform))
                {
                    Debug.LogWarning("Can't create a IK Control on Bone; it alreay has an Parent Control");
                    return;
                }
            }
            foreach (Puppet2D_IKHandle ikhandle in globalCtrl.GetComponent <Puppet2D_GlobalControl>()._Ikhandles)
            {
                if ((ikhandle.bottomJointTransform == bone.transform) || (ikhandle.middleJointTransform == bone.transform) || (ikhandle.topJointTransform == bone.transform))
                {
                    Debug.LogWarning("Can't create a IK Control on Bone; it alreay has an IK handle");
                    return;
                }
            }

            GameObject IKRoot = null;

            if (bone.transform.parent && bone.transform.parent.transform.parent && bone.transform.parent.transform.parent.GetComponent <SpriteRenderer>() && bone.transform.parent.transform.parent.GetComponent <SpriteRenderer>().sprite != null && bone.transform.parent.transform.parent.GetComponent <SpriteRenderer>().sprite.name.Contains("Bone"))
            {
                IKRoot = bone.transform.parent.transform.parent.gameObject;
            }
            if (IKRoot == null)
            {
                Debug.LogWarning("You need to select the end of a chain of three bones");
                return;
            }
            // CHECK IF TOP BONE HAS AN IK ATTACHED

            Puppet2D_GlobalControl[] globalCtrls = GameObject.FindObjectsOfType <Puppet2D_GlobalControl>();
            foreach (Puppet2D_GlobalControl glblCtrl in globalCtrls)
            {
                foreach (Puppet2D_IKHandle ik in glblCtrl._Ikhandles)
                {
                    if (ik.topJointTransform == bone.transform.parent.transform.parent)
                    {
                        Debug.LogWarning(bone.transform.parent.transform.parent.name + " already has an IK control");
                        return;
                    }
                }
                foreach (Puppet2D_SplineControl splineCtrl in glblCtrl._SplineControls)
                {
                    foreach (GameObject splineBone in splineCtrl.bones)
                    {
                        if (splineBone.transform == bone.transform.parent.transform.parent)
                        {
                            Debug.LogWarning(bone.transform.parent.transform.parent.name + " has a Spline control attached, please make sure there are at least 3 bones after the spline bone");
                            return;
                        }
                    }
                }
            }


            // CHECK TO SEE IF THE BOTTOM BONE IS POINTING AT THE MIDDLE BONE
            if (bone.transform.parent.transform.parent.rotation != Quaternion.LookRotation(bone.transform.parent.transform.position - bone.transform.parent.transform.parent.position, Vector3.forward) * Quaternion.AngleAxis(90, Vector3.right))
            {                       //if(bone.transform.parent.transform.parent);
                Puppet2D_BoneCreation.sortOutBoneHierachy(bone.transform.parent.gameObject, true);
            }
            if (bone.transform.parent.rotation != Quaternion.LookRotation(bone.transform.position - bone.transform.parent.position, Vector3.forward) * Quaternion.AngleAxis(90, Vector3.right))
            {                       //if(bone.transform.parent.transform.parent);
                Puppet2D_BoneCreation.sortOutBoneHierachy(bone, true);
            }


            GameObject control = new GameObject();

            Undo.RegisterCreatedObjectUndo(control, "Created control");
            control.name = (bone.name + "_CTRL");
            GameObject controlGroup = new GameObject();

            Undo.RegisterCreatedObjectUndo(controlGroup, "new control grp");
            controlGroup.name = (bone.name + "_CTRL_GRP");

            control.transform.parent        = controlGroup.transform;
            controlGroup.transform.position = bone.transform.position;
            if (!worldSpace)
            {
                controlGroup.transform.rotation = bone.transform.rotation;
            }

            GameObject poleVector = new GameObject();

            Undo.RegisterCreatedObjectUndo(poleVector, "Created polevector");
            poleVector.name = (bone.name + "_POLE");

            SpriteRenderer spriteRenderer = control.AddComponent <SpriteRenderer>();
            string         path           = (Puppet2D_Editor._puppet2DPath + "/Textures/GUI/IKControl.psd");
            Sprite         sprite         = AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite;

            spriteRenderer.sprite           = sprite;
            spriteRenderer.sortingLayerName = Puppet2D_Editor._controlSortingLayer;

            // store middle bone position to check if it needs flipping

            Vector3 middleBonePos = bone.transform.parent.transform.position;

            Puppet2D_IKHandle ikHandle = control.AddComponent <Puppet2D_IKHandle>();

            ikHandle.topJointTransform    = IKRoot.transform;
            ikHandle.middleJointTransform = bone.transform.parent.transform;
            ikHandle.bottomJointTransform = bone.transform;
            ikHandle.poleVector           = poleVector.transform;
            ikHandle.scaleStart[0]        = IKRoot.transform.localScale;
            ikHandle.scaleStart[1]        = IKRoot.transform.GetChild(0).localScale;
            ikHandle.OffsetScale          = bone.transform.localScale;

            if (worldSpace)
            {
                ikHandle.Offset = ikHandle.bottomJointTransform.rotation;
            }

            if (bone.GetComponent <SpriteRenderer>().sprite.name.Contains("Bone"))
            {
                ikHandle.AimDirection = Vector3.forward;
                ikHandle.UpDirection  = Vector3.right;
            }
            else
            {
                Debug.LogWarning("This is not a Puppet2D Bone");
                ikHandle.AimDirection = Vector3.right;
                ikHandle.UpDirection  = Vector3.up;
            }


            //if (bone.transform.parent.transform.position.x < IKRoot.transform.position.x)

            Selection.activeObject = ikHandle;

            controlGroup.transform.parent = globalCtrl.transform;
            poleVector.transform.parent   = globalCtrl.transform;
            if (globalCtrl.GetComponent <Puppet2D_GlobalControl>().AutoRefresh)
            {
                globalCtrl.GetComponent <Puppet2D_GlobalControl>().Init();
            }
            else
            {
                globalCtrl.GetComponent <Puppet2D_GlobalControl>()._Ikhandles.Add(ikHandle);
            }


            //fix from now on for 180 flip
            globalCtrl.GetComponent <Puppet2D_GlobalControl>()._flipCorrection = -1;
            globalCtrl.GetComponent <Puppet2D_GlobalControl>().Run();
            if ((Vector3.Distance(bone.transform.parent.transform.position, middleBonePos) > 0.0001f))
            {
                ikHandle.Flip = true;
            }
        }
Esempio n. 9
0
        static void CreateSpline()
        {
            if (splineStoreData.FFDCtrls.Count > 2 && splineStoreData.FFDCtrls[0] && splineStoreData.FFDCtrls[1] && splineStoreData.FFDCtrls[2])
            {
                GameObject tangentCtrl = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_Tangent"));
                Undo.RegisterCreatedObjectUndo(tangentCtrl, "Created splineTangent");
                splineStoreData.FFDCtrls.Add(tangentCtrl.transform);
                tangentCtrl.transform.parent        = splineStoreData.FFDCtrls[splineStoreData.FFDCtrls.Count - 2].transform;
                tangentCtrl.transform.localPosition = Vector3.zero;
                SpriteRenderer spriteRenderer = splineStoreData.FFDCtrls[splineStoreData.FFDCtrls.Count - 2].GetComponent <SpriteRenderer>();
                string         path           = (Puppet2D_Editor._puppet2DPath + "/Textures/GUI/splineControl.psd");
                Sprite         sprite         = AssetDatabase.LoadAssetAtPath(path, typeof(Sprite)) as Sprite;
                spriteRenderer.sprite = sprite;

                splineStoreData.FFDCtrls[1].position += splineStoreData.FFDCtrls[0].position - splineStoreData.FFDCtrls[2].position;

                splineStoreData.FFDCtrls[splineStoreData.FFDCtrls.Count - 1].position += splineStoreData.FFDCtrls[splineStoreData.FFDCtrls.Count - 2].position - splineStoreData.FFDCtrls[splineStoreData.FFDCtrls.Count - 3].position;

                Transform splineCtrlSwap = splineStoreData.FFDCtrls[0];
                splineStoreData.FFDCtrls[0] = splineStoreData.FFDCtrls[1];
                splineStoreData.FFDCtrls[1] = splineCtrlSwap;

                //GameObject OffsetGroup = new GameObject(Puppet2D_BoneCreation.GetUniqueBoneName("spline_GRP"));
                Puppet2D_SplineControl spline = SplineCreationGroup.AddComponent <Puppet2D_SplineControl>();

                spline._splineCTRLS.AddRange(splineStoreData.FFDCtrls);
                spline.numberBones = Puppet2D_Editor.numberSplineJoints;
                List <GameObject> splineBones = spline.Create();
                foreach (GameObject splineBone in splineBones)
                {
                    splineBone.GetComponent <SpriteRenderer>().sortingLayerName = Puppet2D_Editor._boneSortingLayer;
                }
                foreach (Transform ctrl in splineStoreData.FFDCtrls)
                {
                    if (!ctrl.parent.parent)
                    {
                        ctrl.parent.parent = SplineCreationGroup.transform;
                    }
                }
                GameObject globalCtrl = Puppet2D_CreateControls.CreateGlobalControl();
                globalCtrl.GetComponent <Puppet2D_GlobalControl>()._SplineControls.Add(spline);
                SplineCreationGroup.transform.parent = globalCtrl.transform;

                globalCtrl.GetComponent <Puppet2D_GlobalControl>().InitializeArrays();
                globalCtrl.GetComponent <Puppet2D_GlobalControl>().Run();

                Undo.DestroyObjectImmediate(splineStoreData);

                splineStoreData.FFDCtrls.Clear();


                // parent spline bones
                Puppet2D_HiddenBone[] hiddenBones = GameObject.FindObjectsOfType <Puppet2D_HiddenBone>();

                if (globalCtrl != null)
                {
                    foreach (Puppet2D_HiddenBone hiddenBone in hiddenBones)
                    {
                        if (hiddenBone && hiddenBone.transform.parent && hiddenBone.transform.parent.parent == null)
                        {
                            hiddenBone.transform.parent.parent = globalCtrl.transform;
                        }
                    }
                }
            }
        }