void IgnoreCollisionWithCollider(Collider other, bool partOfDimensionObject) { if (collidersIgnored.ContainsKey(other)) { collidersIgnored[other] = collidersIgnored[other] || partOfDimensionObject; return; } foreach (var thisCollider in dimensionObject.colliders) { SuperspectivePhysics.IgnoreCollision(thisCollider, other); } collidersIgnored.Add(other, partOfDimensionObject); }
void RestoreCollisionWithCollider(Collider other) { if (!collidersIgnored.ContainsKey(other)) { return; } // Sometimes the object we were ignoring collisions with gets destroyed and thus we need a null check if (other != null) { foreach (var thisCollider in dimensionObject.colliders) { SuperspectivePhysics.RestoreCollision(thisCollider, other); } } collidersIgnored.Remove(other); }
IEnumerator Start() { debug = new DebugLogger(gameObject, () => DEBUG); originalPortalableObj = original.GetComponent <PortalableObject>(); // Disallow collisions between a portal object and its copy foreach (var c1 in colliders) { foreach (var c2 in originalPortalableObj.colliders) { SuperspectivePhysics.IgnoreCollision(c1, c2); } } InteractableObject maybeInteract = original.GetComponent <InteractableObject>(); maybeOriginalGlow = original.GetComponent <InteractableGlow>(); if (maybeInteract != null) { InteractableObject interact = gameObject.AddComponent <InteractableObject>(); interact.glowColor = maybeInteract.glowColor; interact.overrideGlowColor = maybeInteract.overrideGlowColor; interact.OnLeftMouseButton += maybeInteract.OnLeftMouseButton; interact.OnLeftMouseButtonDown += maybeInteract.OnLeftMouseButtonDown; interact.OnLeftMouseButtonUp += maybeInteract.OnLeftMouseButtonUp; interact.OnMouseHover += maybeInteract.OnMouseHover; interact.OnMouseHoverEnter += maybeInteract.OnMouseHoverEnter; interact.OnMouseHoverExit += maybeInteract.OnMouseHoverExit; } TransformCopy(); yield return(null); glow = GetComponent <InteractableGlow>(); }