mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-23 20:32:34 +00:00
ea57d45eb3
Probably fixed probable I/O race condition when loading images. Fixed Visual mode stuttering due to floating point precision degradation when running the editor for several days without restarting (internal timer is now reset when saving the map or creating a new one). Fixed, Nodes Viewer, cosmetic: Nodes Viewer window position was reset after pressing the "Rebuild Nodes" button. Added Eternity Game configurations by printz. Updated ZDoom_ACS.cfg (CheckClass). Updated ZDoom ACC (CheckClass).
118 lines
3 KiB
C#
118 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.IO;
|
|
|
|
#endregion
|
|
|
|
namespace CodeImp.DoomBuilder.Data
|
|
{
|
|
internal sealed class FlatImage : ImageData
|
|
{
|
|
#region ================== Constructor / Disposer
|
|
|
|
// Constructor
|
|
public FlatImage(string name)
|
|
{
|
|
// Initialize
|
|
SetName(name);
|
|
virtualname = "[Flats]/" + this.name; //mxd
|
|
isFlat = true; //mxd
|
|
|
|
// We have no destructor
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Methods
|
|
|
|
// This loads the image
|
|
protected override void LocalLoadImage()
|
|
{
|
|
// Leave when already loaded
|
|
if(this.IsImageLoaded) return;
|
|
|
|
lock(this)
|
|
{
|
|
// Get the lump data stream
|
|
string flatlocation = string.Empty; //mxd
|
|
Stream lumpdata = General.Map.Data.GetFlatData(Name, hasLongName, ref flatlocation);
|
|
if(lumpdata != null)
|
|
{
|
|
// Copy lump data to memory
|
|
byte[] membytes = new byte[(int)lumpdata.Length];
|
|
|
|
lock(lumpdata) //mxd
|
|
{
|
|
lumpdata.Seek(0, SeekOrigin.Begin);
|
|
lumpdata.Read(membytes, 0, (int)lumpdata.Length);
|
|
}
|
|
|
|
MemoryStream mem = new MemoryStream(membytes);
|
|
mem.Seek(0, SeekOrigin.Begin);
|
|
|
|
// Get a reader for the data
|
|
IImageReader reader = ImageDataFormat.GetImageReader(mem, ImageDataFormat.DOOMFLAT, General.Map.Data.Palette);
|
|
if(reader is UnknownImageReader)
|
|
{
|
|
// Data is in an unknown format!
|
|
General.ErrorLogger.Add(ErrorType.Error, "Flat lump \"" + Path.Combine(flatlocation, Name) + "\" data format could not be read. Does this lump contain valid picture data at all?");
|
|
bitmap = null;
|
|
}
|
|
else
|
|
{
|
|
// Read data as bitmap
|
|
mem.Seek(0, SeekOrigin.Begin);
|
|
if(bitmap != null) bitmap.Dispose();
|
|
bitmap = reader.ReadAsBitmap(mem);
|
|
}
|
|
|
|
// Done
|
|
mem.Dispose();
|
|
|
|
if(bitmap != null)
|
|
{
|
|
// Get width and height from image and set the scale
|
|
width = bitmap.Size.Width;
|
|
height = bitmap.Size.Height;
|
|
scale.x = General.Map.Config.DefaultFlatScale;
|
|
scale.y = General.Map.Config.DefaultFlatScale;
|
|
}
|
|
else
|
|
{
|
|
loadfailed = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Missing a patch lump!
|
|
General.ErrorLogger.Add(ErrorType.Error, "Missing flat lump \"" + Name + "\". Did you forget to include required resources?");
|
|
loadfailed = true;
|
|
}
|
|
|
|
// Pass on to base
|
|
base.LocalLoadImage();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|