protected override void OnInspector() { EditorGUI.BeginChangeCheck(); { DrawDefault("CellSize"); DrawDefault("Tolerance"); } if (EditorGUI.EndChangeCheck() == true) { foreach (var t in Targets) { if (t != null) { var destructible = D2D_Helper.GetComponentUpwards <D2D_Destructible>(t.transform); if (destructible != null) { t.RebuildAllColliders(destructible.AlphaTex); } } } } EditorGUILayout.Separator(); hideColliders = EditorGUILayout.Toggle("Hide Colliders", hideColliders); foreach (var t in Targets) { t.SetHideFlags(hideColliders == true ? HideFlags.HideInInspector : HideFlags.None); } }
protected virtual void Update() { if (dirty == true) { dirty = false; destructible = D2D_Helper.GetComponentUpwards <D2D_Destructible>(transform); if (destructible != null) { var alpha = destructible.GetAlpha(transform.TransformPoint(Offset)); // Break fixture? if (alpha < Threshold) { DestroyFixture(); } // Break others? else if (fixtureID > 0) { for (var i = AllFixtures.Count - 1; i >= 0; i--) { var fixture = AllFixtures[i]; if (fixture != null && fixture != this && fixture.fixtureID == fixtureID) { fixture.DestroyFixture(); } } } } } }
public void Explode() { if (Samples > 0) { var origin = transform.position; var step = 360.0f / Samples; var scaledDamage = Damage / Samples; for (var i = 0; i < Samples; i++) { var angle = i * step; var direction = new Vector2(Mathf.Sin(angle), Mathf.Cos(angle)); var hit = Physics2D.Raycast(origin, direction, Radius); var collider = hit.collider; if (collider != null && collider.isTrigger == false) { var mask = 1 << collider.gameObject.layer; if ((mask & Layers.value) != 0) { var damageableSprite = D2D_Helper.GetComponentUpwards <D2D_DamageableSprite>(collider.transform); if (damageableSprite != null) { damageableSprite.InflictDamage(scaledDamage); } } } } } }
protected override void OnInspector() { if (Any(t => D2D_Helper.GetComponentUpwards <D2D_DestructibleSprite>(t.transform) == null)) { EditorGUILayout.HelpBox("A parent of this GameObject should have the D2D_DestructibleSprite component", MessageType.Error); } else { EditorGUILayout.HelpBox("This GameObject will get destroyed when the fixture point is removed.", MessageType.Info); } }
protected override void OnInspector() { if (Any(t => D2D_Helper.GetComponentUpwards <D2D_DestructibleSprite>(t.transform) == null)) { EditorGUILayout.HelpBox("A parent of this GameObject should have the D2D_DestructibleSprite component", MessageType.Error); } DrawDefault("Offset"); DrawDefault("Target"); DrawDefault("Threshold"); DrawDefault("Pinned"); }