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(); }
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; }
/// <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); }