From 5cf574f42dc1f940e06d657d5c53349c25220d0d Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Sat, 23 Jan 2016 03:53:31 +0100 Subject: [PATCH] Merged in GZDB r2474. --- Source/Core/VisualModes/VisualGeometry.cs | 14 ++-- .../VisualModes/BaseVisualGeometrySector.cs | 42 ++++++---- .../VisualModes/BaseVisualGeometrySidedef.cs | 76 ++++++++++++------- .../VisualModes/BaseVisualMode.cs | 28 +++---- .../BuilderModes/VisualModes/VisualCeiling.cs | 46 +++++------ .../BuilderModes/VisualModes/VisualFloor.cs | 49 +++++------- 6 files changed, 140 insertions(+), 115 deletions(-) diff --git a/Source/Core/VisualModes/VisualGeometry.cs b/Source/Core/VisualModes/VisualGeometry.cs index 9924daf..a66dda6 100644 --- a/Source/Core/VisualModes/VisualGeometry.cs +++ b/Source/Core/VisualModes/VisualGeometry.cs @@ -155,7 +155,8 @@ namespace CodeImp.DoomBuilder.VisualModes triangles = vertices.Length / 3; CalculateNormals(); //mxd - } + PerformAutoSelection(); //mxd + } else { vertices = null; @@ -266,11 +267,14 @@ namespace CodeImp.DoomBuilder.VisualModes return false; } - #endregion - } + //mxd + protected abstract void PerformAutoSelection(); - //mxd - public enum VisualGeometryType + #endregion + } + + //mxd + public enum VisualGeometryType { FLOOR, CEILING, diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs index 1fab289..9391d99 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs @@ -64,16 +64,17 @@ namespace CodeImp.DoomBuilder.BuilderModes private int startoffsety; protected bool uvdragging; private int prevoffsetx; // We have to provide delta offsets, but I don't - private int prevoffsety; // want to calculate with delta offsets to prevent - // inaccuracy in the dragging. + private int prevoffsety; // want to calculate with delta offsets to prevent + // inaccuracy in the dragging. - private static List updateList; //mxd + private static List updatelist; //mxd + protected bool performautoselection; //mxd - #endregion + #endregion - #region ================== Properties - - new public BaseVisualSector Sector { get { return (BaseVisualSector)base.Sector; } } + #region ================== Properties + + new public BaseVisualSector Sector { get { return (BaseVisualSector)base.Sector; } } public bool Changed { get { return changed; } set { changed = value; } } public SectorLevel Level { get { return level; } } public Effect3DFloor ExtraFloor { get { return extrafloor; } } @@ -98,8 +99,21 @@ namespace CodeImp.DoomBuilder.BuilderModes protected abstract void UpdateSkyRenderFlag(); //mxd public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd - // This swaps triangles so that the plane faces the other way - protected static void SwapTriangleVertices(WorldVertex[] verts) + //mxd + override protected void PerformAutoSelection() + { + if (!performautoselection) return; + if (Triangles > 0) + { + this.selected = true; + mode.AddSelectedObject(this); + } + + performautoselection = false; + } + + // This swaps triangles so that the plane faces the other way + protected static void SwapTriangleVertices(WorldVertex[] verts) { // Swap some vertices to flip all triangles for(int i = 0; i < verts.Length; i += 3) @@ -776,12 +790,12 @@ namespace CodeImp.DoomBuilder.BuilderModes { //mxd List sectors = mode.GetSelectedSectors(); - updateList = new List(); + updatelist = new List(); foreach(Sector s in sectors) { if(mode.VisualSectorExists(s)) - updateList.Add((BaseVisualSector)mode.GetVisualSector(s)); + updatelist.Add((BaseVisualSector)mode.GetVisualSector(s)); } General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged; //mxd @@ -790,8 +804,8 @@ namespace CodeImp.DoomBuilder.BuilderModes mode.StopRealtimeInterfaceUpdate(SelectionType.Sectors); //mxd General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged; //mxd - updateList.Clear(); //mxd - updateList = null; //mxd + updatelist.Clear(); //mxd + updatelist = null; //mxd if(result == DialogResult.OK) mode.RebuildElementData(); //mxd } @@ -800,7 +814,7 @@ namespace CodeImp.DoomBuilder.BuilderModes //mxd private void Interface_OnEditFormValuesChanged(object sender, EventArgs e) { - foreach(BaseVisualSector vs in updateList) vs.UpdateSectorGeometry(true); + foreach(BaseVisualSector vs in updatelist) vs.UpdateSectorGeometry(true); } // Sector height change diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index fa29f69..f39ad3c 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -59,12 +59,13 @@ namespace CodeImp.DoomBuilder.BuilderModes private int startoffsety; protected bool uvdragging; private int prevoffsetx; // We have to provide delta offsets, but I don't - private int prevoffsety; // want to calculate with delta offsets to prevent - // inaccuracy in the dragging. - private static List updateList; //mxd + private int prevoffsety; // want to calculate with delta offsets to prevent + // inaccuracy in the dragging. + private static List updatelist; //mxd + private bool performautoselection; //mxd - // Undo/redo - private int undoticket; + // Undo/redo + private int undoticket; #endregion @@ -84,21 +85,38 @@ namespace CodeImp.DoomBuilder.BuilderModes this.deltaz = new Vector3D(0.0f, 0.0f, 1.0f); this.deltaxy = (sd.Line.End.Position - sd.Line.Start.Position) * sd.Line.LengthInv; if(!sd.IsFront) this.deltaxy = -this.deltaxy; + this.performautoselection = (mode.UseSelectionFromClassicMode && sd.Line.Selected); //mxd + } - //mxd - if(mode.UseSelectionFromClassicMode && sd.Line.Selected) - { - this.selected = true; - mode.AddSelectedObject(this); - } - } - - #endregion + #endregion - #region ================== Methods + #region ================== Methods - // This sets the renderstyle from linedef information and returns the alpha value or the vertices - protected byte SetLinedefRenderstyle(bool solidasmask) + //mxd + override protected void PerformAutoSelection() + { + if (!performautoselection) return; + if (Triangles > 0) + { + dragstartanglexy = General.Map.VisualCamera.AngleXY; + dragstartanglez = General.Map.VisualCamera.AngleZ; + dragorigin = pickintersect; + + Point texoffset = GetTextureOffset(); + startoffsetx = texoffset.X; + startoffsety = texoffset.Y; + prevoffsetx = texoffset.X; + prevoffsety = texoffset.Y; + + this.selected = true; + mode.AddSelectedObject(this); + } + + performautoselection = false; + } + + // This sets the renderstyle from linedef information and returns the alpha value or the vertices + protected byte SetLinedefRenderstyle(bool solidasmask) { byte alpha; bool canhavealpha = (this is VisualMiddleDouble || this is VisualMiddle3D || this is VisualMiddleBack); //mxd @@ -1167,11 +1185,13 @@ namespace CodeImp.DoomBuilder.BuilderModes dragstartanglexy = General.Map.VisualCamera.AngleXY; dragstartanglez = General.Map.VisualCamera.AngleZ; dragorigin = pickintersect; - startoffsetx = GetTextureOffset().X; - startoffsety = GetTextureOffset().Y; - prevoffsetx = GetTextureOffset().X; - prevoffsety = GetTextureOffset().Y; - } + + Point texoffset = GetTextureOffset(); //mxd + startoffsetx = texoffset.X; + startoffsety = texoffset.Y; + prevoffsetx = texoffset.X; + prevoffsety = texoffset.Y; + } // Select button released public virtual void OnSelectEnd() @@ -1206,13 +1226,13 @@ namespace CodeImp.DoomBuilder.BuilderModes if(General.Interface.IsActiveWindow) { List linedefs = mode.GetSelectedLinedefs(); - updateList = new List(); //mxd + updatelist = new List(); //mxd foreach(Linedef l in linedefs) { if(l.Front != null && mode.VisualSectorExists(l.Front.Sector)) - updateList.Add((BaseVisualSector)mode.GetVisualSector(l.Front.Sector)); + updatelist.Add((BaseVisualSector)mode.GetVisualSector(l.Front.Sector)); if(l.Back != null && mode.VisualSectorExists(l.Back.Sector)) - updateList.Add((BaseVisualSector)mode.GetVisualSector(l.Back.Sector)); + updatelist.Add((BaseVisualSector)mode.GetVisualSector(l.Back.Sector)); } General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged; @@ -1221,8 +1241,8 @@ namespace CodeImp.DoomBuilder.BuilderModes mode.StopRealtimeInterfaceUpdate(SelectionType.Linedefs); General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged; - updateList.Clear(); - updateList = null; + updatelist.Clear(); + updatelist = null; //mxd. Effects may need updating... if(result == DialogResult.OK) mode.RebuildElementData(); @@ -1232,7 +1252,7 @@ namespace CodeImp.DoomBuilder.BuilderModes //mxd private void Interface_OnEditFormValuesChanged(object sender, EventArgs e) { - foreach(BaseVisualSector vs in updateList) vs.UpdateSectorGeometry(false); + foreach(BaseVisualSector vs in updatelist) vs.UpdateSectorGeometry(false); } // Mouse moves diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index f16f145..2ad40d8 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -1770,24 +1770,24 @@ namespace CodeImp.DoomBuilder.BuilderModes { List objs = new List(); foreach(IVisualEventReceiver i in selectedobjects) - { - if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i); - else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i); - else if((i is BaseVisualThing) && includethings) objs.Add(i); - else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd - } + { + if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i); + else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i); + else if (includethings && (i is BaseVisualThing)) objs.Add(i); + else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd + } - // Add highlight? - if(selectedobjects.Count == 0) + // Add highlight? + if (selectedobjects.Count == 0) { IVisualEventReceiver i = (target.picked as IVisualEventReceiver); - if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i); - else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i); - else if((i is BaseVisualThing) && includethings) objs.Add(i); - else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd - } + if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i); + else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i); + else if (includethings && (i is BaseVisualThing)) objs.Add(i); + else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd + } - return objs; + return objs; } //mxd diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs index 8995f23..f253257 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs @@ -34,52 +34,46 @@ namespace CodeImp.DoomBuilder.BuilderModes { internal sealed class VisualCeiling : BaseVisualGeometrySector { - #region ================== Constants + #region ================== Constants - #endregion + #endregion - #region ================== Variables + #region ================== Variables - public bool innerSide; //mxd + private bool innerside; //mxd - #endregion + #endregion - #region ================== Properties + #region ================== Properties - #endregion + #endregion - #region ================== Constructor / Setup + #region ================== Constructor / Setup - // Constructor - public VisualCeiling(BaseVisualMode mode, VisualSector vs) : base(mode, vs) + // Constructor + public VisualCeiling(BaseVisualMode mode, VisualSector vs) : base(mode, vs) { //mxd geometrytype = VisualGeometryType.CEILING; partname = "ceiling"; + performautoselection = mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.CeilingTextures || General.Map.ViewMode == ViewMode.Normal); - //mxd - if(mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.CeilingTextures || General.Map.ViewMode == ViewMode.Normal)) - { - this.selected = true; - mode.AddSelectedObject(this); - } - - // We have no destructor - GC.SuppressFinalize(this); + // We have no destructor + GC.SuppressFinalize(this); } // This builds the geometry. Returns false when no geometry created. public override bool Setup(SectorLevel level, Effect3DFloor extrafloor) { - return Setup(level, extrafloor, innerSide); + return Setup(level, extrafloor, innerside); } - //mxd - public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide) - { + //mxd + public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside) + { Sector s = level.sector; Vector2D texscale; - this.innerSide = innerSide; //mxd + this.innerside = innerside; //mxd base.Setup(level, extrafloor); @@ -169,7 +163,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // The sector triangulation created clockwise triangles that // are right up for the floor. For the ceiling we must flip // the triangles upside down. - if(extrafloor == null || extrafloor.VavoomType || innerSide) + if(extrafloor == null || extrafloor.VavoomType || innerside) SwapTriangleVertices(verts); // Determine render pass @@ -457,7 +451,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir) { // Check if our ray starts at the correct side of the plane - if((innerSide && level.plane.Distance(from) < 0.0f) || (!innerSide && level.plane.Distance(from) > 0.0f)) //mxd + if((innerside && level.plane.Distance(from) < 0.0f) || (!innerside && level.plane.Distance(from) > 0.0f)) //mxd //if(level.plane.Distance(from) > 0.0f) { // Calculate the intersection diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs index 7bc3b3b..1975bac 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs @@ -34,53 +34,46 @@ namespace CodeImp.DoomBuilder.BuilderModes { internal sealed class VisualFloor : BaseVisualGeometrySector { - #region ================== Constants + #region ================== Constants - #endregion + #endregion - #region ================== Variables + #region ================== Variables - private bool innerSide; //mxd + private bool innerside; //mxd + + #endregion - #endregion + #region ================== Properties - #region ================== Properties + #endregion - #endregion + #region ================== Constructor / Setup - #region ================== Constructor / Setup - - // Constructor - public VisualFloor(BaseVisualMode mode, VisualSector vs) : base(mode, vs) + // Constructor + public VisualFloor(BaseVisualMode mode, VisualSector vs) : base(mode, vs) { //mxd geometrytype = VisualGeometryType.FLOOR; partname = "floor"; + performautoselection = mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.FloorTextures || General.Map.ViewMode == ViewMode.Normal); - //mxd - if(mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected - && (General.Map.ViewMode == ViewMode.FloorTextures || General.Map.ViewMode == ViewMode.Normal)) - { - this.selected = true; - mode.AddSelectedObject(this); - } - - // We have no destructor - GC.SuppressFinalize(this); + // We have no destructor + GC.SuppressFinalize(this); } // This builds the geometry. Returns false when no geometry created. public override bool Setup(SectorLevel level, Effect3DFloor extrafloor) { - return Setup(level, extrafloor, innerSide); + return Setup(level, extrafloor, innerside); } - //mxd - public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide) - { + //mxd + public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside) + { Sector s = level.sector; Vector2D texscale; - this.innerSide = innerSide; + this.innerside = innerside; base.Setup(level, extrafloor); @@ -171,7 +164,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // The sector triangulation created clockwise triangles that // are right up for the floor. For the ceiling we must flip // the triangles upside down. - if((extrafloor != null) && !extrafloor.VavoomType && !innerSide) + if((extrafloor != null) && !extrafloor.VavoomType && !innerside) SwapTriangleVertices(verts); // Determine render pass @@ -411,7 +404,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir) { // Check if our ray starts at the correct side of the plane - if((!innerSide && level.plane.Distance(from) > 0.0f) || (innerSide && level.plane.Distance(from) < 0.0f)) + if((!innerside && level.plane.Distance(from) > 0.0f) || (innerside && level.plane.Distance(from) < 0.0f)) { // Calculate the intersection if(level.plane.GetIntersection(from, to, ref pickrayu))