예제 #1
0
        public void OnGUI()
        {
            SimGUIUtil.contextHelpText = HelpText;

            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);
            mPolyRefs.OnGUI();
            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            const int LabelCount = 3;
            int       slot       = labels.SlotCount - 1 - LabelCount;

            if (mHitParam > 1)
            {
                labels.Set(slot++, "Hit parameter", "Ray hit goal.");
            }
            else
            {
                labels.Set(slot++, "Hit parameter", string.Format("{0:F2}", mHitParam));
            }

            labels.Set(slot++, "Hit normal", Vector3Util.ToString(mHitNorm));
            labels.Set(slot++, "Path length", mResultCount.ToString());

            labels.Last = mMessages;
        }
예제 #2
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 2;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            if (mHasPosition)
            {
                labels.Set(slotIndex++, "Position", Vector3Util.ToString(mPosition.point));
            }
            else
            {
                labels.Set(slotIndex++, "Position", "None");
            }

            if (mHasNearestPoint)
            {
                labels.Set(slotIndex++, "Nearest Point", Vector3Util.ToString(mNearest.point));
            }
            else
            {
                labels.Set(slotIndex++, "Nearest Point", "None");
            }
        }
예제 #3
0
        public void OnGUI()
        {
            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);
            mPolyRefs.OnGUI();
            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();

            const int LabelCount = 2;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            if (mHasPosition)
            {
                labels.Set(slotIndex++, "Polygons found", mResultCount.ToString());
            }
            else
            {
                labels.Set(slotIndex++, "Polygons found", "0");
            }

            labels.Set(slotIndex++, "Search Radius", string.Format("{0:F2}", mSearchRadius));

            labels.Last = mMessage;
        }
예제 #4
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 3;
            int       iSlot      = labels.SlotCount - 1 - LabelCount;

            const string PointLabel = "Point on mesh";

            if (mHasSearchPoint)
            {
                labels.Set(iSlot++, "PolyRef", mNavmeshPoint.polyRef.ToString());

                if (mFoundPoly)
                {
                    labels.Set(iSlot++, PointLabel, Vector3Util.ToString(mNavmeshPoint.point));
                }
                else
                {
                    labels.Set(iSlot++, PointLabel, "Unknown");
                }
            }
            else
            {
                iSlot += 2;
            }

            labels.Set(iSlot++, "Extents", Vector3Util.ToString(mHelper.extents));
        }
예제 #5
0
        public void OnGUI()
        {
            if (mResultCount > 0)
            {
                Camera cam = Camera.main;

                for (int i = 0; i < mResultCount; i++)
                {
                    if (mParentRefs[i] == 0)
                    {
                        continue;
                    }

                    Vector3 center = GetBufferedCentroid(mPolyRefs.buffer[i]);

                    center   = cam.WorldToScreenPoint(center);
                    center.y = cam.pixelHeight - center.y + 4;

                    GUI.Label(new Rect(center.x, center.y, 100, SimGUIUtil.LineHeight)
                              , string.Format("{0:F2}", mCosts[i]));
                }
            }

            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);
            mPolyRefs.OnGUI();
            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();

            const int LabelCount = 2;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            if (mHasPosition)
            {
                labels.Set(slotIndex++, "Polygons found", mResultCount.ToString());
            }
            else
            {
                labels.Set(slotIndex++, "Polygons found", "0");
            }

            labels.Set(slotIndex++, "Search Radius", string.Format("{0:F2}", mSearchRadius));

            labels.Last = mMessage;
        }
예제 #6
0
        public bool ContainsCoordinates(Point click)
        {
            if (LabelRegion == Rectangle.Empty)
            {
                CalculateLabelSize();
            }

            if (LabelRegion.Contains(click))
            {
                return(true);
            }
            else if (IsInPolygon(Border, click))
            {
                return(true);
            }
            return(false);
        }
예제 #7
0
        public void OnGUI()
        {
            SimGUIUtil.contextHelpText = HelpText;

            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);
            mPolyRefs.OnGUI();
            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            const int LabelCount = 1;
            int       slot       = labels.SlotCount - 1 - LabelCount;

            labels.Set(slot++, "Visited Polys", mVisitedCount.ToString());

            labels.Last = mMessages;
        }
예제 #8
0
        public void OnGUI()
        {
            SimGUIUtil.contextHelpText = HelpText;

            mMessages = "";

            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);
            HandleControls();
            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            mSlotIndex = labels.SlotCount - 1 - LabelCount;

            HandleLabels();

            labels.Last = mMessages;
        }
예제 #9
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 1;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            labels.Set(slotIndex++, "Wall segments", mSegmentCount.ToString());

            if (mSegmentCount > 0)
            {
                Rect rect = new Rect(Input.mousePosition.x - 5
                                     , Screen.height - Input.mousePosition.y - 25
                                     , 100, SimGUIUtil.LineHeight + 5);

                GUI.Label(rect, mSegmentCount.ToString());
            }
        }
