Example #1
0
 void AnchorEvent(Destruction2DEvent destruction)
 {
     foreach (GameObject g in destruction.gameObjects)
     {
         g.AddComponent <Gravity2D>();
         Destroy(g.GetComponent <EventAttachGravity>());
     }
 }
Example #2
0
 void AnchorEvent(Destruction2DEvent destruction)
 {
     switch (anchorType)
     {
     case AnchorType.AttachRigidbody:
         foreach (GameObject g in destruction.gameObjects)
         {
             if (g.GetComponent <Rigidbody2D>() == null)
             {
                 g.AddComponent <Rigidbody2D>();
             }
         }
         break;
     }
 }
Example #3
0
    public void UpdateCollider()
    {
        PolygonCollider2D polygonCollider2D = GetComponent <PolygonCollider2D>();

        if (polygonCollider2D != null)
        {
            Destroy(polygonCollider2D);
            PolygonCollider2D collider = gameObject.AddComponent <PolygonCollider2D>();
            float             scale    = (float)originalSprite.texture.width / (originalSprite.pixelsPerUnit * 2); // Y?

            // Check If There Is No Proper Collide Generated ()
            if (collider.pathCount == 1)
            {
                Vector2[] standardPentagon = collider.GetPath(0);

                Vector2 v0 = standardPentagon[0] / scale;
                Vector2 v1 = new Vector2(0, 1);
                Vector2 v2 = standardPentagon[1] / scale;
                Vector2 v3 = new Vector2(-0.9510565f, 0.309017f);

                if (v0 == v1 && v2 == v3)
                {
                    Destroy(gameObject);
                }
            }

            if (textureType == TextureType.Sprite)
            {
                if (split.enabled == true && (split.splitLimit == false || split.splitCount <= split.maxSplits))
                {
                    List <Polygon2D> polys = Polygon2DList.CreateFromPolygonColliderToLocalSpace(collider);

                    List <GameObject> disattachedObjects = new List <GameObject>();

                    if (polys.Count > 1)
                    {
                        int id = 1;

                        Rigidbody2D originalRigidBody = GetComponent <Rigidbody2D>();

                        foreach (Polygon2D poly in polys)
                        {
                            GameObject gObject = new GameObject();
                            gObject.name             = gameObject.name + " (" + id + ")";
                            gObject.transform.parent = transform.parent;

                            Polygon2D polygon = poly;
                            polygon.CreatePolygonCollider(gObject);

                            gObject.transform.position   = transform.position;
                            gObject.transform.rotation   = transform.rotation;
                            gObject.transform.localScale = transform.localScale;

                            Destruction2D.CopyComponents(this, gObject);

                            gObject.GetComponent <SpriteRenderer>().sprite = spriteRenderer.sprite;

                            Destruction2D destructible = gObject.AddComponent <Destruction2D>();
                            destructible.replaceSprite          = true;
                            destructible.originalSprite         = originalSprite;
                            destructible.originalSpriteMaterial = originalSpriteMaterial;

                            destructible.customPolygon = poly;

                            destructible.modifiers    = new List <DestructionModifier>(modifiers);
                            destructible.EraseBrushes = new List <EraseMesh>(EraseBrushes);

                            destructible.split.enabled    = true;
                            destructible.split.splitLimit = split.splitLimit;
                            destructible.split.maxSplits  = split.maxSplits;
                            destructible.split.splitCount = split.splitCount + 1;

                            destructible.centerOfMass = centerOfMass;

                            if (anchorColliders.Count > 0)
                            {
                                if (destructible.Detach(collider) == true)
                                {
                                    disattachedObjects.Add(gameObject);
                                }
                            }

                            foreach (Polygon2D p in polys)
                            {
                                if (p != poly)
                                {
                                    destructible.erasePolygons.Add(p);
                                }
                            }

                            // CopyRigidbody
                            if (originalRigidBody)
                            {
                                Rigidbody2D newRigidBody = gObject.GetComponent <Rigidbody2D> ();

                                newRigidBody.isKinematic            = originalRigidBody.isKinematic;
                                newRigidBody.velocity               = originalRigidBody.velocity;
                                newRigidBody.drag                   = originalRigidBody.drag;
                                newRigidBody.angularVelocity        = originalRigidBody.angularVelocity;
                                newRigidBody.angularDrag            = originalRigidBody.angularDrag;
                                newRigidBody.constraints            = originalRigidBody.constraints;
                                newRigidBody.gravityScale           = originalRigidBody.gravityScale;
                                newRigidBody.collisionDetectionMode = originalRigidBody.collisionDetectionMode;
                                //newRigidBody.sleepMode = originalRigidBody.sleepMode;
                                //newRigidBody.inertia = originalRigidBody.inertia;

                                // Center of Mass : Auto / Center
                                if (centerOfMass == CenterOfMass.RigidbodyOnly)
                                {
                                    newRigidBody.centerOfMass = Vector2.zero;
                                }
                            }

                            id++;
                        }
                        Destroy(gameObject);
                    }
                    else
                    {
                        if (anchorColliders.Count > 0)
                        {
                            if (Detach(collider) == true)
                            {
                                disattachedObjects.Add(gameObject);
                            }
                        }
                    }

                    if (disattachedObjects.Count > 0)
                    {
                        if ((destructionAnchorEvent != null))
                        {
                            Destruction2DEvent destruction = new Destruction2DEvent();
                            destruction.gameObjects = disattachedObjects;

                            destructionAnchorEvent(destruction);
                        }
                    }
                }
            }
        }
    }