From 80861be6ab16d692e4b746cb21f2ae5df5afab66 Mon Sep 17 00:00:00 2001 From: MaxED <j.maxed@gmail.com> Date: Mon, 22 Feb 2016 15:20:08 +0000 Subject: [PATCH] Added "Fixed Things Scale" setting (available in the View menu, as a button on the View toolbar and as the "Toggle Fixed Things Scale" action). When enabled, Things will no longer be scaled based on current zoom level in Classic modes, instead, thing bounding box will be drawn when appropriate (this option mimics DB1 things rendering style). Internal: removed some remnants of fixed rendering pipeline from Renderer2D and Renderer3D. --- Source/Core/Builder.csproj | 1 + Source/Core/Config/ProgramConfiguration.cs | 6 +- Source/Core/GZBuilder/Geometry/Line3D.cs | 8 ++ Source/Core/Map/MapSet.cs | 2 +- Source/Core/Properties/Resources.Designer.cs | 9 ++- Source/Core/Properties/Resources.resx | 3 + Source/Core/Rendering/IRenderer2D.cs | 1 + Source/Core/Rendering/Renderer2D.cs | 69 ++++++++++-------- Source/Core/Rendering/Renderer3D.cs | 2 - Source/Core/Resources/Actions.cfg | 10 +++ Source/Core/Resources/FixedThingsScale.png | Bin 0 -> 1595 bytes Source/Core/Windows/MainForm.Designer.cs | 31 ++++++++ Source/Core/Windows/MainForm.cs | 17 +++++ .../BuilderModes/ClassicModes/ThingsMode.cs | 2 +- 14 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 Source/Core/Resources/FixedThingsScale.png diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 0ba80cbd0..cc46ff2ff 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -1124,6 +1124,7 @@ <None Include="Resources\GroupRemove.png" /> <None Include="Resources\GridDecrease.png" /> <None Include="Resources\GridIncrease.png" /> + <None Include="Resources\FixedThingsScale.png" /> <Content Include="Resources\Light.png" /> <None Include="Resources\Lightbulb.png" /> <None Include="Resources\LightDisabled.png" /> diff --git a/Source/Core/Config/ProgramConfiguration.cs b/Source/Core/Config/ProgramConfiguration.cs index f7f8cf88f..8b1282d86 100644 --- a/Source/Core/Config/ProgramConfiguration.cs +++ b/Source/Core/Config/ProgramConfiguration.cs @@ -125,7 +125,8 @@ namespace CodeImp.DoomBuilder.Config private bool autoClearSideTextures; private bool storeSelectedEditTab; private bool checkforupdates; - private bool rendercomments; + private bool rendercomments; //mxd + private bool fixedthingsscale; //mxd private bool rendergrid; private bool dynamicgridsize; private int ignoredremoterevision; @@ -226,6 +227,7 @@ namespace CodeImp.DoomBuilder.Config public bool StoreSelectedEditTab { get { return storeSelectedEditTab; } internal set { storeSelectedEditTab = value; } } internal bool CheckForUpdates { get { return checkforupdates; } set { checkforupdates = value; } } //mxd public bool RenderComments { get { return rendercomments; } internal set { rendercomments = value; } } //mxd + public bool FixedThingsScale { get { return fixedthingsscale; } internal set { fixedthingsscale = value; } } //mxd public bool RenderGrid { get { return rendergrid; } internal set { rendergrid = value; } } //mxd public bool DynamicGridSize { get { return dynamicgridsize; } internal set { dynamicgridsize = value; } } //mxd internal int IgnoredRemoteRevision { get { return ignoredremoterevision; } set { ignoredremoterevision = value; } } //mxd @@ -348,6 +350,7 @@ namespace CodeImp.DoomBuilder.Config storeSelectedEditTab = cfg.ReadSetting("storeselectededittab", true); checkforupdates = cfg.ReadSetting("checkforupdates", true); //mxd rendercomments = cfg.ReadSetting("rendercomments", true); //mxd + fixedthingsscale = cfg.ReadSetting("fixedthingsscale", false); //mxd rendergrid = cfg.ReadSetting("rendergrid", true); //mxd dynamicgridsize = cfg.ReadSetting("dynamicgridsize", true); //mxd ignoredremoterevision = cfg.ReadSetting("ignoredremoterevision", 0); //mxd @@ -454,6 +457,7 @@ namespace CodeImp.DoomBuilder.Config cfg.WriteSetting("storeselectededittab", storeSelectedEditTab); cfg.WriteSetting("checkforupdates", checkforupdates); //mxd cfg.WriteSetting("rendercomments", rendercomments); //mxd + cfg.WriteSetting("fixedthingsscale", fixedthingsscale); //mxd cfg.WriteSetting("rendergrid", rendergrid); //mxd cfg.WriteSetting("dynamicgridsize", dynamicgridsize); //mxd cfg.WriteSetting("ignoredremoterevision", ignoredremoterevision); //mxd diff --git a/Source/Core/GZBuilder/Geometry/Line3D.cs b/Source/Core/GZBuilder/Geometry/Line3D.cs index 9f8c16d28..3cffa1aa4 100644 --- a/Source/Core/GZBuilder/Geometry/Line3D.cs +++ b/Source/Core/GZBuilder/Geometry/Line3D.cs @@ -22,6 +22,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Geometry { this.Start = start; this.End = end; + this.Start2D = start; + this.End2D = end; this.Color = General.Colors.InfoLine; this.RenderArrowhead = true; } @@ -30,6 +32,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Geometry { this.Start = start; this.End = end; + this.Start2D = start; + this.End2D = end; this.Color = General.Colors.InfoLine; this.RenderArrowhead = renderArrowhead; } @@ -38,6 +42,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Geometry { this.Start = start; this.End = end; + this.Start2D = start; + this.End2D = end; this.Color = color; this.RenderArrowhead = true; } @@ -46,6 +52,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Geometry { this.Start = start; this.End = end; + this.Start2D = start; + this.End2D = end; this.Color = color; this.RenderArrowhead = renderArrowhead; } diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index af167f071..0aabb6af5 100644 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -2727,7 +2727,7 @@ namespace CodeImp.DoomBuilder.Map { float px = t.Position.x; float py = t.Position.y; - float ts = ((t.FixedSize && General.Map.Renderer2D.Scale > 1.0f) ? t.Size / General.Map.Renderer2D.Scale : t.Size); + float ts = (((t.FixedSize || General.Settings.FixedThingsScale) && General.Map.Renderer2D.Scale > 1.0f) ? t.Size / General.Map.Renderer2D.Scale : t.Size); //mxd. Within range? if(px < range.Left - ts || px > range.Right + ts || py < range.Top - ts || py > range.Bottom + ts) continue; diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs index 6f347c287..987ee0052 100644 --- a/Source/Core/Properties/Resources.Designer.cs +++ b/Source/Core/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. -// Runtime Version:2.0.50727.5485 +// Runtime Version:2.0.50727.5466 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -270,6 +270,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap FixedThingsScale { + get { + object obj = ResourceManager.GetObject("FixedThingsScale", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap fog { get { object obj = ResourceManager.GetObject("fog", resourceCulture); diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx index 934380dc4..6afe90160 100644 --- a/Source/Core/Properties/Resources.resx +++ b/Source/Core/Properties/Resources.resx @@ -562,4 +562,7 @@ <data name="ScriptProperty" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\ScriptProperty.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="FixedThingsScale" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\FixedThingsScale.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> </root> \ No newline at end of file diff --git a/Source/Core/Rendering/IRenderer2D.cs b/Source/Core/Rendering/IRenderer2D.cs index 314a89fa5..fc4215210 100644 --- a/Source/Core/Rendering/IRenderer2D.cs +++ b/Source/Core/Rendering/IRenderer2D.cs @@ -73,6 +73,7 @@ namespace CodeImp.DoomBuilder.Rendering void RenderRectangleFilled(RectangleF rect, PixelColor c, bool transformrect, ImageData texture); void RenderLine(Vector2D start, Vector2D end, float thickness, PixelColor c, bool transformcoords); void RenderArrows(ICollection<Line3D> line); //mxd + void RenderArrows(ICollection<Line3D> line, bool transformcoords); //mxd void RenderText(TextLabel text); void RenderGeometry(FlatVertex[] vertices, ImageData texture, bool transformcoords); void RenderHighlight(FlatVertex[] vertices, int color); //mxd diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index 3d76cd068..fd10e2818 100644 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -251,7 +251,6 @@ namespace CodeImp.DoomBuilder.Rendering // BACKGROUND case RendererLayer.Background: if((backimageverts == null) || (General.Map.Grid.Background.Texture == null)) break; - graphics.Device.SetTexture(0, General.Map.Grid.Background.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Grid.Background.Texture; graphics.Shaders.Display2D.SetSettings(1f / windowsize.Width, 1f / windowsize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -262,7 +261,6 @@ namespace CodeImp.DoomBuilder.Rendering // GRID case RendererLayer.Grid: - graphics.Device.SetTexture(0, backtex); graphics.Shaders.Display2D.Texture1 = backtex; graphics.Shaders.Display2D.SetSettings(1f / backsize.Width, 1f / backsize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -272,7 +270,6 @@ namespace CodeImp.DoomBuilder.Rendering // GEOMETRY case RendererLayer.Geometry: - graphics.Device.SetTexture(0, plottertex); graphics.Shaders.Display2D.Texture1 = plottertex; graphics.Shaders.Display2D.SetSettings(1f / structsize.Width, 1f / structsize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -282,7 +279,6 @@ namespace CodeImp.DoomBuilder.Rendering // THINGS case RendererLayer.Things: - graphics.Device.SetTexture(0, thingstex); graphics.Shaders.Display2D.Texture1 = thingstex; graphics.Shaders.Display2D.SetSettings(1f / thingssize.Width, 1f / thingssize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -292,7 +288,6 @@ namespace CodeImp.DoomBuilder.Rendering // OVERLAY case RendererLayer.Overlay: - graphics.Device.SetTexture(0, overlaytex); graphics.Shaders.Display2D.Texture1 = overlaytex; graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -302,7 +297,6 @@ namespace CodeImp.DoomBuilder.Rendering // SURFACE case RendererLayer.Surface: - graphics.Device.SetTexture(0, surfacetex); graphics.Shaders.Display2D.Texture1 = surfacetex; graphics.Shaders.Display2D.SetSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false); graphics.Shaders.Display2D.BeginPass(aapass); @@ -318,7 +312,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Present(); // Release binds - graphics.Device.SetTexture(0, null); graphics.Shaders.Display2D.Texture1 = null; graphics.Device.SetStreamSource(0, null, 0, 0); } @@ -964,19 +957,21 @@ namespace CodeImp.DoomBuilder.Rendering // This makes vertices for a thing // Returns false when not on the screen - private bool CreateThingBoxVerts(Thing t, ref FlatVertex[] verts, Dictionary<Thing, Vector2D> thingsByPosition, int offset, PixelColor c) + private bool CreateThingBoxVerts(Thing t, ref FlatVertex[] verts, ref List<Line3D> bboxes, Dictionary<Thing, Vector2D> thingsByPosition, int offset, PixelColor c, byte bboxalpha) { if(t.Size * scale < MINIMUM_THING_RADIUS) return false; //mxd. Don't render tiny little things - // Determine size - float circlesize = (t.FixedSize && (scale > 1.0f) ? t.Size /* * THING_CIRCLE_SIZE*/ : t.Size * scale /* * THING_CIRCLE_SIZE*/); + // Determine sizes + float circlesize = ((t.FixedSize || General.Settings.FixedThingsScale) && (scale > 1.0f) ? t.Size : t.Size * scale); + float bboxsize = ((!t.FixedSize && General.Settings.FixedThingsScale) && (scale > 1.0f) ? t.Size * scale : -1); //mxd + float screensize = Math.Max(circlesize, bboxsize); //mxd // Transform to screen coordinates Vector2D screenpos = ((Vector2D)t.Position).GetTransformed(translatex, translatey, scale, -scale); // Check if the thing is actually on screen - if(((screenpos.x + circlesize) <= 0.0f) || ((screenpos.x - circlesize) >= windowsize.Width) || - ((screenpos.y + circlesize) <= 0.0f) || ((screenpos.y - circlesize) >= windowsize.Height)) + if(((screenpos.x + screensize) <= 0.0f) || ((screenpos.x - screensize) >= windowsize.Width) || + ((screenpos.y + screensize) <= 0.0f) || ((screenpos.y - screensize) >= windowsize.Height)) return false; // Get integral color @@ -1014,6 +1009,22 @@ namespace CodeImp.DoomBuilder.Rendering //mxd. Add to list thingsByPosition.Add(t, screenpos); + //mxd. Add bounding box? + if(bboxsize > 0) + { + PixelColor boxcolor = c.WithAlpha(bboxalpha); + + Vector2D tl = new Vector2D(screenpos.x - bboxsize, screenpos.y - bboxsize); + Vector2D tr = new Vector2D(screenpos.x + bboxsize, screenpos.y - bboxsize); + Vector2D bl = new Vector2D(screenpos.x - bboxsize, screenpos.y + bboxsize); + Vector2D br = new Vector2D(screenpos.x + bboxsize, screenpos.y + bboxsize); + + bboxes.Add(new Line3D(tl, tr, boxcolor, false)); + bboxes.Add(new Line3D(tr, br, boxcolor, false)); + bboxes.Add(new Line3D(bl, br, boxcolor, false)); + bboxes.Add(new Line3D(tl, bl, boxcolor, false)); + } + // Done return true; } @@ -1022,7 +1033,7 @@ namespace CodeImp.DoomBuilder.Rendering private void CreateThingArrowVerts(Thing t, ref FlatVertex[] verts, Vector2D screenpos, int offset) { // Determine size - float arrowsize = (t.FixedSize && (scale > 1.0f) ? t.Size : t.Size * scale) * THING_ARROW_SIZE; //mxd + float arrowsize = ((t.FixedSize || General.Settings.FixedThingsScale) && (scale > 1.0f) ? t.Size : t.Size * scale) * THING_ARROW_SIZE; //mxd // Setup rotated rect for arrow float sinarrowsize = (float)Math.Sin(t.Angle + Angle2D.PI * 0.25f) * arrowsize; @@ -1100,6 +1111,7 @@ namespace CodeImp.DoomBuilder.Rendering // Make alpha color Color4 alphacolor = new Color4(alpha, 1.0f, 1.0f, 1.0f); + byte bboxalpha = (byte)(alpha * (General.Editing.Mode.GetType().Name == "ThingsMode" ? 128 : 255)); // Set renderstates for things rendering graphics.Device.SetRenderState(RenderState.CullMode, Cull.None); @@ -1113,7 +1125,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetStreamSource(0, thingsvertices, 0, FlatVertex.Stride); // Set things texture - graphics.Device.SetTexture(0, thingtexture.Texture); graphics.Shaders.Things2D.Texture1 = thingtexture.Texture; SetWorldTransformation(false); graphics.Shaders.Things2D.SetSettings(alpha); @@ -1125,6 +1136,7 @@ namespace CodeImp.DoomBuilder.Rendering // Determine next lock size int locksize = (things.Count > THING_BUFFER_SIZE) ? THING_BUFFER_SIZE : things.Count; FlatVertex[] verts = new FlatVertex[THING_BUFFER_SIZE * 6]; + List<Line3D> bboxes = new List<Line3D>(locksize); //mxd //mxd Dictionary<int, List<Thing>> thingsByType = new Dictionary<int, List<Thing>>(); @@ -1148,7 +1160,7 @@ namespace CodeImp.DoomBuilder.Rendering // Create vertices PixelColor tc = fixedcolor ? c : DetermineThingColor(t); - if(CreateThingBoxVerts(t, ref verts, thingsByPosition, buffercount * 6, tc)) + if(CreateThingBoxVerts(t, ref verts, ref bboxes, thingsByPosition, buffercount * 6, tc, bboxalpha)) { buffercount++; @@ -1211,8 +1223,8 @@ namespace CodeImp.DoomBuilder.Rendering } if(sprite.Texture == null) sprite.CreateTexture(); - graphics.Device.SetTexture(0, sprite.Texture); graphics.Shaders.Things2D.Texture1 = sprite.Texture; + graphics.Shaders.Things2D.ApplySettings(); // Determine next lock size locksize = (group.Value.Count > THING_BUFFER_SIZE) ? THING_BUFFER_SIZE : group.Value.Count; @@ -1223,7 +1235,7 @@ namespace CodeImp.DoomBuilder.Rendering totalcount = 0; float spriteWidth, spriteHeight; - float spriteScale = (group.Value[0].FixedSize && (scale > 1.0f)) ? 1.0f : scale; + float spriteScale = ((group.Value[0].FixedSize || General.Settings.FixedThingsScale) && (scale > 1.0f)) ? 1.0f : scale; if(sprite.Width > sprite.Height) { @@ -1285,7 +1297,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Things2D.EndPass(); //mxd. Render thing arrows - graphics.Device.SetTexture(0, thingtexture.Texture); graphics.Shaders.Things2D.Texture1 = thingtexture.Texture; graphics.Shaders.Things2D.BeginPass(0); @@ -1393,6 +1404,9 @@ namespace CodeImp.DoomBuilder.Rendering } graphics.Shaders.Things2D.End(); + + //mxd. Render thing boxes + RenderArrows(bboxes, false); } } @@ -1501,7 +1515,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); graphics.Shaders.Display2D.Texture1 = t; - graphics.Device.SetTexture(0, t); SetWorldTransformation(transformcoords); graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1558,7 +1571,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Display2D.Texture1 = graphics.FontTexture; SetWorldTransformation(false); graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, true); - graphics.Device.SetTexture(0, graphics.FontTexture); graphics.Device.SetStreamSource(0, text.VertexBuffer, 0, FlatVertex.Stride); // Draw @@ -1621,7 +1633,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); - graphics.Device.SetTexture(0, General.Map.Data.WhiteTexture.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1660,7 +1671,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); - graphics.Device.SetTexture(0, General.Map.Data.WhiteTexture.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1696,7 +1706,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); - graphics.Device.SetTexture(0, texture.Texture); graphics.Shaders.Display2D.Texture1 = texture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1709,7 +1718,8 @@ namespace CodeImp.DoomBuilder.Rendering } //mxd - public void RenderArrows(ICollection<Line3D> lines) + public void RenderArrows(ICollection<Line3D> lines) { RenderArrows(lines, true); } + public void RenderArrows(ICollection<Line3D> lines, bool transformcoords) { if(lines.Count == 0) return; int pointscount = 0; @@ -1717,9 +1727,12 @@ namespace CodeImp.DoomBuilder.Rendering // Translate to screen coords, determine renderability foreach(Line3D line in lines) { - // Calculate screen positions - line.Start2D = ((Vector2D)line.Start).GetTransformed(translatex, translatey, scale, -scale); //start - line.End2D = ((Vector2D)line.End).GetTransformed(translatex, translatey, scale, -scale); //end + // Calculate screen positions? + if(transformcoords) + { + line.Start2D = ((Vector2D)line.Start).GetTransformed(translatex, translatey, scale, -scale); //start + line.End2D = ((Vector2D)line.End).GetTransformed(translatex, translatey, scale, -scale); //end + } float maxx = Math.Max(line.Start2D.x, line.End2D.x); float minx = Math.Min(line.Start2D.x, line.End2D.x); @@ -1798,7 +1811,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); - graphics.Device.SetTexture(0, General.Map.Data.WhiteTexture.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); @@ -1854,7 +1866,6 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, -1); graphics.Device.SetRenderState(RenderState.FogEnable, false); SetWorldTransformation(false); - graphics.Device.SetTexture(0, General.Map.Data.WhiteTexture.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.WhiteTexture.Texture; graphics.Shaders.Display2D.SetSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear); diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs index 91d0fd218..d368d12e5 100644 --- a/Source/Core/Rendering/Renderer3D.cs +++ b/Source/Core/Rendering/Renderer3D.cs @@ -1814,13 +1814,11 @@ namespace CodeImp.DoomBuilder.Rendering if(crosshairbusy) { if(General.Map.Data.CrosshairBusy3D.Texture == null) General.Map.Data.CrosshairBusy3D.CreateTexture(); - graphics.Device.SetTexture(0, General.Map.Data.CrosshairBusy3D.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.CrosshairBusy3D.Texture; } else { if(General.Map.Data.Crosshair3D.Texture == null) General.Map.Data.Crosshair3D.CreateTexture(); - graphics.Device.SetTexture(0, General.Map.Data.Crosshair3D.Texture); graphics.Shaders.Display2D.Texture1 = General.Map.Data.Crosshair3D.Texture; } diff --git a/Source/Core/Resources/Actions.cfg b/Source/Core/Resources/Actions.cfg index 1e2d752c7..d0577f86a 100644 --- a/Source/Core/Resources/Actions.cfg +++ b/Source/Core/Resources/Actions.cfg @@ -1026,6 +1026,16 @@ togglecomments //mxd allowscroll = false; } +togglefixedthingsscale //mxd +{ + title = "Toggle Fixed Things Scale"; + category = "view"; + description = "When enabled, Things will no longer be scaled based on current zoom level in Classic modes."; + allowkeys = true; + allowmouse = false; + allowscroll = false; +} + togglebrightness //mxd { title = "Toggle Full Brightness"; diff --git a/Source/Core/Resources/FixedThingsScale.png b/Source/Core/Resources/FixedThingsScale.png new file mode 100644 index 0000000000000000000000000000000000000000..b94d1acfa5e05dfa73f72709313f50e6ec602796 GIT binary patch literal 1595 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nAI{vB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxOgGuU%v{0TQqR!T z+}y-mN5ROz&{W^RSl`${*T~q)#K6kLNC66zfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD<cE0=g99h1>$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;Np<V zf>iyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7I$IMft0!ZY(y z^2>`g!FqgstvvIJOA_;vQ$1a5m4K$`WoD*Wxwsj+xtN)|xLBH*8ydQrIvN_8Ihz_d zIT|^+8ap|g!t}c2Czs}?=9R$orXcjX;?xUD4!H$Dn_W_iGRsm^+=}vZ6~NxM%Eav! zC!FR%^`_u<i!)BW`as9%gCZ9xvSC8N6a-?zlP-`0PyDHQz!YBuOxn&Ry|)<{m{xnb zIEGZ*stJzu2u_r!J6E=Cao#!0<w9o6m%VuQX#Urjc%n|_hyn-KqP!#PR5W%^yzpw% z?-kumO<htY%0WU?60;^fZM8Ht&G4O@UHtZY&hz!(*A%Br`+D&7;qSHYKYyru|K0A) z^Q!4hYeGNYi*^zS6j5!}z2@Wmb6Jg>xWXgOCJonyL+(ry*Rn{oZ4{g$nD2IXv(-#K zHV)~KiOPT9-C3Qyg7f2wj_w8xP4C7ByPkiIbf57qSS#|Zs!Y1+!xeP}n;&0Wd6&Jf zeD+z33`553KvwNcPMzuIHD3ZBusz+gC`P>Sld))^NU%ld#B2M~dv!~<mivASs=kup zY@n!ktUJI*rY3%wqEzvsGpn8-`mptz=2oH50}IT2YKw!{N3Y1u+x?_q+O675zRUNW zXVh4?7+C1^?LTnjYuS;%_iC;^e05S+XX=(X)`+#YR~qXF=ALw3Jm2iK(FU8}eDm1% zcCd$U{IG+6U9x!M{owu^mzG<#ZGNLXFM7R0{8Y(EE$cJP|2i36#O#xvm5HC?o9le^ z<>{F!H%~Z*i7fZKB_Qz9_;99Ev*60D`9D4;elU0RP`0t{xoYmOxO{Se3S&Tu+w+(E z8SLi9eK^e~Q53Pphfnd@?B=VXyvOf}S!D4a4%;d}Nkeg~5kH5`|LF}9yk}fR(n1U( zXC-V~u<W;8SI3Okcjm1O_E8g@CF}g@^^+M&9~MhDyPmy~;dFcN&TB3@|6<N)Zz}l7 zrxo6&vsB?zp-Ro?4j<lsU;1}cCmnpM{%c8^+f25_4zmsRZQl7`<#6QsBb5s~{f~G$ zGzf7!@l?96*vPN0b<_Ih&kK73)+%1@o*R1h?Nis=WhFDXy{vq<J<{8}^+QeH)&%jp zEA2MC+^Ll|d!?iFs-A`ap1K(cFZa{`xM%jA8L8>l|Fitt@>!peje&n^n4bi%`T|gK N?&<31vd$@?2>?X0VY&bS literal 0 HcmV?d00001 diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs index 80a2556ac..5a440216d 100644 --- a/Source/Core/Windows/MainForm.Designer.cs +++ b/Source/Core/Windows/MainForm.Designer.cs @@ -181,6 +181,7 @@ namespace CodeImp.DoomBuilder.Windows this.buttonviewceilings = new System.Windows.Forms.ToolStripButton(); this.seperatorviews = new System.Windows.Forms.ToolStripSeparator(); this.buttontogglecomments = new System.Windows.Forms.ToolStripButton(); + this.buttontogglefixedthingsscale = new System.Windows.Forms.ToolStripButton(); this.buttonsnaptogrid = new System.Windows.Forms.ToolStripButton(); this.buttonautomerge = new System.Windows.Forms.ToolStripButton(); this.buttonautoclearsidetextures = new System.Windows.Forms.ToolStripButton(); @@ -255,6 +256,7 @@ namespace CodeImp.DoomBuilder.Windows this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); this.modecontrolsloolbar = new System.Windows.Forms.ToolStrip(); this.itemtogglecomments = new System.Windows.Forms.ToolStripMenuItem(); + this.itemtogglefixedthingsscale = new System.Windows.Forms.ToolStripMenuItem(); this.itemdynamicgridsize = new System.Windows.Forms.ToolStripMenuItem(); toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); @@ -738,6 +740,7 @@ namespace CodeImp.DoomBuilder.Windows this.itemfullbrightness, this.itemtogglegrid, this.itemtogglecomments, + this.itemtogglefixedthingsscale, this.toolStripSeparator4, this.menuzoom, this.itemgotocoords, @@ -1243,6 +1246,7 @@ namespace CodeImp.DoomBuilder.Windows this.buttonfullbrightness, this.buttontogglegrid, this.buttontogglecomments, + this.buttontogglefixedthingsscale, this.separatorfullbrightness, this.buttonviewnormal, this.buttonviewbrightness, @@ -1658,6 +1662,19 @@ namespace CodeImp.DoomBuilder.Windows this.buttontogglecomments.Text = "Show Comments"; this.buttontogglecomments.Click += new System.EventHandler(this.InvokeTaggedAction); // + // buttontogglefixedthingsscale + // + this.buttontogglefixedthingsscale.Checked = true; + this.buttontogglefixedthingsscale.CheckState = System.Windows.Forms.CheckState.Checked; + this.buttontogglefixedthingsscale.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.buttontogglefixedthingsscale.Image = global::CodeImp.DoomBuilder.Properties.Resources.FixedThingsScale; + this.buttontogglefixedthingsscale.ImageTransparentColor = System.Drawing.Color.Magenta; + this.buttontogglefixedthingsscale.Name = "buttontogglefixedthingsscale"; + this.buttontogglefixedthingsscale.Size = new System.Drawing.Size(23, 22); + this.buttontogglefixedthingsscale.Tag = "builder_togglefixedthingsscale"; + this.buttontogglefixedthingsscale.Text = "Fixed Things Scale"; + this.buttontogglefixedthingsscale.Click += new System.EventHandler(this.InvokeTaggedAction); + // // buttonsnaptogrid // this.buttonsnaptogrid.Checked = true; @@ -2429,6 +2446,18 @@ namespace CodeImp.DoomBuilder.Windows this.itemtogglecomments.Text = "Show Comments"; this.itemtogglecomments.Click += new System.EventHandler(this.InvokeTaggedAction); // + // itemtogglefixedthingsscale + // + this.itemtogglefixedthingsscale.Checked = true; + this.itemtogglefixedthingsscale.CheckOnClick = true; + this.itemtogglefixedthingsscale.CheckState = System.Windows.Forms.CheckState.Checked; + this.itemtogglefixedthingsscale.Image = global::CodeImp.DoomBuilder.Properties.Resources.FixedThingsScale; + this.itemtogglefixedthingsscale.Name = "itemtogglefixedthingsscale"; + this.itemtogglefixedthingsscale.Size = new System.Drawing.Size(215, 22); + this.itemtogglefixedthingsscale.Tag = "builder_togglefixedthingsscale"; + this.itemtogglefixedthingsscale.Text = "Fixed Things Scale"; + this.itemtogglefixedthingsscale.Click += new System.EventHandler(this.InvokeTaggedAction); + // // itemdynamicgridsize // this.itemdynamicgridsize.Checked = true; @@ -2694,6 +2723,7 @@ namespace CodeImp.DoomBuilder.Windows private ToolStripMenuItem item2zoom800; private ToolStripMenuItem itemzoom800; private ToolStripButton buttontogglecomments; + private ToolStripButton buttontogglefixedthingsscale; private ToolStripMenuItem itemlinedefcolors; private ToolStripSeparator separatorlinecolors; private ToolStripButton buttonlinededfcolors; @@ -2704,5 +2734,6 @@ namespace CodeImp.DoomBuilder.Windows private ToolStripButton buttontoggledynamicgrid; private ToolStripMenuItem itemdynamicgridsize; private ToolStripMenuItem itemtogglecomments; + private ToolStripMenuItem itemtogglefixedthingsscale; } } \ No newline at end of file diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index c465a5a1b..81074154e 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -2021,6 +2021,8 @@ namespace CodeImp.DoomBuilder.Windows buttontogglegrid.Checked = General.Settings.RenderGrid; //mxd buttontogglecomments.Visible = General.Settings.ToolbarViewModes && maploaded && General.Map.UDMF; //mxd buttontogglecomments.Checked = General.Settings.RenderComments; //mxd + buttontogglefixedthingsscale.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd + buttontogglefixedthingsscale.Checked = General.Settings.FixedThingsScale; //mxd separatorfullbrightness.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd buttonviewbrightness.Visible = General.Settings.ToolbarViewModes && maploaded; buttonviewceilings.Visible = General.Settings.ToolbarViewModes && maploaded; @@ -2764,6 +2766,19 @@ namespace CodeImp.DoomBuilder.Windows RedrawDisplay(); } + //mxd. Action to toggle fixed things scale + [BeginAction("togglefixedthingsscale")] + internal void ToggleFixedThingsScale() + { + buttontogglefixedthingsscale.Checked = !buttontogglefixedthingsscale.Checked; + itemtogglefixedthingsscale.Checked = buttontogglefixedthingsscale.Checked; + General.Settings.FixedThingsScale = buttontogglefixedthingsscale.Checked; + DisplayStatus(StatusType.Action, "Fixed things scale is " + (buttontogglefixedthingsscale.Checked ? "ENABLED" : "DISABLED")); + + // Redraw display to show changes + RedrawDisplay(); + } + // Action to toggle snap to grid [BeginAction("togglesnap")] internal void ToggleSnapToGrid() @@ -2864,6 +2879,8 @@ namespace CodeImp.DoomBuilder.Windows itemtoggleinfo.Checked = IsInfoPanelExpanded; itemtogglecomments.Visible = (General.Map != null && General.Map.UDMF); //mxd itemtogglecomments.Checked = General.Settings.RenderComments; //mxd + itemtogglefixedthingsscale.Visible = (General.Map != null); //mxd + itemtogglefixedthingsscale.Checked = General.Settings.FixedThingsScale; //mxd // View mode items if(General.Map != null) diff --git a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs index bfb39f2fb..ca686ced3 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs @@ -760,7 +760,7 @@ namespace CodeImp.DoomBuilder.BuilderModes { if(t.Fields.ContainsKey("comment")) { - float size = ((t.FixedSize && renderer.Scale > 1.0f) ? t.Size / renderer.Scale : t.Size); + float size = (((t.FixedSize || General.Settings.FixedThingsScale) && renderer.Scale > 1.0f) ? t.Size / renderer.Scale : t.Size); if(size * renderer.Scale < 1.5f) return; // Thing is too small to render int iconindex = 0; -- GitLab