mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2025-02-28 14:51:29 +00:00
Merged in GZDB r2474.
This commit is contained in:
parent
5ca6994d12
commit
5cf574f42d
6 changed files with 140 additions and 115 deletions
|
@ -155,6 +155,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
triangles = vertices.Length / 3;
|
triangles = vertices.Length / 3;
|
||||||
|
|
||||||
CalculateNormals(); //mxd
|
CalculateNormals(); //mxd
|
||||||
|
PerformAutoSelection(); //mxd
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -266,6 +267,9 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mxd
|
||||||
|
protected abstract void PerformAutoSelection();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
private int prevoffsety; // want to calculate with delta offsets to prevent
|
private int prevoffsety; // want to calculate with delta offsets to prevent
|
||||||
// inaccuracy in the dragging.
|
// inaccuracy in the dragging.
|
||||||
|
|
||||||
private static List<BaseVisualSector> updateList; //mxd
|
private static List<BaseVisualSector> updatelist; //mxd
|
||||||
|
protected bool performautoselection; //mxd
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -98,6 +99,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
protected abstract void UpdateSkyRenderFlag(); //mxd
|
protected abstract void UpdateSkyRenderFlag(); //mxd
|
||||||
public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
public virtual void SelectNeighbours(bool select, bool withSameTexture, bool withSameHeight) { } //mxd
|
||||||
|
|
||||||
|
//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
|
// This swaps triangles so that the plane faces the other way
|
||||||
protected static void SwapTriangleVertices(WorldVertex[] verts)
|
protected static void SwapTriangleVertices(WorldVertex[] verts)
|
||||||
{
|
{
|
||||||
|
@ -776,12 +790,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
{
|
{
|
||||||
//mxd
|
//mxd
|
||||||
List<Sector> sectors = mode.GetSelectedSectors();
|
List<Sector> sectors = mode.GetSelectedSectors();
|
||||||
updateList = new List<BaseVisualSector>();
|
updatelist = new List<BaseVisualSector>();
|
||||||
|
|
||||||
foreach(Sector s in sectors)
|
foreach(Sector s in sectors)
|
||||||
{
|
{
|
||||||
if(mode.VisualSectorExists(s))
|
if(mode.VisualSectorExists(s))
|
||||||
updateList.Add((BaseVisualSector)mode.GetVisualSector(s));
|
updatelist.Add((BaseVisualSector)mode.GetVisualSector(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged; //mxd
|
General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged; //mxd
|
||||||
|
@ -790,8 +804,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
mode.StopRealtimeInterfaceUpdate(SelectionType.Sectors); //mxd
|
mode.StopRealtimeInterfaceUpdate(SelectionType.Sectors); //mxd
|
||||||
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged; //mxd
|
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged; //mxd
|
||||||
|
|
||||||
updateList.Clear(); //mxd
|
updatelist.Clear(); //mxd
|
||||||
updateList = null; //mxd
|
updatelist = null; //mxd
|
||||||
|
|
||||||
if(result == DialogResult.OK) mode.RebuildElementData(); //mxd
|
if(result == DialogResult.OK) mode.RebuildElementData(); //mxd
|
||||||
}
|
}
|
||||||
|
@ -800,7 +814,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
//mxd
|
//mxd
|
||||||
private void Interface_OnEditFormValuesChanged(object sender, EventArgs e)
|
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
|
// Sector height change
|
||||||
|
|
|
@ -61,7 +61,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
private int prevoffsetx; // We have to provide delta offsets, but I don't
|
private int prevoffsetx; // We have to provide delta offsets, but I don't
|
||||||
private int prevoffsety; // want to calculate with delta offsets to prevent
|
private int prevoffsety; // want to calculate with delta offsets to prevent
|
||||||
// inaccuracy in the dragging.
|
// inaccuracy in the dragging.
|
||||||
private static List<BaseVisualSector> updateList; //mxd
|
private static List<BaseVisualSector> updatelist; //mxd
|
||||||
|
private bool performautoselection; //mxd
|
||||||
|
|
||||||
// Undo/redo
|
// Undo/redo
|
||||||
private int undoticket;
|
private int undoticket;
|
||||||
|
@ -84,19 +85,36 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
this.deltaz = new Vector3D(0.0f, 0.0f, 1.0f);
|
this.deltaz = new Vector3D(0.0f, 0.0f, 1.0f);
|
||||||
this.deltaxy = (sd.Line.End.Position - sd.Line.Start.Position) * sd.Line.LengthInv;
|
this.deltaxy = (sd.Line.End.Position - sd.Line.Start.Position) * sd.Line.LengthInv;
|
||||||
if(!sd.IsFront) this.deltaxy = -this.deltaxy;
|
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
|
||||||
|
|
||||||
|
//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
|
// This sets the renderstyle from linedef information and returns the alpha value or the vertices
|
||||||
protected byte SetLinedefRenderstyle(bool solidasmask)
|
protected byte SetLinedefRenderstyle(bool solidasmask)
|
||||||
{
|
{
|
||||||
|
@ -1167,10 +1185,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
dragstartanglexy = General.Map.VisualCamera.AngleXY;
|
dragstartanglexy = General.Map.VisualCamera.AngleXY;
|
||||||
dragstartanglez = General.Map.VisualCamera.AngleZ;
|
dragstartanglez = General.Map.VisualCamera.AngleZ;
|
||||||
dragorigin = pickintersect;
|
dragorigin = pickintersect;
|
||||||
startoffsetx = GetTextureOffset().X;
|
|
||||||
startoffsety = GetTextureOffset().Y;
|
Point texoffset = GetTextureOffset(); //mxd
|
||||||
prevoffsetx = GetTextureOffset().X;
|
startoffsetx = texoffset.X;
|
||||||
prevoffsety = GetTextureOffset().Y;
|
startoffsety = texoffset.Y;
|
||||||
|
prevoffsetx = texoffset.X;
|
||||||
|
prevoffsety = texoffset.Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select button released
|
// Select button released
|
||||||
|
@ -1206,13 +1226,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
if(General.Interface.IsActiveWindow)
|
if(General.Interface.IsActiveWindow)
|
||||||
{
|
{
|
||||||
List<Linedef> linedefs = mode.GetSelectedLinedefs();
|
List<Linedef> linedefs = mode.GetSelectedLinedefs();
|
||||||
updateList = new List<BaseVisualSector>(); //mxd
|
updatelist = new List<BaseVisualSector>(); //mxd
|
||||||
foreach(Linedef l in linedefs)
|
foreach(Linedef l in linedefs)
|
||||||
{
|
{
|
||||||
if(l.Front != null && mode.VisualSectorExists(l.Front.Sector))
|
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))
|
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;
|
General.Interface.OnEditFormValuesChanged += Interface_OnEditFormValuesChanged;
|
||||||
|
@ -1221,8 +1241,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
mode.StopRealtimeInterfaceUpdate(SelectionType.Linedefs);
|
mode.StopRealtimeInterfaceUpdate(SelectionType.Linedefs);
|
||||||
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged;
|
General.Interface.OnEditFormValuesChanged -= Interface_OnEditFormValuesChanged;
|
||||||
|
|
||||||
updateList.Clear();
|
updatelist.Clear();
|
||||||
updateList = null;
|
updatelist = null;
|
||||||
|
|
||||||
//mxd. Effects may need updating...
|
//mxd. Effects may need updating...
|
||||||
if(result == DialogResult.OK) mode.RebuildElementData();
|
if(result == DialogResult.OK) mode.RebuildElementData();
|
||||||
|
@ -1232,7 +1252,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
//mxd
|
//mxd
|
||||||
private void Interface_OnEditFormValuesChanged(object sender, EventArgs e)
|
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
|
// Mouse moves
|
||||||
|
|
|
@ -1771,20 +1771,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
List<IVisualEventReceiver> objs = new List<IVisualEventReceiver>();
|
List<IVisualEventReceiver> objs = new List<IVisualEventReceiver>();
|
||||||
foreach(IVisualEventReceiver i in selectedobjects)
|
foreach(IVisualEventReceiver i in selectedobjects)
|
||||||
{
|
{
|
||||||
if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i);
|
if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i);
|
||||||
else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i);
|
else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i);
|
||||||
else if((i is BaseVisualThing) && includethings) objs.Add(i);
|
else if (includethings && (i is BaseVisualThing)) objs.Add(i);
|
||||||
else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd
|
else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add highlight?
|
// Add highlight?
|
||||||
if (selectedobjects.Count == 0)
|
if (selectedobjects.Count == 0)
|
||||||
{
|
{
|
||||||
IVisualEventReceiver i = (target.picked as IVisualEventReceiver);
|
IVisualEventReceiver i = (target.picked as IVisualEventReceiver);
|
||||||
if((i is BaseVisualGeometrySector) && includesectors) objs.Add(i);
|
if (includesectors && (i is BaseVisualGeometrySector) /*&& ((BaseVisualGeometrySector)i).Triangles > 0*/) objs.Add(i);
|
||||||
else if((i is BaseVisualGeometrySidedef) && includesidedefs) objs.Add(i);
|
else if (includesidedefs && (i is BaseVisualGeometrySidedef) /*&& ((BaseVisualGeometrySidedef)i).Triangles > 0*/) objs.Add(i);
|
||||||
else if((i is BaseVisualThing) && includethings) objs.Add(i);
|
else if (includethings && (i is BaseVisualThing)) objs.Add(i);
|
||||||
else if((i is BaseVisualVertex) && includevertices) objs.Add(i);//mxd
|
else if (includevertices && (i is BaseVisualVertex)) objs.Add(i); //mxd
|
||||||
}
|
}
|
||||||
|
|
||||||
return objs;
|
return objs;
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
#region ================== Variables
|
#region ================== Variables
|
||||||
|
|
||||||
public bool innerSide; //mxd
|
private bool innerside; //mxd
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -56,13 +56,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
//mxd
|
//mxd
|
||||||
geometrytype = VisualGeometryType.CEILING;
|
geometrytype = VisualGeometryType.CEILING;
|
||||||
partname = "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
|
// We have no destructor
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
@ -71,15 +65,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// This builds the geometry. Returns false when no geometry created.
|
// This builds the geometry. Returns false when no geometry created.
|
||||||
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
|
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
|
||||||
{
|
{
|
||||||
return Setup(level, extrafloor, innerSide);
|
return Setup(level, extrafloor, innerside);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide)
|
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside)
|
||||||
{
|
{
|
||||||
Sector s = level.sector;
|
Sector s = level.sector;
|
||||||
Vector2D texscale;
|
Vector2D texscale;
|
||||||
this.innerSide = innerSide; //mxd
|
this.innerside = innerside; //mxd
|
||||||
|
|
||||||
base.Setup(level, extrafloor);
|
base.Setup(level, extrafloor);
|
||||||
|
|
||||||
|
@ -169,7 +163,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// The sector triangulation created clockwise triangles that
|
// The sector triangulation created clockwise triangles that
|
||||||
// are right up for the floor. For the ceiling we must flip
|
// are right up for the floor. For the ceiling we must flip
|
||||||
// the triangles upside down.
|
// the triangles upside down.
|
||||||
if(extrafloor == null || extrafloor.VavoomType || innerSide)
|
if(extrafloor == null || extrafloor.VavoomType || innerside)
|
||||||
SwapTriangleVertices(verts);
|
SwapTriangleVertices(verts);
|
||||||
|
|
||||||
// Determine render pass
|
// Determine render pass
|
||||||
|
@ -457,7 +451,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
|
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
|
||||||
{
|
{
|
||||||
// Check if our ray starts at the correct side of the plane
|
// 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)
|
//if(level.plane.Distance(from) > 0.0f)
|
||||||
{
|
{
|
||||||
// Calculate the intersection
|
// Calculate the intersection
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
|
|
||||||
#region ================== Variables
|
#region ================== Variables
|
||||||
|
|
||||||
private bool innerSide; //mxd
|
private bool innerside; //mxd
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -56,14 +56,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
//mxd
|
//mxd
|
||||||
geometrytype = VisualGeometryType.FLOOR;
|
geometrytype = VisualGeometryType.FLOOR;
|
||||||
partname = "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
|
// We have no destructor
|
||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
|
@ -72,15 +65,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// This builds the geometry. Returns false when no geometry created.
|
// This builds the geometry. Returns false when no geometry created.
|
||||||
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
|
public override bool Setup(SectorLevel level, Effect3DFloor extrafloor)
|
||||||
{
|
{
|
||||||
return Setup(level, extrafloor, innerSide);
|
return Setup(level, extrafloor, innerside);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerSide)
|
public bool Setup(SectorLevel level, Effect3DFloor extrafloor, bool innerside)
|
||||||
{
|
{
|
||||||
Sector s = level.sector;
|
Sector s = level.sector;
|
||||||
Vector2D texscale;
|
Vector2D texscale;
|
||||||
this.innerSide = innerSide;
|
this.innerside = innerside;
|
||||||
|
|
||||||
base.Setup(level, extrafloor);
|
base.Setup(level, extrafloor);
|
||||||
|
|
||||||
|
@ -171,7 +164,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// The sector triangulation created clockwise triangles that
|
// The sector triangulation created clockwise triangles that
|
||||||
// are right up for the floor. For the ceiling we must flip
|
// are right up for the floor. For the ceiling we must flip
|
||||||
// the triangles upside down.
|
// the triangles upside down.
|
||||||
if((extrafloor != null) && !extrafloor.VavoomType && !innerSide)
|
if((extrafloor != null) && !extrafloor.VavoomType && !innerside)
|
||||||
SwapTriangleVertices(verts);
|
SwapTriangleVertices(verts);
|
||||||
|
|
||||||
// Determine render pass
|
// Determine render pass
|
||||||
|
@ -411,7 +404,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
|
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
|
||||||
{
|
{
|
||||||
// Check if our ray starts at the correct side of the plane
|
// 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
|
// Calculate the intersection
|
||||||
if(level.plane.GetIntersection(from, to, ref pickrayu))
|
if(level.plane.GetIntersection(from, to, ref pickrayu))
|
||||||
|
|
Loading…
Reference in a new issue