Beispiel #1
0
        private void Collision(Collision2D collision)
        {
            if (cooldown <= 0.0f)
            {
                if (D2dHelper.IndexInMask(collision.gameObject.layer, mask) == true)
                {
                    var contacts = collision.contacts;

                    for (var i = contacts.Length - 1; i >= 0; i--)
                    {
                        var contact = contacts[i];
                        var normal  = collision.relativeVelocity;
                        var force   = normal.magnitude;

                        if (force >= threshold)
                        {
                            if (useSurfaceNormal == true)
                            {
                                normal = contact.normal;
                            }
                            else
                            {
                                normal /= force;
                            }

                            var point  = contact.point;
                            var pointA = point - normal * offset;
                            var pointB = point + normal * depth;
                            var matrix = D2dSlice.CalculateMatrix(pointA, pointB, thickness);

                            cooldown = delay;

                            cachedDestructible.Paint(paint, matrix, shape, color);

                            if (prefab != null)
                            {
                                Instantiate(prefab, point, Quaternion.identity);
                            }

                            if (onImpact != null)
                            {
                                onImpact.Invoke();
                            }

                            if (delay > 0.0f)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }