void OnChomp(ChompMessageData chompData) { if (!enabled) { return; } var mutableCollider = GetComponent <MutableSpriteCollider> (); if (mutableCollider.enabled) { mutableCollider.CutCircle(chompData.Center, chompData.Radius, chompData.Colliders); } }
private void Chomp() { var origin = Origin; var colliders = Physics2D.OverlapCircleAll(origin, Radius, LayerMask); if (colliders.Length > 0) { /* Send message once per game object even when circle overlapped * several colliders attached to the same object. */ var collidersByGameObjects = new Dictionary <GameObject, List <Collider2D> > (); foreach (var overlappedCollider in colliders) { // Ignore self-overlapping. if (collider2D != null && ( overlappedCollider == collider2D || overlappedCollider.attachedRigidbody == collider2D.attachedRigidbody ) ) { continue; } List <Collider2D> colliderList; if (!collidersByGameObjects.TryGetValue(overlappedCollider.gameObject, out colliderList)) { colliderList = new List <Collider2D> (); collidersByGameObjects [overlappedCollider.gameObject] = colliderList; } colliderList.Add(overlappedCollider); } foreach (var gameObjectColliders in collidersByGameObjects) { var go = gameObjectColliders.Key; var colliderList = gameObjectColliders.Value; var data = new ChompMessageData(transform.position, Radius, colliderList, this); go.SendMessage(ChompMessageData.MessageName, data, SendMessageOptions.DontRequireReceiver); } } }