Example #1
0
    // Check Before Each Function - Then This Could Be Private
    public void Initialize()
    {
        colliderType = Polygon.GetColliderType(gameObject);

        List <Polygon> result = Polygon.GetListFromCollider(gameObject);

        // Split collider if there are more polygons than 1
        if (result.Count > 1)
        {
            PerformResult(result);
        }

        switch (textureType)
        {
        case TextureType.Mesh:
            PolygonGenerator2D.GenerateMesh(gameObject, Polygon.CreateFromCollider(gameObject), new Vector2(1, 1));
            MeshRenderer meshRenderer = GetComponent <MeshRenderer> ();
            meshRenderer.material = material;

            break;

        case TextureType.Sprite:
            if (GetComponent <SpriteRenderer> () != null)
            {
                gameObject.AddComponent <SpriteMesh2D> ();
            }

            break;

        default:
            break;
        }
    }
Example #2
0
    private void CreatePolygon(Polygon newPolygon)
    {
        GameObject newGameObject = new GameObject();

        newGameObject.AddComponent <Rigidbody2D> ();
        newGameObject.transform.parent = transform;
        newGameObject.AddComponent <ColliderLineRenderer2D> ().color = Color.black;
        PolygonGenerator2D.GenerateCollider(newGameObject, newPolygon);

        Slicer2D smartSlicer = newGameObject.AddComponent <Slicer2D> ();

        smartSlicer.textureType = Slicer2D.TextureType.Mesh;
        smartSlicer.material    = material;

        PolygonGenerator2D.GenerateMesh(newGameObject, newPolygon, new Vector2(1, 1));
    }
Example #3
0
    void Start()
    {
        // Generate Mesh from collider
        PolygonGenerator2D.GenerateMesh(gameObject, Polygon.CreateFromCollider(gameObject), Vector2.zero);

        // Setting Mesh material
        if (material != null)
        {
            MeshRenderer meshRenderer = GetComponent <MeshRenderer> ();
            meshRenderer.material = material;

            meshRenderer.sortingLayerName = sortingLayerName;
            meshRenderer.sortingLayerID   = sortingLayerID;
            meshRenderer.sortingOrder     = sortingOrder;
        }
    }
Example #4
0
    void Update()
    {
        if (added == false)
        {
            SpriteRenderer spriteRenderer = GetComponent <SpriteRenderer> ();
            if (spriteRenderer == null)
            {
                if (texture != null)
                {
                    added = true;

                    PolygonGenerator2D.GenerateMesh(gameObject, Polygon.CreateFromCollider(gameObject), scale);

                    MeshRenderer meshRenderer = GetComponent <MeshRenderer> ();
                    if (meshRenderer == null)
                    {
                        meshRenderer = gameObject.AddComponent <MeshRenderer> ();
                    }

                    meshRenderer.material             = new Material(Shader.Find("Sprites/Default"));
                    meshRenderer.material.mainTexture = texture;
                    meshRenderer.material.color       = color;

                    meshRenderer.sortingLayerName = sortingLayerName;
                    meshRenderer.sortingLayerID   = sortingLayerID;
                    meshRenderer.sortingOrder     = sortingOrder;
                }
            }
            else
            {
                texture = spriteRenderer.sprite.texture;
                color   = spriteRenderer.color;
                scale   = new Vector2(spriteRenderer.sprite.rect.width / spriteRenderer.sprite.pixelsPerUnit, spriteRenderer.sprite.rect.height / spriteRenderer.sprite.pixelsPerUnit);

                sortingLayerID   = spriteRenderer.sortingLayerID;
                sortingLayerName = spriteRenderer.sortingLayerName;
                sortingOrder     = spriteRenderer.sortingOrder;

                Destroy(spriteRenderer);
            }
        }
    }
