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);
        }
    }
예제 #2
0
    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();
                        }
                    }
                }
            }
        }
    }
예제 #3
0
    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);
                        }
                    }
                }
            }
        }
    }
예제 #4
0
 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);
     }
 }
예제 #5
0
    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");
    }