From ce7510c1538777295d0ba0eb704cc798f320eaca Mon Sep 17 00:00:00 2001 From: MaxED Date: Mon, 3 Aug 2015 22:02:39 +0000 Subject: [PATCH] Preferences: removed "Square Things" setting. Square things are now the only option. Changed, Things mode: things are now rendered with a bit of transparency, so things beneath other things are now visible. Fixed, Things mode: in some cases it was impossible to highlight a thing beneath other thing when their positions were the same. Changed, 2D modes: changed thing bounding box and arrow image. Fixed, cosmetic, 2D modes: in some cases thing arrows were rendered bigger than thing bounding boxes. --- Source/Core/Builder.csproj | 4 +- Source/Core/Config/ProgramConfiguration.cs | 4 - Source/Core/Map/MapSet.cs | 9 +- Source/Core/Map/Thing.cs | 2 + Source/Core/Rendering/Presentation.cs | 1 + Source/Core/Rendering/Renderer2D.cs | 68 +++++++-------- Source/Core/Resources/Thing2D.png | Bin 0 -> 12738 bytes Source/Core/Resources/Thing2D_0.png | Bin 22585 -> 0 bytes Source/Core/Resources/Thing2D_1.png | Bin 7241 -> 0 bytes Source/Core/Resources/ThingBox.png | Bin 482 -> 0 bytes .../Core/Windows/PreferencesForm.Designer.cs | 21 +---- Source/Core/Windows/PreferencesForm.cs | 2 - .../BuilderModes/ClassicModes/BridgeMode.cs | 2 +- .../ClassicModes/CurveLinedefsMode.cs | 2 +- .../ClassicModes/DragLinedefsMode.cs | 6 +- .../ClassicModes/DragSectorsMode.cs | 6 +- .../ClassicModes/DragThingsMode.cs | 6 +- .../ClassicModes/DragVerticesMode.cs | 6 +- .../ClassicModes/DrawGeometryMode.cs | 2 +- .../ClassicModes/EditSelectionMode.cs | 8 +- .../ClassicModes/ErrorCheckMode.cs | 2 +- .../ClassicModes/FindReplaceMode.cs | 2 +- .../ClassicModes/FlatAlignMode.cs | 2 +- .../BuilderModes/ClassicModes/LinedefsMode.cs | 2 +- .../ClassicModes/MakeSectorMode.cs | 2 +- .../BuilderModes/ClassicModes/SectorsMode.cs | 2 +- .../BuilderModes/ClassicModes/ThingsMode.cs | 80 ++++-------------- .../BuilderModes/ClassicModes/VerticesMode.cs | 2 +- .../ErrorChecks/ResultStuckThingInLine.cs | 2 +- .../ErrorChecks/ResultStuckThingInThing.cs | 4 +- .../ErrorChecks/ResultThingOutside.cs | 2 +- .../ErrorChecks/ResultUnknownThing.cs | 2 +- .../ErrorChecks/ResultUnusedThing.cs | 2 +- .../BuilderModes/FindReplace/BaseFindThing.cs | 2 +- .../BuilderModes/General/BuilderPlug.cs | 4 +- .../SoundEnvironmentMode.cs | 4 +- .../SoundPropagationMode.cs | 2 +- .../StairSectorBuilderMode.cs | 2 +- 38 files changed, 99 insertions(+), 170 deletions(-) create mode 100644 Source/Core/Resources/Thing2D.png delete mode 100644 Source/Core/Resources/Thing2D_0.png delete mode 100644 Source/Core/Resources/Thing2D_1.png delete mode 100644 Source/Core/Resources/ThingBox.png diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 7aa86254..d0d4cfa4 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -663,13 +663,12 @@ - + - @@ -1126,7 +1125,6 @@ - diff --git a/Source/Core/Config/ProgramConfiguration.cs b/Source/Core/Config/ProgramConfiguration.cs index 18b95bae..c4d05635 100644 --- a/Source/Core/Config/ProgramConfiguration.cs +++ b/Source/Core/Config/ProgramConfiguration.cs @@ -53,7 +53,6 @@ namespace CodeImp.DoomBuilder.Config private byte doublesidedalphabyte; private float backgroundalpha; private bool qualitydisplay; - private bool squarethings; private bool testmonsters; private int defaultviewmode; private bool classicbilinear; @@ -141,7 +140,6 @@ namespace CodeImp.DoomBuilder.Config public float VisualMouseSensX { get { return visualmousesensx; } internal set { visualmousesensx = value; } } public float VisualMouseSensY { get { return visualmousesensy; } internal set { visualmousesensy = value; } } public bool QualityDisplay { get { return qualitydisplay; } internal set { qualitydisplay = value; } } - public bool SquareThings { get { return squarethings; } internal set { squarethings = value; } } public bool TestMonsters { get { return testmonsters; } internal set { testmonsters = value; } } public int DefaultViewMode { get { return defaultviewmode; } internal set { defaultviewmode = value; } } public bool ClassicBilinear { get { return classicbilinear; } internal set { classicbilinear = value; } } @@ -252,7 +250,6 @@ namespace CodeImp.DoomBuilder.Config doublesidedalphabyte = (byte)(doublesidedalpha * 255f); backgroundalpha = cfg.ReadSetting("backgroundalpha", 1.0f); qualitydisplay = cfg.ReadSetting("qualitydisplay", true); - squarethings = cfg.ReadSetting("squarethings", false); testmonsters = cfg.ReadSetting("testmonsters", true); defaultviewmode = cfg.ReadSetting("defaultviewmode", (int)ViewMode.Normal); classicbilinear = cfg.ReadSetting("classicbilinear", false); @@ -343,7 +340,6 @@ namespace CodeImp.DoomBuilder.Config cfg.WriteSetting("visualmousesensy", visualmousesensy); cfg.WriteSetting("imagebrightness", imagebrightness); cfg.WriteSetting("qualitydisplay", qualitydisplay); - cfg.WriteSetting("squarethings", squarethings); cfg.WriteSetting("testmonsters", testmonsters); cfg.WriteSetting("doublesidedalpha", doublesidedalpha); cfg.WriteSetting("backgroundalpha", backgroundalpha); diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index c16c9089..57a7363b 100644 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -2745,7 +2745,8 @@ namespace CodeImp.DoomBuilder.Map RectangleF range = RectangleF.FromLTRB(pos.x - maxrange, pos.y - maxrange, pos.x + maxrange, pos.y + maxrange); Thing closest = null; float distance = float.MaxValue; - float d, px, py; + float size = float.MaxValue; //mxd + float d, px, py, s; // Go for all things in selection foreach(Thing t in selection) @@ -2756,13 +2757,15 @@ namespace CodeImp.DoomBuilder.Map //mxd. Within range? if(px < range.Left - t.Size || px > range.Right + t.Size || py < range.Top - t.Size || py > range.Bottom + t.Size) continue; - // Close than previous find? + // Closer than previous find? mxd. Or smaller when distance is the same? d = Math.Abs(px - pos.x) + Math.Abs(py - pos.y); - if(d < distance) + s = ((t.FixedSize && General.Map.Renderer2D.Scale > 1.0f) ? t.Size / General.Map.Renderer2D.Scale : t.Size); //mxd + if(d < distance || (d == distance && s < size)) { // This one is closer closest = t; distance = d; + size = s; //mxd } } diff --git a/Source/Core/Map/Thing.cs b/Source/Core/Map/Thing.cs index 3b437a6b..53eb31fe 100644 --- a/Source/Core/Map/Thing.cs +++ b/Source/Core/Map/Thing.cs @@ -67,6 +67,7 @@ namespace CodeImp.DoomBuilder.Map private float pitchrad; //mxd private float rollrad; //mxd private bool isModel; //mxd + private bool highlighted; //mxd // Configuration private float size; @@ -102,6 +103,7 @@ namespace CodeImp.DoomBuilder.Map public Sector Sector { get { return sector; } } public bool IsModel { get { return isModel; } } //mxd public bool IsDirectional { get { return directional; } } //mxd + public bool Highlighted { get { return highlighted; } set { highlighted = value; } } //mxd #endregion diff --git a/Source/Core/Rendering/Presentation.cs b/Source/Core/Rendering/Presentation.cs index d9aea608..bd100f38 100644 --- a/Source/Core/Rendering/Presentation.cs +++ b/Source/Core/Rendering/Presentation.cs @@ -30,6 +30,7 @@ namespace CodeImp.DoomBuilder.Rendering // Constants for static instances public const float THINGS_BACK_ALPHA = 0.3f; public const float THINGS_HIDDEN_ALPHA = 0.66f; + public const float THINGS_ALPHA = 0.8f; //mxd // Static instances private static Presentation standard; diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index ebe161ee..a59c1f43 100644 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -45,8 +45,8 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Constants private const float FSAA_FACTOR = 0.6f; - private const float THING_ARROW_SIZE = 1.5f; - private const float THING_ARROW_SHRINK = 2f; + private const float THING_ARROW_SIZE = 1.4f; + //private const float THING_ARROW_SHRINK = 2f; //private const float THING_CIRCLE_SIZE = 1f; private const float THING_SPRITE_SHRINK = 2f; private const int THING_BUFFER_SIZE = 100; @@ -57,7 +57,6 @@ namespace CodeImp.DoomBuilder.Rendering private const int FONT_WIDTH = 0; private const int FONT_HEIGHT = 0; - private const int NUM_THING_TEXTURES = 2; internal const int NUM_VIEW_MODES = 4; #endregion @@ -103,7 +102,7 @@ namespace CodeImp.DoomBuilder.Rendering private SurfaceManager surfaces; // Images - private ResourceImage[] thingtexture; + private ResourceImage thingtexture; // View settings (world coordinates) private ViewMode viewmode; @@ -146,15 +145,10 @@ namespace CodeImp.DoomBuilder.Rendering // Constructor internal Renderer2D(D3DDevice graphics) : base(graphics) { - // Load thing textures - thingtexture = new ResourceImage[NUM_THING_TEXTURES]; - for(int i = 0; i < NUM_THING_TEXTURES; i++) - { - thingtexture[i] = new ResourceImage("CodeImp.DoomBuilder.Resources.Thing2D_" + i.ToString(CultureInfo.InvariantCulture) + ".png"); - thingtexture[i].UseColorCorrection = false; - thingtexture[i].LoadImage(); - thingtexture[i].CreateTexture(); - } + //mxd. Load thing texture + thingtexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Thing2D.png") { UseColorCorrection = false }; + thingtexture.LoadImage(); + thingtexture.CreateTexture(); // Create surface manager surfaces = new SurfaceManager(); @@ -174,7 +168,7 @@ namespace CodeImp.DoomBuilder.Rendering { // Destroy rendertargets DestroyRendertargets(); - foreach(ResourceImage i in thingtexture) i.Dispose(); + thingtexture.Dispose(); //mxd // Dispose surface manager surfaces.Dispose(); @@ -996,7 +990,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 - THING_ARROW_SHRINK) * THING_ARROW_SIZE : (t.Size - THING_ARROW_SHRINK) * scale * THING_ARROW_SIZE); + float arrowsize = (t.FixedSize && (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; @@ -1005,20 +999,20 @@ namespace CodeImp.DoomBuilder.Rendering verts[offset].x = screenpos.x + sinarrowsize; verts[offset].y = screenpos.y + cosarrowsize; verts[offset].c = -1; - verts[offset].u = 0.51f; - verts[offset].v = 0.01f; + verts[offset].u = 0.501f; + verts[offset].v = 0.001f; offset++; verts[offset].x = screenpos.x - cosarrowsize; verts[offset].y = screenpos.y + sinarrowsize; verts[offset].c = -1; - verts[offset].u = 0.99f; - verts[offset].v = 0.01f; + verts[offset].u = 0.999f; + verts[offset].v = 0.001f; offset++; verts[offset].x = screenpos.x + cosarrowsize; verts[offset].y = screenpos.y - sinarrowsize; verts[offset].c = -1; - verts[offset].u = 0.51f; - verts[offset].v = 0.99f; + verts[offset].u = 0.501f; + verts[offset].v = 0.999f; offset++; verts[offset] = verts[offset - 2]; offset++; @@ -1027,8 +1021,8 @@ namespace CodeImp.DoomBuilder.Rendering verts[offset].x = screenpos.x - sinarrowsize; verts[offset].y = screenpos.y - cosarrowsize; verts[offset].c = -1; - verts[offset].u = 0.99f; - verts[offset].v = 0.99f; + verts[offset].u = 0.999f; + verts[offset].v = 0.999f; } //mxd @@ -1067,13 +1061,12 @@ namespace CodeImp.DoomBuilder.Rendering // This draws a set of things private void RenderThingsBatch(ICollection things, float alpha, bool fixedcolor, PixelColor c) { - int thingtextureindex = 0; - PixelColor tc; - DataStream stream; - // Anything to render? if(things.Count > 0) { + PixelColor tc; + DataStream stream; + // Make alpha color Color4 alphacolor = new Color4(alpha, 1.0f, 1.0f, 1.0f); @@ -1088,10 +1081,9 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Device.SetRenderState(RenderState.TextureFactor, alphacolor.ToArgb()); graphics.Device.SetStreamSource(0, thingsvertices, 0, FlatVertex.Stride); - // Determine things texture to use - if(General.Settings.SquareThings) thingtextureindex = 1; - graphics.Device.SetTexture(0, thingtexture[thingtextureindex].Texture); - graphics.Shaders.Things2D.Texture1 = thingtexture[thingtextureindex].Texture; + // Set things texture + graphics.Device.SetTexture(0, thingtexture.Texture); + graphics.Shaders.Things2D.Texture1 = thingtexture.Texture; SetWorldTransformation(false); graphics.Shaders.Things2D.SetSettings(alpha); @@ -1113,6 +1105,9 @@ namespace CodeImp.DoomBuilder.Rendering int totalcount = 0; foreach(Thing t in things) { + //mxd. Highlighted thing should be rendered separately + if(!fixedcolor && t.Highlighted) continue; + //collect models if (t.IsModel) { @@ -1167,7 +1162,6 @@ namespace CodeImp.DoomBuilder.Rendering //mxd. Render sprites int selectionColor = General.Colors.Selection.ToInt(); graphics.Shaders.Things2D.BeginPass(1); - float spriteShrink = General.Settings.SquareThings ? THING_SPRITE_SHRINK : THING_SPRITE_SHRINK * 2; foreach(KeyValuePair> group in thingsByType) { @@ -1202,17 +1196,17 @@ namespace CodeImp.DoomBuilder.Rendering if(sprite.Width > sprite.Height) { - spriteWidth = info.Radius * spriteScale - spriteShrink * spriteScale; + spriteWidth = info.Radius * spriteScale - THING_SPRITE_SHRINK * spriteScale; spriteHeight = spriteWidth * ((float)sprite.Height / sprite.Width); } else if(sprite.Width < sprite.Height) { - spriteHeight = info.Radius * spriteScale - spriteShrink * spriteScale; + spriteHeight = info.Radius * spriteScale - THING_SPRITE_SHRINK * spriteScale; spriteWidth = spriteHeight * ((float)sprite.Width / sprite.Height); } else { - spriteWidth = info.Radius * spriteScale - spriteShrink * spriteScale; + spriteWidth = info.Radius * spriteScale - THING_SPRITE_SHRINK * spriteScale; spriteHeight = spriteWidth; } @@ -1260,8 +1254,8 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Things2D.EndPass(); //mxd. Render thing arrows - graphics.Device.SetTexture(0, thingtexture[thingtextureindex].Texture); - graphics.Shaders.Things2D.Texture1 = thingtexture[thingtextureindex].Texture; + graphics.Device.SetTexture(0, thingtexture.Texture); + graphics.Shaders.Things2D.Texture1 = thingtexture.Texture; graphics.Shaders.Things2D.BeginPass(0); // Determine next lock size diff --git a/Source/Core/Resources/Thing2D.png b/Source/Core/Resources/Thing2D.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdbedd8e6823846a1bb908cd99004433e4f545d GIT binary patch literal 12738 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 ei=l9IHlO=+>-9VTh5spolFWGf^)w+}b literal 0 HcmV?d00001 diff --git a/Source/Core/Resources/Thing2D_0.png b/Source/Core/Resources/Thing2D_0.png deleted file mode 100644 index 00de624cb086b8f216f45b331d28ada290cd0fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22585 zcmXtfc|27A_y4_j#xi!Jgv!2UiEJgyOj_)bN?9@#Axeodwi%>S*|#W6hzgOlvdn0) zmLX*=Glh^C`wX-FruXOj`|Hj;9{0ZP>z?I#&Uv2mN^(AKEh;1@1OR}jt<4b^0DyQu zK|qk7clnss=g+&yh8;Z{b~5B**iD~MKj4sW$az0S+si)welC7KzSwKse&zshX59A3 zp;HlKe`63|{Z5Dft|%7DKIFVF%S7(-fSL^7gLKUfCCN;0MWepD6Pfk4o!QwEQrY^N z_mcJ%bf=XXi`~8El?0R9ci7h%9;$)pM?SBW$sm#tva@ zxcmQDX1|Z371G8j@_qTDJ53(kt~U-Ede|9Gd0QSlpVqm;8fyr;`KEl=D)Y}i6b5s$ zF}&--!c5od%43%77;U<9J$4}^mzzs347;&^45yeZ(9emhx4<{j%NAM#qN?9My|!bF zQq8&~ceDJJ08{Wv`KveMl=|dKv$pgbA-?0ZFB?(yt#OT9+ex`G?jh_6tnKcVheedP z;q!eL-jFe8QW~P>v9TzW28K-TUS0PO=p3VEqpX?47VbH--(>|&i?Tf?SH2&JZ};vE zoWBUNEJ$R}8T6GnBL4>@!<2Cee??MYv#ymwJJ%$L7FZE~x~wmE=M;(75i`Y{ZROrx z_?CR0-i4QdRV4409XT!-;CXzqwpMqFqyk8HUv=(9dr|Cd;Ztvf zwpg(oRL<)9%reCdhiOgawyw_vs-oroNvMhSxJ7_Jq5a}*Ai^u=h@dilxP{|-b)EG6 zB&5uTj;bnG4Dd}<*ilo?wjSU(4IYT^_-Q0>bwS(-aktAA4S0I5n4cV*DBqbX>9ts3 z^pdb#ZM3&+c{}t;7;ykcvWOLXvGQ8XmS2a~+E$bgDPqbcgJsm+%bUm_Zf(WE%@Ti+s#qa7 zL7dTK!*Q!dO=6qyk*3wpA<5TKPwz>S10b|v zIr^Ax*cfqqBDq5-`O(`~NgY*2i)Z0T0Mhq?`ggDlGl&i~gBc9vrD`T}Y8s36#NCPB zO{55^$!r1w0~=?@Oa$Z@gPSjncUCm3}8x* zdHH{2TNpSWDo8Nr7OX#{R7(nBF-M@vn%g;34{ec;`4IqkRtRz?;V^Ral53jD?*q)U zI$EvGkofB2Ylvj~Ku^a>=6y7T2GoxL?wM=@H%{S{f-Q5%RQ$2rtM$c zgWIX@ax?u5)#Q+V&2N^EW=vIif&(FaID?+fsyTFDTY#(p-*Ke(l6&em=V?W8rS;>4$Pt0~Zx`AB|-u^*wit?d3B@j=I6!1s?Xnk}n^Nbgph^iojf&;eV# zG|(^wMc9Vse7X`b@+dI+Zik0`ACP=Gzw>2W<576!yxY_Eo|FBY)LNx!^c1=5~e#U2VeuQ08AZ z{?#DxCE}U@OTZrqBx~W*M2<`lH?Y3uIIl}Nry*r>y_z_wN4N%m8r-TlsJtX5xBsdd zUK^6{w|7ppi4X77a{P1)?wSe513J6FXH<+TSED~dELr7PvkAv8#yFrQw?pHgmHtgt zo-7n0i8vg^mngF2fqX0do*cQpYozrt@O~ckxQ}~9W4)T5!8Nb|YE{uuA$6~~ZJB3F zp$N6h@=7(ezgxY4Lk83wq@1F6?DaV_@8_WFCyFr4Hwm9@GrMPJ6&)6Mukpv zR1uyrSkKikvON6`*5D&fk*<09IgAne#w!y(AKU7+leIKyptZCbGx4>YgIUK-z7P)4 zIz^kI9c@j;-SC=08;Q7Yy?LC#t^N|x{}5GIFM^XdE3{VwhBAQ%FwUqi%1JBLZqcZF z0(KMYs3P?1W@X8;=RutEWd-?l_!4J_cHTe~Why+?8(Y-d|KK1Ljdfg&2-;yGw&kj< zC_vNfEn18+xZKO&2Sb%0+LKqxNr1o=1WQ`-S<$&xbz3}~Ez}boaO)N~q~(#%)Mf&l zbgbEbOW_BWBQ7&LL;I1Aw=h%lR?>od9}@I-q0+i1PSnXew&i*erJIId1`)^`!b?Pa z3g+Z7*)Q_4QLqz%Mfi zPzGYPKE%1MEgk(}*aLff+_F5qo`t~632 z`z00&cq;X~Zr0(8U{&yd1VPWEliS|TwATO7!l<-+L2Wla_rTIhmHu2D(J-ya{+}t! zXbcjoKc7wn1kq#(QfWJ}VLx#Pxru~S;&_?-yr=+M}gx4UL5n)Gr7 zHhdXdvY~0ehv)oR2FaMxNurJ^6c&?t3g+tSdIP-4DU7;=Zgn~di!gYSvr7;O1OZ$n z12$7m3oe}m)PG3sOj@_DCGyYe*2aQSpXdFnb=6|@$`%v`4=CD+eC50hnDef{#c8mc zUI20ge`)w1VXYi`2)3zeePP#{nrzJrfD!eHY^&^yLhYTqIV`lSZL!3mFe8w$r^#-Tvse1hgF^~oh%YS2+8KU`Qe5d8#ah!cfeJU zBn&(91k#;z?BJ@&_HP3aE9N_RTG~4328~=6mW3ee;%7uHhgBa#!8jdn z!k#ont7b zlGNnuz6lDl%-k1o4omYulf--b*|ET|#m`2rI>u3Iz5W9M^+1rIj-MbYGm9Bdl-}7yqS$}0+i19M3@5#`$Y=~H zS-oSO6z8>4ROS*P%RNDai7(Yv#Tw>u59ffFNJXdlioY%TLW%;RZpzP|L$2kh#bx0d zO0r0_-Mav4sFvk-mSBbvoIG>J)z!kKK`jqx ztE)fA(fSKTM~74D1&?IG(!kgtNrFQQs;&p~b*b|tRAvhl*WhnjD#HvE&^estjW_a= zHGfzQHGr^amc(da7)NI7q!*fbCe%4cl@xiyj)NCL1o!}po4xaHNN=@^@$gT&jMRcT zB7Gt%H3h|C3=CK+wC-f=&}Ke{?}}b(FTt@oal3xp7{45YQ`3U~p6<;7xs^yl_k=tn z=yKF{1cnbgw_dmUG?C^p8-b~^B3;@UtSgcgcxuX)yGy5@-pvcxew@2-5jQ?kYuM&> zj~t<)mw}hB_0A9yp~}a=eZc^EVg{^cwNCO9DZRe+uGi`#qrMk}mss}LrVwkL{Y#Z3 zBoLsA=i+h#_r<2dNzyx6_lI%3q9;YnbSiCuis2W)*+LsXZc-LXzH_{d)xvrNsjdwqapIHx5!{z0C{4zdl1r}yxWYZ1Z zxG@=!p)D?tJ+#pt8mCwV;VDvB?uw@>do?KEmjYf<%AyrdmduTDODD&5X%uC+A2E8z zn^477m^m`dR%ERO_eT7Y?4z@Jm~0j;io(1?30?120R?tlCCw5Nc)64+-k=>T1O{Z< zQYyKY)atmp-<$R>=otmO8B6q}M!hFEx)YrNi84y0iTR!6)))k5f|+;1yY?E_GC8hR z2rbO8C*)29Y!jpI!^v{1iyX7W7311sEq4*7_nm=7{6?+*vezWcK6NTt_=f!3K(^5W zT@Mfv;SuEE-`C-i51*SxocD{(pQ5>KTINWgl>lQ^eE@;Zqqf`v%n7x~(c-cLl8m5Q zl)&a6<7?GLAOlg)Jub)WD$>Kf%mtn;SZkq6;~zYl-4AD^UXXoCFy7;=0+*J3rufko z(17Jb1T2@eIuOae-tF}QT&er(bzLS|7_nqe!Ke0;D<$IA=Z9%lf)Vm~RRLKfsRFEz z1~$DSigsE7h8mkrm7l8lSjNWQipYP0Isv%nuC2e_Y`_!whunWDoCJD$V#)_%-D+

