Skip to content
Snippets Groups Projects
Commit 05bbaffb authored by codeimp's avatar codeimp
Browse files

Added Missing Textures error check (thanks to Boris Iwanski)

parent 67c16f55
No related branches found
No related tags found
No related merge requests found
......@@ -227,8 +227,10 @@
<EmbeddedResource Include="Resources\HeightsMode.png" />
</ItemGroup>
<ItemGroup>
<Compile Include="ErrorChecks\CheckMissingTextures.cs" />
<Compile Include="ErrorChecks\CheckUnknownTextures.cs" />
<Compile Include="ErrorChecks\ResultNoErrors.cs" />
<Compile Include="ErrorChecks\ResultTextureMissing.cs" />
<Compile Include="ErrorChecks\ResultUnknownTexture.cs" />
<Compile Include="FindReplace\FindAnyTextureFlat.cs" />
<Compile Include="FindReplace\FindThingSectorRef.cs" />
......

#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using CodeImp.DoomBuilder.Windows;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.Types;
using CodeImp.DoomBuilder.Config;
using System.Threading;
using CodeImp.DoomBuilder.Data;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
[ErrorChecker("Check missing textures", true, 80)]
public class CheckMissingTextures : ErrorChecker
{
#region ================== Constants
private int PROGRESS_STEP = 1000;
#endregion
#region ================== Constructor / Destructor
// Constructor
public CheckMissingTextures()
{
// Total progress is done when all lines are checked
SetTotalProgress(General.Map.Map.Sidedefs.Count / PROGRESS_STEP);
}
#endregion
#region ================== Methods
// This runs the check
public override void Run()
{
int progress = 0;
int stepprogress = 0;
// Go for all the sidedefs
foreach (Sidedef sd in General.Map.Map.Sidedefs)
{
// Check upper texture. Also make sure not to return a false
// positive if the sector on the other side has the ceiling
// set to be sky
if (sd.HighRequired() && sd.HighTexture[0] == '-')
{
if (sd.Other != null && sd.Other.Sector.CeilTexture != "F_SKY1")
{
SubmitResult(new ResultMissingTexture(sd, SidedefPart.Upper));
}
}
// Check middle texture
if (sd.MiddleRequired() && sd.MiddleTexture[0] == '-')
{
SubmitResult(new ResultMissingTexture(sd, SidedefPart.Middle));
}
// Check lower texture. Also make sure not to return a false
// positive if the sector on the other side has the floor
// set to be sky
if (sd.LowRequired() && sd.LowTexture[0] == '-')
{
if (sd.Other != null && sd.Other.Sector.FloorTexture != "F_SKY1")
{
SubmitResult(new ResultMissingTexture(sd, SidedefPart.Lower));
}
}
// Handle thread interruption
try { Thread.Sleep(0); }
catch (ThreadInterruptedException) { return; }
// We are making progress!
if ((++progress / PROGRESS_STEP) > stepprogress)
{
stepprogress = (progress / PROGRESS_STEP);
AddProgress(1);
}
}
}
#endregion
}
}

#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using CodeImp.DoomBuilder.Windows;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.Types;
using CodeImp.DoomBuilder.Config;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
public class ResultMissingTexture : ErrorResult
{
#region ================== Variables
private Sidedef side;
private SidedefPart part;
#endregion
#region ================== Properties
public override int Buttons { get { return 1; } }
public override string Button1Text { get { return "Add Default Texture"; } }
#endregion
#region ================== Constructor / Destructor
// Constructor
public ResultMissingTexture(Sidedef sd, SidedefPart part)
{
// Initialize
this.side = sd;
this.part = part;
this.viewobjects.Add(sd);
this.description = "This sidedef is missing a texture where it is required and could cause a 'Hall Of Mirrors' visual problem in the map. Click the Add Default Texture button to add a texture to the line.";
}
#endregion
#region ================== Methods
// This must return the string that is displayed in the listbox
public override string ToString()
{
string sidestr = side.IsFront ? "front" : "back";
switch (part)
{
case SidedefPart.Upper:
return "Sidedef has missing upper texture (" + sidestr + " side)";
case SidedefPart.Middle:
return "Sidedef has missing middle texture (" + sidestr + " side)";
case SidedefPart.Lower:
return "Sidedef has missing lower texture (" + sidestr + " side)";
default:
return "ERROR";
}
}
// Rendering
public override void PlotSelection(IRenderer2D renderer)
{
renderer.PlotLinedef(side.Line, General.Colors.Selection);
renderer.PlotVertex(side.Line.Start, ColorCollection.VERTICES);
renderer.PlotVertex(side.Line.End, ColorCollection.VERTICES);
}
// Fix by setting default texture
public override bool Button1Click()
{
General.Settings.FindDefaultDrawSettings();
switch (part)
{
case SidedefPart.Upper: side.SetTextureHigh(General.Settings.DefaultTexture); break;
case SidedefPart.Middle: side.SetTextureMid(General.Settings.DefaultTexture); break;
case SidedefPart.Lower: side.SetTextureLow(General.Settings.DefaultTexture); break;
}
General.Map.Map.Update();
return true;
}
#endregion
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment