Error Checking: renamed "Check unclosed sectors" to "Check invalid sectors". Now it also finds sectors with less than 3 sidedefs and sectors, which area is 0.

This commit is contained in:
MaxED 2013-08-30 15:00:44 +00:00
parent c6170f644b
commit 0ea1056b44
5 changed files with 143 additions and 2 deletions

View file

@ -38,6 +38,55 @@ namespace CodeImp.DoomBuilder.GZBuilder.Windows
public void Setup() {
bContinue.Enabled = !cannotContinue;
string[] titles = {
"0x000000 at 0xFFFFFF. That's probaby bad",
"Here we go again...",
"Uh oh, you're screwed",
"All is lost!",
"Achievement unlocked: CRASH TIME!",
"OH NOES! TEH ERROR!",
"0001000001111011000000000011001101011110110111",
"Nuclear launch detected!",
"Don't send this to Microsoft",
"You. Shall. Not. Pass!!!",
"Yep, we have bugs",
"It's dangerous to go alone. Take this!",
"The operation completed successfully",
"Security Alert Moving cursor is not as safe as you thought",
"Random error appears from north",
"ERROR: NO_ERROR",
"Epic fail",
"At least it's not BSoD...",
"User Error. Please Replace User",
"Brought to you by MaxED!",
"GZDoom Builder proudly presents:",
"You aren't expected to understand this",
"Back to the drawing board...",
"I'm sorry... :(",
"This is a horrbble day for you, and of course, the world",
"Abort, Retry, Fail?",
"You are making progress. I'm afraid that's something I cannot allow to happen",
"You are making progress. That's not OK",
"No errors found, restarting computer",
"Does Not Compute!",
"Im sorry, Dave, Im afraid I cant do that",
"What's that? Chicken?",
"It can only be attributable to human error",
"It's now safe to turn off your computer",
"I've got a bad feeling about this",
"YOU CANT DO THAT!",
"Man the Lifeboats! Women and children first!",
"IMPOSSIBURU!!!",
"Now deleting all files. Goodbye",
"General Failure",
"Invalid Error",
"Beam me up Scotty, theres no life out here",
"Well, you ran into something and the game is over",
"I'm good at writing bad code",
"$FUNNY_ERROR_CAPTION",
};
this.Text = titles[new Random().Next(0, titles.Length - 1)];
}
private void reportLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {

View file

@ -490,14 +490,16 @@ namespace CodeImp.DoomBuilder.Map
else if (s.Line.Start.Position.x > right) right = s.Line.Start.Position.x;
if (s.Line.Start.Position.y < top) top = s.Line.Start.Position.y;
else if (s.Line.Start.Position.y > bottom) bottom = s.Line.Start.Position.y;
processed.Add(s.Line.Start);
}
//end...
if(!processed.Contains(s.Line.Start)) {
if(!processed.Contains(s.Line.End)) {
if(s.Line.End.Position.x < left) left = s.Line.End.Position.x;
else if(s.Line.End.Position.x > right) right = s.Line.End.Position.x;
if(s.Line.End.Position.y < top) top = s.Line.End.Position.y;
else if(s.Line.End.Position.y > bottom) bottom = s.Line.End.Position.y;
processed.Add(s.Line.End);
}
}

View file

@ -238,6 +238,7 @@
<Compile Include="ErrorChecks\CheckUnknownTextures.cs" />
<Compile Include="ErrorChecks\CheckUnknownThings.cs" />
<Compile Include="ErrorChecks\ResultNoErrors.cs" />
<Compile Include="ErrorChecks\ResultSectorInvalid.cs" />
<Compile Include="ErrorChecks\ResultStrayVertex.cs" />
<Compile Include="ErrorChecks\ResultStuckThingInThing.cs" />
<Compile Include="ErrorChecks\ResultTextureMissing.cs" />

View file

@ -24,7 +24,7 @@ using System.Threading;
namespace CodeImp.DoomBuilder.BuilderModes
{
[ErrorChecker("Check closed sectors", true, 300)]
[ErrorChecker("Check invalid sectors", true, 300)]
public class CheckClosedSectors : ErrorChecker
{
#region ================== Constants
@ -149,6 +149,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Add report when holes have been found
if(foundholes.Count > 0)
SubmitResult(new ResultSectorUnclosed(s, foundholes));
else if(s.Sidedefs.Count < 3 || s.BBox.IsEmpty) //mxd
SubmitResult(new ResultSectorInvalid(s));
// Handle thread interruption
try { Thread.Sleep(0); }

View file

@ -0,0 +1,87 @@
#region ================== Namespaces
using System.Collections.Generic;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
public class ResultSectorInvalid : ErrorResult
{
#region ================== Variables
private readonly Sector sector;
#endregion
#region ================== Properties
public override int Buttons { get { return 1; } }
public override string Button1Text { get { return "Dissolve"; } }
#endregion
#region ================== Constructor / Destructor
// Constructor
public ResultSectorInvalid(Sector s)
{
// Initialize
this.sector = s;
this.viewobjects.Add(s);
this.description = "This sector has invalid geometry (it has less than 3 sidedefs or it's area is 0). This could cause problems with clipping and rendering in the game.";
}
#endregion
#region ================== Methods
// This must return the string that is displayed in the listbox
public override string ToString() {
if (sector.Sidedefs != null && sector.Sidedefs.Count > 2)
return "Area of sector " + sector.Index + " is 0";
return "Sector " + sector.Index + " has " + (sector.Sidedefs == null ? "no" : sector.Sidedefs.Count.ToString()) + " sidedefs";
}
// Rendering
public override void PlotSelection(IRenderer2D renderer)
{
renderer.PlotSector(sector, General.Colors.Selection);
}
// Fix by merging with surrounding geometry/removing
public override bool Button1Click(bool batchMode) {
if(!batchMode) General.Map.UndoRedo.CreateUndo("Invalid sector correction");
//collect the lines
List<Linedef> lines = new List<Linedef>();
foreach (Sidedef side in sector.Sidedefs) {
if (!lines.Contains(side.Line) && !side.Line.IsDisposed)
lines.Add(side.Line);
}
//get rid of lines with zero length
foreach (Linedef line in lines)
if (line.Length == 0) line.Dispose();
if(lines.Count == 0) {
sector.Dispose();
} else { //redraw the lines
foreach(Linedef line in lines) {
if(line.IsDisposed) continue;
DrawnVertex start = new DrawnVertex { pos = line.Start.Position, stitch = true, stitchline = true };
DrawnVertex end = new DrawnVertex { pos = line.End.Position, stitch = true, stitchline = true };
Tools.DrawLines(new List<DrawnVertex> { start, end });
}
}
General.Map.Map.Update();
return true;
}
#endregion
}
}