예제 #10
0
        public void OnGUI()
        {
            GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);

            mPolyRefs.OnGUI();

            GUILayout.EndArea();

            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 3;
            int       iSlot      = labels.SlotCount - 1 - LabelCount;

            string msg = mResultCount + " (";

            for (int i = 0; i < mResultCount; i++)
            {
                msg += mPolyRefs.buffer[i].ToString() + ((i == mResultCount - 1) ? "" : ",");
            }


            msg += ")";

            labels.Set(iSlot++, "Polys Found", msg);

            if (mHasPosition)
            {
                labels.Set(iSlot++, "Geometry Point", Vector3Util.ToString(mPosition));
            }
            else
            {
                labels.Set(iSlot++, "Geometry Point", "None");
            }

            labels.Set(iSlot++, "Search Extents", Vector3Util.ToString(mHelper.extents));
        }
예제 #11
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 3;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            int portal = 0;
            int wall   = 0;

            for (int i = 0; i < mSegmentCount; i++)
            {
                if (mSegmentRefs[i] == 0)
                {
                    wall++;
                }
                else
                {
                    portal++;
                }
            }

            labels.Set(slotIndex++, "Wall segments", wall.ToString());
            labels.Set(slotIndex++, "Protal segments", portal.ToString());
            labels.Set(slotIndex++, "Total segments", mSegmentCount.ToString());

            if (mSegmentCount > 0)
            {
                Rect rect = new Rect(Input.mousePosition.x - 5
                                     , Screen.height - Input.mousePosition.y - 25
                                     , 100, SimGUIUtil.LineHeight + 5);

                GUI.Label(rect, mSegmentCount.ToString());
            }
        }
예제 #12
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 2;
            int       slotIndex  = labels.SlotCount - 1 - LabelCount;

            if (mHasPosition)
            {
                labels.Set(slotIndex++, "Geometry Position", Vector3Util.ToString(mPosition.point));
            }
            else
            {
                labels.Set(slotIndex++, "Geometry Position", "None");
            }

            if (mHasHeight)
            {
                labels.Set(slotIndex++, "Poly Height", string.Format("{0:F2}", mHeight));
            }
            else
            {
                labels.Set(slotIndex++, "Poly Height", "None");
            }

            if (mHasHeight)
            {
                Rect rect = new Rect(Input.mousePosition.x - 5
                                     , Screen.height - Input.mousePosition.y - 25
                                     , 100, SimGUIUtil.LineHeight);

                GUI.Label(rect, string.Format("{0:F2}", mHeight));
            }
        }
예제 #13
0
        public void OnGUI()
        {
            LabelRegion labels = SimGUIUtil.labels;

            labels.Clear();
            labels.Last = mMessage;

            const int LabelCount = 4;
            int       slot       = labels.SlotCount - 1 - LabelCount;

            if (mHasPosition)
            {
                Rect rect = new Rect(Input.mousePosition.x - 5
                                     , Screen.height - Input.mousePosition.y - 25
                                     , 100, SimGUIUtil.LineHeight + 5);

                GUI.Label(rect, string.Format("{0:F3}", mWallDistance));

                labels.Set(slot++, "Wall Distance", string.Format("{0:F3}", mWallDistance));
                labels.Set(slot++, "Wall Point", Vector3Util.ToString(mWallHitPoint));
                labels.Set(slot++, "Wall Normal", Vector3Util.ToString(mWallNormal));
                labels.Set(slot++, "Search Radius", string.Format("{0:F2}", mSearchRadius));
            }
        }
예제 #14
0
    void OnGUI()
    {
        if (SimGUIUtil.hideGUI || mGroup.mesh == null)
        {
            return;
        }

        LabelRegion labels = SimGUIUtil.labels;

        labels.Clear();

        if (mPathCount == 0)
        {
            labels.Last = "No path.";
            SimGUIUtil.OnGUI();
            return;
        }

        GUILayout.BeginArea(SimGUIUtil.contextControlZone, GUI.skin.box);

        if (GUILayout.Button("Optimize Topology"))
        {
            mCorridor.OptimizePathTopology(true);
        }

        GUI.enabled = (mPathEnd.polyRef != 0);
        if (GUILayout.Button("Replan Path"))
        {
            FindPath();
        }

        GUI.enabled = true;

        mPath.OnGUI();
        if (mPath.HandleResize())
        {
            HandlePathBufferResize();
        }

        mCornerPolys.OnGUI();
        if (mCornerPolys.HandleResize())
        {
            mCorridor.ResizeCornerBuffer(mCornerPolys.MaxElementCount);
        }

        GUILayout.Label("Optimiation Range");

        GUILayout.BeginHorizontal();

        optimizationRange = (int)GUILayout.HorizontalSlider(optimizationRange, 1, 30);

        GUILayout.Label(optimizationRange.ToString());

        GUILayout.EndHorizontal();

        GUILayout.EndArea();

        const int LabelCount = 2;
        int       slotIndex  = labels.SlotCount - LabelCount;

        string msg = mCorridor.Corners.cornerCount + " of " + (mCorridor.Corners.MaxCorners - 1);

        labels.Set(slotIndex++, "Detected Corners", msg);

        msg = mPathCount + " of " + mCorridor.MaxPathSize;
        labels.Set(slotIndex++, "Corridor Polygons", msg);

        SimGUIUtil.OnGUI();
    }