void AnchorEvent(Destruction2DEvent destruction) { foreach (GameObject g in destruction.gameObjects) { g.AddComponent <Gravity2D>(); Destroy(g.GetComponent <EventAttachGravity>()); } }
void AnchorEvent(Destruction2DEvent destruction) { switch (anchorType) { case AnchorType.AttachRigidbody: foreach (GameObject g in destruction.gameObjects) { if (g.GetComponent <Rigidbody2D>() == null) { g.AddComponent <Rigidbody2D>(); } } break; } }
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); } } } } } }