public void SetComponentsCopy(Slicer2D script)
    {
        Slicer2DSettingsProfile profile = Slicer2DSettings.GetProfile();

        if (profile == null || profile.componentsCopy == Slicer2DSettings.InstantiationMethod.Default)
        {
            script.instantiateMethod = (Slicer2D.InstantiationMethod)EditorGUILayout.EnumPopup("Instantiation Method", script.instantiateMethod);
        }
        else
        {
            EditorGUI.BeginDisabledGroup(true);
            EditorGUILayout.EnumPopup("Instantiation", Slicer2DSettings.GetComponentsCopy(script.instantiateMethod));
            EditorGUI.EndDisabledGroup();
        }
    }
Example #2
0
    public List <GameObject> PerformResult(List <Polygon2D> result, Slice2D slice)
    {
        List <GameObject> resultGameObjects = new List <GameObject> ();

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

        slice.SetPolygons(result);

        slice.originGameObject = gameObject;

        if (eventHandler.SliceEvent(slice) == false)
        {
            return(resultGameObjects);
        }

        if (Slicer2DEventHandling.GlobalSliceEvent(slice) == false)
        {
            return(resultGameObjects);
        }

        double originArea = 1f;

        if (recalculateMass)
        {
            originArea = shape.GetLocal().GetArea();
        }

        Rigidbody2D originalRigidBody = gameObject.GetComponent <Rigidbody2D>();


        Collider2D        collider2D = gameObject.GetComponent <Collider2D>();
        PhysicsMaterial2D material   = collider2D.sharedMaterial;
        bool isTrigger = collider2D.isTrigger;

        int name_id = 1;

        foreach (Polygon2D id in result)
        {
            GameObject gObject = null;

            switch (Slicer2DSettings.GetComponentsCopy(instantiateMethod))
            {
            case InstantiationMethod.Performance:
                Slicer2DProfiler.IncSlicesCreatedWithPerformance();

                switch (textureType)
                {
                case TextureType.Sprite:
                    if (spriteRendererComponent)
                    {
                        DestroyImmediate(spriteRendererComponent);
                        spriteRendererComponent = null;
                    }
                    break;
                }

                BoxCollider2D c1 = gameObject.GetComponent <BoxCollider2D>();
                if (c1 != null)
                {
                    DestroyImmediate(c1);
                }

                CircleCollider2D c2 = gameObject.GetComponent <CircleCollider2D>();
                if (c2 != null)
                {
                    DestroyImmediate(c2);
                }

                CapsuleCollider2D c3 = gameObject.GetComponent <CapsuleCollider2D>();
                if (c3 != null)
                {
                    DestroyImmediate(c3);
                }

                gObject = Instantiate(gameObject);



                break;

            case InstantiationMethod.Quality:
                Slicer2DProfiler.IncSlicesCreatedWithQuality();

                gObject = new GameObject();
                Slicer2DComponents.Copy(this, gObject);

                break;
            }

            resultGameObjects.Add(gObject);

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

            slicer.eventHandler = new Slicer2DEventHandling();

            slicer.shape = new Slicer2DShape();
            slicer.shape.SetSlicer2D(slicer);
            slicer.shape.ForceUpdate();

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

            gObject.layer = gameObject.layer;
            gObject.tag   = gameObject.tag;

            Slicer2DComponents.CopyRigidbody2D(originalRigidBody, slicer, id, originArea);

            if (centerOfMass == CenterOfMass.TransformOnly)
            {
                Polygon2D localPoly    = id.ToLocalSpace(gObject.transform);
                Rect      bounds       = localPoly.GetBounds();
                Vector2   centerOffset = new Vector2(bounds.center.x * transform.lossyScale.x, bounds.center.y * transform.lossyScale.y);
                gObject.transform.Translate(centerOffset, 0);
            }

            Collider2D collider = null;
            switch (colliderType)
            {
            case ColliderType.PolygonCollider2D:
                collider = (Collider2D)id.ToLocalSpace(gObject.transform).CreatePolygonCollider(gObject);
                break;

            case ColliderType.EdgeCollider2D:
                collider = (Collider2D)id.ToLocalSpace(gObject.transform).CreateEdgeCollider(gObject);
                break;
            }

            collider.sharedMaterial = material;
            collider.isTrigger      = isTrigger;

            switch (textureType)
            {
            case TextureType.Sprite:
                slicer.spriteRenderer = spriteRenderer;
                Polygon2D.SpriteToMesh(gObject, spriteRenderer, materialSettings.GetTriangulation());
                break;

            case TextureType.SpriteAnimation:
                slicer.textureType = TextureType.Sprite;
                Polygon2D.SpriteToMesh(gObject, spriteRenderer, materialSettings.GetTriangulation());
                break;

            default:
                break;
            }

            name_id += 1;
        }

        if (afterSliceRemoveOrigin)
        {
            Destroy(gameObject);
        }

        if (resultGameObjects.Count > 0)
        {
            slice.originGameObject = gameObject;

            slice.SetGameObjects(resultGameObjects);

            if (supportJoints == true)
            {
                SliceJointEvent(slice);
            }

            eventHandler.Result(slice);
        }

        return(resultGameObjects);
    }