Пример #1
0
        public void Update()
        {
            float offset = QEUtil.GetXZFactor();

            mHelper.extents[0] += offset;
            mHelper.extents[1] += QEUtil.GetYFactor();
            mHelper.extents[2] += offset;

            mHasSearchPoint = false;
            mFoundPoly      = false;

            QEUtil.SearchResult result = QEUtil.HandleStandardPolySearch(
                mHelper, out mSearchPoint, out mNavmeshPoint, out mMessage);

            mFoundPoly      = (result & QEUtil.SearchResult.HitNavmesh) != 0;
            mHasSearchPoint = mFoundPoly || ((result & QEUtil.SearchResult.HitGeometry) != 0);
        }
Пример #2
0
        public void Update()
        {
            // Must set message before returning.

            mHasPosition = false;
            mResultCount = 0;

            Vector3 trash;

            QEUtil.SearchResult result =
                QEUtil.HandleStandardPolySearch(mHelper, out trash, out mPosition, out mMessage);

            mHasPosition = (result & QEUtil.SearchResult.HitNavmesh) != 0;

            if (!mHasPosition)
            {
                return;
            }

            mYOffset          += QEUtil.GetYFactor();
            mPosition.point.y += mYOffset;

            mSearchRadius += QEUtil.GetXZFactor();
            mSearchRadius  = Mathf.Max(0.01f, mSearchRadius);

            if (mPolyRefs.HandleResize())
            {
                int size = mPolyRefs.MaxElementCount;
                mParentRefs = new uint[size];
                mCosts      = new float[size];
                mCentroids  = new Vector3[size];
            }

            NavStatus status = mHelper.query.FindPolys(mPosition, mSearchRadius
                                                       , mHelper.filter
                                                       , mPolyRefs.buffer, mParentRefs, mCosts, out mResultCount);

            mMessage = "FindPolys: " + status.ToString();

            if (mResultCount > 0)
            {
                NavDebug.GetCentroids(mHelper.mesh, mPolyRefs.buffer, mResultCount, mCentroids);
            }
        }
Пример #3
0
        public void Update()
        {
            float offset = QEUtil.GetXZFactor();

            mHelper.extents[0] += offset;
            mHelper.extents[1] += QEUtil.GetYFactor();
            mHelper.extents[2] += offset;

            mPolyRefs.HandleResize();

            mResultCount = 0;

            mHasPosition = QEUtil.hasHit;
            if (!mHasPosition)
            {
                mMessage = "Outside source geometry.";
                return;
            }

            mHasPosition = true;
            mPosition    = QEUtil.hitPosition;

            for (int i = 0; i < mPolyRefs.buffer.Length; i++)
            {
                mPolyRefs.buffer[i] = 0;
            }

            NavStatus status = mHelper.query.GetPolys(mPosition
                                                      , mHelper.extents, mHelper.filter
                                                      , mPolyRefs.buffer, out mResultCount);

            for (int i = 0; i < mResultCount; i++)
            {
                if (mPolyRefs.buffer[i] == 0)
                {
                    Debug.Log("Invalid poly");
                }
            }

            mMessage = "GetPolys: " + status.ToString();
        }
Пример #4
0
        public void Update()
        {
            mHasPosition  = false;
            mHasWallHit   = false;
            mWallDistance = 0;

            mSearchRadius += QEUtil.GetXZFactor();

            Vector3 trash;

            QEUtil.SearchResult result =
                QEUtil.HandleStandardPolySearch(mHelper, out trash, out mPosition, out mMessage);

            mHasPosition = (result & QEUtil.SearchResult.HitNavmesh) != 0;

            if (!mHasPosition)
            {
                return;
            }

            NavStatus status = mHelper.query.FindDistanceToWall(mPosition, mSearchRadius
                                                                , mHelper.filter
                                                                , out mWallDistance, out mWallHitPoint, out mWallNormal);

            mMessage = "FindDistanceToWall: " + status.ToString() + ".";

            if ((status & NavStatus.Sucess) == 0)
            {
                return;
            }

            if (mWallDistance == mSearchRadius)
            {
                mMessage += " Nearest wall is outside search radius.";
            }
            else
            {
                mHasWallHit = true;
            }
        }