mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-17 01:22:18 +00:00
Added paint selecting to visual mode (PR#248 by biwa)
This commit is contained in:
parent
5157dafd6a
commit
eaebf7ec1a
8 changed files with 242 additions and 5 deletions
|
@ -1391,3 +1391,17 @@ ceilingalignmode
|
||||||
allowmouse = true;
|
allowmouse = true;
|
||||||
allowscroll = true;
|
allowscroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
visualpaintselect
|
||||||
|
{
|
||||||
|
title = "Paint Selection";
|
||||||
|
category = "visual";
|
||||||
|
description = "Selects or deselects items by dragging the mouse. Hold shift while dragging to toggle additive selection. Hold Ctrl while dragging to enable subtractive selection";
|
||||||
|
allowkeys = true;
|
||||||
|
allowmouse = true;
|
||||||
|
allowscroll = false;
|
||||||
|
disregardshift = true;
|
||||||
|
disregardcontrol = true;
|
||||||
|
disregardalt = true;
|
||||||
|
}
|
||||||
|
|
|
@ -449,6 +449,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public virtual void ApplyLowerUnpegged(bool set) { }
|
public virtual void ApplyLowerUnpegged(bool set) { }
|
||||||
protected abstract void MoveTextureOffset(int offsetx, int offsety);
|
protected abstract void MoveTextureOffset(int offsetx, int offsety);
|
||||||
protected abstract Point GetTextureOffset();
|
protected abstract Point GetTextureOffset();
|
||||||
|
public virtual void OnPaintSelectEnd() { } // biwa
|
||||||
|
|
||||||
// Setup this plane
|
// Setup this plane
|
||||||
public bool Setup() { return this.Setup(this.level, this.extrafloor); }
|
public bool Setup() { return this.Setup(this.level, this.extrafloor); }
|
||||||
|
@ -501,6 +502,37 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Moving the mouse
|
// Moving the mouse
|
||||||
public virtual void OnMouseMove(MouseEventArgs e)
|
public virtual void OnMouseMove(MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
// biwa. Paint selection going on?
|
||||||
|
if(mode.PaintSelectPressed)
|
||||||
|
{
|
||||||
|
// toggle selected state
|
||||||
|
if (mode.PaintSelectType == this.GetType().BaseType && mode.Highlighted != this) // using BaseType so that both floor and ceiling can be selected in one go
|
||||||
|
{
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!General.Map.UDMF) return; //mxd. Cannot change texture offsets in other map formats...
|
if(!General.Map.UDMF) return; //mxd. Cannot change texture offsets in other map formats...
|
||||||
|
|
||||||
// Dragging UV?
|
// Dragging UV?
|
||||||
|
@ -972,6 +1004,34 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
if(vs != null) vs.UpdateSectorGeometry(false);
|
if(vs != null) vs.UpdateSectorGeometry(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
public virtual void OnPaintSelectBegin()
|
||||||
|
{
|
||||||
|
mode.PaintSelectType = this.GetType().BaseType; // using BaseType so that both floor and ceiling can be selected in one go
|
||||||
|
|
||||||
|
// toggle selected state
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -833,6 +833,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
protected abstract void MoveTextureOffset(int offsetx, int offsety);
|
protected abstract void MoveTextureOffset(int offsetx, int offsety);
|
||||||
protected abstract Point GetTextureOffset();
|
protected abstract Point GetTextureOffset();
|
||||||
public virtual void OnTextureFit(FitTextureOptions options) { } //mxd
|
public virtual void OnTextureFit(FitTextureOptions options) { } //mxd
|
||||||
|
public virtual void OnPaintSelectEnd() { } // biwa
|
||||||
|
|
||||||
// Insert middle texture
|
// Insert middle texture
|
||||||
public virtual void OnInsert()
|
public virtual void OnInsert()
|
||||||
|
@ -1414,6 +1415,35 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
{
|
{
|
||||||
UpdateDragUV();
|
UpdateDragUV();
|
||||||
}
|
}
|
||||||
|
else if (mode.PaintSelectPressed) // biwa. Paint selection going on?
|
||||||
|
{
|
||||||
|
if (mode.PaintSelectType == this.GetType().BaseType && mode.Highlighted != this) // using BaseType so that middle, upper, lower, etc can be selecting in one go
|
||||||
|
{
|
||||||
|
// toggle selected state
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Select button pressed?
|
// Select button pressed?
|
||||||
|
@ -1667,6 +1697,33 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
mode.SetActionResult("Wall scale changed to " + scaleX.ToString("F03", CultureInfo.InvariantCulture) + ", " + scaleY.ToString("F03", CultureInfo.InvariantCulture) + " (" + (int)Math.Round(Texture.Width / scaleX) + " x " + (int)Math.Round(Texture.Height / scaleY) + ").");
|
mode.SetActionResult("Wall scale changed to " + scaleX.ToString("F03", CultureInfo.InvariantCulture) + ", " + scaleY.ToString("F03", CultureInfo.InvariantCulture) + " (" + (int)Math.Round(Texture.Width / scaleX) + " x " + (int)Math.Round(Texture.Height / scaleY) + ").");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
public virtual void OnPaintSelectBegin()
|
||||||
|
{
|
||||||
|
mode.PaintSelectType = this.GetType().BaseType; // using BaseType so that middle, upper, lower, etc can be selecting in one go
|
||||||
|
|
||||||
|
// toggle selected state
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
#region ================== Constants
|
#region ================== Constants
|
||||||
// Object picking
|
// Object picking
|
||||||
private const long PICK_INTERVAL = 80;
|
private const long PICK_INTERVAL = 80;
|
||||||
|
private const long PICK_INTERVAL_PAINT_SELECT = 10; // biwa
|
||||||
private const float PICK_RANGE = 0.98f;
|
private const float PICK_RANGE = 0.98f;
|
||||||
|
|
||||||
// Gravity
|
// Gravity
|
||||||
|
@ -94,6 +95,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
private readonly List<ThingCopyData> copybuffer;
|
private readonly List<ThingCopyData> copybuffer;
|
||||||
private Type lasthighlighttype;
|
private Type lasthighlighttype;
|
||||||
|
|
||||||
|
// biwa. Info for paint selection
|
||||||
|
protected bool paintselectpressed;
|
||||||
|
protected Type paintselecttype = null;
|
||||||
|
protected IVisualPickable highlighted; // biwa
|
||||||
|
|
||||||
//mxd. Moved here from Tools
|
//mxd. Moved here from Tools
|
||||||
private struct SidedefAlignJob
|
private struct SidedefAlignJob
|
||||||
{
|
{
|
||||||
|
@ -159,6 +165,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public bool IsSingleSelection { get { return singleselection; } }
|
public bool IsSingleSelection { get { return singleselection; } }
|
||||||
public bool SelectionChanged { get { return selectionchanged; } set { selectionchanged |= value; } }
|
public bool SelectionChanged { get { return selectionchanged; } set { selectionchanged |= value; } }
|
||||||
|
|
||||||
|
public bool PaintSelectPressed { get { return paintselectpressed; } } // biwa
|
||||||
|
public Type PaintSelectType { get { return paintselecttype; } set { paintselecttype = value; } } // biwa
|
||||||
|
public IVisualPickable Highlighted { get { return highlighted; } } // biwa
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ================== Constructor / Disposer
|
#region ================== Constructor / Disposer
|
||||||
|
@ -1130,6 +1140,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Processing
|
// Processing
|
||||||
public override void OnProcess(long deltatime)
|
public override void OnProcess(long deltatime)
|
||||||
{
|
{
|
||||||
|
long pickinterval = PICK_INTERVAL; // biwa
|
||||||
// Process things?
|
// Process things?
|
||||||
base.ProcessThings = (BuilderPlug.Me.ShowVisualThings != 0);
|
base.ProcessThings = (BuilderPlug.Me.ShowVisualThings != 0);
|
||||||
|
|
||||||
|
@ -1204,8 +1215,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
g.OnProcess(deltatime);
|
g.OnProcess(deltatime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa. Use a lower pick interval for paint selection, to make it more reliable
|
||||||
|
if (paintselectpressed)
|
||||||
|
pickinterval = PICK_INTERVAL_PAINT_SELECT;
|
||||||
|
|
||||||
// Time to pick a new target?
|
// Time to pick a new target?
|
||||||
if(Clock.CurrentTime > (lastpicktime + PICK_INTERVAL))
|
if(Clock.CurrentTime > (lastpicktime + pickinterval))
|
||||||
{
|
{
|
||||||
PickTargetUnlocked();
|
PickTargetUnlocked();
|
||||||
lastpicktime = Clock.CurrentTime;
|
lastpicktime = Clock.CurrentTime;
|
||||||
|
@ -1443,6 +1458,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
lasthighlighttype = o.GetType();
|
lasthighlighttype = o.GetType();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
if (o is NullVisualEventReceiver)
|
||||||
|
highlighted = null;
|
||||||
|
else if (o is VisualGeometry)
|
||||||
|
highlighted = (VisualGeometry)o;
|
||||||
|
else if (o is VisualThing)
|
||||||
|
highlighted = (VisualThing)o;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Undo performed
|
// Undo performed
|
||||||
|
@ -3741,6 +3764,23 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Interface.DisplayStatus(StatusType.Info, "Alpha-based textures highlighting is " + (BuilderPlug.Me.AlphaBasedTextureHighlighting ? "ENABLED" : "DISABLED"));
|
General.Interface.DisplayStatus(StatusType.Info, "Alpha-based textures highlighting is " + (BuilderPlug.Me.AlphaBasedTextureHighlighting ? "ENABLED" : "DISABLED"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
[BeginAction("visualpaintselect")]
|
||||||
|
protected virtual void OnPaintSelectBegin()
|
||||||
|
{
|
||||||
|
paintselectpressed = true;
|
||||||
|
GetTargetEventReceiver(true).OnPaintSelectBegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
[EndAction("visualpaintselect")]
|
||||||
|
protected virtual void OnPaintSelectEnd()
|
||||||
|
{
|
||||||
|
paintselectpressed = false;
|
||||||
|
paintselecttype = null;
|
||||||
|
GetTargetEventReceiver(true).OnPaintSelectEnd();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ================== Texture Alignment
|
#region ================== Texture Alignment
|
||||||
|
|
|
@ -646,7 +646,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Unused
|
// Unused
|
||||||
public void OnSelectBegin() { }
|
public void OnSelectBegin() { }
|
||||||
public void OnEditBegin() { }
|
public void OnEditBegin() { }
|
||||||
public void OnMouseMove(MouseEventArgs e) { }
|
|
||||||
public void OnChangeTargetBrightness(bool up) { }
|
public void OnChangeTargetBrightness(bool up) { }
|
||||||
public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
|
public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
|
||||||
public void OnSelectTexture() { }
|
public void OnSelectTexture() { }
|
||||||
|
@ -665,6 +664,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public void ApplyUpperUnpegged(bool set) { }
|
public void ApplyUpperUnpegged(bool set) { }
|
||||||
public void ApplyLowerUnpegged(bool set) { }
|
public void ApplyLowerUnpegged(bool set) { }
|
||||||
public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
||||||
|
public virtual void OnPaintSelectEnd() { } // biwa
|
||||||
|
|
||||||
// Return texture name
|
// Return texture name
|
||||||
public string GetTextureName() { return ""; }
|
public string GetTextureName() { return ""; }
|
||||||
|
@ -859,6 +859,66 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
this.Changed = true;
|
this.Changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// biwa. Moving the mouse
|
||||||
|
public virtual void OnMouseMove(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
// biwa. Paint selection going on?
|
||||||
|
if (mode.PaintSelectPressed)
|
||||||
|
{
|
||||||
|
// toggle selected state
|
||||||
|
if (mode.PaintSelectType == this.GetType() && mode.Highlighted != this)
|
||||||
|
{
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// biwa
|
||||||
|
public virtual void OnPaintSelectBegin()
|
||||||
|
{
|
||||||
|
mode.PaintSelectType = this.GetType();
|
||||||
|
|
||||||
|
// toggle selected state
|
||||||
|
if (General.Interface.ShiftState ^ BuilderPlug.Me.AdditiveSelect)
|
||||||
|
{
|
||||||
|
this.selected = true;
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
}
|
||||||
|
else if (General.Interface.CtrlState)
|
||||||
|
{
|
||||||
|
this.selected = false;
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.selected)
|
||||||
|
mode.RemoveSelectedObject(this);
|
||||||
|
else
|
||||||
|
mode.AddSelectedObject(this);
|
||||||
|
|
||||||
|
this.selected = !this.selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
public void SetAngle(int newangle)
|
public void SetAngle(int newangle)
|
||||||
{
|
{
|
||||||
|
|
|
@ -262,6 +262,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public void ApplyLowerUnpegged(bool set) { }
|
public void ApplyLowerUnpegged(bool set) { }
|
||||||
public string GetTextureName() { return ""; }
|
public string GetTextureName() { return ""; }
|
||||||
public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
public void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
||||||
|
public virtual void OnPaintSelectBegin() { } // biwa
|
||||||
|
public virtual void OnPaintSelectEnd() { } // biwa
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
void OnProcess(long deltatime);
|
void OnProcess(long deltatime);
|
||||||
void OnInsert();
|
void OnInsert();
|
||||||
void OnDelete();
|
void OnDelete();
|
||||||
|
void OnPaintSelectBegin(); // biwa
|
||||||
|
void OnPaintSelectEnd(); // biwa
|
||||||
|
|
||||||
// Assist functions
|
// Assist functions
|
||||||
void ApplyTexture(string texture);
|
void ApplyTexture(string texture);
|
||||||
|
|
|
@ -53,6 +53,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public void OnProcess(long deltatime) { }
|
public void OnProcess(long deltatime) { }
|
||||||
public void OnInsert() { }
|
public void OnInsert() { }
|
||||||
public void OnDelete() { }
|
public void OnDelete() { }
|
||||||
|
public void OnPaintSelectBegin() { } // biwa
|
||||||
|
public void OnPaintSelectEnd() { } // biwa
|
||||||
public void ApplyTexture(string texture) { }
|
public void ApplyTexture(string texture) { }
|
||||||
public void ApplyUpperUnpegged(bool set) { }
|
public void ApplyUpperUnpegged(bool set) { }
|
||||||
public void ApplyLowerUnpegged(bool set) { }
|
public void ApplyLowerUnpegged(bool set) { }
|
||||||
|
|
Loading…
Reference in a new issue