From 264a883e47a425ee257a89fc5c5e1615ea246115 Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Thu, 7 Apr 2016 16:27:49 +0200 Subject: [PATCH] Merged in GZDB r2496. --- Source/Core/Data/DataManager.cs | 19 +++-- Source/Core/GZBuilder/GZDoom/GldefsParser.cs | 3 - Source/Core/Rendering/D3DDevice.cs | 5 +- Source/Core/Resources/world3d.fx | 2 +- .../ClassicModes/DragThingsMode.cs | 32 ++++---- .../BuilderModes/ClassicModes/ThingsMode.cs | 81 +++++++++++-------- 6 files changed, 80 insertions(+), 62 deletions(-) diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs index 63b6bf2..93adfd4 100644 --- a/Source/Core/Data/DataManager.cs +++ b/Source/Core/Data/DataManager.cs @@ -2682,6 +2682,8 @@ namespace CodeImp.DoomBuilder.Data // Set render settings... device.SetRenderState(RenderState.ZEnable, false); device.SetRenderState(RenderState.CullMode, Cull.None); + device.SetSamplerState(0, SamplerState.AddressU, TextureAddress.Clamp); + device.SetSamplerState(0, SamplerState.AddressV, TextureAddress.Clamp); // Setup matrices Vector3 offset = new Vector3(0f, 0f, -1.8f); // Sphere size is 10 mu @@ -3026,14 +3028,17 @@ namespace CodeImp.DoomBuilder.Data private static Texture TextureFromBitmap(Device device, Image image) { - MemoryStream ms = new MemoryStream(); - image.Save(ms, ImageFormat.Png); - ms.Seek(0, SeekOrigin.Begin); - Texture result = Texture.FromStream(device, ms); - ms.Close(); - ms.Dispose(); + using (MemoryStream ms = new MemoryStream()) + { + image.Save(ms, ImageFormat.Png); + ms.Seek(0, SeekOrigin.Begin); - return result; + // Classic skies textures can be NPo2 (and D3D Texture is resized to Po2 by default), + // so we need to explicitly specify the size + return Texture.FromStream(device, ms, (int)ms.Length, + image.Size.Width, image.Size.Height, 0, Usage.None, Format.Unknown, + Pool.Managed, Filter.None, Filter.None, 0); + } } #endregion diff --git a/Source/Core/GZBuilder/GZDoom/GldefsParser.cs b/Source/Core/GZBuilder/GZDoom/GldefsParser.cs index cf0d88e..197fa34 100644 --- a/Source/Core/GZBuilder/GZDoom/GldefsParser.cs +++ b/Source/Core/GZBuilder/GZDoom/GldefsParser.cs @@ -421,9 +421,6 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom } } - // Offset it slightly to avoid shading glitches - if (light.Offset.Z == 0.0f) light.Offset.Z = 0.1f; - // Add to the collection? if (!skip) lightsbyname[lightname] = light; diff --git a/Source/Core/Rendering/D3DDevice.cs b/Source/Core/Rendering/D3DDevice.cs index f819742..bccc37b 100644 --- a/Source/Core/Rendering/D3DDevice.cs +++ b/Source/Core/Rendering/D3DDevice.cs @@ -145,7 +145,7 @@ namespace CodeImp.DoomBuilder.Rendering device.SetRenderState(RenderState.CullMode, Cull.None); device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha); device.SetRenderState(RenderState.DiffuseMaterialSource, ColorSource.Color1); - device.SetRenderState(RenderState.DitherEnable, true); + //device.SetRenderState(RenderState.DitherEnable, true); device.SetRenderState(RenderState.FillMode, FillMode.Solid); device.SetRenderState(RenderState.FogEnable, false); device.SetRenderState(RenderState.FogTableMode, FogMode.Linear); @@ -154,7 +154,8 @@ namespace CodeImp.DoomBuilder.Rendering device.SetRenderState(RenderState.NormalizeNormals, false); device.SetRenderState(RenderState.PointSpriteEnable, false); device.SetRenderState(RenderState.RangeFogEnable, false); - device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); + device.SetRenderState(RenderState.ShadeMode, ShadeMode.Flat); //mxd + device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha); device.SetRenderState(RenderState.SpecularEnable, false); device.SetRenderState(RenderState.StencilEnable, false); device.SetRenderState(RenderState.TextureFactor, -1); diff --git a/Source/Core/Resources/world3d.fx b/Source/Core/Resources/world3d.fx index d610ca3..b1a7990 100644 --- a/Source/Core/Resources/world3d.fx +++ b/Source/Core/Resources/world3d.fx @@ -237,7 +237,7 @@ float4 ps_vertex_color(PixelData pd) : COLOR float4 ps_lightpass(LitPixelData pd) : COLOR { //is face facing away from light source? - if(dot(pd.normal, (lightPosAndRadius.xyz - pd.pos_w)) < -0.1f) // (lightPosAndRadius.xyz - pd.pos_w) == direction from light to current pixel + if(dot(pd.normal, normalize(lightPosAndRadius.xyz - pd.pos_w)) < -0.1f) // (lightPosAndRadius.xyz - pd.pos_w) == direction from light to current pixel clip(-1); //is pixel in light range? diff --git a/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs index d388c35..5e3fa18 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/DragThingsMode.cs @@ -54,7 +54,7 @@ namespace CodeImp.DoomBuilder.BuilderModes private readonly Vector2D dragstartmappos; //mxd. Offset from nearest grid intersection to dragstartmappos - private Vector2D dragstartoffset; + private readonly Vector2D dragstartoffset; // Item used as reference for snapping to the grid private readonly Thing dragitem; @@ -63,8 +63,11 @@ namespace CodeImp.DoomBuilder.BuilderModes // List of old thing positions private readonly List oldpositions; - //mxd - private class AlignData + //mxd + private bool makeundo; + + //mxd + private class AlignData { public readonly int InitialAngle; public int CurrentAngle; @@ -105,19 +108,20 @@ namespace CodeImp.DoomBuilder.BuilderModes // Just keep the base mode button checked public override string EditModeButtonName { get { return basemode.GetType().Name; } } - - #endregion - #region ================== Constructor / Disposer + #endregion - // Constructor to start dragging immediately - public DragThingsMode(EditMode basemode, Vector2D dragstartmappos) - { + #region ================== Constructor / Disposer + + // Constructor to start dragging immediately + public DragThingsMode(EditMode basemode, Vector2D dragstartmappos, bool makeundo) + { // Initialize this.dragstartmappos = dragstartmappos; this.basemode = basemode; + this.makeundo = makeundo; //mxd - Cursor.Current = Cursors.AppStarting; + Cursor.Current = Cursors.AppStarting; // Mark what we are dragging General.Map.Map.ClearAllMarks(false); @@ -371,11 +375,11 @@ namespace CodeImp.DoomBuilder.BuilderModes dragitem.Move(dragitem.Position.x, dragitem.Position.y, aligndata.InitialHeight); } - // Make undo for the dragging - General.Map.UndoRedo.CreateUndo((selectedthings.Count == 1 ? "Drag thing" : "Drag " + selectedthings.Count + " things")); + if (makeundo) //mxd + General.Map.UndoRedo.CreateUndo((selectedthings.Count == 1 ? "Drag thing" : "Drag " + selectedthings.Count + " things")); - // Move selected geometry to final position - if(aligndata != null && aligndata.Active) //mxd. Apply aligning + // Move selected geometry to final position + if (aligndata != null && aligndata.Active) //mxd. Apply aligning { if(!aligndata.Position.IsEmpty) dragitem.Move(aligndata.Position.X, aligndata.Position.Y, aligndata.CurrentHeight); diff --git a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs index f4fea9f..b5b9e14 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs @@ -596,47 +596,58 @@ namespace CodeImp.DoomBuilder.BuilderModes // Start dragging the selection if(!BuilderPlug.Me.DontMoveGeometryOutsideMapBoundary || CanDrag()) //mxd - { - // Shift pressed? Clone things! - if(General.Interface.ShiftState) - { - ICollection selection = General.Map.Map.GetSelectedThings(true); - foreach(Thing t in selection) - { - Thing clone = InsertThing(t.Position); - t.CopyPropertiesTo(clone); + { + // Shift pressed? Clone things! + bool thingscloned = false; + if (General.Interface.ShiftState) + { + ICollection selection = General.Map.Map.GetSelectedThings(true); + if (selection.Count > 0) + { + // Make undo + General.Map.UndoRedo.CreateUndo((selection.Count == 1 ? "Clone-drag thing" : "Clone-drag " + selection.Count + " things")); - // If the cloned item is an interpolation point or patrol point, then insert the point in the path - ThingTypeInfo info = General.Map.Data.GetThingInfo(t.SRB2Type); - int nextpointtagargnum = -1; + // Clone things + foreach (Thing t in selection) + { + Thing clone = InsertThing(t.Position); + t.CopyPropertiesTo(clone); - // Thing type can be changed in MAPINFO DoomEdNums block... - switch(info.ClassName.ToLowerInvariant()) - { - case "interpolationpoint": - nextpointtagargnum = 3; - break; + // If the cloned item is an interpolation point or patrol point, then insert the point in the path + ThingTypeInfo info = General.Map.Data.GetThingInfo(t.SRB2Type); + int nextpointtagargnum = -1; - case "patrolpoint": - nextpointtagargnum = 0; - break; - } + // Thing type can be changed in MAPINFO DoomEdNums block... + switch (info.ClassName.ToLowerInvariant()) + { + case "interpolationpoint": + nextpointtagargnum = 3; + break; - // Apply changes? - if(nextpointtagargnum != -1) - { - if(t.Tag == 0) t.Tag = General.Map.Map.GetNewTag(); - t.Args[nextpointtagargnum] = clone.Tag = General.Map.Map.GetNewTag(); - } + case "patrolpoint": + nextpointtagargnum = 0; + break; + } - t.Selected = false; - clone.Selected = true; - } - } + // Apply changes? + if (nextpointtagargnum != -1) + { + if (t.Tag == 0) t.Tag = General.Map.Map.GetNewTag(); + t.Args[nextpointtagargnum] = clone.Tag = General.Map.Map.GetNewTag(); + } - General.Editing.ChangeMode(new DragThingsMode(new ThingsMode(), mousedownmappos)); - } - } + t.Selected = false; + clone.Selected = true; + } + + // We'll want to skip creating additional Undo in DragThingsMode + thingscloned = true; + } + } + + General.Editing.ChangeMode(new DragThingsMode(new ThingsMode(), mousedownmappos, !thingscloned)); + } + } } }