Merged in GZDB r2474.

This commit is contained in:
MascaraSnake 2016-01-23 03:53:31 +01:00
parent 5ca6994d12
commit 5cf574f42d
6 changed files with 140 additions and 115 deletions

View file

@ -155,7 +155,8 @@ namespace CodeImp.DoomBuilder.VisualModes
triangles = vertices.Length / 3;
CalculateNormals(); //mxd
}
PerformAutoSelection(); //mxd
}
else
{
vertices = null;
@ -266,11 +267,14 @@ namespace CodeImp.DoomBuilder.VisualModes
return false;
}
#endregion
}
//mxd
protected abstract void PerformAutoSelection();
//mxd
public enum VisualGeometryType
#endregion
}
//mxd
public enum VisualGeometryType
{
FLOOR,
CEILING,

View file

@ -64,16 +64,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
private int startoffsety;
protected bool uvdragging;
private int prevoffsetx; // We have to provide delta offsets, but I don't
private int prevoffsety; // want to calculate with delta offsets to prevent
// inaccuracy in the dragging.
private int prevoffsety; // want to calculate with delta offsets to prevent
// inaccuracy in the dragging.
private static List<BaseVisualSector> updateList; //mxd
private static List<BaseVisualSector> updatelist; //mxd
protected bool performautoselection; //mxd
#endregion
#endregion
#region ================== Properties
new public BaseVisualSector Sector { get { return (BaseVisualSector)base.Sector; } }
#region ================== Properties
new public BaseVisualSector Sector { get { return (BaseVisualSector)base.Sector; } }
public bool Changed { get { return changed; } set { changed = value; } }
public SectorLevel Level { get { return level; } }
public Effect3DFloor ExtraFloor { get { return extrafloor; } }
@ -98,8 +99,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
protected abstract void UpdateSkyRenderFlag(); //mxd
public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
// This swaps triangles so that the plane faces the other way
protected static void SwapTriangleVertices(WorldVertex[] verts)
//mxd
override protected void PerformAutoSelection()
{
if (!performautoselection) return;
if (Triangles > 0)
{
this.selected = true;
mode.AddSelectedObject(this);
}
performautoselection = false;
}
// This swaps triangles so that the plane faces the other way
protected static void SwapTriangleVertices(WorldVertex[] verts)
{
// Swap some vertices to flip all triangles
for(int i = 0; i < verts.Length; i += 3)
@ -776,12 +790,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
//mxd
List<Sector> sectors = mode.GetSelectedSectors();
updateList = new List<BaseVisualSector>();
updatelist = new List<BaseVisualSector>();
foreach(Sector s in sectors)
{
if(mode.VisualSectorExists(s))
updateList.Add((BaseVisualSector)mode.GetVisualSector(s));
updatelist.Add((BaseVisualSector)mode.GetVisualSector(s));
}
General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged; //mxd
@ -790,8 +804,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
mode.StopRealtimeInterfaceUpdate(SelectionType.Sectors); //mxd
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged; //mxd
updateList.Clear(); //mxd
updateList = null; //mxd
updatelist.Clear(); //mxd
updatelist = null; //mxd
if(result == DialogResult.OK) mode.RebuildElementData(); //mxd
}
@ -800,7 +814,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd
private void Interface_OnEditFormValuesChanged(object sender, EventArgs e)
{
foreach(BaseVisualSector vs in updateList) vs.UpdateSectorGeometry(true);
foreach(BaseVisualSector vs in updatelist) vs.UpdateSectorGeometry(true);
}
// Sector height change

View file

@ -59,12 +59,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
private int startoffsety;
protected bool uvdragging;
private int prevoffsetx; // We have to provide delta offsets, but I don't
private int prevoffsety; // want to calculate with delta offsets to prevent
// inaccuracy in the dragging.
private static List<BaseVisualSector> updateList; //mxd
private int prevoffsety; // want to calculate with delta offsets to prevent
// inaccuracy in the dragging.
private static List<BaseVisualSector> updatelist; //mxd
private bool performautoselection; //mxd
// Undo/redo
private int undoticket;
// Undo/redo
private int undoticket;
#endregion
@ -84,21 +85,38 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.deltaz = new Vector3D(0.0f, 0.0f, 1.0f);
this.deltaxy = (sd.Line.End.Position - sd.Line.Start.Position) * sd.Line.LengthInv;
if(!sd.IsFront) this.deltaxy = -this.deltaxy;
this.performautoselection = (mode.UseSelectionFromClassicMode && sd.Line.Selected); //mxd
}
//mxd
if(mode.UseSelectionFromClassicMode && sd.Line.Selected)
{
this.selected = true;
mode.AddSelectedObject(this);
}
}
#endregion
#endregion
#region ================== Methods
#region ================== Methods
// This sets the renderstyle from linedef information and returns the alpha value or the vertices
protected byte SetLinedefRenderstyle(bool solidasmask)
//mxd
override protected void PerformAutoSelection()
{
if (!performautoselection) return;
if (Triangles > 0)
{
dragstartanglexy = General.Map.VisualCamera.AngleXY;
dragstartanglez = General.Map.VisualCamera.AngleZ;
dragorigin = pickintersect;
Point texoffset = GetTextureOffset();
startoffsetx = texoffset.X;
startoffsety = texoffset.Y;
prevoffsetx = texoffset.X;
prevoffsety = texoffset.Y;
this.selected = true;
mode.AddSelectedObject(this);
}
performautoselection = false;
}
// This sets the renderstyle from linedef information and returns the alpha value or the vertices
protected byte SetLinedefRenderstyle(bool solidasmask)
{
byte alpha;
bool canhavealpha = (this is VisualMiddleDouble || this is VisualMiddle3D || this is VisualMiddleBack); //mxd
@ -1167,11 +1185,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
dragstartanglexy = General.Map.VisualCamera.AngleXY;
dragstartanglez = General.Map.VisualCamera.AngleZ;
dragorigin = pickintersect;
startoffsetx = GetTextureOffset().X;
startoffsety = GetTextureOffset().Y;
prevoffsetx = GetTextureOffset().X;
prevoffsety = GetTextureOffset().Y;
}
Point texoffset = GetTextureOffset(); //mxd
startoffsetx = texoffset.X;
startoffsety = texoffset.Y;
prevoffsetx = texoffset.X;
prevoffsety = texoffset.Y;
}
// Select button released
public virtual void OnSelectEnd()
@ -1206,13 +1226,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(General.Interface.IsActiveWindow)
{
List<Linedef> linedefs = mode.GetSelectedLinedefs();
updateList = new List<BaseVisualSector>(); //mxd
updatelist = new List<BaseVisualSector>(); //mxd
foreach(Linedef l in linedefs)
{
if(l.Front != null && mode.VisualSectorExists(l.Front.Sector))
updateList.Add((BaseVisualSector)mode.GetVisualSector(l.Front.Sector));
updatelist.Add((BaseVisualSector)mode.GetVisualSector(l.Front.Sector));
if(l.Back != null && mode.VisualSectorExists(l.Back.Sector))
updateList.Add((BaseVisualSector)mode.GetVisualSector(l.Back.Sector));
updatelist.Add((BaseVisualSector)mode.GetVisualSector(l.Back.Sector));
}
General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged;
@ -1221,8 +1241,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
mode.StopRealtimeInterfaceUpdate(SelectionType.Linedefs);
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged;
updateList.Clear();
updateList = null;
updatelist.Clear();
updatelist = null;
//mxd. Effects may need updating...
if(result == DialogResult.OK) mode.RebuildElementData();
@ -1232,7 +1252,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd
private void Interface_OnEditFormValuesChanged(object sender, EventArgs e)
{
foreach(BaseVisualSector vs in updateList) vs.UpdateSectorGeometry(false);
foreach(BaseVisualSector vs in updatelist) vs.UpdateSectorGeometry(false);
}
// Mouse moves

View file

@ -1770,24 +1770,24 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
List<IVisualEventReceiver> objs = new List<IVisualEventReceiver>();
foreach(IVisualEventReceiver i in selectedobjects)
{
if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i);
else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i);
else if((i is BaseVisualThing) && includethings) objs.Add(i);
else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd
}
{
if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i);
else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i);
else if (includethings && (i is BaseVisualThing)) objs.Add(i);
else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd
}
// Add highlight?
if(selectedobjects.Count == 0)
// Add highlight?
if (selectedobjects.Count == 0)
{
IVisualEventReceiver i = (target.picked as IVisualEventReceiver);
if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i);
else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i);
else if((i is BaseVisualThing) && includethings) objs.Add(i);
else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd
}
if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i);
else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i);
else if (includethings && (i is BaseVisualThing)) objs.Add(i);
else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd
}
return objs;
return objs;
}
//mxd

