Пример #1
0
        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);
        }
Пример #2
0
    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);
    }
Пример #3
0
        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);
        }
Пример #4
0
    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);
    }