private void CollisionStart(Collider c, Vector3 relativeVelocity) { if (relativeVelocity == Vector3.zero) { Rigidbody thisRigidbody = GetComponent <Rigidbody>(); if (c.attachedRigidbody != null && thisRigidbody != null) { // TODO: should directions be compared? maybe project vectors? relativeVelocity = c.attachedRigidbody.velocity - thisRigidbody.velocity; } } EntityComponent entity = EntityComponent.FindEntityComponent(c); if (entity != null && entity != ignoreEntity && filter.EntityMatches(entity) && relativeVelocity.magnitude >= minVelocity && direction.MatchesDirection(entity.transform.position, relativeVelocity) && !rejectedColliders.Contains(c)) { touchingColliders.Add(c); touchingEntities.Add(entity); AddActivator(entity); } else { // could contain multiple instances if touching multiple voxels rejectedColliders.Add(c); } }
private void CollisionEnd(Collider c) { if (!rejectedColliders.Remove(c)) { touchingColliders.Remove(c); if (!touchingColliders.Contains(c)) // could have multiple instances { RemoveActivator(EntityComponent.FindEntityComponent(c)); } } }