View file

@ -34,52 +34,46 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
internal sealed class VisualCeiling : BaseVisualGeometrySector
{
#region ================== Constants
#region ================== Constants
#endregion
#endregion
#region ================== Variables
#region ================== Variables
public bool innerSide; //mxd
private bool innerside; //mxd
#endregion
#endregion
#region ================== Properties
#region ================== Properties
#endregion
#endregion
#region ================== Constructor / Setup
#region ================== Constructor / Setup
// Constructor
public VisualCeiling(BaseVisualMode mode, VisualSector vs) : base(mode, vs)
// Constructor
public VisualCeiling(BaseVisualMode mode, VisualSector vs) : base(mode, vs)
{
//mxd
geometrytype = VisualGeometryType.CEILING;
partname = "ceiling";
performautoselection = mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.CeilingTextures || General.Map.ViewMode == ViewMode.Normal);
//mxd
if(mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.CeilingTextures || General.Map.ViewMode == ViewMode.Normal))
{
this.selected = true;
mode.AddSelectedObject(this);
}
// We have no destructor
GC.SuppressFinalize(this);
// We have no destructor
GC.SuppressFinalize(this);
}
// This builds the geometry. Returns false when no geometry created.
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
{
return Setup(level, extrafloor, innerSide);
return Setup(level, extrafloor, innerside);
}
//mxd
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide)
{
//mxd
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside)
{
Sector s = level.sector;
Vector2D texscale;
this.innerSide = innerSide; //mxd
this.innerside = innerside; //mxd
base.Setup(level, extrafloor);
@ -169,7 +163,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// The sector triangulation created clockwise triangles that
// are right up for the floor. For the ceiling we must flip
// the triangles upside down.
if(extrafloor == null || extrafloor.VavoomType || innerSide)
if(extrafloor == null || extrafloor.VavoomType || innerside)
SwapTriangleVertices(verts);
// Determine render pass
@ -457,7 +451,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
{
// Check if our ray starts at the correct side of the plane
if((innerSide && level.plane.Distance(from) < 0.0f) || (!innerSide && level.plane.Distance(from) > 0.0f)) //mxd
if((innerside && level.plane.Distance(from) < 0.0f) || (!innerside && level.plane.Distance(from) > 0.0f)) //mxd
//if(level.plane.Distance(from) > 0.0f)
{
// Calculate the intersection

View file

@ -34,53 +34,46 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
internal sealed class VisualFloor : BaseVisualGeometrySector
{
#region ================== Constants
#region ================== Constants
#endregion
#endregion
#region ================== Variables
#region ================== Variables
private bool innerSide; //mxd
private bool innerside; //mxd
#endregion
#endregion
#region ================== Properties
#region ================== Properties
#endregion
#endregion
#region ================== Constructor / Setup
#region ================== Constructor / Setup
// Constructor
public VisualFloor(BaseVisualMode mode, VisualSector vs) : base(mode, vs)
// Constructor
public VisualFloor(BaseVisualMode mode, VisualSector vs) : base(mode, vs)
{
//mxd
geometrytype = VisualGeometryType.FLOOR;
partname = "floor";
performautoselection = mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected && (General.Map.ViewMode == ViewMode.FloorTextures || General.Map.ViewMode == ViewMode.Normal);
//mxd
if(mode.UseSelectionFromClassicMode && vs != null && vs.Sector.Selected
&& (General.Map.ViewMode == ViewMode.FloorTextures || General.Map.ViewMode == ViewMode.Normal))
{
this.selected = true;
mode.AddSelectedObject(this);
}
// We have no destructor
GC.SuppressFinalize(this);
// We have no destructor
GC.SuppressFinalize(this);
}
// This builds the geometry. Returns false when no geometry created.
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
{
return Setup(level, extrafloor, innerSide);
return Setup(level, extrafloor, innerside);
}
//mxd
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide)
{
//mxd
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside)
{
Sector s = level.sector;
Vector2D texscale;
this.innerSide = innerSide;
this.innerside = innerside;
base.Setup(level, extrafloor);
@ -171,7 +164,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// The sector triangulation created clockwise triangles that
// are right up for the floor. For the ceiling we must flip
// the triangles upside down.
if((extrafloor != null) && !extrafloor.VavoomType && !innerSide)
if((extrafloor != null) && !extrafloor.VavoomType && !innerside)
SwapTriangleVertices(verts);
// Determine render pass
@ -411,7 +404,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
{
// Check if our ray starts at the correct side of the plane
if((!innerSide && level.plane.Distance(from) > 0.0f) || (innerSide && level.plane.Distance(from) < 0.0f))
if((!innerside && level.plane.Distance(from) > 0.0f) || (innerside && level.plane.Distance(from) < 0.0f))
{
// Calculate the intersection
if(level.plane.GetIntersection(from, to, ref pickrayu))