public WorldBoundStatus ObjectClampToWorldBound(Transform t) { WorldBoundStatus status = WorldBoundStatus.Inside; Vector3 p = t.position; if (p.x > WorldMax.x) { status = WorldBoundStatus.CollideRight; p.x = WorldMax.x; } else if (t.position.x < WorldMin.x) { status = WorldBoundStatus.CollideLeft; p.x = WorldMin.x; } if (p.y > WorldMax.y) { status = WorldBoundStatus.CollideTop; p.y = WorldMax.y; } else if (p.y < WorldMin.y) { status = WorldBoundStatus.CollideBottom; p.y = WorldMin.y; } if ((p.z < mWorldBound.min.z) || (p.z > mWorldBound.max.z)) { status = WorldBoundStatus.Outside; } t.position = p; return(status); }
public WorldBoundStatus CollideWorldBound(Bounds objBound, float region = 1f) { WorldBoundStatus status = WorldBoundStatus.Outside; Bounds b = new Bounds(transform.position, region * mWorldBound.size); if (BoundsIntersectInXY(b, objBound)) { if (objBound.max.x > b.max.x) { status |= WorldBoundStatus.CollideRight; } if (objBound.min.x < b.min.x) { status |= WorldBoundStatus.CollideLeft; } if (objBound.max.y > b.max.y) { status |= WorldBoundStatus.CollideTop; } if (objBound.min.y < b.min.y) { status |= WorldBoundStatus.CollideBottom; } // not testing Z anymore!! if ((objBound.min.z < mWorldBound.min.z) || (objBound.max.z > mWorldBound.max.z)) if (status == WorldBoundStatus.Outside) // intersects and no bounds touch ==> Inside! { status = WorldBoundStatus.Inside; } } return(status); }
public WorldBoundStatus ObjectCollideWorldBound(Bounds objBound) { WorldBoundStatus status = WorldBoundStatus.Inside; if (mWorldBound.Intersects(objBound)) { if (objBound.max.x > mWorldBound.max.x) { status = WorldBoundStatus.CollideRight; } else if (objBound.min.x < mWorldBound.min.x) { status = WorldBoundStatus.CollideLeft; } else if (objBound.max.y > mWorldBound.max.y) { status = WorldBoundStatus.CollideTop; } else if (objBound.min.y < mWorldBound.min.y) { status = WorldBoundStatus.CollideBottom; } else if ((objBound.min.z < mWorldBound.min.z) || (objBound.max.z > mWorldBound.max.z)) { status = WorldBoundStatus.Outside; } } else { status = WorldBoundStatus.Outside; } return(status); }
public WorldBoundStatus ClampToWorldBound(Transform t, float region = 1f) { Vector3 p = t.position; WorldBoundStatus status = WorldBoundStatus.Outside; Bounds b = new Bounds(transform.position, region * mWorldBound.size); if (p.x > b.max.x) { status |= WorldBoundStatus.CollideRight; p.x = b.max.x; } if (p.x < b.min.x) { status |= WorldBoundStatus.CollideLeft; p.x = b.min.x; } if (p.y > b.max.y) { status |= WorldBoundStatus.CollideTop; p.y = b.max.y; } if (p.y < b.min.y) { status |= WorldBoundStatus.CollideBottom; p.y = b.min.y; } t.position = p; return(status); }