mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-26 05:41:45 +00:00
- 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
This commit is contained in:
parent
caada1aa57
commit
851a7c7895
6 changed files with 23 additions and 22 deletions
|
@ -3,20 +3,10 @@ quality over quantity. It is done when it's done.
|
||||||
The order and included items may also change any time.
|
The order and included items may also change any time.
|
||||||
=========================================================
|
=========================================================
|
||||||
|
|
||||||
- Info panel should be collapsable
|
|
||||||
|
|
||||||
- Create menus for different modes
|
- Create menus for different modes
|
||||||
|
|
||||||
- Create gradient ceiling/floor heights feature
|
- 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.
|
- Set up forum for bug reports and development.
|
||||||
|
|
||||||
- Test map nomonsters option in same menu
|
- Test map nomonsters option in same menu
|
||||||
|
|
|
@ -99,6 +99,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
private ICollection<Linedef> selectedlines;
|
private ICollection<Linedef> selectedlines;
|
||||||
private List<Vector2D> vertexpos;
|
private List<Vector2D> vertexpos;
|
||||||
private List<Vector2D> thingpos;
|
private List<Vector2D> thingpos;
|
||||||
|
private List<float> thingangle;
|
||||||
private ICollection<Vertex> unselectedvertices;
|
private ICollection<Vertex> unselectedvertices;
|
||||||
private ICollection<Linedef> unselectedlines;
|
private ICollection<Linedef> unselectedlines;
|
||||||
|
|
||||||
|
@ -494,6 +495,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
index = 0;
|
index = 0;
|
||||||
foreach(Thing t in selectedthings)
|
foreach(Thing t in selectedthings)
|
||||||
{
|
{
|
||||||
|
t.Rotate(Angle2D.Normalized(thingangle[index] + rotation));
|
||||||
t.Move(TransformedPoint(thingpos[index++]));
|
t.Move(TransformedPoint(thingpos[index++]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,6 +623,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Array to keep original coordinates
|
// Array to keep original coordinates
|
||||||
vertexpos = new List<Vector2D>(selectedvertices.Count);
|
vertexpos = new List<Vector2D>(selectedvertices.Count);
|
||||||
thingpos = new List<Vector2D>(selectedthings.Count);
|
thingpos = new List<Vector2D>(selectedthings.Count);
|
||||||
|
thingangle = new List<float>(selectedthings.Count);
|
||||||
|
|
||||||
// A selection must be made!
|
// A selection must be made!
|
||||||
if((selectedvertices.Count > 0) || (selectedthings.Count > 0))
|
if((selectedvertices.Count > 0) || (selectedthings.Count > 0))
|
||||||
|
@ -647,13 +650,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
foreach(Thing t in selectedthings)
|
foreach(Thing t in selectedthings)
|
||||||
{
|
{
|
||||||
// Find left-top and right-bottom
|
// Find left-top and right-bottom
|
||||||
if(t.Position.x < offset.x) offset.x = t.Position.x;
|
if((t.Position.x - t.Size) < offset.x) offset.x = t.Position.x - t.Size;
|
||||||
if(t.Position.y < offset.y) offset.y = t.Position.y;
|
if((t.Position.y - t.Size) < offset.y) offset.y = t.Position.y - t.Size;
|
||||||
if(t.Position.x > right.x) right.x = t.Position.x;
|
if((t.Position.x + t.Size) > right.x) right.x = t.Position.x + t.Size;
|
||||||
if(t.Position.y > right.y) right.y = t.Position.y;
|
if((t.Position.y + t.Size) > right.y) right.y = t.Position.y + t.Size;
|
||||||
|
|
||||||
// Keep original coordinates
|
// Keep original coordinates
|
||||||
thingpos.Add(t.Position);
|
thingpos.Add(t.Position);
|
||||||
|
thingangle.Add(t.Angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate size
|
// Calculate size
|
||||||
|
@ -726,7 +730,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
index = 0;
|
index = 0;
|
||||||
foreach(Thing t in selectedthings)
|
foreach(Thing t in selectedthings)
|
||||||
|
{
|
||||||
|
t.Rotate(thingangle[index]);
|
||||||
t.Move(thingpos[index++]);
|
t.Move(thingpos[index++]);
|
||||||
|
}
|
||||||
|
|
||||||
General.Map.Map.Update(true, true);
|
General.Map.Map.Update(true, true);
|
||||||
|
|
||||||
|
@ -754,7 +761,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
index = 0;
|
index = 0;
|
||||||
foreach(Thing t in selectedthings)
|
foreach(Thing t in selectedthings)
|
||||||
|
{
|
||||||
|
t.Rotate(thingangle[index]);
|
||||||
t.Move(thingpos[index++]);
|
t.Move(thingpos[index++]);
|
||||||
|
}
|
||||||
|
|
||||||
// Make undo
|
// Make undo
|
||||||
General.Map.UndoRedo.CreateUndo("Edit selection");
|
General.Map.UndoRedo.CreateUndo("Edit selection");
|
||||||
|
|
|
@ -346,6 +346,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
bool snaptonearest = General.Interface.CtrlState ^ General.Interface.AutoMerge;
|
bool snaptonearest = General.Interface.CtrlState ^ General.Interface.AutoMerge;
|
||||||
DrawnVertex v = DrawGeometryMode.GetCurrentPosition(mousemappos, snaptonearest, snaptogrid, renderer, new List<DrawnVertex>());
|
DrawnVertex v = DrawGeometryMode.GetCurrentPosition(mousemappos, snaptonearest, snaptogrid, renderer, new List<DrawnVertex>());
|
||||||
drawmode.DrawPointAt(v);
|
drawmode.DrawPointAt(v);
|
||||||
|
General.Editing.ChangeMode(drawmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnEditBegin();
|
base.OnEditBegin();
|
||||||
|
|
|
@ -134,7 +134,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public override void OnSectorFloorSurfaceUpdate(Sector s, ref FlatVertex[] vertices)
|
public override void OnSectorFloorSurfaceUpdate(Sector s, ref FlatVertex[] vertices)
|
||||||
{
|
{
|
||||||
ImageData img = General.Map.Data.GetFlatImage(s.LongFloorTexture);
|
ImageData img = General.Map.Data.GetFlatImage(s.LongFloorTexture);
|
||||||
if(img != null)
|
if((img != null) && img.IsImageLoaded)
|
||||||
{
|
{
|
||||||
// Make scalars
|
// Make scalars
|
||||||
float sw = 1.0f / img.ScaledWidth;
|
float sw = 1.0f / img.ScaledWidth;
|
||||||
|
@ -144,7 +144,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
for(int i = 0; i < vertices.Length; i++)
|
for(int i = 0; i < vertices.Length; i++)
|
||||||
{
|
{
|
||||||
vertices[i].u = vertices[i].u * sw;
|
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)
|
public override void OnSectorCeilingSurfaceUpdate(Sector s, ref FlatVertex[] vertices)
|
||||||
{
|
{
|
||||||
ImageData img = General.Map.Data.GetFlatImage(s.LongCeilTexture);
|
ImageData img = General.Map.Data.GetFlatImage(s.LongCeilTexture);
|
||||||
if(img != null)
|
if((img != null) && img.IsImageLoaded)
|
||||||
{
|
{
|
||||||
// Make scalars
|
// Make scalars
|
||||||
float sw = 1.0f / img.ScaledWidth;
|
float sw = 1.0f / img.ScaledWidth;
|
||||||
|
@ -163,7 +163,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
for(int i = 0; i < vertices.Length; i++)
|
for(int i = 0; i < vertices.Length; i++)
|
||||||
{
|
{
|
||||||
vertices[i].u = vertices[i].u * sw;
|
vertices[i].u = vertices[i].u * sw;
|
||||||
vertices[i].v = vertices[i].v * sw;
|
vertices[i].v = -vertices[i].v * sh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,12 +88,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
if(base.Texture.IsImageLoaded)
|
if(base.Texture.IsImageLoaded)
|
||||||
{
|
{
|
||||||
verts[i].u = s.Triangles.Vertices[i].x / base.Texture.ScaledWidth;
|
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
|
else
|
||||||
{
|
{
|
||||||
verts[i].u = s.Triangles.Vertices[i].x / 64;
|
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
|
// Vertex coordinates
|
||||||
|
|
|
@ -87,12 +87,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
if(base.Texture.IsImageLoaded)
|
if(base.Texture.IsImageLoaded)
|
||||||
{
|
{
|
||||||
verts[i].u = s.Triangles.Vertices[i].x / base.Texture.ScaledWidth;
|
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
|
else
|
||||||
{
|
{
|
||||||
verts[i].u = s.Triangles.Vertices[i].x / 64;
|
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
|
// Vertex coordinates
|
||||||
|
|
Loading…
Reference in a new issue