Example #5
0
    public List <GameObject> PerformResult(List <Polygon> result)
    {
        List <GameObject> resultGameObjects = new List <GameObject> ();

        if (result.Count < 1)
        {
            return(resultGameObjects);
        }

        if (sliceEvent != null)
        {
            Slice2D slice = Slice2D.Create();
            slice.polygons = result;
            if (sliceEvent(slice) == false)
            {
                return(resultGameObjects);
            }
        }

        Destroy(gameObject);

        int   name_id    = 1;
        float originMass = Polygon.CreateFromCollider(gameObject).GetArea();

        foreach (Polygon id in result)
        {
            GameObject gObject = Instantiate(gameObject);

            resultGameObjects.Add(gObject);

            Component[] components = GetComponents <Component> ();
            foreach (Component c in components)
            {
                if (c.GetType() == typeof(Rigidbody2D))
                {
                    Rigidbody2D originalRigidBody = (Rigidbody2D)c;
                    Rigidbody2D newRigidBody      = gObject.GetComponent <Rigidbody2D> ();
                    newRigidBody.velocity        = originalRigidBody.velocity;
                    newRigidBody.angularVelocity = originalRigidBody.angularVelocity;

                    newRigidBody.mass = originalRigidBody.mass * (id.ToLocalSpace(newRigidBody.transform).GetArea() / originMass);                      // 再現したものの重さを撮った比例に応じて変化する
                }
            }

            foreach (Behaviour childCompnent in gObject.GetComponentsInChildren <Behaviour>())            // Wrong
            {
                childCompnent.enabled = true;
            }

            Slicer2D slicer = gObject.GetComponent <Slicer2D> ();
            slicer.sliceCounter = sliceCounter + 1;
            slicer.maxSlices    = maxSlices;

            //オブジェクトの名前を変更
            gObject.name               = name + " (" + name_id + ")";
            gObject.transform.parent   = transform.parent;
            gObject.transform.position = transform.position;
            gObject.transform.rotation = transform.rotation;
            gObject.AddComponent <Pauser>().Pause();
            if (id.ToLocalSpace(gObject.transform).GetArea() / originMass > 0.02f) //切ったモノの比例を計算して、2パーセント以下の場合は消します
            {
                ShotLens.GetComponent <ShotLensController>().ItemListAdd(gObject);
                // GameObject.Find("ShotLens").GetComponent<ShotLensController>().ItemListAdd(gObject);
            }
            else
            {
                Destroy(gObject);
            }

            switch (textureType)
            {
            case TextureType.Sprite:
                if (gameObject.GetComponent <SpriteRenderer> () != null && gObject.GetComponent <SpriteMesh2D> () == null)
                {
                    gObject.AddComponent <SpriteMesh2D> ();
                }

                break;

            case TextureType.Mesh:
            case TextureType.None:
            default:
                break;
            }

            switch (colliderType)
            {
            case Polygon.ColliderType.Box:
                Destroy(gObject.GetComponent <BoxCollider2D> ());
                break;

            case Polygon.ColliderType.Circle:
                Destroy(gObject.GetComponent <CircleCollider2D>());
                break;

            case Polygon.ColliderType.Capsule:
                Destroy(gObject.GetComponent <CapsuleCollider2D>());
                break;

            default:
                break;
            }

            PolygonGenerator2D.GenerateCollider(gObject, id.ToLocalSpace(gObject.transform));

            name_id += 1;
        }

        if ((resultGameObjects.Count > 0) && (sliceResultEvent != null))
        {
            sliceResultEvent(resultGameObjects);
        }

        return(resultGameObjects);
    }
Example #6
0
    public List <GameObject> PerformResult(List <Polygon> result)
    {
        List <GameObject> resultGameObjects = new List <GameObject> ();

        if (result.Count < 1)
        {
            return(resultGameObjects);
        }

        if (sliceEvent != null)
        {
            Slice2D slice = Slice2D.Create();
            slice.polygons = result;
            if (sliceEvent(slice) == false)
            {
                return(resultGameObjects);
            }
        }


        int name_id = 1;

        foreach (Polygon id in result)
        {
            GameObject gObject = Instantiate(gameObject);

            resultGameObjects.Add(gObject);

            Component[] components = GetComponents <Component> ();
            foreach (Component comp in components)
            {
                if (comp.GetType() == typeof(Rigidbody2D))
                {
                    Rigidbody2D originalRigidBody = (Rigidbody2D)comp;
                    Rigidbody2D newRigidBody      = gObject.GetComponent <Rigidbody2D> ();
                    newRigidBody.velocity        = originalRigidBody.velocity;
                    newRigidBody.angularVelocity = originalRigidBody.angularVelocity;
                }
            }

            foreach (Behaviour childCompnent in gObject.GetComponentsInChildren <Behaviour>())
            {
                foreach (Behaviour child in GetComponentsInChildren <Behaviour>())
                {
                    if (child.GetType() == childCompnent.GetType())                       // Same Components Fail
                    {
                        childCompnent.enabled = child.enabled;
                        break;
                    }
                }
            }

            Slicer2D slicer = gObject.GetComponent <Slicer2D> ();
            slicer.sliceCounter = sliceCounter + 1;
            slicer.maxSlices    = maxSlices;

            gObject.name               = name + " (" + name_id + ")";
            gObject.transform.parent   = transform.parent;
            gObject.transform.position = transform.position;
            gObject.transform.rotation = transform.rotation;

            switch (textureType)
            {
            case TextureType.Sprite:
                if (gameObject.GetComponent <SpriteRenderer> () != null && gObject.GetComponent <SpriteMesh2D> () == null)
                {
                    gObject.AddComponent <SpriteMesh2D> ();
                }

                break;

            case TextureType.Mesh:
            case TextureType.None:
            default:
                break;
            }

            switch (colliderType)              // if Collider <> Polygon Collider Destroy
            {
            case Polygon.ColliderType.Box:
                Destroy(gObject.GetComponent <BoxCollider2D> ());
                break;

            case Polygon.ColliderType.Circle:
                Destroy(gObject.GetComponent <CircleCollider2D>());
                break;

            case Polygon.ColliderType.Capsule:
                Destroy(gObject.GetComponent <CapsuleCollider2D>());
                break;

            default:
                break;
            }

            PolygonGenerator2D.GenerateCollider(gObject, id.ToLocalSpace(gObject.transform));

            name_id += 1;
        }

        Destroy(gameObject);

        if ((resultGameObjects.Count > 0) && (sliceResultEvent != null))
        {
            sliceResultEvent(resultGameObjects);
        }

        return(resultGameObjects);
    }