From 851a7c789579ee4718fa662c73f31d4f5ea4f98f Mon Sep 17 00:00:00 2001 From: codeimp Date: Sun, 4 Jan 2009 13:58:26 +0000 Subject: [PATCH] - edit selection mode now also rotates thing angles - edit selection mode now shows a rectangle selection that covers also the thing sizes - fixed right-click to start drawing mode from linedefs mode - fixed floor and ceiling texture coordinates in both classic modes and visual mode --- Documents/todo.txt | 10 ---------- .../ClassicModes/EditSelectionMode.cs | 18 ++++++++++++++---- .../BuilderModes/ClassicModes/LinedefsMode.cs | 1 + Source/BuilderModes/General/BuilderPlug.cs | 8 ++++---- .../BuilderModes/VisualModes/VisualCeiling.cs | 4 ++-- Source/BuilderModes/VisualModes/VisualFloor.cs | 4 ++-- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/Documents/todo.txt b/Documents/todo.txt index bfe3fe99..669f231d 100644 --- a/Documents/todo.txt +++ b/Documents/todo.txt @@ -3,20 +3,10 @@ quality over quantity. It is done when it's done. The order and included items may also change any time. ========================================================= -- Info panel should be collapsable - - Create menus for different modes - Create gradient ceiling/floor heights feature -- Fix flats alignment in Visual Mode (possibly also in Classic Modes) - -- Fix flat texture coordinates in Classic Modes (some flats/textures on floors appear stretched or shrinked) - -- Right-click in empty space in Linedefs mode does weird. - -- Edit Selection mode does not take size of things into account. - - Set up forum for bug reports and development. - Test map nomonsters option in same menu diff --git a/Source/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/BuilderModes/ClassicModes/EditSelectionMode.cs index 7ef6b80f..b24b4f07 100644 --- a/Source/BuilderModes/ClassicModes/EditSelectionMode.cs +++ b/Source/BuilderModes/ClassicModes/EditSelectionMode.cs @@ -99,6 +99,7 @@ namespace CodeImp.DoomBuilder.BuilderModes private ICollection selectedlines; private List vertexpos; private List thingpos; + private List thingangle; private ICollection unselectedvertices; private ICollection unselectedlines; @@ -494,6 +495,7 @@ namespace CodeImp.DoomBuilder.BuilderModes index = 0; foreach(Thing t in selectedthings) { + t.Rotate(Angle2D.Normalized(thingangle[index] + rotation)); t.Move(TransformedPoint(thingpos[index++])); } @@ -621,6 +623,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Array to keep original coordinates vertexpos = new List(selectedvertices.Count); thingpos = new List(selectedthings.Count); + thingangle = new List(selectedthings.Count); // A selection must be made! if((selectedvertices.Count > 0) || (selectedthings.Count > 0)) @@ -647,13 +650,14 @@ namespace CodeImp.DoomBuilder.BuilderModes foreach(Thing t in selectedthings) { // Find left-top and right-bottom - if(t.Position.x < offset.x) offset.x = t.Position.x; - if(t.Position.y < offset.y) offset.y = t.Position.y; - if(t.Position.x > right.x) right.x = t.Position.x; - if(t.Position.y > right.y) right.y = t.Position.y; + if((t.Position.x - t.Size) < offset.x) offset.x = t.Position.x - t.Size; + if((t.Position.y - t.Size) < offset.y) offset.y = t.Position.y - t.Size; + if((t.Position.x + t.Size) > right.x) right.x = t.Position.x + t.Size; + if((t.Position.y + t.Size) > right.y) right.y = t.Position.y + t.Size; // Keep original coordinates thingpos.Add(t.Position); + thingangle.Add(t.Angle); } // Calculate size @@ -726,7 +730,10 @@ namespace CodeImp.DoomBuilder.BuilderModes index = 0; foreach(Thing t in selectedthings) + { + t.Rotate(thingangle[index]); t.Move(thingpos[index++]); + } General.Map.Map.Update(true, true); @@ -754,7 +761,10 @@ namespace CodeImp.DoomBuilder.BuilderModes index = 0; foreach(Thing t in selectedthings) + { + t.Rotate(thingangle[index]); t.Move(thingpos[index++]); + } // Make undo General.Map.UndoRedo.CreateUndo("Edit selection"); diff --git a/Source/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/BuilderModes/ClassicModes/LinedefsMode.cs index e5952a19..32803f49 100644 --- a/Source/BuilderModes/ClassicModes/LinedefsMode.cs +++ b/Source/BuilderModes/ClassicModes/LinedefsMode.cs @@ -346,6 +346,7 @@ namespace CodeImp.DoomBuilder.BuilderModes bool snaptonearest = General.Interface.CtrlState ^ General.Interface.AutoMerge; DrawnVertex v = DrawGeometryMode.GetCurrentPosition(mousemappos, snaptonearest, snaptogrid, renderer, new List()); drawmode.DrawPointAt(v); + General.Editing.ChangeMode(drawmode); } base.OnEditBegin(); diff --git a/Source/BuilderModes/General/BuilderPlug.cs b/Source/BuilderModes/General/BuilderPlug.cs index 7c868987..260fadf0 100644 --- a/Source/BuilderModes/General/BuilderPlug.cs +++ b/Source/BuilderModes/General/BuilderPlug.cs @@ -134,7 +134,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public override void OnSectorFloorSurfaceUpdate(Sector s, ref FlatVertex[] vertices) { ImageData img = General.Map.Data.GetFlatImage(s.LongFloorTexture); - if(img != null) + if((img != null) && img.IsImageLoaded) { // Make scalars float sw = 1.0f / img.ScaledWidth; @@ -144,7 +144,7 @@ namespace CodeImp.DoomBuilder.BuilderModes for(int i = 0; i < vertices.Length; i++) { vertices[i].u = vertices[i].u * sw; - vertices[i].v = vertices[i].v * sw; + vertices[i].v = -vertices[i].v * sh; } } } @@ -153,7 +153,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public override void OnSectorCeilingSurfaceUpdate(Sector s, ref FlatVertex[] vertices) { ImageData img = General.Map.Data.GetFlatImage(s.LongCeilTexture); - if(img != null) + if((img != null) && img.IsImageLoaded) { // Make scalars float sw = 1.0f / img.ScaledWidth; @@ -163,7 +163,7 @@ namespace CodeImp.DoomBuilder.BuilderModes for(int i = 0; i < vertices.Length; i++) { vertices[i].u = vertices[i].u * sw; - vertices[i].v = vertices[i].v * sw; + vertices[i].v = -vertices[i].v * sh; } } } diff --git a/Source/BuilderModes/VisualModes/VisualCeiling.cs b/Source/BuilderModes/VisualModes/VisualCeiling.cs index 015dbd2b..513dcc03 100644 --- a/Source/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/BuilderModes/VisualModes/VisualCeiling.cs @@ -88,12 +88,12 @@ namespace CodeImp.DoomBuilder.BuilderModes if(base.Texture.IsImageLoaded) { verts[i].u = s.Triangles.Vertices[i].x / base.Texture.ScaledWidth; - verts[i].v = s.Triangles.Vertices[i].y / base.Texture.ScaledHeight; + verts[i].v = -s.Triangles.Vertices[i].y / base.Texture.ScaledHeight; } else { verts[i].u = s.Triangles.Vertices[i].x / 64; - verts[i].v = s.Triangles.Vertices[i].y / 64; + verts[i].v = -s.Triangles.Vertices[i].y / 64; } // Vertex coordinates diff --git a/Source/BuilderModes/VisualModes/VisualFloor.cs b/Source/BuilderModes/VisualModes/VisualFloor.cs index 372bef22..389aef8c 100644 --- a/Source/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/BuilderModes/VisualModes/VisualFloor.cs @@ -87,12 +87,12 @@ namespace CodeImp.DoomBuilder.BuilderModes if(base.Texture.IsImageLoaded) { verts[i].u = s.Triangles.Vertices[i].x / base.Texture.ScaledWidth; - verts[i].v = s.Triangles.Vertices[i].y / base.Texture.ScaledHeight; + verts[i].v = -s.Triangles.Vertices[i].y / base.Texture.ScaledHeight; } else { verts[i].u = s.Triangles.Vertices[i].x / 64; - verts[i].v = s.Triangles.Vertices[i].y / 64; + verts[i].v = -s.Triangles.Vertices[i].y / 64; } // Vertex coordinates