Peg Midtextures flag is now recognized in Visual Mode

This commit is contained in:
MascaraSnake 2016-01-28 19:29:07 +01:00
parent 564b21e615
commit 52b6bf1445
6 changed files with 46 additions and 17 deletions

View file

@ -90,6 +90,8 @@ doublesidedflag = 4; // See linedefflags
impassableflag = 1;
upperunpeggedflag = 8;
lowerunpeggedflag = 16;
repeatmidtextureflag = 1024;
pegmidtextureflag = 256;
// Generalized actions
generalizedlinedefs = false;

View file

@ -60,7 +60,9 @@ namespace CodeImp.DoomBuilder.Config
private readonly string impassableflag;
private readonly string upperunpeggedflag;
private readonly string lowerunpeggedflag;
private readonly bool mixtexturesflats;
private readonly string repeatmidtextureflag;
private readonly string pegmidtextureflag;
private readonly bool mixtexturesflats;
private readonly bool generalizedactions;
private readonly bool generalizedeffects;
private readonly int start3dmodethingtype;
@ -178,7 +180,9 @@ namespace CodeImp.DoomBuilder.Config
public string ImpassableFlag { get { return impassableflag; } }
public string UpperUnpeggedFlag { get { return upperunpeggedflag; } }
public string LowerUnpeggedFlag { get { return lowerunpeggedflag; } }
public bool MixTexturesFlats { get { return mixtexturesflats; } }
public string RepeatMidtextureFlag { get { return repeatmidtextureflag; } }
public string PegMidtextureFlag { get { return pegmidtextureflag; } }
public bool MixTexturesFlats { get { return mixtexturesflats; } }
public bool GeneralizedActions { get { return generalizedactions; } }
public bool GeneralizedEffects { get { return generalizedeffects; } }
public int Start3DModeThingType { get { return start3dmodethingtype; } }
@ -377,9 +381,13 @@ namespace CodeImp.DoomBuilder.Config
if(obj is int) upperunpeggedflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else upperunpeggedflag = obj.ToString();
obj = cfg.ReadSettingObject("lowerunpeggedflag", 0);
if(obj is int) lowerunpeggedflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else lowerunpeggedflag = obj.ToString();
obj = cfg.ReadSettingObject("repeatmidtextureflag", 0);
if (obj is int) repeatmidtextureflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else repeatmidtextureflag = obj.ToString();
obj = cfg.ReadSettingObject("pegmidtextureflag", 0);
if (obj is int) pegmidtextureflag = ((int)obj).ToString(CultureInfo.InvariantCulture); else pegmidtextureflag = obj.ToString();
// Get texture and flat sources
textureranges = cfg.ReadSetting("textures", new Hashtable());
// Get texture and flat sources
textureranges = cfg.ReadSetting("textures", new Hashtable());
flatranges = cfg.ReadSetting("flats", new Hashtable());
patchranges = cfg.ReadSetting("patches", new Hashtable());
spriteranges = cfg.ReadSetting("sprites", new Hashtable());

View file

@ -92,6 +92,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Methods
protected virtual bool IsLowerUnpegged()
{
return Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag);
}
//mxd
override protected void PerformAutoSelection()
{
@ -703,7 +708,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
else if(this is VisualMiddleDouble)
{
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
offsety = (options.Bounds.Y - Sidedef.GetHighHeight() - Sidedef.GetLowHeight()) * scaley - Sidedef.OffsetY;
else
offsety = options.Bounds.Y * scaley - Sidedef.OffsetY;
@ -738,7 +743,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Oh so special cases...
private float GetLowerOffsetY(float scaley)
{
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
return ((-Sidedef.OffsetY - Sidedef.GetMiddleHeight() - Sidedef.GetHighHeight()) * scaley) % Texture.Height;
return (-Sidedef.OffsetY * scaley) % Texture.Height;
}

View file

@ -131,7 +131,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// height is 0 then the TexturePlane doesn't work!
TexturePlane tp = new TexturePlane();
float floorbias = (Sidedef.Other.Sector.FloorHeight == Sidedef.Sector.FloorHeight) ? 1.0f : 0.0f;
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
{
if(Sidedef.Sector.CeilTexture == General.Map.Config.SkyFlatName && Sidedef.Other.Sector.CeilTexture == General.Map.Config.SkyFlatName)
{

View file

@ -144,7 +144,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
float zoffset = Sidedef.Sector.CeilHeight - Sidedef.Other.Sector.CeilHeight; //mxd
// When lower unpegged is set, the middle texture is bound to the bottom
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
tp.tlt.y = tsz.y - (geotop - geobottom);
if(zoffset > 0) tp.tlt.y -= zoffset; //mxd
@ -192,7 +192,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
CropPoly(ref poly, osd.Floor.plane, true);
// Determine if we should repeat the middle texture
bool srb2repeat = General.Map.SRB2 && Sidedef.Line.IsFlagSet("1024");
bool srb2repeat = General.Map.SRB2 && Sidedef.Line.IsFlagSet(General.Map.Config.RepeatMidtextureFlag);
repeatmidtex = srb2repeat || Sidedef.IsFlagSet("wrapmidtex") || Sidedef.Line.IsFlagSet("wrapmidtex"); //mxd
if(!repeatmidtex || (srb2repeat && Sidedef.OffsetX >= 4096))
{
@ -202,7 +202,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
int repetitions = srb2repeat ? (Sidedef.OffsetX / 4096) + 1 : 1;
// Determine top portion height
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
textop = geobottom + tof.y + repetitions * Math.Abs(tsz.y);
else
textop = geotop + tof.y;
@ -254,13 +254,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.SetVertices(null); //mxd
return false;
}
#endregion
#region ================== Methods
#endregion
// This performs a fast test in object picking
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
#region ================== Methods
protected override bool IsLowerUnpegged()
{
bool lowerunpeggedflag = Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag);
bool pegmidtextureflag = General.Map.SRB2 && Sidedef.Line.IsFlagSet(General.Map.Config.PegMidtextureFlag);
return lowerunpeggedflag ^ pegmidtextureflag;
}
// This performs a fast test in object picking
public override bool PickFastReject(Vector3D from, Vector3D to, Vector3D dir)
{
if(!repeatmidtex)
{
@ -289,7 +296,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(repeatmidtex)
{
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
zoffset = Sidedef.Sector.FloorHeight;
else
zoffset = Sidedef.Sector.CeilHeight;

View file

@ -132,7 +132,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// height is 0 then the TexturePlane doesn't work!
TexturePlane tp = new TexturePlane();
float floorbias = (Sidedef.Sector.CeilHeight == Sidedef.Sector.FloorHeight) ? 1.0f : 0.0f;
if(Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag))
if(IsLowerUnpegged())
{
// When lower unpegged is set, the middle texture is bound to the bottom
tp.tlt.y = tsz.y - (Sidedef.Sector.CeilHeight - Sidedef.Sector.FloorHeight);
@ -215,6 +215,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
#region ================== Methods
protected override bool IsLowerUnpegged()
{
bool lowerunpeggedflag = Sidedef.Line.IsFlagSet(General.Map.Config.LowerUnpeggedFlag);
bool pegmidtextureflag = General.Map.SRB2 && Sidedef.Line.IsFlagSet(General.Map.Config.PegMidtextureFlag);
return lowerunpeggedflag ^ pegmidtextureflag;
}
// Return texture name
public override string GetTextureName()
{