public virtual void OnInspectorGUI()
        {
            var addDoorsNew    = GUILayout.Toggle(currentMode == Mode.AddDoors, "Add door positions", GUI.skin.button);
            var deleteDoorsNew = GUILayout.Toggle(currentMode == Mode.DeleteDoors, "Delete door positions", GUI.skin.button);

            if (addDoorsNew && currentMode != Mode.AddDoors)
            {
                currentMode = Mode.AddDoors;
            }
            else if (deleteDoorsNew && currentMode != Mode.DeleteDoors)
            {
                currentMode = Mode.DeleteDoors;
            }
            else if (!addDoorsNew && !deleteDoorsNew)
            {
                currentMode = Mode.Idle;
            }

            if (GUILayout.Button("Delete all door positions"))
            {
                DeleteAllDoors();
            }

            try
            {
                if (doors.SelectedMode == DoorsGrid2D.DoorMode.Manual)
                {
                    var polygon       = RoomTemplateLoaderGrid2D.GetPolygonFromRoomTemplate(doors.gameObject);
                    var doorPositions = doors.GetDoorMode().GetDoors(polygon);

                    if (doorPositions.Count != doors.ManualDoorModeData.DoorsList.Count)
                    {
                        EditorGUILayout.HelpBox(
                            "There seems to be a door of length 1 that is at the corner of the outline, which is currently not supported. Either use outline override to change the outline or remove the door position.",
                            MessageType.Error);
                    }
                }
            }
            catch (DoorModeException)
            {
            }

            ShowAdditionalFields();
        }
Esempio n. 2
0
        private IEnumerator RunCoroutine()
        {
            Show = true;
            var polygon        = RoomTemplateLoaderGrid2D.GetPolygonFromRoomTemplate(gameObject);
            var doorsComponent = gameObject.GetComponent <DoorsGrid2D>();
            var doorMode       = doorsComponent.GetDoorMode();
            var doors          = doorMode.GetDoors(polygon);

            foreach (var doorLineGrid2D in doors)
            {
                foreach (var start in doorLineGrid2D.Line.GetPoints())
                {
                    var end = start + doorLineGrid2D.Length * doorLineGrid2D.Line.GetDirectionVector();

                    DoorLine = new DoorLineGrid2D()
                    {
                        From   = start.ToUnityIntVector3(),
                        To     = end.ToUnityIntVector3(),
                        Length = doorLineGrid2D.Length + 1,
                    };

                    Debug.Log(1);

                    var timer = new Stopwatch();
                    timer.Start();

                    SceneView.RepaintAll();

                    while (timer.ElapsedMilliseconds < 500)
                    {
                        yield return(null);
                    }

                    DoorLine = null;
                }
            }

            Show = false;
            SceneView.RepaintAll();
            yield break;
        }
Esempio n. 3
0
 /// <summary>
 /// Tries to compute a room template from a given game object and returns the result.
 /// </summary>
 /// <param name="roomTemplate"></param>
 /// <returns></returns>
 public static ActionResult CheckAll(GameObject roomTemplate)
 {
     RoomTemplateLoaderGrid2D.TryGetRoomTemplate(roomTemplate, out var _, out var result);
     return(result);
 }