예제 #1
0
    public void CreateAxie(string id)
    {
        Axie newAxie = new Axie(id);

        axies.Add(newAxie);
        GetAxieInformation.Instance.StartAxieCreate(id);
    }
    private void ConstructAxie()
    {
        Axie axie = AxieManager.Manager.GetAxie(currentId);

        if (axie == null)
        {
            Debug.LogFormat("Could not construct axie, Id: \"{0}\" was not found", currentId);
            return;
        }

        GameObject newAxieObj = new GameObject("axie" + currentId);

        newAxieObj.transform.parent = AxieObject.Instance.transform;
        axieObj = newAxieObj;

        foreach (AxieBone bone in axie.bones)
        {
            string     boneName = bone.name.Replace("@", "");
            GameObject newBone  = new GameObject("bone-" + boneName);
            if (newBone.name == "bone-root")
            {
                newBone.transform.parent = newAxieObj.transform;
            }
            else
            {
                newBone.transform.parent        = newAxieObj.transform.FindDeepChild(bone.parent.Replace("@", "bone-"));
                newBone.transform.localPosition = new Vector2(bone.x / scaleFactor, bone.y / scaleFactor);

                if (bone.rotation != 0)
                {
                    float parentRot = 0;
                    if (transform.parent)
                    {
                        parentRot = transform.parent.rotation.eulerAngles.z;
                    }

                    newBone.transform.Rotate(Vector3.forward, bone.rotation - parentRot /*(bone.rotation - 180f) - parentRot*/);
                }
            }
        }

        foreach (AxieSkin skin in axie.skins)
        {
            string     skinName = skin.name;
            GameObject newSkin  = new GameObject("skin-" + skinName);

            newSkin.transform.parent = newAxieObj.transform.FindDeepChild("bone-" + skin.name);


            bool partRotate = false;

            foreach (AxiePart part in axie.parts)
            {
                if (part.name.Equals(skinName))
                {
                    partRotate = part.rotate;
                }
            }


            Vector3 newPos = new Vector3(skin.x / scaleFactor, skin.y / scaleFactor, 0);

            Transform newTransform = newSkin.transform.parent.Find("bone-" + skin.name);
            if (newTransform)
            {
                newPos = partRotate ? new Vector3(skin.y / scaleFactor, skin.x / scaleFactor, 0) :
                         newPos;
                newSkin.transform.parent = newTransform;
            }

            if (newTransform)
            {
                newPos = new Vector3(-newPos.x, -newPos.y, 0);
            }

            if (skinName.Contains("tail"))
            {
                newPos = new Vector3(-newPos.x, -newPos.y, 0);
            }

            newSkin.transform.localPosition = newPos;

            if (partRotate)
            {
                newSkin.transform.Rotate(Vector3.forward, -90);
            }

            //partRotate = false;


            /*if (skin.rotation != 0f)
             * {
             *  float parentRot = 0;
             *  if (transform.parent)
             *      parentRot = transform.parent.rotation.eulerAngles.z;
             *  //newSkin.transform.Rotate(Vector3.forward, skin.rotation (skin.rotation - 180f) - parentRot);
             * }
             */

            /*
             * if (skin.name.Contains("ear") || skin.name.Contains("mouth"))
             *  newSkin.transform.Rotate(Vector3.forward, -90);
             */

            SpriteRenderer sr = newSkin.AddComponent <SpriteRenderer>();
            sr.sprite = axie.GetPartSprite(skinName);


            if (skinName == "body")
            {
                sr.sortingOrder = 1;
            }
            else if (skinName == "ear-right" || skinName == "tail" || skinName == ("leg-back-right") || skinName == ("leg-front-right") || skinName == "back")
            {
                sr.sortingOrder = 0;
            }
            else
            {
                sr.sortingOrder = 2;
            }
        }

        axieObj.transform.localScale    = new Vector3(0.1f, 0.1f, 0.1f);
        axieObj.transform.localPosition = new Vector3(.12f, 0, 0);
        axieObj.transform.localRotation = Quaternion.identity;
    }