private void HandleSimpleMode() { var doors = target as Doors; var gameObject = doors.transform.gameObject; var grid = gameObject.GetComponentInChildren <Grid>(); try { var polygon = RoomTemplatesLoader.GetPolygonFromRoomTemplate(doors.gameObject); if (polygon == null) { return; } foreach (var line in polygon.GetLines()) { if (line.Length - 2 * doors.DistanceFromCorners < doors.DoorLength - 1) { continue; } var doorLine = line.Shrink(doors.DistanceFromCorners); var from = doorLine.From; var to = doorLine.To; GridUtils.DrawRectangleOutline(grid, from.ToUnityIntVector3(), to.ToUnityIntVector3(), Color.red, new Vector2(0.1f, 0.1f)); } } catch (ArgumentException) { } }
private void DrawOverlap() { var doors = target as Doors; var go = doors.transform.gameObject; try { var polygon = RoomTemplatesLoader.GetPolygonFromRoomTemplate(doors.gameObject); if (polygon == null) { return; } foreach (var line in polygon.GetLines()) { if (line.Length - 2 * doors.DistanceFromCorners < doors.DoorLength - 1) { continue; } var doorLine = line.Shrink(doors.DistanceFromCorners); var from = doorLine.From; var to = doorLine.To; DrawOutline(new Vector3(Math.Min(from.X, to.X), Math.Min(from.Y, to.Y)), new Vector3(Math.Max(from.X, to.X), Math.Max(from.Y, to.Y)), Color.red); } } catch (ArgumentException) { } }
private void HandleManualModeInspector() { var doors = target as Doors; 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")) { Undo.RecordObject(target, "Delete all door positions"); doors.DoorsList.Clear(); EditorUtility.SetDirty(target); } // DrawDoorsList(); try { var polygon = RoomTemplatesLoader.GetPolygonFromRoomTemplate(doors.gameObject); var doorPositions = doors.GetDoorMode().GetDoors(polygon); if (doorPositions.Count != doors.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 (ArgumentException) { } EditorGUILayout.HelpBox("The visualization of manual doors works differently than that of simple doors. If you want to add, for example, 5 doors of length 1, you have to manually add all 5 doors - not a single door with length 5.", MessageType.Warning); }
public override void OnInspectorGUI() { serializedObject.Update(); var doors = target as Doors; var selectedModeProp = serializedObject.FindProperty(nameof(Doors.SelectedMode)); selectedModeProp.intValue = GUILayout.SelectionGrid(doors.SelectedMode, new[] { "Simple mode", "Specific positions" }, 2); EditorGUILayout.Space(); if (selectedModeProp.intValue == 0) { EditorGUILayout.IntSlider(doorsLength, 1, 10, "Door length"); EditorGUILayout.IntSlider(distanceFromCorners, 0, 10, "Corner distance"); } if (selectedModeProp.intValue == 1) { addSpecificDoorPositions = GUILayout.Toggle(addSpecificDoorPositions, "Add door positions", GUI.skin.button); if (GUILayout.Button("Delete all door positions")) { doorsList.ClearArray(); } try { var polygon = RoomTemplatesLoader.GetPolygonFromRoomTemplate(doors.gameObject); var doorPositions = DoorHandler.DefaultHandler.GetDoorPositions(polygon, doors.GetDoorMode()); if (doorPositions.Count != doors.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 (Exception) { } } serializedObject.ApplyModifiedProperties(); }