diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 98b078a8a2526d8035c9ba90527c039adba8226c..ea98ca36ddf5f5567cf58e964eb3820cd116271a 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -1060,6 +1060,8 @@ <EmbeddedResource Include="Resources\CommentRegular.png" /> <EmbeddedResource Include="Resources\CommentSmile.png" /> <None Include="Resources\Comment.png" /> + <None Include="Resources\About.png" /> + <None Include="Resources\Configuration.png" /> <Content Include="Resources\DB2.ico" /> <None Include="Resources\GZDB2.ico" /> <None Include="Resources\fog.png" /> @@ -1075,6 +1077,11 @@ <None Include="Resources\InfoPanelCollapse.png" /> <None Include="Resources\InfoPanelExpand.png" /> <None Include="Resources\GridDynamic.png" /> + <None Include="Resources\Group.png" /> + <None Include="Resources\GroupAdd.png" /> + <None Include="Resources\GroupRemove.png" /> + <None Include="Resources\GridDecrease.png" /> + <None Include="Resources\GridIncrease.png" /> <Content Include="Resources\Light.png" /> <None Include="Resources\Lightbulb.png" /> <None Include="Resources\LightDisabled.png" /> @@ -1090,6 +1097,9 @@ <None Include="Resources\ModelDisabled.png" /> <None Include="Resources\ModelFiltered.png" /> <Content Include="Resources\Model_selected.png" /> + <None Include="Resources\Update.png" /> + <None Include="Resources\Reload.png" /> + <None Include="Resources\Preferences.png" /> <None Include="Resources\Replace.png" /> <None Include="Resources\SearchPrev.png" /> <None Include="Resources\SearchNext.png" /> diff --git a/Source/Core/GZBuilder/Data/GlowingFlatData.cs b/Source/Core/GZBuilder/Data/GlowingFlatData.cs index f940deb64916573922f27d993256b8f3d2c05b92..566fad977fd490d1ac3f0af31f8f289ad304b723 100644 --- a/Source/Core/GZBuilder/Data/GlowingFlatData.cs +++ b/Source/Core/GZBuilder/Data/GlowingFlatData.cs @@ -7,6 +7,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data public PixelColor Color; public int Height; public bool Fullbright; + public bool Fullblack; // GLOOME only + public bool Subtractive; // GLOOME only public bool CalculateTextureColor; } } diff --git a/Source/Core/GZBuilder/GZDoom/GldefsParser.cs b/Source/Core/GZBuilder/GZDoom/GldefsParser.cs index 76ca7239546fd0160e3384d095e3fd453f1188b0..075a11bb79dfc677beb96fdc7da59ead0fa56cdd 100644 --- a/Source/Core/GZBuilder/GZDoom/GldefsParser.cs +++ b/Source/Core/GZBuilder/GZDoom/GldefsParser.cs @@ -18,6 +18,12 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom { #region ================== Structs + private const int DEFAULT_GLOW_HEIGHT = 64; + + #endregion + + #region ================== Structs + private struct GldefsLightType { public const string POINT = "pointlight"; @@ -509,16 +515,42 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom // Add glow data glowingflats[General.Map.Data.GetFullLongFlatName(Lump.MakeLongName(token, General.Map.Options.UseLongTextureNames))] = new GlowingFlatData { - Height = 128, + Height = DEFAULT_GLOW_HEIGHT * 2, Fullbright = true, Color = new PixelColor(255, 255, 255, 255), CalculateTextureColor = true }; } } - else if(token == "texture") + // GLOOME subtractive flats + else if(token == "subflats" || token == "subwalls") + { + // Next sould be opening brace + if(!NextTokenIs("{")) break; + + // Read flat names + while(SkipWhitespace(true)) + { + token = ReadToken(); + if(token == "}") break; + + // Add glow data + glowingflats[General.Map.Data.GetFullLongFlatName(Lump.MakeLongName(token, General.Map.Options.UseLongTextureNames))] = new GlowingFlatData { + Height = DEFAULT_GLOW_HEIGHT * 2, + Fullblack = true, + Subtractive = true, + Color = new PixelColor(255, 0, 0, 0), + CalculateTextureColor = false + }; + } + } + else if(token == "texture" || token == "subtexture") { + int color; + int glowheight = DEFAULT_GLOW_HEIGHT; + bool subtractivetexture = (token == "subtexture"); string texturename = StripTokenQuotes(ReadToken()); + if(string.IsNullOrEmpty(texturename)) { General.ErrorLogger.Add(ErrorType.Error, "Error in '" + sourcefilename + "' at line " + GetCurrentLineNumber() + ": expected a texture name."); @@ -532,7 +564,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom SkipWhitespace(true); token = ReadToken(); - int color; if(!int.TryParse(token, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out color)) { //probably it's a color name? @@ -556,8 +587,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom { // Add glow data glowingflats[texturehash] = new GlowingFlatData { - Height = 128, - Fullbright = false, + Height = glowheight * 2, + Subtractive = subtractivetexture, Color = PixelColor.FromInt(color).WithAlpha(255), CalculateTextureColor = false }; @@ -565,36 +596,52 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom continue; } - // Should be glow height - int height; - if(!int.TryParse(token, NumberStyles.Integer, CultureInfo.InvariantCulture, out height)) - { - General.ErrorLogger.Add(ErrorType.Error, "Error in '" + sourcefilename + "' at line " + GetCurrentLineNumber() + ": expected glow height value, but got '" + token + "'."); - break; - } + // Can be glow height + SkipWhitespace(true); + token = ReadToken(); - // Now we can find a comma - if(!NextTokenIs(",", false)) + int h; + if(int.TryParse(token, NumberStyles.Integer, CultureInfo.InvariantCulture, out h)) { - // Add glow data - glowingflats[texturehash] = new GlowingFlatData { - Height = height * 2, - Fullbright = false, - Color = PixelColor.FromInt(color).WithAlpha(255), - CalculateTextureColor = false - }; + // Can't pass glowheight directly cause TryParse will unconditionally set it to 0 + glowheight = h; + + // Now we can find a comma + if(!NextTokenIs(",", false)) + { + // Add glow data + glowingflats[texturehash] = new GlowingFlatData { + Height = glowheight * 2, + Subtractive = subtractivetexture, + Color = PixelColor.FromInt(color).WithAlpha(255), + CalculateTextureColor = false + }; + + continue; + } - continue; + // Read the flag + SkipWhitespace(true); + token = ReadToken().ToLowerInvariant(); } - // Next is "fullbright" flag - SkipWhitespace(true); - bool fullbright = (ReadToken().ToLowerInvariant() == "fullbright"); + // Next is "fullbright" or "fullblack" flag + bool fullbright = (token == "fullbright"); + bool fullblack = (!subtractivetexture && token == "fullblack"); + + if(!fullblack && !fullbright) + { + string expectedflags = (subtractivetexture ? "'fullbright'" : "'fullbright' or 'fullblack'"); + General.ErrorLogger.Add(ErrorType.Error, "Error in '" + sourcefilename + "' at line " + GetCurrentLineNumber() + ": expected " + expectedflags + " flag, but got '" + token + "'."); + break; + } // Add glow data glowingflats[texturehash] = new GlowingFlatData { - Height = height, + Height = glowheight * 2, Fullbright = fullbright, + Fullblack = fullblack, + Subtractive = subtractivetexture, Color = PixelColor.FromInt(color).WithAlpha(255), CalculateTextureColor = false }; @@ -604,8 +651,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom // Now find closing brace while(SkipWhitespace(true)) { - string t = ReadToken(); - if(string.IsNullOrEmpty(t) || t == "}") break; + token = ReadToken(); + if(string.IsNullOrEmpty(token) || token == "}") break; } } else if (token == "#include") diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs index 91293f1ad56ea2b96315097dbb35edddcd50baa0..968f880c808ca2126324e59af3dff4897520851e 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.5466 +// Runtime Version:2.0.50727.5485 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -60,6 +60,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap About { + get { + object obj = ResourceManager.GetObject("About", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Add { get { object obj = ResourceManager.GetObject("Add", resourceCulture); @@ -186,6 +193,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Configuration { + get { + object obj = ResourceManager.GetObject("Configuration", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Copy { get { object obj = ResourceManager.GetObject("Copy", resourceCulture); @@ -305,6 +319,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap GridDecrease { + get { + object obj = ResourceManager.GetObject("GridDecrease", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap GridDynamic { get { object obj = ResourceManager.GetObject("GridDynamic", resourceCulture); @@ -312,6 +333,34 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap GridIncrease { + get { + object obj = ResourceManager.GetObject("GridIncrease", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Group { + get { + object obj = ResourceManager.GetObject("Group", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap GroupAdd { + get { + object obj = ResourceManager.GetObject("GroupAdd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap GroupRemove { + get { + object obj = ResourceManager.GetObject("GroupRemove", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap GZDB_Logo_small { get { object obj = ResourceManager.GetObject("GZDB_Logo_small", resourceCulture); @@ -599,6 +648,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Preferences { + get { + object obj = ResourceManager.GetObject("Preferences", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Properties { get { object obj = ResourceManager.GetObject("Properties", resourceCulture); @@ -627,6 +683,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Reload { + get { + object obj = ResourceManager.GetObject("Reload", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Replace { get { object obj = ResourceManager.GetObject("Replace", resourceCulture); @@ -907,6 +970,13 @@ namespace CodeImp.DoomBuilder.Properties { } } + internal static System.Drawing.Bitmap Update { + get { + object obj = ResourceManager.GetObject("Update", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap ViewBrightness { get { object obj = ResourceManager.GetObject("ViewBrightness", resourceCulture); diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx index d44bb587d4c5f1a7f01f408d2d1a7e52564ad798..6664860deffcd356ac5cd859ed36c2d6e399ee55 100644 --- a/Source/Core/Properties/Resources.resx +++ b/Source/Core/Properties/Resources.resx @@ -514,4 +514,34 @@ <data name="GridDynamic" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\GridDynamic.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="About" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\About.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Configuration" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Configuration.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Preferences" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Preferences.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Reload" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Reload.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Update" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Update.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="Group" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Group.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="GroupAdd" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\GroupAdd.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="GroupRemove" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\GroupRemove.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="GridDecrease" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\GridDecrease.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> + <data name="GridIncrease" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\GridIncrease.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/PixelColor.cs b/Source/Core/Rendering/PixelColor.cs index 416ff6138e39a1343eb9925d0cac1189f5a78a2b..e2386056581cb0e23438c3e1f96eee12bbf4f349 100644 --- a/Source/Core/Rendering/PixelColor.cs +++ b/Source/Core/Rendering/PixelColor.cs @@ -29,6 +29,10 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Constants public const float BYTE_TO_FLOAT = 0.00392156862745098f; + + //mxd. Some color constants, full alpha + public const int INT_BLACK = -16777216; + public const int INT_WHITE = -1; #endregion @@ -166,6 +170,18 @@ namespace CodeImp.DoomBuilder.Rendering b = (byte)(Math.Min(a.b + b.b, 255)) }; } + + //mxd. This subtracts two colors + public static PixelColor Subtract(PixelColor a, PixelColor b) + { + return new PixelColor + { + a = (byte)(Math.Max(a.a , b.a)), // Not sure about that... + r = (byte)(Math.Max(a.r - b.r, 0)), + g = (byte)(Math.Max(a.g - b.g, 0)), + b = (byte)(Math.Max(a.b - b.b, 0)) + }; + } // This modulates two colors public static PixelColor Modulate(PixelColor a, PixelColor b) @@ -187,6 +203,12 @@ namespace CodeImp.DoomBuilder.Rendering b = (byte)((ab * bb) * 255.0f) }; } + + //mxd. Handy while debugging + public override string ToString() + { + return "[A=" + a + ", R=" + r + ", G=" + g + ", B=" + b + "]"; + } #endregion } diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs index f91395894228bae43c44e001ddf54c48c10c85e7..f597cb5588c39cb4e6cb387edeca236e0027979d 100644 --- a/Source/Core/Rendering/Renderer3D.cs +++ b/Source/Core/Rendering/Renderer3D.cs @@ -40,7 +40,7 @@ namespace CodeImp.DoomBuilder.Rendering private const int RENDER_PASSES = 4; private const float PROJ_NEAR_PLANE = 1f; - private const float CROSSHAIR_SCALE = 0.06f; + //private const float CROSSHAIR_SCALE = 0.06f; private const float FOG_RANGE = 0.9f; internal const float GZDOOM_VERTICAL_VIEW_STRETCH = 1.2f; internal const float GZDOOM_INVERTED_VERTICAL_VIEW_STRETCH = 1.0f / GZDOOM_VERTICAL_VIEW_STRETCH; @@ -187,31 +187,26 @@ namespace CodeImp.DoomBuilder.Rendering // Determine coordinates float width = windowsize.Width; float height = windowsize.Height; - float size = height * CROSSHAIR_SCALE; - RectangleF rect = new RectangleF((width - size) / 2, (height - size) / 2, size, size); + RectangleF rect = new RectangleF((float)Math.Round((width - texturesize.Width) * 0.5f), (float)Math.Round((height - texturesize.Height) * 0.5f), texturesize.Width, texturesize.Height); // Make vertices crosshairverts = new FlatVertex[4]; crosshairverts[0].x = rect.Left; crosshairverts[0].y = rect.Top; crosshairverts[0].c = -1; - crosshairverts[0].u = 1f / texturesize.Width; - crosshairverts[0].v = 1f / texturesize.Height; crosshairverts[1].x = rect.Right; crosshairverts[1].y = rect.Top; crosshairverts[1].c = -1; - crosshairverts[1].u = 1f - 1f / texturesize.Width; - crosshairverts[1].v = 1f / texturesize.Height; + crosshairverts[1].u = 1.0f; crosshairverts[2].x = rect.Left; crosshairverts[2].y = rect.Bottom; crosshairverts[2].c = -1; - crosshairverts[2].u = 1f / texturesize.Width; - crosshairverts[2].v = 1f - 1f / texturesize.Height; + crosshairverts[2].v = 1.0f; crosshairverts[3].x = rect.Right; crosshairverts[3].y = rect.Bottom; crosshairverts[3].c = -1; - crosshairverts[3].u = 1f - 1f / texturesize.Width; - crosshairverts[3].v = 1f - 1f / texturesize.Height; + crosshairverts[3].u = 1.0f; + crosshairverts[3].v = 1.0f; } #endregion @@ -808,7 +803,7 @@ namespace CodeImp.DoomBuilder.Rendering // Determine the shader pass we want to use for this object int wantedshaderpass = (((g == highlighted) && showhighlight) || (g.Selected && showselection)) ? highshaderpass : shaderpass; - //mxd + //mxd. Render fog? if( !(!General.Settings.GZDrawFog || fullbrightness || sector.Sector.Brightness > 247) ) wantedshaderpass += 8; @@ -833,7 +828,7 @@ namespace CodeImp.DoomBuilder.Rendering { graphics.Shaders.World3D.World = world; graphics.Shaders.World3D.LightColor = sector.Sector.FogColor; - graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, GetFogEnd(sector.Sector, true)); + graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, sector.FogDistance); } graphics.Shaders.World3D.SetHighlightColor(CalculateHighlightColor((g == highlighted) && showhighlight, (g.Selected && showselection)).ToArgb()); @@ -968,7 +963,8 @@ namespace CodeImp.DoomBuilder.Rendering { graphics.Shaders.World3D.World = world; graphics.Shaders.World3D.LightColor = t.Thing.Sector.FogColor; - graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, GetFogEnd(t.Thing.Sector, (litcolor.ToArgb() != 0))); + float fogdistance = (litcolor.ToArgb() != 0 ? VisualSector.MAXIMUM_FOG_DISTANCE : t.FogDistance); + graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, fogdistance); } graphics.Shaders.World3D.ApplySettings(); @@ -1155,9 +1151,9 @@ namespace CodeImp.DoomBuilder.Rendering if (wantedshaderpass > 7) { graphics.Shaders.World3D.World = world; - graphics.Shaders.World3D.LightColor = t.Thing.Sector.FogColor; - graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, GetFogEnd(t.Thing.Sector, (litcolor.ToArgb() != 0))); + float fogdistance = (litcolor.ToArgb() != 0 ? VisualSector.MAXIMUM_FOG_DISTANCE : t.FogDistance); + graphics.Shaders.World3D.CameraPosition = new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, fogdistance); } for(int i = 0; i < group.Key.Model.Meshes.Count; i++) @@ -1204,24 +1200,6 @@ namespace CodeImp.DoomBuilder.Rendering return litColor; } - //mxd. This returns distance, at which fog color completely replaces texture color for given sector - private static float GetFogEnd(Sector s, bool skipwhennofog) - { - float brightness = Math.Max(30, s.Brightness); - - if (s.HasFogColor) - { - if(s.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0) - return General.Map.Data.MapInfo.OutsideFogDensity; - if(!s.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0) - return General.Map.Data.MapInfo.FogDensity; - return brightness * 11.0f; - } - - if(skipwhennofog) return 2805f; //255 * 11 - return (float)Math.Pow(2.0f, brightness / 11.0f); - } - // This calculates the highlight/selection color private Color4 CalculateHighlightColor(bool ishighlighted, bool isselected) { @@ -1368,7 +1346,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Display2D.Begin(); graphics.Shaders.Display2D.SetSettings(1.0f, 1.0f, 0.0f, 1.0f, true); graphics.Shaders.Display2D.BeginPass(1); - graphics.Device.DrawUserPrimitives<FlatVertex>(PrimitiveType.TriangleStrip, 0, 2, crosshairverts); + graphics.Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 0, 2, crosshairverts); graphics.Shaders.Display2D.EndPass(); graphics.Shaders.Display2D.End(); } diff --git a/Source/Core/Resources/About.png b/Source/Core/Resources/About.png new file mode 100644 index 0000000000000000000000000000000000000000..6b26413994f827c093e82be73a97e4e4aab018db Binary files /dev/null and b/Source/Core/Resources/About.png differ diff --git a/Source/Core/Resources/Configuration.png b/Source/Core/Resources/Configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd253a513b4f264fe49c7a275c8960159451691 Binary files /dev/null and b/Source/Core/Resources/Configuration.png differ diff --git a/Source/Core/Resources/Crosshair.png b/Source/Core/Resources/Crosshair.png index 40c70d93042d9b0b22ca315c013f237da164abfb..7d069a2f871a170c18a20a51c8cd5bedb3431402 100644 Binary files a/Source/Core/Resources/Crosshair.png and b/Source/Core/Resources/Crosshair.png differ diff --git a/Source/Core/Resources/GridDecrease.png b/Source/Core/Resources/GridDecrease.png new file mode 100644 index 0000000000000000000000000000000000000000..68d287e5acec198c6f58b699f1fbfdd5b4e4c9c9 Binary files /dev/null and b/Source/Core/Resources/GridDecrease.png differ diff --git a/Source/Core/Resources/GridIncrease.png b/Source/Core/Resources/GridIncrease.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f1355fe69d4d35ae75be09da56355fe3093888 Binary files /dev/null and b/Source/Core/Resources/GridIncrease.png differ diff --git a/Source/Core/Resources/Group.png b/Source/Core/Resources/Group.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3f760541d9d68989ec70090bd4ee75e8b59d49 Binary files /dev/null and b/Source/Core/Resources/Group.png differ diff --git a/Source/Core/Resources/GroupAdd.png b/Source/Core/Resources/GroupAdd.png new file mode 100644 index 0000000000000000000000000000000000000000..852f4037843d3f959c29a37588a6516ba6f87302 Binary files /dev/null and b/Source/Core/Resources/GroupAdd.png differ diff --git a/Source/Core/Resources/GroupRemove.png b/Source/Core/Resources/GroupRemove.png new file mode 100644 index 0000000000000000000000000000000000000000..6610367e2e9f8127aaf7001734a6202958ffaa55 Binary files /dev/null and b/Source/Core/Resources/GroupRemove.png differ diff --git a/Source/Core/Resources/Preferences.png b/Source/Core/Resources/Preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..305e2ca3bb76452062380117c3f6cfe9bfe7154a Binary files /dev/null and b/Source/Core/Resources/Preferences.png differ diff --git a/Source/Core/Resources/Reload.png b/Source/Core/Resources/Reload.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2f5b7d8ed51a95d50af68c91de89581294b566 Binary files /dev/null and b/Source/Core/Resources/Reload.png differ diff --git a/Source/Core/Resources/Update.png b/Source/Core/Resources/Update.png new file mode 100644 index 0000000000000000000000000000000000000000..16c6ee144813ef5791c372ddec8ba65d6a6453b6 Binary files /dev/null and b/Source/Core/Resources/Update.png differ diff --git a/Source/Core/VisualModes/VisualSector.cs b/Source/Core/VisualModes/VisualSector.cs index 50b6fc9e83148854bc9f46b97d50a59c58491a9e..a23c9933c49837bf8ffd5a4d43b64d9b4bca4132 100644 --- a/Source/Core/VisualModes/VisualSector.cs +++ b/Source/Core/VisualModes/VisualSector.cs @@ -30,6 +30,8 @@ namespace CodeImp.DoomBuilder.VisualModes { #region ================== Constants + public const float MAXIMUM_FOG_DISTANCE = 2805f; //mxd. 255 * 11. Straight from GZDoom source. + #endregion #region ================== Variables @@ -40,6 +42,9 @@ namespace CodeImp.DoomBuilder.VisualModes private Dictionary<Sidedef, List<VisualGeometry>> sidedefgeometry; private VertexBuffer geobuffer; private bool updategeo; + + //mxd. Rendering + protected float fogdistance; // Distance, at which fog color completely replaces texture color of this thing // Original sector private Sector sector; @@ -55,6 +60,7 @@ namespace CodeImp.DoomBuilder.VisualModes internal List<VisualGeometry> AllGeometry { get { return allgeometry; } } internal VertexBuffer GeometryBuffer { get { return geobuffer; } } internal bool NeedsUpdateGeo { get { return updategeo; } set { updategeo |= value; } } + public float FogDistance { get { return fogdistance; } } //mxd public bool IsDisposed { get { return isdisposed; } } public Sector Sector { get { return sector; } } diff --git a/Source/Core/VisualModes/VisualThing.cs b/Source/Core/VisualModes/VisualThing.cs index 70c98c4de3e0276fd47522bbed25cc54231eb5a4..87abcba82545a14ddd051a50a02c32a4e5bfef9a 100644 --- a/Source/Core/VisualModes/VisualThing.cs +++ b/Source/Core/VisualModes/VisualThing.cs @@ -65,6 +65,7 @@ namespace CodeImp.DoomBuilder.VisualModes private float cameradistance; private int cagecolor; protected bool sizeless; //mxd. Used to render visual things with 0 width and height + protected float fogdistance; //mxd. Distance, at which fog color completely replaces texture color of this thing // Selected? protected bool selected; @@ -109,6 +110,7 @@ namespace CodeImp.DoomBuilder.VisualModes internal int VertexColor { get { return vertices.Length > 0 ? vertices[0].c : 0;} } public int CameraDistance3D { get { return cameraDistance3D; } } public bool Sizeless { get { return sizeless; } } + public float FogDistance { get { return fogdistance; } } public Vector3 Center { get { if (isGldefsLight) return position_v3 + lightOffset; @@ -119,6 +121,7 @@ namespace CodeImp.DoomBuilder.VisualModes public float LocalCenterZ { get { return thingheight / 2f; } } //mxd public Vector3 PositionV3 { get { return position_v3; } } public Vector3[] BoundingBox { get { return boundingBox; } } + //mxd. light properties public DynamicLightType LightType { get { return lightType; } } public float LightRadius { get { return lightRadius; } } diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs index f61f95d243970e5b20aa3b58a0f76fbb00803651..6edcbada9805cb29ae428e298101832cb1148628 100644 --- a/Source/Core/Windows/MainForm.Designer.cs +++ b/Source/Core/Windows/MainForm.Designer.cs @@ -635,6 +635,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemgridinc // + this.itemgridinc.Image = global::CodeImp.DoomBuilder.Properties.Resources.GridIncrease; this.itemgridinc.Name = "itemgridinc"; this.itemgridinc.Size = new System.Drawing.Size(219, 22); this.itemgridinc.Tag = "builder_griddec"; @@ -643,6 +644,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemgriddec // + this.itemgriddec.Image = global::CodeImp.DoomBuilder.Properties.Resources.GridDecrease; this.itemgriddec.Name = "itemgriddec"; this.itemgriddec.Size = new System.Drawing.Size(219, 22); this.itemgriddec.Tag = "builder_gridinc"; @@ -674,18 +676,21 @@ namespace CodeImp.DoomBuilder.Windows // // addToGroup // + this.addToGroup.Image = global::CodeImp.DoomBuilder.Properties.Resources.GroupAdd; this.addToGroup.Name = "addToGroup"; this.addToGroup.Size = new System.Drawing.Size(219, 22); this.addToGroup.Text = "Add Selection to Group"; // // selectGroup // + this.selectGroup.Image = global::CodeImp.DoomBuilder.Properties.Resources.Group; this.selectGroup.Name = "selectGroup"; this.selectGroup.Size = new System.Drawing.Size(219, 22); this.selectGroup.Text = "Select Group"; // // clearGroup // + this.clearGroup.Image = global::CodeImp.DoomBuilder.Properties.Resources.GroupRemove; this.clearGroup.Name = "clearGroup"; this.clearGroup.Size = new System.Drawing.Size(219, 22); this.clearGroup.Text = "Clear Group"; @@ -987,6 +992,7 @@ namespace CodeImp.DoomBuilder.Windows // // iteminsertprefabfile // + this.iteminsertprefabfile.Image = global::CodeImp.DoomBuilder.Properties.Resources.Prefab; this.iteminsertprefabfile.Name = "iteminsertprefabfile"; this.iteminsertprefabfile.Size = new System.Drawing.Size(199, 22); this.iteminsertprefabfile.Tag = "builder_insertprefabfile"; @@ -995,6 +1001,7 @@ namespace CodeImp.DoomBuilder.Windows // // iteminsertpreviousprefab // + this.iteminsertpreviousprefab.Image = global::CodeImp.DoomBuilder.Properties.Resources.Prefab2; this.iteminsertpreviousprefab.Name = "iteminsertpreviousprefab"; this.iteminsertpreviousprefab.Size = new System.Drawing.Size(199, 22); this.iteminsertpreviousprefab.Tag = "builder_insertpreviousprefab"; @@ -1036,6 +1043,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemreloadresources // + this.itemreloadresources.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reload; this.itemreloadresources.Name = "itemreloadresources"; this.itemreloadresources.Size = new System.Drawing.Size(246, 22); this.itemreloadresources.Tag = "builder_reloadresources"; @@ -1044,6 +1052,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemReloadModedef // + this.itemReloadModedef.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reload; this.itemReloadModedef.Name = "itemReloadModedef"; this.itemReloadModedef.Size = new System.Drawing.Size(246, 22); this.itemReloadModedef.Tag = "builder_gzreloadmodeldef"; @@ -1052,6 +1061,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemReloadGldefs // + this.itemReloadGldefs.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reload; this.itemReloadGldefs.Name = "itemReloadGldefs"; this.itemReloadGldefs.Size = new System.Drawing.Size(246, 22); this.itemReloadGldefs.Tag = "builder_gzreloadgldefs"; @@ -1075,6 +1085,7 @@ namespace CodeImp.DoomBuilder.Windows // // configurationToolStripMenuItem // + this.configurationToolStripMenuItem.Image = global::CodeImp.DoomBuilder.Properties.Resources.Configuration; this.configurationToolStripMenuItem.Name = "configurationToolStripMenuItem"; this.configurationToolStripMenuItem.Size = new System.Drawing.Size(246, 22); this.configurationToolStripMenuItem.Tag = "builder_configuration"; @@ -1083,6 +1094,7 @@ namespace CodeImp.DoomBuilder.Windows // // preferencesToolStripMenuItem // + this.preferencesToolStripMenuItem.Image = global::CodeImp.DoomBuilder.Properties.Resources.Preferences; this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(246, 22); this.preferencesToolStripMenuItem.Tag = "builder_preferences"; @@ -1167,6 +1179,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemhelpcheckupdates // + this.itemhelpcheckupdates.Image = global::CodeImp.DoomBuilder.Properties.Resources.Update; this.itemhelpcheckupdates.Name = "itemhelpcheckupdates"; this.itemhelpcheckupdates.Size = new System.Drawing.Size(232, 22); this.itemhelpcheckupdates.Text = "&Check for updates..."; @@ -1180,6 +1193,7 @@ namespace CodeImp.DoomBuilder.Windows // // itemhelpabout // + this.itemhelpabout.Image = global::CodeImp.DoomBuilder.Properties.Resources.About; this.itemhelpabout.Name = "itemhelpabout"; this.itemhelpabout.Size = new System.Drawing.Size(232, 22); this.itemhelpabout.Text = "&About GZDoom Builder..."; diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index e8d73fdf0feb49b8b3b72159eaf8c4ba9fb68c8c..459c14aceb8dd781f4707c564f3e1292d9acdc9c 100644 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -2066,6 +2066,7 @@ namespace CodeImp.DoomBuilder.Windows linedefcolorpresets.Visible = General.Settings.ToolbarFilter && maploaded; //mxd separatorfilters.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd buttonfullbrightness.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd + buttonfullbrightness.Checked = Renderer.FullBrightness; //mxd buttontogglegrid.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd buttontogglegrid.Checked = General.Settings.RenderGrid; //mxd buttontogglecomments.Visible = General.Settings.ToolbarViewModes && maploaded; //mxd @@ -2929,6 +2930,7 @@ namespace CodeImp.DoomBuilder.Windows menuview.Visible = (General.Map != null); //mxd // Menu items + itemfullbrightness.Checked = Renderer.FullBrightness; //mxd itemtogglegrid.Checked = General.Settings.RenderGrid; //mxd itemtoggleinfo.Checked = IsInfoPanelExpanded; itemtogglecomments.Enabled = (General.Map != null && General.Map.UDMF); //mxd diff --git a/Source/Core/ZDoom/ZDTextParser.cs b/Source/Core/ZDoom/ZDTextParser.cs index 8353fb34941421fe647602608b26d84bbd2c7aed..3d00b5332fe2c882b0f316c606654a25354434e7 100644 --- a/Source/Core/ZDoom/ZDTextParser.cs +++ b/Source/Core/ZDoom/ZDTextParser.cs @@ -16,6 +16,7 @@ #region ================== Namespaces +using System; using System.Globalization; using System.Text; using System.IO; @@ -45,6 +46,7 @@ namespace CodeImp.DoomBuilder.ZDoom private int errorline; private string errordesc; private string errorsource; + private long prevstreamposition; //mxd. Text stream position storted before poerforming ReadToken. #endregion @@ -213,6 +215,9 @@ namespace CodeImp.DoomBuilder.ZDoom //mxd. Return empty string when the end of the stream has been reached if(datastream.Position == datastream.Length) return string.Empty; + //mxd. Store starting position + prevstreamposition = datastream.Position; + string token = ""; bool quotedstring = false; @@ -294,6 +299,9 @@ namespace CodeImp.DoomBuilder.ZDoom { // Return null when the end of the stream has been reached if(datastream.Position == datastream.Length) return null; + + //mxd. Store starting position + prevstreamposition = datastream.Position; string token = ""; bool quotedstring = false; @@ -461,9 +469,9 @@ namespace CodeImp.DoomBuilder.ZDoom //mxd protected internal int GetCurrentLineNumber() { - long position = datastream.Position; + long position = Math.Min(prevstreamposition, datastream.Position); long readpos = 0; - int linenumber = 1; + int linenumber = 0; // Find the line on which we found this error datastream.Seek(0, SeekOrigin.Begin); diff --git a/Source/Plugins/BuilderModes/BuilderModes.csproj b/Source/Plugins/BuilderModes/BuilderModes.csproj index b9e693b0ce29e5ca250f7c9c8ec6d4f817da3675..8c67545df08e121d3d116bcd902eca6617a504a5 100644 --- a/Source/Plugins/BuilderModes/BuilderModes.csproj +++ b/Source/Plugins/BuilderModes/BuilderModes.csproj @@ -558,6 +558,21 @@ <ItemGroup> <None Include="Resources\Show3.png" /> </ItemGroup> + <ItemGroup> + <None Include="Resources\Join.png" /> + </ItemGroup> + <ItemGroup> + <None Include="Resources\Merge.png" /> + </ItemGroup> + <ItemGroup> + <None Include="Resources\Flip.png" /> + </ItemGroup> + <ItemGroup> + <None Include="Resources\SelectThingsInSectors.png" /> + </ItemGroup> + <ItemGroup> + <None Include="Resources\PlaceThings.png" /> + </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragGeometryMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragGeometryMode.cs index 334a6907d929be72dd2efe9918f08fa0466ada5b..36f82684bd8cdec9f6c8f1e5b9c64da45f7ba49a 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/DragGeometryMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/DragGeometryMode.cs @@ -581,8 +581,19 @@ namespace CodeImp.DoomBuilder.BuilderModes public override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); - if(panning) return; //mxd. Skip all this jazz while panning - Update(); + + //mxd. Skip most of update jazz while panning + if(panning) + { + // Update labels + int index = 0; + foreach (Linedef l in unstablelines) + labels[index++].Move(l.Start.Position, l.End.Position); + } + else + { + Update(); + } } // When a key is released public override void OnKeyUp(KeyEventArgs e) diff --git a/Source/Plugins/BuilderModes/General/BuilderPlug.cs b/Source/Plugins/BuilderModes/General/BuilderPlug.cs index 31cb5d719adaf545bad05960fd0f08f56d20665a..714f260d2e36b04348a1d2e6d0eaddec96d75704 100644 --- a/Source/Plugins/BuilderModes/General/BuilderPlug.cs +++ b/Source/Plugins/BuilderModes/General/BuilderPlug.cs @@ -292,10 +292,11 @@ namespace CodeImp.DoomBuilder.BuilderModes bool absolute; //mxd. Apply GLDEFS override? - if(General.Map.Data.GlowingFlats.ContainsKey(s.LongFloorTexture) && General.Map.Data.GlowingFlats[s.LongFloorTexture].Fullbright) + if(General.Map.Data.GlowingFlats.ContainsKey(s.LongFloorTexture) + && (General.Map.Data.GlowingFlats[s.LongFloorTexture].Fullbright || General.Map.Data.GlowingFlats[s.LongFloorTexture].Fullblack)) { color = -1; - light = 255; + light = (General.Map.Data.GlowingFlats[s.LongFloorTexture].Fullbright ? 255 : 0); absolute = true; } else @@ -343,10 +344,11 @@ namespace CodeImp.DoomBuilder.BuilderModes bool absolute; //mxd. Apply GLDEFS override? - if(General.Map.Data.GlowingFlats.ContainsKey(s.LongCeilTexture) && General.Map.Data.GlowingFlats[s.LongCeilTexture].Fullbright) + if(General.Map.Data.GlowingFlats.ContainsKey(s.LongCeilTexture) + && (General.Map.Data.GlowingFlats[s.LongCeilTexture].Fullbright || General.Map.Data.GlowingFlats[s.LongCeilTexture].Fullblack)) { color = -1; - light = 255; + light = (General.Map.Data.GlowingFlats[s.LongCeilTexture].Fullbright ? 255 : 0); absolute = true; } else diff --git a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs index c655f3135db321f84542a1f651cea5f414745433..d06e6e22d72e4bd80cc69691ff1c21382ff0b5a0 100644 --- a/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs +++ b/Source/Plugins/BuilderModes/Interface/MenusForm.Designer.cs @@ -36,10 +36,7 @@ namespace CodeImp.DoomBuilder.BuilderModes this.selectsinglesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.selectdoublesideditem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); - this.fliplinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.flipsidedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.curvelinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); this.splitlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.updatelightfogitem = new System.Windows.Forms.ToolStripMenuItem(); @@ -49,58 +46,61 @@ namespace CodeImp.DoomBuilder.BuilderModes this.alignCeilingToFrontItem = new System.Windows.Forms.ToolStripMenuItem(); this.alignCeilingToBackItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem(); this.sectorsmenu = new System.Windows.Forms.ToolStripMenuItem(); - this.placethingss = new System.Windows.Forms.ToolStripMenuItem(); - this.selectInSectorsItem2 = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); - this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); - this.flipsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.makedooritem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.selectSimilarSectors = new System.Windows.Forms.ToolStripMenuItem(); this.thingsmenu = new System.Windows.Forms.ToolStripMenuItem(); - this.selectInSectorsItem = new System.Windows.Forms.ToolStripMenuItem(); - this.filterSelectionItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.alignToWallItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pointAtCursorItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); - this.selectSimilarThingsItem = new System.Windows.Forms.ToolStripMenuItem(); this.vertsmenu = new System.Windows.Forms.ToolStripMenuItem(); - this.placethingsv = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); - this.selectSimilarVertsItem = new System.Windows.Forms.ToolStripMenuItem(); this.globalstrip = new System.Windows.Forms.ToolStrip(); this.manualstrip = new System.Windows.Forms.ToolStrip(); + this.seperatorcopypaste = new System.Windows.Forms.ToolStripSeparator(); + this.separatorsectors1 = new System.Windows.Forms.ToolStripSeparator(); + this.separatorsectors2 = new System.Windows.Forms.ToolStripSeparator(); + this.gradientModeMenu = new System.Windows.Forms.ToolStripComboBox(); + this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox(); + this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator(); + this.fileMenuStrip = new System.Windows.Forms.MenuStrip(); + this.exportStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); this.buttoncopyproperties = new System.Windows.Forms.ToolStripButton(); this.buttonpasteproperties = new System.Windows.Forms.ToolStripButton(); this.buttonpastepropertiesoptions = new System.Windows.Forms.ToolStripButton(); - this.seperatorcopypaste = new System.Windows.Forms.ToolStripSeparator(); this.buttonselectionnumbers = new System.Windows.Forms.ToolStripButton(); this.buttonselectioneffects = new System.Windows.Forms.ToolStripButton(); - this.separatorsectors1 = new System.Windows.Forms.ToolStripSeparator(); this.buttonMakeDoor = new System.Windows.Forms.ToolStripButton(); - this.separatorsectors2 = new System.Windows.Forms.ToolStripSeparator(); this.buttonbrightnessgradient = new System.Windows.Forms.ToolStripButton(); this.buttonfloorgradient = new System.Windows.Forms.ToolStripButton(); this.buttonceilinggradient = new System.Windows.Forms.ToolStripButton(); this.buttonflipselectionh = new System.Windows.Forms.ToolStripButton(); this.buttonflipselectionv = new System.Windows.Forms.ToolStripButton(); this.buttoncurvelinedefs = new System.Windows.Forms.ToolStripButton(); - this.gradientModeMenu = new System.Windows.Forms.ToolStripComboBox(); - this.gradientInterpolationMenu = new System.Windows.Forms.ToolStripComboBox(); - this.separatorsectors3 = new System.Windows.Forms.ToolStripSeparator(); this.buttonMarqueSelectTouching = new System.Windows.Forms.ToolStripButton(); this.buttonDragThingsInSelectedSectors = new System.Windows.Forms.ToolStripButton(); this.buttonAlignThingsToWall = new System.Windows.Forms.ToolStripButton(); this.buttonTextureOffsetLock = new System.Windows.Forms.ToolStripButton(); - this.fileMenuStrip = new System.Windows.Forms.MenuStrip(); - this.exportStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem(); + this.fliplinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.flipsidedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.curvelinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectSimilarLinesItem = new System.Windows.Forms.ToolStripMenuItem(); + this.placethingss = new System.Windows.Forms.ToolStripMenuItem(); + this.selectInSectorsItem2 = new System.Windows.Forms.ToolStripMenuItem(); + this.joinsectorsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.mergesectorsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.flipsectorlinedefsitem = new System.Windows.Forms.ToolStripMenuItem(); + this.makedooritem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectSimilarSectors = new System.Windows.Forms.ToolStripMenuItem(); + this.selectInSectorsItem = new System.Windows.Forms.ToolStripMenuItem(); + this.filterSelectionItem = new System.Windows.Forms.ToolStripMenuItem(); + this.alignToWallItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pointAtCursorItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectSimilarThingsItem = new System.Windows.Forms.ToolStripMenuItem(); + this.placethingsv = new System.Windows.Forms.ToolStripMenuItem(); + this.selectSimilarVertsItem = new System.Windows.Forms.ToolStripMenuItem(); this.menustrip.SuspendLayout(); this.manualstrip.SuspendLayout(); this.fileMenuStrip.SuspendLayout(); @@ -146,6 +146,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // // placethingsl // + this.placethingsl.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; this.placethingsl.Name = "placethingsl"; this.placethingsl.Size = new System.Drawing.Size(245, 22); this.placethingsl.Tag = "placethings"; @@ -154,6 +155,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // // selectInSectorsItem3 // + this.selectInSectorsItem3.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; this.selectInSectorsItem3.Name = "selectInSectorsItem3"; this.selectInSectorsItem3.Size = new System.Drawing.Size(245, 22); this.selectInSectorsItem3.Tag = "thingsselectinsectors"; @@ -185,35 +187,11 @@ namespace CodeImp.DoomBuilder.BuilderModes this.toolStripMenuItem4.Name = "toolStripMenuItem4"; this.toolStripMenuItem4.Size = new System.Drawing.Size(242, 6); // - // fliplinedefsitem - // - this.fliplinedefsitem.Name = "fliplinedefsitem"; - this.fliplinedefsitem.Size = new System.Drawing.Size(245, 22); - this.fliplinedefsitem.Tag = "fliplinedefs"; - this.fliplinedefsitem.Text = "&Flip Linedefs"; - this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // flipsidedefsitem - // - this.flipsidedefsitem.Name = "flipsidedefsitem"; - this.flipsidedefsitem.Size = new System.Drawing.Size(245, 22); - this.flipsidedefsitem.Tag = "flipsidedefs"; - this.flipsidedefsitem.Text = "F&lip Sidedefs"; - this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; this.toolStripMenuItem1.Size = new System.Drawing.Size(242, 6); // - // curvelinedefsitem - // - this.curvelinedefsitem.Name = "curvelinedefsitem"; - this.curvelinedefsitem.Size = new System.Drawing.Size(245, 22); - this.curvelinedefsitem.Tag = "curvelinesmode"; - this.curvelinedefsitem.Text = "&Curve Linedefs..."; - this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripMenuItem3 // this.toolStripMenuItem3.Name = "toolStripMenuItem3"; @@ -283,15 +261,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(242, 6); // - // selectSimilarLinesItem - // - this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarLinesItem.Name = "selectSimilarLinesItem"; - this.selectSimilarLinesItem.Size = new System.Drawing.Size(245, 22); - this.selectSimilarLinesItem.Tag = "selectsimilar"; - this.selectSimilarLinesItem.Text = "Select Similar..."; - this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // sectorsmenu // this.sectorsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -311,84 +280,27 @@ namespace CodeImp.DoomBuilder.BuilderModes this.sectorsmenu.Text = "&Sectors"; this.sectorsmenu.Visible = false; // - // placethingss - // - this.placethingss.Name = "placethingss"; - this.placethingss.Size = new System.Drawing.Size(245, 22); - this.placethingss.Tag = "placethings"; - this.placethingss.Text = "&Place Things..."; - this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // selectInSectorsItem2 - // - this.selectInSectorsItem2.Name = "selectInSectorsItem2"; - this.selectInSectorsItem2.Size = new System.Drawing.Size(245, 22); - this.selectInSectorsItem2.Tag = "thingsselectinsectors"; - this.selectInSectorsItem2.Text = "&Select Things in Selected Sectors"; - // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Size = new System.Drawing.Size(242, 6); // - // joinsectorsitem - // - this.joinsectorsitem.Name = "joinsectorsitem"; - this.joinsectorsitem.Size = new System.Drawing.Size(245, 22); - this.joinsectorsitem.Tag = "joinsectors"; - this.joinsectorsitem.Text = "&Join Sectors"; - this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // mergesectorsitem - // - this.mergesectorsitem.Name = "mergesectorsitem"; - this.mergesectorsitem.Size = new System.Drawing.Size(245, 22); - this.mergesectorsitem.Tag = "mergesectors"; - this.mergesectorsitem.Text = "&Merge Sectors"; - this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Size = new System.Drawing.Size(242, 6); // - // flipsectorlinedefsitem - // - this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem"; - this.flipsectorlinedefsitem.Size = new System.Drawing.Size(245, 22); - this.flipsectorlinedefsitem.Tag = "fliplinedefs"; - this.flipsectorlinedefsitem.Text = "&Flip Linedefs"; - this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; this.toolStripSeparator8.Size = new System.Drawing.Size(242, 6); // - // makedooritem - // - this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door; - this.makedooritem.Name = "makedooritem"; - this.makedooritem.Size = new System.Drawing.Size(245, 22); - this.makedooritem.Tag = "makedoor"; - this.makedooritem.Text = "Make &Door"; - this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Size = new System.Drawing.Size(242, 6); this.toolStripSeparator4.Visible = false; // - // selectSimilarSectors - // - this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarSectors.Name = "selectSimilarSectors"; - this.selectSimilarSectors.Size = new System.Drawing.Size(245, 22); - this.selectSimilarSectors.Tag = "selectsimilar"; - this.selectSimilarSectors.Text = "Select Similar..."; - this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction); - // // thingsmenu // this.thingsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -404,60 +316,16 @@ namespace CodeImp.DoomBuilder.BuilderModes this.thingsmenu.Text = "Things"; this.thingsmenu.Visible = false; // - // selectInSectorsItem - // - this.selectInSectorsItem.Name = "selectInSectorsItem"; - this.selectInSectorsItem.Size = new System.Drawing.Size(245, 22); - this.selectInSectorsItem.Tag = "thingsselectinsectors"; - this.selectInSectorsItem.Text = "&Select Things in Selected Sectors"; - this.selectInSectorsItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // filterSelectionItem - // - this.filterSelectionItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.FilterThings; - this.filterSelectionItem.Name = "filterSelectionItem"; - this.filterSelectionItem.Size = new System.Drawing.Size(245, 22); - this.filterSelectionItem.Tag = "filterselectedthings"; - this.filterSelectionItem.Text = "Filter Selection..."; - this.filterSelectionItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; this.toolStripSeparator3.Size = new System.Drawing.Size(242, 6); // - // alignToWallItem - // - this.alignToWallItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.AlignThings; - this.alignToWallItem.Name = "alignToWallItem"; - this.alignToWallItem.Size = new System.Drawing.Size(245, 22); - this.alignToWallItem.Tag = "thingaligntowall"; - this.alignToWallItem.Text = "&Align To Closest Linedef"; - this.alignToWallItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // - // pointAtCursorItem - // - this.pointAtCursorItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.ThingPointAtCursor; - this.pointAtCursorItem.Name = "pointAtCursorItem"; - this.pointAtCursorItem.Size = new System.Drawing.Size(245, 22); - this.pointAtCursorItem.Tag = "thinglookatcursor"; - this.pointAtCursorItem.Text = "&Point to Cursor"; - this.pointAtCursorItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; this.toolStripSeparator6.Size = new System.Drawing.Size(242, 6); // - // selectSimilarThingsItem - // - this.selectSimilarThingsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarThingsItem.Name = "selectSimilarThingsItem"; - this.selectSimilarThingsItem.Size = new System.Drawing.Size(245, 22); - this.selectSimilarThingsItem.Tag = "selectsimilar"; - this.selectSimilarThingsItem.Text = "Select Similar..."; - this.selectSimilarThingsItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // vertsmenu // this.vertsmenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -469,28 +337,11 @@ namespace CodeImp.DoomBuilder.BuilderModes this.vertsmenu.Text = "Vertices"; this.vertsmenu.Visible = false; // - // placethingsv - // - this.placethingsv.Name = "placethingsv"; - this.placethingsv.Size = new System.Drawing.Size(153, 22); - this.placethingsv.Tag = "placethings"; - this.placethingsv.Text = "&Place Things..."; - this.placethingsv.Click += new System.EventHandler(this.InvokeTaggedAction); - // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; this.toolStripSeparator7.Size = new System.Drawing.Size(150, 6); // - // selectSimilarVertsItem - // - this.selectSimilarVertsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; - this.selectSimilarVertsItem.Name = "selectSimilarVertsItem"; - this.selectSimilarVertsItem.Size = new System.Drawing.Size(153, 22); - this.selectSimilarVertsItem.Tag = "selectsimilar"; - this.selectSimilarVertsItem.Text = "Select Similar..."; - this.selectSimilarVertsItem.Click += new System.EventHandler(this.InvokeTaggedAction); - // // globalstrip // this.globalstrip.Location = new System.Drawing.Point(0, 48); @@ -530,6 +381,72 @@ namespace CodeImp.DoomBuilder.BuilderModes this.manualstrip.TabIndex = 2; this.manualstrip.Text = "toolStrip1"; // + // seperatorcopypaste + // + this.seperatorcopypaste.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.seperatorcopypaste.Name = "seperatorcopypaste"; + this.seperatorcopypaste.Size = new System.Drawing.Size(6, 25); + // + // separatorsectors1 + // + this.separatorsectors1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors1.Name = "separatorsectors1"; + this.separatorsectors1.Size = new System.Drawing.Size(6, 25); + // + // separatorsectors2 + // + this.separatorsectors2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors2.Name = "separatorsectors2"; + this.separatorsectors2.Size = new System.Drawing.Size(6, 25); + // + // gradientModeMenu + // + this.gradientModeMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gradientModeMenu.Name = "gradientModeMenu"; + this.gradientModeMenu.Size = new System.Drawing.Size(144, 25); + this.gradientModeMenu.ToolTipText = "Brightness Gradient Target"; + this.gradientModeMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); + // + // gradientInterpolationMenu + // + this.gradientInterpolationMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.gradientInterpolationMenu.Name = "gradientInterpolationMenu"; + this.gradientInterpolationMenu.Size = new System.Drawing.Size(108, 25); + this.gradientInterpolationMenu.ToolTipText = "Brightness and Height Gradient Interpolation Mode"; + this.gradientInterpolationMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); + // + // separatorsectors3 + // + this.separatorsectors3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.separatorsectors3.Name = "separatorsectors3"; + this.separatorsectors3.Size = new System.Drawing.Size(6, 25); + // + // fileMenuStrip + // + this.fileMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exportStripMenuItem}); + this.fileMenuStrip.Location = new System.Drawing.Point(0, 0); + this.fileMenuStrip.Name = "fileMenuStrip"; + this.fileMenuStrip.Size = new System.Drawing.Size(794, 24); + this.fileMenuStrip.TabIndex = 3; + this.fileMenuStrip.Text = "menuStrip1"; + // + // exportStripMenuItem + // + this.exportStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem5}); + this.exportStripMenuItem.Name = "exportStripMenuItem"; + this.exportStripMenuItem.Size = new System.Drawing.Size(52, 20); + this.exportStripMenuItem.Text = "Export"; + // + // toolStripMenuItem5 + // + this.toolStripMenuItem5.Name = "toolStripMenuItem5"; + this.toolStripMenuItem5.Size = new System.Drawing.Size(226, 22); + this.toolStripMenuItem5.Tag = "exporttoobj"; + this.toolStripMenuItem5.Text = "Selection to Wavefront .obj..."; + this.toolStripMenuItem5.Click += new System.EventHandler(this.InvokeTaggedAction); + // // buttoncopyproperties // this.buttoncopyproperties.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -563,12 +480,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonpastepropertiesoptions.Text = "Choose Properties to Paste"; this.buttonpastepropertiesoptions.Click += new System.EventHandler(this.InvokeTaggedAction); // - // seperatorcopypaste - // - this.seperatorcopypaste.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.seperatorcopypaste.Name = "seperatorcopypaste"; - this.seperatorcopypaste.Size = new System.Drawing.Size(6, 25); - // // buttonselectionnumbers // this.buttonselectionnumbers.CheckOnClick = true; @@ -591,12 +502,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonselectioneffects.Text = "View Tags and Effects"; this.buttonselectioneffects.Click += new System.EventHandler(this.buttonselectioneffects_Click); // - // separatorsectors1 - // - this.separatorsectors1.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors1.Name = "separatorsectors1"; - this.separatorsectors1.Size = new System.Drawing.Size(6, 25); - // // buttonMakeDoor // this.buttonMakeDoor.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -608,12 +513,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttonMakeDoor.Text = "Make Door From Selection"; this.buttonMakeDoor.Click += new System.EventHandler(this.InvokeTaggedAction); // - // separatorsectors2 - // - this.separatorsectors2.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors2.Name = "separatorsectors2"; - this.separatorsectors2.Size = new System.Drawing.Size(6, 25); - // // buttonbrightnessgradient // this.buttonbrightnessgradient.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -681,28 +580,6 @@ namespace CodeImp.DoomBuilder.BuilderModes this.buttoncurvelinedefs.Text = "Curve Linedefs"; this.buttoncurvelinedefs.Click += new System.EventHandler(this.InvokeTaggedAction); // - // gradientModeMenu - // - this.gradientModeMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gradientModeMenu.Name = "gradientModeMenu"; - this.gradientModeMenu.Size = new System.Drawing.Size(144, 25); - this.gradientModeMenu.ToolTipText = "Brightness Gradient Target"; - this.gradientModeMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); - // - // gradientInterpolationMenu - // - this.gradientInterpolationMenu.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.gradientInterpolationMenu.Name = "gradientInterpolationMenu"; - this.gradientInterpolationMenu.Size = new System.Drawing.Size(108, 25); - this.gradientInterpolationMenu.ToolTipText = "Brightness and Height Gradient Interpolation Mode"; - this.gradientInterpolationMenu.DropDownClosed += new System.EventHandler(this.gradientMode_DropDownClosed); - // - // separatorsectors3 - // - this.separatorsectors3.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); - this.separatorsectors3.Name = "separatorsectors3"; - this.separatorsectors3.Size = new System.Drawing.Size(6, 25); - // // buttonMarqueSelectTouching // this.buttonMarqueSelectTouching.CheckOnClick = true; @@ -752,31 +629,166 @@ namespace CodeImp.DoomBuilder.BuilderModes "tant while sector is dragged"; this.buttonTextureOffsetLock.Click += new System.EventHandler(this.buttonTextureOffsetLock_Click); // - // fileMenuStrip + // fliplinedefsitem // - this.fileMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exportStripMenuItem}); - this.fileMenuStrip.Location = new System.Drawing.Point(0, 0); - this.fileMenuStrip.Name = "fileMenuStrip"; - this.fileMenuStrip.Size = new System.Drawing.Size(794, 24); - this.fileMenuStrip.TabIndex = 3; - this.fileMenuStrip.Text = "menuStrip1"; + this.fliplinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.fliplinedefsitem.Name = "fliplinedefsitem"; + this.fliplinedefsitem.Size = new System.Drawing.Size(245, 22); + this.fliplinedefsitem.Tag = "fliplinedefs"; + this.fliplinedefsitem.Text = "&Flip Linedefs"; + this.fliplinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); // - // exportStripMenuItem + // flipsidedefsitem // - this.exportStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem5}); - this.exportStripMenuItem.Name = "exportStripMenuItem"; - this.exportStripMenuItem.Size = new System.Drawing.Size(52, 20); - this.exportStripMenuItem.Text = "Export"; + this.flipsidedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.flipsidedefsitem.Name = "flipsidedefsitem"; + this.flipsidedefsitem.Size = new System.Drawing.Size(245, 22); + this.flipsidedefsitem.Tag = "flipsidedefs"; + this.flipsidedefsitem.Text = "F&lip Sidedefs"; + this.flipsidedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); // - // toolStripMenuItem5 + // curvelinedefsitem // - this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(226, 22); - this.toolStripMenuItem5.Tag = "exporttoobj"; - this.toolStripMenuItem5.Text = "Selection to Wavefront .obj..."; - this.toolStripMenuItem5.Click += new System.EventHandler(this.InvokeTaggedAction); + this.curvelinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.CurveLines; + this.curvelinedefsitem.Name = "curvelinedefsitem"; + this.curvelinedefsitem.Size = new System.Drawing.Size(245, 22); + this.curvelinedefsitem.Tag = "curvelinesmode"; + this.curvelinedefsitem.Text = "&Curve Linedefs..."; + this.curvelinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectSimilarLinesItem + // + this.selectSimilarLinesItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarLinesItem.Name = "selectSimilarLinesItem"; + this.selectSimilarLinesItem.Size = new System.Drawing.Size(245, 22); + this.selectSimilarLinesItem.Tag = "selectsimilar"; + this.selectSimilarLinesItem.Text = "Select Similar..."; + this.selectSimilarLinesItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // placethingss + // + this.placethingss.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; + this.placethingss.Name = "placethingss"; + this.placethingss.Size = new System.Drawing.Size(245, 22); + this.placethingss.Tag = "placethings"; + this.placethingss.Text = "&Place Things..."; + this.placethingss.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectInSectorsItem2 + // + this.selectInSectorsItem2.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; + this.selectInSectorsItem2.Name = "selectInSectorsItem2"; + this.selectInSectorsItem2.Size = new System.Drawing.Size(245, 22); + this.selectInSectorsItem2.Tag = "thingsselectinsectors"; + this.selectInSectorsItem2.Text = "&Select Things in Selected Sectors"; + // + // joinsectorsitem + // + this.joinsectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Join; + this.joinsectorsitem.Name = "joinsectorsitem"; + this.joinsectorsitem.Size = new System.Drawing.Size(245, 22); + this.joinsectorsitem.Tag = "joinsectors"; + this.joinsectorsitem.Text = "&Join Sectors"; + this.joinsectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // mergesectorsitem + // + this.mergesectorsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Merge; + this.mergesectorsitem.Name = "mergesectorsitem"; + this.mergesectorsitem.Size = new System.Drawing.Size(245, 22); + this.mergesectorsitem.Tag = "mergesectors"; + this.mergesectorsitem.Text = "&Merge Sectors"; + this.mergesectorsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // flipsectorlinedefsitem + // + this.flipsectorlinedefsitem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Flip; + this.flipsectorlinedefsitem.Name = "flipsectorlinedefsitem"; + this.flipsectorlinedefsitem.Size = new System.Drawing.Size(245, 22); + this.flipsectorlinedefsitem.Tag = "fliplinedefs"; + this.flipsectorlinedefsitem.Text = "&Flip Linedefs"; + this.flipsectorlinedefsitem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // makedooritem + // + this.makedooritem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Door; + this.makedooritem.Name = "makedooritem"; + this.makedooritem.Size = new System.Drawing.Size(245, 22); + this.makedooritem.Tag = "makedoor"; + this.makedooritem.Text = "Make &Door"; + this.makedooritem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectSimilarSectors + // + this.selectSimilarSectors.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarSectors.Name = "selectSimilarSectors"; + this.selectSimilarSectors.Size = new System.Drawing.Size(245, 22); + this.selectSimilarSectors.Tag = "selectsimilar"; + this.selectSimilarSectors.Text = "Select Similar..."; + this.selectSimilarSectors.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectInSectorsItem + // + this.selectInSectorsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SelectThingsInSectors; + this.selectInSectorsItem.Name = "selectInSectorsItem"; + this.selectInSectorsItem.Size = new System.Drawing.Size(245, 22); + this.selectInSectorsItem.Tag = "thingsselectinsectors"; + this.selectInSectorsItem.Text = "&Select Things in Selected Sectors"; + this.selectInSectorsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // filterSelectionItem + // + this.filterSelectionItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.FilterThings; + this.filterSelectionItem.Name = "filterSelectionItem"; + this.filterSelectionItem.Size = new System.Drawing.Size(245, 22); + this.filterSelectionItem.Tag = "filterselectedthings"; + this.filterSelectionItem.Text = "Filter Selection..."; + this.filterSelectionItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // alignToWallItem + // + this.alignToWallItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.AlignThings; + this.alignToWallItem.Name = "alignToWallItem"; + this.alignToWallItem.Size = new System.Drawing.Size(245, 22); + this.alignToWallItem.Tag = "thingaligntowall"; + this.alignToWallItem.Text = "&Align To Closest Linedef"; + this.alignToWallItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // pointAtCursorItem + // + this.pointAtCursorItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.ThingPointAtCursor; + this.pointAtCursorItem.Name = "pointAtCursorItem"; + this.pointAtCursorItem.Size = new System.Drawing.Size(245, 22); + this.pointAtCursorItem.Tag = "thinglookatcursor"; + this.pointAtCursorItem.Text = "&Point to Cursor"; + this.pointAtCursorItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectSimilarThingsItem + // + this.selectSimilarThingsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarThingsItem.Name = "selectSimilarThingsItem"; + this.selectSimilarThingsItem.Size = new System.Drawing.Size(245, 22); + this.selectSimilarThingsItem.Tag = "selectsimilar"; + this.selectSimilarThingsItem.Text = "Select Similar..."; + this.selectSimilarThingsItem.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // placethingsv + // + this.placethingsv.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.PlaceThings; + this.placethingsv.Name = "placethingsv"; + this.placethingsv.Size = new System.Drawing.Size(153, 22); + this.placethingsv.Tag = "placethings"; + this.placethingsv.Text = "&Place Things..."; + this.placethingsv.Click += new System.EventHandler(this.InvokeTaggedAction); + // + // selectSimilarVertsItem + // + this.selectSimilarVertsItem.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.Similar; + this.selectSimilarVertsItem.Name = "selectSimilarVertsItem"; + this.selectSimilarVertsItem.Size = new System.Drawing.Size(153, 22); + this.selectSimilarVertsItem.Tag = "selectsimilar"; + this.selectSimilarVertsItem.Text = "Select Similar..."; + this.selectSimilarVertsItem.Click += new System.EventHandler(this.InvokeTaggedAction); // // MenusForm // diff --git a/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs b/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs index 8300e58d0dc3f146bfbe4c8dc37c50442e714946..0c169536bacba6ab81326f727485542eaa0f12a0 100644 --- a/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs +++ b/Source/Plugins/BuilderModes/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. -// Runtime Version:2.0.50727.5420 +// Runtime Version:2.0.50727.5485 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -172,6 +172,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties { } } + internal static System.Drawing.Bitmap Flip { + get { + object obj = ResourceManager.GetObject("Flip", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap FlipSelectionH { get { object obj = ResourceManager.GetObject("FlipSelectionH", resourceCulture); @@ -228,6 +235,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties { } } + internal static System.Drawing.Bitmap Join { + get { + object obj = ResourceManager.GetObject("Join", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap List { get { object obj = ResourceManager.GetObject("List", resourceCulture); @@ -242,6 +256,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties { } } + internal static System.Drawing.Bitmap Merge { + get { + object obj = ResourceManager.GetObject("Merge", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap MoveThingsInSectors { get { object obj = ResourceManager.GetObject("MoveThingsInSectors", resourceCulture); @@ -263,6 +284,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties { } } + internal static System.Drawing.Bitmap PlaceThings { + get { + object obj = ResourceManager.GetObject("PlaceThings", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap Reset { get { object obj = ResourceManager.GetObject("Reset", resourceCulture); @@ -277,6 +305,13 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties { } } + internal static System.Drawing.Bitmap SelectThingsInSectors { + get { + object obj = ResourceManager.GetObject("SelectThingsInSectors", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + internal static System.Drawing.Bitmap SelectTouching { get { object obj = ResourceManager.GetObject("SelectTouching", resourceCulture); diff --git a/Source/Plugins/BuilderModes/Properties/Resources.resx b/Source/Plugins/BuilderModes/Properties/Resources.resx index 1df5dfbce82905cd354bcb39669f409a23d23eea..288f709aa6fde02a3b67e3bc3fd0f4fe7651e672 100644 --- a/Source/Plugins/BuilderModes/Properties/Resources.resx +++ b/Source/Plugins/BuilderModes/Properties/Resources.resx @@ -118,6 +118,9 @@ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> + <data name="Join" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Join.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> <data name="FloorAlign" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\FloorAlign.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> @@ -145,6 +148,9 @@ <data name="PasteProperties" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\PasteProperties.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\List.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> <data name="DrawGridMode" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\DrawGridMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> @@ -172,8 +178,8 @@ <data name="Save" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> - <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms"> - <value>..\Resources\List.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + <data name="SelectThingsInSectors" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\SelectThingsInSectors.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> <data name="CeilsGradient" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\CeilsGradient.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> @@ -187,9 +193,15 @@ <data name="MoveThingsInSectors" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\MoveThingsInSectors.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="Merge" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Merge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> <data name="ThingPointAtCursor" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\ThingPointAtCursor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="PlaceThings" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\PlaceThings.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> <data name="Text" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\Text.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> @@ -223,6 +235,9 @@ <data name="ColorPick" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\ColorPick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="Flip" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\Flip.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> <data name="FlipSelectionH" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\FlipSelectionH.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> diff --git a/Source/Plugins/BuilderModes/Resources/Flip.png b/Source/Plugins/BuilderModes/Resources/Flip.png new file mode 100644 index 0000000000000000000000000000000000000000..80075cf8707812868794de24979b6926e70fbe84 Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/Flip.png differ diff --git a/Source/Plugins/BuilderModes/Resources/Join.png b/Source/Plugins/BuilderModes/Resources/Join.png new file mode 100644 index 0000000000000000000000000000000000000000..7a54e8b79061b462fb7212270626d41472a73862 Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/Join.png differ diff --git a/Source/Plugins/BuilderModes/Resources/Merge.png b/Source/Plugins/BuilderModes/Resources/Merge.png new file mode 100644 index 0000000000000000000000000000000000000000..bedbee453e5b264bdfdb043d97fc8706d8208513 Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/Merge.png differ diff --git a/Source/Plugins/BuilderModes/Resources/PlaceThings.png b/Source/Plugins/BuilderModes/Resources/PlaceThings.png new file mode 100644 index 0000000000000000000000000000000000000000..3d128fae5bf14fa7fe78937e07ef908b8c4dd980 Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/PlaceThings.png differ diff --git a/Source/Plugins/BuilderModes/Resources/SelectThingsInSectors.png b/Source/Plugins/BuilderModes/Resources/SelectThingsInSectors.png new file mode 100644 index 0000000000000000000000000000000000000000..876b237dab8ad57fd5ef29e3ea5a4f8aa228572c Binary files /dev/null and b/Source/Plugins/BuilderModes/Resources/SelectThingsInSectors.png differ diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs index 5ff6a2e0c80c8cc6104d2da5b38326b1ea3fc28b..147bc82b54047007259962fc31ea20b56abc86d3 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs @@ -701,12 +701,29 @@ namespace CodeImp.DoomBuilder.BuilderModes { mode.CreateUndo("Paste sector properties"); mode.SetActionResult("Pasted sector properties."); + + //mxd. Glow effect may require SectorData update + bool oldfloortextureglows = (SectorProperties.CopySettings.FloorTexture && General.Map.Data.GlowingFlats.ContainsKey(level.sector.LongFloorTexture)); + bool oldceiltextureglows = (SectorProperties.CopySettings.CeilingTexture && General.Map.Data.GlowingFlats.ContainsKey(level.sector.LongCeilTexture)); + BuilderPlug.Me.CopiedSectorProps.Apply(level.sector); + + //mxd. Glow effect may require SectorData update + if(oldfloortextureglows || oldceiltextureglows + || (SectorProperties.CopySettings.FloorTexture && General.Map.Data.GlowingFlats.ContainsKey(level.sector.LongFloorTexture)) + || (SectorProperties.CopySettings.CeilingTexture && General.Map.Data.GlowingFlats.ContainsKey(level.sector.LongCeilTexture))) + { + mode.RebuildElementData(); + SectorData sd = mode.GetSectorData(level.sector); + sd.UpdateForced(); + } + if(mode.VisualSectorExists(level.sector)) { BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector); vs.UpdateSectorGeometry(true); } + mode.ShowTargetInfo(); } } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index 479b9c74890c60b8de0f1d8086385bc4d1f9feef..5c95899fe3701b809bbd3b96bab4bbf0de1706e5 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -19,15 +19,16 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.Globalization; using System.Windows.Forms; using CodeImp.DoomBuilder.Data; using CodeImp.DoomBuilder.Geometry; +using CodeImp.DoomBuilder.GZBuilder.Data; using CodeImp.DoomBuilder.GZBuilder.Tools; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Rendering; using CodeImp.DoomBuilder.VisualModes; -using System.Globalization; #endregion @@ -257,7 +258,10 @@ namespace CodeImp.DoomBuilder.BuilderModes if(sd.CeilingGlow != null || sd.FloorGlow != null) { for(int i = 0; i < verts.Count; i++) + { + if(verts[i].c == PixelColor.INT_WHITE) continue; // Fullbright verts are not affected by glows. verts[i] = InterpolateVertexColor(verts[i], sd); + } } return verts; @@ -276,9 +280,8 @@ namespace CodeImp.DoomBuilder.BuilderModes { float cz = data.Ceiling.plane.GetZ(v.x, v.y); float delta = ((v.z - cgz) / (cz - cgz)) * 0.9f; - PixelColor vc = PixelColor.FromInt(v.c); - v.c = InterpolationTools.InterpolateColor(PixelColor.Add(vc, data.CeilingGlow.Color), vc, delta); + v.c = InterpolationTools.InterpolateColor(GetGlowColor(data.CeilingGlow, vc), vc, delta); } } @@ -292,14 +295,20 @@ namespace CodeImp.DoomBuilder.BuilderModes { float fz = data.Floor.plane.GetZ(v.x, v.y); float delta = ((v.z - fz) / (fgz - fz)) * 0.9f; - PixelColor vc = PixelColor.FromInt(v.c); - v.c = InterpolationTools.InterpolateColor(vc, PixelColor.Add(vc, data.FloorGlow.Color), delta); + v.c = InterpolationTools.InterpolateColor(vc, GetGlowColor(data.FloorGlow, vc), delta); } } return v; } + + //mxd + private static PixelColor GetGlowColor(GlowingFlatData data, PixelColor vertexcolor) + { + if(data.Subtractive) return PixelColor.Subtract(vertexcolor, data.Color); + return PixelColor.Add(vertexcolor, data.Color); + } // This splits a polygon with a plane and returns the other part as a new polygon // The polygon is expected to be convex and clockwise diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index a1218f14795fe6da5d33f6daf9b65f1ccdf2bd64..e6075156feac52933bf779f5487a63be506adf11 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -865,7 +865,8 @@ namespace CodeImp.DoomBuilder.BuilderModes sd.AddEffectThingVertexSlope(slopeceilingthings, false); } } - else if(General.Map.Data.GlowingFlats.ContainsKey(s.LongFloorTexture) || General.Map.Data.GlowingFlats.ContainsKey(s.LongCeilTexture)) + + if(General.Map.Data.GlowingFlats.ContainsKey(s.LongFloorTexture) || General.Map.Data.GlowingFlats.ContainsKey(s.LongCeilTexture)) { SectorData sd = GetSectorData(s); sd.AddEffectGlowingFlat(s); diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs index 20cf8a8b2d028108d8dcd5f8ac2ed810410a03ff..c2562a49546bdfa4ee7546552df5c818f8cd781b 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSector.cs @@ -213,6 +213,22 @@ namespace CodeImp.DoomBuilder.BuilderModes ceiling = ceiling ?? new VisualCeiling(mode, this); if(ceiling.Setup(data.Ceiling, null)) base.AddGeometry(ceiling); + + //mxd. Calculate fogdistance + float brightness = Math.Max(30, Sector.Brightness); + if(Sector.HasFogColor) + { + if(Sector.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0) + fogdistance = General.Map.Data.MapInfo.OutsideFogDensity; + else if(!Sector.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0) + fogdistance = General.Map.Data.MapInfo.FogDensity; + else + fogdistance = brightness * 11.0f; + } + else + { + fogdistance = MAXIMUM_FOG_DISTANCE; + } // Create 3D floors for(int i = 0; i < data.ExtraFloors.Count; i++) diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index 8ebce66c1cce8774b92bed0f750e3c60ecc89c40..439cd94987b263232c9b15530397a2fea14e9d7a 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -99,6 +99,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public bool Setup() { int sectorcolor = new PixelColor(255, 255, 255, 255).ToInt(); + fogdistance = VisualSector.MAXIMUM_FOG_DISTANCE; //mxd //mxd. Check thing size float thingradius = Thing.Size; // Thing.Size has ThingRadius arg override applied @@ -127,14 +128,40 @@ namespace CodeImp.DoomBuilder.BuilderModes SectorData sd = mode.GetSectorData(Thing.Sector); floor = sd.Floor.plane; //mxd ceiling = sd.Ceiling.plane; //mxd - SectorLevel level = sd.GetLevelAboveOrAt(new Vector3D(Thing.Position.x, Thing.Position.y, Thing.Position.z + sd.Floor.plane.GetZ(Thing.Position))); //mxd. Let's use point on floor plane instead of Thing.Sector.FloorHeight; - if(nointeraction && level == null && sd.LightLevels.Count > 0) level = sd.LightLevels[sd.LightLevels.Count - 1]; //mxd. Use the light level of the highest surface when a thing is above highest sector level. + SectorLevel level = sd.GetLevelAboveOrAt(new Vector3D(Thing.Position.x, Thing.Position.y, Thing.Position.z + sd.Floor.plane.GetZ(Thing.Position))); + + //mxd. Let's use point on floor plane instead of Thing.Sector.FloorHeight; + if(nointeraction && level == null && sd.LightLevels.Count > 0) level = sd.LightLevels[sd.LightLevels.Count - 1]; + + //mxd. Use the light level of the highest surface when a thing is above highest sector level. if(level != null) { // Use sector brightness for color shading PixelColor areabrightness = PixelColor.FromInt(mode.CalculateBrightness(level.brightnessbelow)); PixelColor areacolor = PixelColor.Modulate(level.colorbelow, areabrightness); sectorcolor = areacolor.WithAlpha(255).ToInt(); + + //mxd. Calculate fogdistance + int brightness = Math.Max((byte)30, areabrightness.r); // R, G and B of areabrightness are the same + if(Thing.Sector.HasFogColor) + { + if(Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.OutsideFogDensity > 0) + fogdistance = General.Map.Data.MapInfo.OutsideFogDensity; + else if(!Thing.Sector.UsesOutsideFog && General.Map.Data.MapInfo.FogDensity > 0) + fogdistance = General.Map.Data.MapInfo.FogDensity; + else + fogdistance = brightness * 11.0f; + } + // Thing is affected by floor glow + else if(level.affectedbyglow) + { + fogdistance = (float)Math.Pow(2.0f, brightness / 9.0f); + } + // Thing is not affected by floor glow + else + { + fogdistance = (float)Math.Pow(2.0f, brightness / 9.0f) * 2.0f; + } } } diff --git a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs index ceed4f93ff0e927e259bbc9be64e69e11c491da0..5a4585a8347a06362d73d27c8e10f6d062777231 100644 --- a/Source/Plugins/BuilderModes/VisualModes/SectorData.cs +++ b/Source/Plugins/BuilderModes/VisualModes/SectorData.cs @@ -1,5 +1,6 @@ #region === Copyright (c) 2010 Pascal van der Heiden === +using System; using System.Collections.Generic; using CodeImp.DoomBuilder.GZBuilder.Data; using CodeImp.DoomBuilder.Geometry; @@ -362,24 +363,34 @@ namespace CodeImp.DoomBuilder.BuilderModes if(l.brightnessbelow == -1) l.brightnessbelow = pl.brightnessbelow; } - //mxd. Apply glow effects? - if(CeilingGlow != null && CeilingGlow.Fullbright) + //mxd. Apply ceiling glow effect? + if(CeilingGlow != null) { - ceiling.color = -1; + if(CeilingGlow.Fullbright) ceiling.color = PixelColor.INT_WHITE; + else if(CeilingGlow.Fullblack) ceiling.color = PixelColor.INT_BLACK; } + //mxd. Apply floor glow effect? if(FloorGlow != null) { - if(FloorGlow.Fullbright) floor.color = -1; - floor.brightnessbelow = ((FloorGlow.Fullbright ? 255 : (FloorGlow.Color.r + FloorGlow.Color.g + FloorGlow.Color.b) / 3) + sector.Brightness) / 2; + // Update floor color + if(FloorGlow.Fullbright) floor.color = PixelColor.INT_WHITE; + else if(FloorGlow.Fullblack) floor.color = PixelColor.INT_BLACK; + + // Update brightness + floor.brightnessbelow = (FloorGlow.Fullbright ? 255 : Math.Max(128, floor.brightnessbelow)); if(floor.colorbelow.ToInt() == 0) { byte bb = (byte)floor.brightnessbelow; - floor.colorbelow = PixelColor.Add(floor.colorbelow, new PixelColor(255, bb, bb, bb)); + floor.colorbelow = new PixelColor(255, bb, bb, bb); } } + //mxd + floor.affectedbyglow = (FloorGlow != null); + ceiling.affectedbyglow = (CeilingGlow != null); + floorchanged = false; ceilingchanged = false; updated = true; diff --git a/Source/Plugins/BuilderModes/VisualModes/SectorLevel.cs b/Source/Plugins/BuilderModes/VisualModes/SectorLevel.cs index b95f44fa29939a529a9fb7e69b9c023db9dd9884..bcc1152ad23a6a805dd477df25ffc65273e4ecc4 100644 --- a/Source/Plugins/BuilderModes/VisualModes/SectorLevel.cs +++ b/Source/Plugins/BuilderModes/VisualModes/SectorLevel.cs @@ -35,6 +35,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public PixelColor colorbelow; public bool disablelighting; //mxd public bool restrictlighting; //mxd + public bool affectedbyglow; //mxd // Constructor public SectorLevel(Sector s, SectorLevelType type) diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs index 710d644dc7cefb6ff2a5e98aa33b2467156ad575..67a332bd06c157681f8d7b8fc25d27a6f458853e 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs @@ -262,8 +262,25 @@ namespace CodeImp.DoomBuilder.BuilderModes { mode.CreateUndo("Paste ceiling '" + BuilderPlug.Me.CopiedFlat + "'"); mode.SetActionResult("Pasted flat '" + BuilderPlug.Me.CopiedFlat + "' on ceiling."); + + //mxd. Glow effect may require SectorData and geometry update + bool prevtextureglows = General.Map.Data.GlowingFlats.ContainsKey(Sector.Sector.LongCeilTexture); + SetTexture(BuilderPlug.Me.CopiedFlat); + //mxd. Glow effect may require SectorData and geometry update + if(prevtextureglows && !General.Map.Data.GlowingFlats.ContainsKey(Sector.Sector.LongCeilTexture)) + { + SectorData sd = mode.GetSectorData(level.sector); + sd.UpdateForced(); + + if(mode.VisualSectorExists(level.sector)) + { + BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector); + vs.UpdateSectorGeometry(false); + } + } + //mxd. 3D floors may need updating... OnTextureChanged(); } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs index a040b564ebf7ee5debf5ce8ccea5050a19f6c46a..fa6303ac5d949a0ff49279feda710731468ae4a5 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs @@ -264,8 +264,25 @@ namespace CodeImp.DoomBuilder.BuilderModes { mode.CreateUndo("Paste floor '" + BuilderPlug.Me.CopiedFlat + "'"); mode.SetActionResult("Pasted flat '" + BuilderPlug.Me.CopiedFlat + "' on floor."); + + //mxd. Glow effect may require SectorData and geometry update + bool prevtextureglows = General.Map.Data.GlowingFlats.ContainsKey(Sector.Sector.LongFloorTexture); + SetTexture(BuilderPlug.Me.CopiedFlat); + //mxd. Glow effect may require SectorData and geometry update + if(prevtextureglows && !General.Map.Data.GlowingFlats.ContainsKey(Sector.Sector.LongFloorTexture)) + { + SectorData sd = mode.GetSectorData(level.sector); + sd.UpdateForced(); + + if(mode.VisualSectorExists(level.sector)) + { + BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector); + vs.UpdateSectorGeometry(false); + } + } + //mxd. 3D floors may need updating... OnTextureChanged(); }