UltimateZoneBuilder/Source/Core/Data/TexturePatch.cs
2013-03-18 13:52:27 +00:00

112 lines
2.9 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.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using CodeImp.DoomBuilder.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 string lumpname;
public int x;
public int y;
public bool flipx;
public bool flipy;
public int rotate;
public PixelColor blend;
public float alpha;
public TexturePathRenderStyle style;
public TexturePathBlendStyle blendstyle; //mxd
public float tintammount;//mxd
// Constructor for simple patches
public TexturePatch(string lumpname, int x, int y)
{
// Initialize
this.lumpname = lumpname;
this.x = x;
this.y = 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
}
//mxd. Constructor for hires patches
public TexturePatch(PatchStructure patch) {
// Initialize
this.lumpname = patch.Name.ToUpperInvariant();
this.x = patch.OffsetX;
this.y = 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;
//mxd. Check data so we don't perform unneeded operations later on
if(this.alpha == 1.0f) {
if(this.style == TexturePathRenderStyle.Blend || this.style == TexturePathRenderStyle.CopyAlpha || this.style == TexturePathRenderStyle.CopyNewAlpha || this.style == TexturePathRenderStyle.Overlay)
this.style = TexturePathRenderStyle.Copy;
}
//mxd. and get rid of render styles we don't support
if(this.style == TexturePathRenderStyle.Overlay)
this.style = TexturePathRenderStyle.Copy;
}
}
}