2016-03-04 08:10:56 +00:00
#region = = = = = = = = = = = = = = = = = = Namespaces
using System ;
using System.Drawing ;
using System.IO ;
using CodeImp.DoomBuilder.Geometry ;
using CodeImp.DoomBuilder.IO ;
#endregion
namespace CodeImp.DoomBuilder.Data
{
2016-03-23 21:26:26 +00:00
public sealed class HiResImage : ImageData
2016-03-04 08:10:56 +00:00
{
#region = = = = = = = = = = = = = = = = = = Variables
private Vector2D sourcescale ;
private Size sourcesize ;
private bool overridesettingsapplied ;
#endregion
#region = = = = = = = = = = = = = = = = = = Properties
public override int Width { get { return sourcesize . Width ; } }
public override int Height { get { return sourcesize . Height ; } }
public override float ScaledWidth { get { return ( float ) Math . Round ( sourcesize . Width * sourcescale . x ) ; } }
public override float ScaledHeight { get { return ( float ) Math . Round ( sourcesize . Height * sourcescale . y ) ; } }
public override Vector2D Scale { get { return sourcescale ; } }
#endregion
#region = = = = = = = = = = = = = = = = = = Constructor / Disposer
public HiResImage ( string name )
{
// Initialize
this . scale . x = General . Map . Config . DefaultTextureScale ;
this . scale . y = General . Map . Config . DefaultTextureScale ;
this . sourcescale = scale ;
this . sourcesize = Size . Empty ;
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
SetName ( name ) ;
2016-03-04 08:10:56 +00:00
// We have no destructor
GC . SuppressFinalize ( this ) ;
}
// Copy constructor
public HiResImage ( HiResImage other )
{
// Initialize
this . scale = other . scale ;
this . sourcescale = other . sourcescale ;
this . sourcesize = other . sourcesize ;
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
// Copy names
this . name = other . name ;
this . filepathname = other . filepathname ;
this . virtualname = other . virtualname ;
this . displayname = other . displayname ;
this . shortname = other . shortname ;
this . longname = other . longname ;
2016-03-04 08:10:56 +00:00
// We have no destructor
GC . SuppressFinalize ( this ) ;
}
#endregion
#region = = = = = = = = = = = = = = = = = = Methods
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
protected override void SetName ( string name )
{
name = name . Replace ( Path . DirectorySeparatorChar , Path . AltDirectorySeparatorChar ) ;
this . filepathname = name ;
this . name = Path . GetFileNameWithoutExtension ( name . ToUpperInvariant ( ) ) ;
if ( this . name . Length > DataManager . CLASIC_IMAGE_NAME_LENGTH )
{
this . name = this . name . Substring ( 0 , DataManager . CLASIC_IMAGE_NAME_LENGTH ) ;
}
this . virtualname = this . name ;
this . displayname = this . name ;
this . shortname = this . name ;
this . longname = Lump . MakeLongName ( this . name ) ;
}
2016-03-04 08:10:56 +00:00
internal void ApplySettings ( ImageData overridden )
{
2016-03-23 14:52:33 +00:00
// Copy relevant names...
2016-03-22 22:24:33 +00:00
name = overridden . Name ;
2016-03-04 08:10:56 +00:00
virtualname = overridden . VirtualName ;
2016-03-22 22:24:33 +00:00
displayname = overridden . DisplayName ;
2016-03-04 08:10:56 +00:00
isFlat = overridden . IsFlat ;
2016-03-23 14:52:33 +00:00
hasLongName = overridden . HasLongName ;
2016-03-04 08:10:56 +00:00
overridesettingsapplied = true ;
if ( ! overridden . IsImageLoaded ) overridden . LoadImage ( ) ;
if ( overridden . ImageState = = ImageLoadState . Ready )
{
// Store source properteis
sourcesize = new Size ( overridden . Width , overridden . Height ) ;
sourcescale = overridden . Scale ;
}
}
// This loads the image
protected override void LocalLoadImage ( )
{
// Checks
if ( this . IsImageLoaded ) return ;
lock ( this )
{
// Get the patch data stream
if ( bitmap ! = null ) bitmap . Dispose ( ) ; bitmap = null ;
2016-03-14 21:53:53 +00:00
string sourcelocation = string . Empty ;
Stream data = General . Map . Data . GetHiResTextureData ( shortname , ref sourcelocation ) ;
2016-03-04 08:10:56 +00:00
if ( data ! = null )
{
// Copy patch data to memory
byte [ ] membytes = new byte [ ( int ) data . Length ] ;
2016-08-29 10:06:16 +00:00
lock ( data ) //mxd
{
data . Seek ( 0 , SeekOrigin . Begin ) ;
data . Read ( membytes , 0 , ( int ) data . Length ) ;
}
2016-03-04 08:10:56 +00:00
MemoryStream mem = new MemoryStream ( membytes ) ;
mem . Seek ( 0 , SeekOrigin . Begin ) ;
// Get a reader for the data
IImageReader reader = ImageDataFormat . GetImageReader ( mem , ( isFlat ? ImageDataFormat . DOOMFLAT : ImageDataFormat . DOOMPICTURE ) , General . Map . Data . Palette ) ;
if ( ! ( reader is UnknownImageReader ) )
{
// Load the image
mem . Seek ( 0 , SeekOrigin . Begin ) ;
try { bitmap = reader . ReadAsBitmap ( mem ) ; }
catch ( InvalidDataException )
{
// Data cannot be read!
bitmap = null ;
}
}
// Not loaded?
if ( bitmap = = null )
{
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
General . ErrorLogger . Add ( ErrorType . Error , "Image lump \"" + Path . Combine ( sourcelocation , filepathname . Replace ( Path . AltDirectorySeparatorChar , Path . DirectorySeparatorChar ) ) + "\" data format could not be read, while loading HiRes texture \"" + this . Name + "\". Does this lump contain valid picture data at all?" ) ;
2016-03-04 08:10:56 +00:00
loadfailed = true ;
}
else
{
// Get width and height from image
width = bitmap . Size . Width ;
height = bitmap . Size . Height ;
// Apply source overrides?
if ( ! sourcesize . IsEmpty )
{
scale = new Vector2D ( ScaledWidth / width , ScaledHeight / height ) ;
}
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
else
2016-03-04 08:10:56 +00:00
{
Changed, Select Similar Sectors action: when "Effect" option is enabled, all sectors with at least one matching generalized/predefined effect will be selected.
Added, Tag Explorer plugin: a separate category for each generalized/predefined effect is now created when "Sort by action special" sort mode is used.
Added, Edit Effect window: normal and generalized effects can now be set at the same time.
Fixed, Edit Action window: in some cases Generalized actions were incorrectly processed.
Fixed, Edit Effect window: in some cases Generalized effects were incorrectly processed.
Fixed, Select Similar window: Tab control was incorrectly anchored.
Fixed, Nodes Viewer mode, cosmetic: segs angles were calculated incorrectly when showing nodes in classic format.
Fixed: HiRes textures, which didn't override any texture or flat were not loaded.
Fixed, Tag Explorer plugin: linedef action categories were missing title when "Sort by action special" sort mode was used.
Cosmetic: renamed "Grid Setup" action to "Grid and Backdrop Setup".
2016-03-21 15:19:14 +00:00
if ( overridesettingsapplied )
General . ErrorLogger . Add ( ErrorType . Warning , "Unable to get source texture dimensions while loading HiRes texture \"" + this . Name + "\"." ) ;
// Use our own size...
sourcesize = new Size ( width , height ) ;
2016-03-04 08:10:56 +00:00
}
}
// Done
mem . Dispose ( ) ;
}
else
{
2016-03-14 21:53:53 +00:00
General . ErrorLogger . Add ( ErrorType . Error , "Image lump \"" + shortname + "\" could not be found, while loading HiRes texture \"" + this . Name + "\". Did you forget to include required resources?" ) ;
2016-03-04 08:10:56 +00:00
loadfailed = true ;
}
// Pass on to base
base . LocalLoadImage ( ) ;
}
}
#endregion
}
}