diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg index 7611b87..af40074 100644 --- a/Source/Plugins/BuilderModes/Resources/Actions.cfg +++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg @@ -1232,6 +1232,17 @@ togglebackslope default = 393299; //Ctrl-Alt-S } +toggleskew +{ + title = "Toggle Texture Skewing"; + category = "visual"; + description = "Toggles texture skewing for selected walls."; + allowkeys = true; + allowmouse = true; + allowscroll = true; + default = 0; +} + placevisualstart { title = "Place Visual Mode Camera"; diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index bb4f7b9..0ee1cb5 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -3829,6 +3829,53 @@ namespace CodeImp.DoomBuilder.BuilderModes ShowTargetInfo(); } + //sphere + [BeginAction("resetflags")] + public void ResetFlags() + { + List selection = GetSelectedSurfaces(); + List selection2 = GetSelectedVisualThings(true); + + if (selection.Count == 0 && selection2.Count == 0) + { + General.Interface.DisplayStatus(StatusType.Warning, "Reset flags action requires selected surfaces or things!"); + return; + } + + General.Map.UndoRedo.CreateUndo("Reset flags"); + + foreach (VisualGeometry vg in selection) + { + if (vg.GeometryType == VisualGeometryType.WALL_LOWER || + vg.GeometryType == VisualGeometryType.WALL_MIDDLE || + vg.GeometryType == VisualGeometryType.WALL_UPPER) + { + vg.Sidedef.Line.ClearFlags(); + + if (vg.Sidedef.Line.Back != null && vg.Sidedef.Line.Back.Sector != null) + vg.Sidedef.Line.SetFlag(General.Map.Config.DoubleSidedFlag, true); + else + vg.Sidedef.Line.SetFlag(General.Map.Config.ImpassableFlag, true); + + vg.Sector.UpdateSectorGeometry(true); + } + } + + foreach (VisualThing vt in selection2) + { + vt.Thing.ClearFlags(); + } + + //update changed geometry + RebuildElementData(); + UpdateChangedObjects(); + ClearSelection(); + ShowTargetInfo(); + General.Interface.DisplayStatus(StatusType.Action, "Reset flags for " + + selection.Count + (selection.Count == 1 ? " surface and " : " surfaces and ") + + selection2.Count + (selection2.Count == 1 ? " thing." : " things.")); + } + //mxd [BeginAction("toggleslope")] public void ToggleSlope() @@ -4129,6 +4176,48 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.DisplayStatus(StatusType.Action, "Toggled Slope for " + toUpdate.Count + (toUpdate.Count == 1 ? " surface." : " surfaces.")); } + [BeginAction("toggleskew")] + public void ToggleSkew() + { + int counter = 0; + List selection = GetSelectedSurfaces(); + + if (selection.Count == 0) + { + General.Interface.DisplayStatus(StatusType.Warning, "Toggle Skew action requires selected surfaces!"); + return; + } + + General.Map.UndoRedo.CreateUndo("Toggle Skew"); + + foreach (VisualGeometry vg in selection) + { + if (vg.GeometryType == VisualGeometryType.WALL_LOWER || vg.GeometryType == VisualGeometryType.WALL_UPPER) + vg.Sidedef.Line.SetFlag("32", vg.Sidedef.Line.IsFlagSet("32") ? false : true); + + else if (vg.GeometryType == VisualGeometryType.WALL_MIDDLE) + vg.Sidedef.Line.SetFlag("128", vg.Sidedef.Line.IsFlagSet("128") ? false : true); + + else if (vg.GeometryType == VisualGeometryType.WALL_MIDDLE_3D) + vg.GetControlLinedef().SetFlag("8", vg.GetControlLinedef().IsFlagSet("8") ? false : true); + + else + continue; + + counter++; + } + + if (counter > 0) + { + RebuildElementData(); + UpdateChangedObjects(); + ClearSelection(); + ShowTargetInfo(); + } + + General.Interface.DisplayStatus(StatusType.Action, "Toggled Skewing for " + counter + (counter == 1 ? " surface." : " surfaces.")); + } + // biwa [BeginAction("visualpaintselect")] protected virtual void OnPaintSelectBegin()