mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-03-11 04:21:10 +00:00
Edit Selection mode now also highlights Things for snapping
This commit is contained in:
parent
59a08256a4
commit
5a1dfbee72
1 changed files with 98 additions and 27 deletions
|
@ -90,7 +90,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
private bool pasting = false;
|
private bool pasting = false;
|
||||||
|
|
||||||
// Highlighted vertex
|
// Highlighted vertex
|
||||||
private Vertex highlighted;
|
private MapElement highlighted;
|
||||||
private Vector2D highlightedpos;
|
private Vector2D highlightedpos;
|
||||||
|
|
||||||
// Selection
|
// Selection
|
||||||
|
@ -173,27 +173,67 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
#region ================== Methods
|
#region ================== Methods
|
||||||
|
|
||||||
// This highlights a new vertex
|
// This returns the position of the highlighted item
|
||||||
protected void Highlight(Vertex v)
|
private Vector2D GetHighlightedPosition()
|
||||||
{
|
{
|
||||||
// Update display
|
if(highlighted is Vertex)
|
||||||
if(renderer.StartPlotter(false))
|
return (highlighted as Vertex).Position;
|
||||||
|
else if(highlighted is Thing)
|
||||||
|
return (highlighted as Thing).Position;
|
||||||
|
else
|
||||||
|
throw new Exception("Highlighted element type is not supported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// This highlights a new vertex
|
||||||
|
protected void Highlight(MapElement h)
|
||||||
|
{
|
||||||
|
// Undraw previous highlight
|
||||||
|
if((highlighted != null) && !highlighted.IsDisposed)
|
||||||
{
|
{
|
||||||
// Undraw previous highlight
|
if(highlighted is Vertex)
|
||||||
if((highlighted != null) && !highlighted.IsDisposed)
|
{
|
||||||
renderer.PlotVertex(highlighted, renderer.DetermineVertexColor(highlighted));
|
if(renderer.StartPlotter(false))
|
||||||
|
{
|
||||||
// Set new highlight
|
renderer.PlotVertex((highlighted as Vertex), renderer.DetermineVertexColor((highlighted as Vertex)));
|
||||||
highlighted = v;
|
renderer.Finish();
|
||||||
|
}
|
||||||
// Render highlighted item
|
}
|
||||||
if((highlighted != null) && !highlighted.IsDisposed)
|
else
|
||||||
renderer.PlotVertex(highlighted, ColorCollection.HIGHLIGHT);
|
{
|
||||||
|
if(renderer.StartThings(false))
|
||||||
// Done
|
{
|
||||||
renderer.Finish();
|
renderer.RenderThing((highlighted as Thing), renderer.DetermineThingColor((highlighted as Thing)), 1.0f);
|
||||||
renderer.Present();
|
renderer.Finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set new highlight
|
||||||
|
highlighted = h;
|
||||||
|
|
||||||
|
// Render highlighted item
|
||||||
|
if((highlighted != null) && !highlighted.IsDisposed)
|
||||||
|
{
|
||||||
|
if(highlighted is Vertex)
|
||||||
|
{
|
||||||
|
if(renderer.StartPlotter(false))
|
||||||
|
{
|
||||||
|
renderer.PlotVertex((highlighted as Vertex), ColorCollection.HIGHLIGHT);
|
||||||
|
renderer.Finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(renderer.StartThings(false))
|
||||||
|
{
|
||||||
|
renderer.RenderThing((highlighted as Thing), General.Colors.Highlight, 1.0f);
|
||||||
|
renderer.Finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Done
|
||||||
|
renderer.Present();
|
||||||
}
|
}
|
||||||
|
|
||||||
// This updates the selection
|
// This updates the selection
|
||||||
|
@ -212,8 +252,29 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Find the nearest vertex within highlight range
|
// Find the nearest vertex within highlight range
|
||||||
Vertex v = MapSet.NearestVertex(selectedvertices, mousemappos);
|
Vertex v = MapSet.NearestVertex(selectedvertices, mousemappos);
|
||||||
|
|
||||||
// Highlight if not the same
|
// Find the nearest thing within range
|
||||||
if(v != highlighted) Highlight(v);
|
Thing t = MapSet.NearestThing(selectedthings, mousemappos);
|
||||||
|
|
||||||
|
// Highlight the one that is closer
|
||||||
|
if((v != null) && (t != null))
|
||||||
|
{
|
||||||
|
if(v.DistanceToSq(mousemappos) < t.DistanceToSq(mousemappos))
|
||||||
|
{
|
||||||
|
if(v != highlighted) Highlight(v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(t != highlighted) Highlight(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(v != null)
|
||||||
|
{
|
||||||
|
if(v != highlighted) Highlight(v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(t != highlighted) Highlight(t);
|
||||||
|
}
|
||||||
|
|
||||||
General.Interface.SetCursor(Cursors.Hand);
|
General.Interface.SetCursor(Cursors.Hand);
|
||||||
break;
|
break;
|
||||||
|
@ -990,7 +1051,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
{
|
{
|
||||||
renderer.PlotLinedefSet(General.Map.Map.Linedefs);
|
renderer.PlotLinedefSet(General.Map.Map.Linedefs);
|
||||||
renderer.PlotVerticesSet(General.Map.Map.Vertices);
|
renderer.PlotVerticesSet(General.Map.Map.Vertices);
|
||||||
if(highlighted != null) renderer.PlotVertex(highlighted, ColorCollection.HIGHLIGHT);
|
if(highlighted is Vertex) renderer.PlotVertex((highlighted as Vertex), ColorCollection.HIGHLIGHT);
|
||||||
renderer.Finish();
|
renderer.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -999,6 +1060,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
{
|
{
|
||||||
renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA);
|
renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA);
|
||||||
renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f);
|
renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f);
|
||||||
|
if(highlighted is Thing) renderer.RenderThing((highlighted as Thing), General.Colors.Highlight, 1.0f);
|
||||||
renderer.Finish();
|
renderer.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1078,8 +1140,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Drag main rectangle
|
// Drag main rectangle
|
||||||
case Grip.Main:
|
case Grip.Main:
|
||||||
|
|
||||||
// Find the original position of the highlighted vertex
|
// Find the original position of the highlighted element
|
||||||
if(highlighted != null)
|
if(highlighted is Vertex)
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
foreach(Vertex v in selectedvertices)
|
foreach(Vertex v in selectedvertices)
|
||||||
|
@ -1088,6 +1150,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(highlighted is Thing)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
foreach(Thing t in selectedthings)
|
||||||
|
{
|
||||||
|
if(t == highlighted) highlightedpos = thingpos[index];
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dragoffset = mousemappos - offset;
|
dragoffset = mousemappos - offset;
|
||||||
mode = ModifyMode.Dragging;
|
mode = ModifyMode.Dragging;
|
||||||
|
|
Loading…
Reference in a new issue