ZoneBuilder/Source/Core/Data/TexturePatch.cs
2022-11-25 17:14:35 +00:00

119 lines
3 KiB
C#

#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.IO;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.ZDoom;
#endregion
namespace CodeImp.DoomBuilder.Data
{
public enum TexturePathRenderStyle
{
Copy,
Blend,
Add,
Subtract,
ReverseSubtract,
Modulate,
CopyAlpha,
CopyNewAlpha, //mxd
Overlay, //mxd
}
public enum TexturePathBlendStyle //mxd
{
None,
Blend,
Tint
}
internal struct TexturePatch
{
public readonly string lumpname;
public readonly int x;
public readonly int y;
public readonly bool flipx;
public readonly bool flipy;
public readonly bool haslongname; //mxd
public readonly int rotate;
public PixelColor blend;
public readonly float alpha;
public readonly TexturePathRenderStyle style;
public readonly TexturePathBlendStyle blendstyle; //mxd
public readonly float tintammount;//mxd
public readonly bool skip; //mxd
// Constructor for simple patches
public TexturePatch(string lumpname, int x, int y)
{
// Initialize
this.lumpname = lumpname;
this.x = (Int16)x;
this.y = (Int16)y;
this.flipx = false;
this.flipy = false;
this.rotate = 0;
this.blend = new PixelColor(0, 0, 0, 0);
this.alpha = 1.0f;
this.style = TexturePathRenderStyle.Copy;
this.blendstyle = TexturePathBlendStyle.None;//mxd
this.tintammount = 0; //mxd
this.haslongname = false; //mxd
this.skip = false; //mxd
}
//mxd. Constructor for hires patches
public TexturePatch(PatchStructure patch)
{
// Initialize
this.lumpname = patch.Name.ToUpperInvariant();
this.x = (Int16)patch.OffsetX;
this.y = (Int16)patch.OffsetY;
this.flipx = patch.FlipX;
this.flipy = patch.FlipY;
this.rotate = patch.Rotation;
this.blend = patch.BlendColor;
this.alpha = patch.Alpha;
this.style = patch.RenderStyle;
this.blendstyle = patch.BlendStyle;
this.tintammount = patch.TintAmmount;
this.haslongname = (Path.GetFileNameWithoutExtension(this.lumpname) != this.lumpname);
this.skip = patch.Skip;
//mxd. Check data so we don't perform unneeded operations later on
if(this.alpha == 1.0f)
{
switch(this.style)
{
case TexturePathRenderStyle.Blend:
case TexturePathRenderStyle.CopyAlpha:
case TexturePathRenderStyle.CopyNewAlpha:
case TexturePathRenderStyle.Overlay:
this.style = TexturePathRenderStyle.Copy;
break;
}
}
//mxd. and get rid of render styles we don't support
if(this.style == TexturePathRenderStyle.Overlay) this.style = TexturePathRenderStyle.Copy;
}
}
}