Zg~VZyV79iP6KaZ5s$)J52LVD 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

LR7uI_5w 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 diff --git a/Source/Core/Resources/ThingBox.png b/Source/Core/Resources/ThingBox.png deleted file mode 100644 index 132dc5e0645d6b848bde3794276b995174f621b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0kYI^x zM2T~LZf+m4+TiHKK!#RXrn@tz!`-pO%EpUI0+bA zxGa%S(fIe}$K6kL0#;MjnSbZe-!jYN9P`^JXWJ4hqWE9ueZAJZtMlpZs%>p&&-chz z>FtUVf9>k4K)(W}Y+gW^v+<%w*APw@xYN zo^9iuU6zw`;}7$NkEaC}>YBIkM?`u@xlFVF-lZ$OEfi>hHG4+oMwe9&j(u>HH|f`@ zf5#flwQXunZauS%8$X^bA0~2$obU1 fe7^Ic 0) && General.Map.Config.LinedefActions.ContainsKey(t.Action)) action = General.Map.Config.LinedefActions[t.Action]; @@ -251,63 +248,16 @@ namespace CodeImp.DoomBuilder.BuilderModes // Determine linedef associations for(int i = 0; i < Thing.NUM_ARGS; i++) { - // Previous association highlights something? - if((association[i].Type == UniversalType.SectorTag) || - (association[i].Type == UniversalType.LinedefTag) || - (association[i].Type == UniversalType.ThingTag)) completeredraw = true; - // Make new association if(action != null) association[i].Set(t.Position, t.Args[i], action.Args[i].Type); else association[i].Set(new Vector2D(), 0, 0); - - // New association highlights something? - if((association[i].Type == UniversalType.SectorTag) || - (association[i].Type == UniversalType.LinedefTag) || - (association[i].Type == UniversalType.ThingTag)) completeredraw = true; } - // If we're changing associations, then we - // need to redraw the entire display - if(completeredraw) - { - // Set new highlight and redraw completely - highlighted = t; - General.Interface.RedrawDisplay(); - } - else - { - // Update display - if(renderer.StartThings(false)) - { - // Undraw previous highlight - Thing possiblecommentthing = t ?? highlighted; //mxd - if((highlighted != null) && !highlighted.IsDisposed) - renderer.RenderThing(highlighted, renderer.DetermineThingColor(highlighted), 1.0f); - - // Set new highlight - highlighted = t; - - // Render highlighted item - if((highlighted != null) && !highlighted.IsDisposed) - renderer.RenderThing(highlighted, General.Colors.Highlight, 1.0f); - - // Done with highlight - renderer.Finish(); - - //mxd. Update comment highlight? - if(General.Map.UDMF && General.Settings.RenderComments - && possiblecommentthing != null && !possiblecommentthing.IsDisposed - && renderer.StartOverlay(false)) - { - RenderComment(possiblecommentthing); - renderer.Finish(); - } - - renderer.Present(); - } - } + // Set new highlight and redraw display + highlighted = t; + General.Interface.RedrawDisplay(); // Show highlight info if((highlighted != null) && !highlighted.IsDisposed) @@ -339,7 +289,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if(renderer.StartThings(false)) { // Redraw highlight to show selection - renderer.RenderThing(highlighted, renderer.DetermineThingColor(highlighted), 1.0f); + renderer.RenderThing(highlighted, renderer.DetermineThingColor(highlighted), Presentation.THINGS_ALPHA); renderer.Finish(); renderer.Present(); } @@ -364,7 +314,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if(renderer.StartThings(false)) { // Render highlighted item - renderer.RenderThing(highlighted, General.Colors.Highlight, 1.0f); + renderer.RenderThing(highlighted, General.Colors.Highlight, Presentation.THINGS_ALPHA); renderer.Finish(); renderer.Present(); } @@ -407,7 +357,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if(renderer.StartThings(false)) { // Redraw highlight to show selection - renderer.RenderThing(highlighted, renderer.DetermineThingColor(highlighted), 1.0f); + renderer.RenderThing(highlighted, renderer.DetermineThingColor(highlighted), Presentation.THINGS_ALPHA); renderer.Finish(); renderer.Present(); } diff --git a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs index ebebccbd..ce9d8d80 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs @@ -155,7 +155,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if(renderer.StartThings(true)) { renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA); - renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f); + renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, Presentation.THINGS_ALPHA); renderer.Finish(); } diff --git a/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInLine.cs b/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInLine.cs index 0b045ac5..f24118bf 100644 --- a/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInLine.cs +++ b/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInLine.cs @@ -75,7 +75,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Rendering public override void RenderOverlaySelection(IRenderer2D renderer) { - renderer.RenderThing(thing, General.Colors.Selection, 0.8f); + renderer.RenderThing(thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } // mxd. More rencering diff --git a/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInThing.cs b/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInThing.cs index 48932c41..f9e35fad 100644 --- a/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInThing.cs +++ b/Source/Plugins/BuilderModes/ErrorChecks/ResultStuckThingInThing.cs @@ -84,8 +84,8 @@ namespace CodeImp.DoomBuilder.BuilderModes // Rendering public override void RenderOverlaySelection(IRenderer2D renderer) { - renderer.RenderThing(thing1, General.Colors.Selection, 1.0f); - renderer.RenderThing(thing2, General.Colors.Selection, 1.0f); + renderer.RenderThing(thing1, General.Colors.Selection, Presentation.THINGS_ALPHA); + renderer.RenderThing(thing2, General.Colors.Selection, Presentation.THINGS_ALPHA); } // This removes the first thing diff --git a/Source/Plugins/BuilderModes/ErrorChecks/ResultThingOutside.cs b/Source/Plugins/BuilderModes/ErrorChecks/ResultThingOutside.cs index fa06b934..fcb39c4e 100644 --- a/Source/Plugins/BuilderModes/ErrorChecks/ResultThingOutside.cs +++ b/Source/Plugins/BuilderModes/ErrorChecks/ResultThingOutside.cs @@ -73,7 +73,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Rendering public override void RenderOverlaySelection(IRenderer2D renderer) { - renderer.RenderThing(thing, General.Colors.Selection, 1.0f); + renderer.RenderThing(thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } // This removes the thing diff --git a/Source/Plugins/BuilderModes/ErrorChecks/ResultUnknownThing.cs b/Source/Plugins/BuilderModes/ErrorChecks/ResultUnknownThing.cs index a8a049af..c7350fc6 100644 --- a/Source/Plugins/BuilderModes/ErrorChecks/ResultUnknownThing.cs +++ b/Source/Plugins/BuilderModes/ErrorChecks/ResultUnknownThing.cs @@ -57,7 +57,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Rendering public override void RenderOverlaySelection(IRenderer2D renderer) { - renderer.RenderThing(thing, General.Colors.Selection, 1.0f); + renderer.RenderThing(thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } // This removes the thing diff --git a/Source/Plugins/BuilderModes/ErrorChecks/ResultUnusedThing.cs b/Source/Plugins/BuilderModes/ErrorChecks/ResultUnusedThing.cs index abebd7d9..b870cace 100644 --- a/Source/Plugins/BuilderModes/ErrorChecks/ResultUnusedThing.cs +++ b/Source/Plugins/BuilderModes/ErrorChecks/ResultUnusedThing.cs @@ -59,7 +59,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Rendering public override void RenderOverlaySelection(IRenderer2D renderer) { - renderer.RenderThing(thing, General.Colors.Selection, 1.0f); + renderer.RenderThing(thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } // This removes the thing diff --git a/Source/Plugins/BuilderModes/FindReplace/BaseFindThing.cs b/Source/Plugins/BuilderModes/FindReplace/BaseFindThing.cs index 5b399b37..a6d0bba2 100644 --- a/Source/Plugins/BuilderModes/FindReplace/BaseFindThing.cs +++ b/Source/Plugins/BuilderModes/FindReplace/BaseFindThing.cs @@ -34,7 +34,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public override void RenderThingsSelection(IRenderer2D renderer, FindReplaceObject[] selection) { foreach(FindReplaceObject o in selection) - renderer.RenderThing(o.Thing, General.Colors.Selection, 1.0f); + renderer.RenderThing(o.Thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } // Edit objects diff --git a/Source/Plugins/BuilderModes/General/BuilderPlug.cs b/Source/Plugins/BuilderModes/General/BuilderPlug.cs index a273b3cd..31cb5d71 100644 --- a/Source/Plugins/BuilderModes/General/BuilderPlug.cs +++ b/Source/Plugins/BuilderModes/General/BuilderPlug.cs @@ -568,7 +568,7 @@ namespace CodeImp.DoomBuilder.BuilderModes foreach(Thing t in General.Map.Map.Things) { if(!asso.Tags.Contains(t.Tag)) continue; - renderer.RenderThing(t, General.Colors.Indication, 1.0f); + renderer.RenderThing(t, General.Colors.Indication, Presentation.THINGS_ALPHA); if(General.Settings.GZShowEventLines) eventlines.Add(new Line3D(asso.Center, t.Position)); //mxd } break; @@ -646,7 +646,7 @@ namespace CodeImp.DoomBuilder.BuilderModes ((action.Args[3].Type == (int)asso.Type) && (asso.Tags.Contains(t.Args[3]))) || ((action.Args[4].Type == (int)asso.Type) && (asso.Tags.Contains(t.Args[4])))) { - renderer.RenderThing(t, General.Colors.Indication, 1.0f); + renderer.RenderThing(t, General.Colors.Indication, Presentation.THINGS_ALPHA); if(General.Settings.GZShowEventLines) eventlines.Add(new Line3D(t.Position, asso.Center)); //mxd } } diff --git a/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs b/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs index 5d9a5d77..26f7dff7 100644 --- a/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs +++ b/Source/Plugins/SoundPropagationMode/SoundEnvironmentMode.cs @@ -312,12 +312,12 @@ namespace CodeImp.DoomBuilder.SoundPropagationMode { foreach (SoundEnvironment se in BuilderPlug.Me.SoundEnvironments) { - if (se.Things.Count > 0) renderer.RenderThingSet(se.Things, 1.0f); + if(se.Things.Count > 0) renderer.RenderThingSet(se.Things, Presentation.THINGS_ALPHA); } } //mxd. Render highlighted thing - if(highlightedthing != null) renderer.RenderThing(highlightedthing, General.Colors.Selection, 1.0f); + if(highlightedthing != null) renderer.RenderThing(highlightedthing, General.Colors.Selection, Presentation.THINGS_ALPHA); renderer.Finish(); } diff --git a/Source/Plugins/SoundPropagationMode/SoundPropagationMode.cs b/Source/Plugins/SoundPropagationMode/SoundPropagationMode.cs index 8e3bf572..11337e99 100644 --- a/Source/Plugins/SoundPropagationMode/SoundPropagationMode.cs +++ b/Source/Plugins/SoundPropagationMode/SoundPropagationMode.cs @@ -280,7 +280,7 @@ namespace CodeImp.DoomBuilder.SoundPropagationMode renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, Presentation.THINGS_HIDDEN_ALPHA); foreach (Thing thing in huntingThings) { - renderer.RenderThing(thing, General.Colors.Selection, 1.0f); + renderer.RenderThing(thing, General.Colors.Selection, Presentation.THINGS_ALPHA); } renderer.Finish(); diff --git a/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs b/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs index 7e58d70f..437c798f 100644 --- a/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs +++ b/Source/Plugins/StairSectorBuilder/StairSectorBuilderMode.cs @@ -1416,7 +1416,7 @@ namespace CodeImp.DoomBuilder.StairSectorBuilderMode // Render things if (renderer.StartThings(true)) { - renderer.RenderThingSet(General.Map.Map.Things, 1.0f); + renderer.RenderThingSet(General.Map.Map.Things, Presentation.THINGS_ALPHA); renderer.Finish(); }