2009-04-19 18:07:22 +00:00
#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.Collections.Generic ;
using CodeImp.DoomBuilder.Data ;
#endregion
namespace CodeImp.DoomBuilder.Config
{
internal sealed class ResourceTextureSet : TextureSet , IFilledTextureSet
{
#region = = = = = = = = = = = = = = = = = = Constants
#endregion
#region = = = = = = = = = = = = = = = = = = Variables
// Matching textures and flats
2010-08-12 19:59:06 +00:00
private Dictionary < long , ImageData > textures ;
private Dictionary < long , ImageData > flats ;
2010-08-14 10:21:38 +00:00
private DataLocation location ;
2009-04-19 18:07:22 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = Properties
2010-08-12 19:59:06 +00:00
public ICollection < ImageData > Textures { get { return textures . Values ; } }
2013-12-03 10:50:33 +00:00
public ICollection < ImageData > Flats { get { return flats . Values ; } }
2010-08-14 10:21:38 +00:00
public DataLocation Location { get { return location ; } }
2009-04-19 18:07:22 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = Constructor / Destructor
// New texture set constructor
2010-08-14 10:21:38 +00:00
public ResourceTextureSet ( string name , DataLocation location )
2009-04-19 18:07:22 +00:00
{
this . name = name ;
2010-08-14 10:21:38 +00:00
this . location = location ;
2010-08-12 19:59:06 +00:00
this . textures = new Dictionary < long , ImageData > ( ) ;
this . flats = new Dictionary < long , ImageData > ( ) ;
2009-04-19 18:07:22 +00:00
}
#endregion
#region = = = = = = = = = = = = = = = = = = Methods
2010-08-12 19:59:06 +00:00
// Add a texture
2009-04-19 18:07:22 +00:00
internal void AddTexture ( ImageData image )
{
Added, Sector Edit window, UDMF: added UI for sector damage-realted properties.
Added, DECORATE parser: damage types are now parsed.
Added: the editor now reports duplicate textures/flats/patches/sprites/colormaps/voxels in the loaded wads.
Added, all text parsers: added #region/#endregion support.
Added TERRAIN parser.
Added, Script Editor: added special handling for DECORATE special comments.
Added, Sector Edit window, UDMF: Soundsequence value was setup incorrectly when showing the window for multiple sectors with mixed Soundsequence value.
Fixed, Map Options window: "Strictly load patches between P_START and P_END" was not applied when applying the changes.
Fixed, MAPINFO parser: MapInfo should be treated as defined when a map MAPINFO block corresponding to current map is encountered even if it doesn't define any properties recognized by the editor.
Fixed, all text parsers: in some cases error line was calculated incorrectly when reporting an error detected by a text parser.
Cosmetic: changed ' to " in the rest of Error and Warning messages.
Internal: added text resource tracking.
Updated ZDoom_DECORATE.cfg.
Updated documentation ("Game Configuration - Basic Settings" page).
2016-02-22 12:33:19 +00:00
//mxd. Wad duplicates are checked by WadReader
if ( location . type ! = DataLocation . RESOURCE_WAD & & textures . ContainsKey ( image . LongName ) & & ! image . HasPatchWithSameName )
2016-04-06 22:54:04 +00:00
{
if ( image is CameraTextureImage )
General . ErrorLogger . Add ( ErrorType . Warning , "Texture \"" + image . Name + "\" is overridden by CameraTexture with the same name in resource \"" + this . Location . GetDisplayName ( ) + "\"." ) ;
else
General . ErrorLogger . Add ( ErrorType . Warning , "Texture \"" + image . Name + "\" is double defined in resource \"" + this . Location . GetDisplayName ( ) + "\"." ) ;
}
2010-08-14 10:21:38 +00:00
textures [ image . LongName ] = image ;
2009-04-19 18:07:22 +00:00
}
2010-08-12 19:59:06 +00:00
// Add a flat
2009-04-19 18:07:22 +00:00
internal void AddFlat ( ImageData image )
{
Added, Sector Edit window, UDMF: added UI for sector damage-realted properties.
Added, DECORATE parser: damage types are now parsed.
Added: the editor now reports duplicate textures/flats/patches/sprites/colormaps/voxels in the loaded wads.
Added, all text parsers: added #region/#endregion support.
Added TERRAIN parser.
Added, Script Editor: added special handling for DECORATE special comments.
Added, Sector Edit window, UDMF: Soundsequence value was setup incorrectly when showing the window for multiple sectors with mixed Soundsequence value.
Fixed, Map Options window: "Strictly load patches between P_START and P_END" was not applied when applying the changes.
Fixed, MAPINFO parser: MapInfo should be treated as defined when a map MAPINFO block corresponding to current map is encountered even if it doesn't define any properties recognized by the editor.
Fixed, all text parsers: in some cases error line was calculated incorrectly when reporting an error detected by a text parser.
Cosmetic: changed ' to " in the rest of Error and Warning messages.
Internal: added text resource tracking.
Updated ZDoom_DECORATE.cfg.
Updated documentation ("Game Configuration - Basic Settings" page).
2016-02-22 12:33:19 +00:00
//mxd. Wad duplicates are checked by WadReader
if ( location . type ! = DataLocation . RESOURCE_WAD & & flats . ContainsKey ( image . LongName ) & & ( ! General . Map . Config . MixTexturesFlats | | ! image . HasPatchWithSameName ) )
2016-04-06 22:54:04 +00:00
{
if ( image is CameraTextureImage )
General . ErrorLogger . Add ( ErrorType . Warning , "Flat \"" + image . Name + "\" is overridden by CameraTexture with the same name in resource \"" + this . Location . GetDisplayName ( ) + "\"." ) ;
else
General . ErrorLogger . Add ( ErrorType . Warning , "Flat \"" + image . Name + "\" is double defined in resource \"" + this . Location . GetDisplayName ( ) + "\"." ) ;
}
2010-08-14 10:21:38 +00:00
flats [ image . LongName ] = image ;
}
// Check if this set has a texture
internal bool TextureExists ( ImageData image )
{
return textures . ContainsKey ( image . LongName ) ;
}
// Check if this set has a flat
internal bool FlatExists ( ImageData image )
{
return flats . ContainsKey ( image . LongName ) ;
2009-04-19 18:07:22 +00:00
}
2010-08-12 19:59:06 +00:00
// Mix the textures and flats
internal void MixTexturesAndFlats ( )
{
2013-12-03 10:50:33 +00:00
// Make a copy of the flats only
Dictionary < long , ImageData > flatsonly = new Dictionary < long , ImageData > ( flats ) ;
// Add textures to flats
foreach ( KeyValuePair < long , ImageData > t in textures )
{
2022-03-05 15:57:23 +00:00
if ( ! flats . ContainsKey ( t . Key ) | | t . Value . TextureNamespace = = TextureNamespace . TEXTURE ) flats [ t . Key ] = t . Value ;
2010-08-12 19:59:06 +00:00
}
2013-07-29 08:50:50 +00:00
2013-12-03 10:50:33 +00:00
// Add flats to textures
foreach ( KeyValuePair < long , ImageData > f in flatsonly )
{
if ( ! textures . ContainsKey ( f . Key ) ) textures . Add ( f . Key , f . Value ) ;
}
2010-08-12 19:59:06 +00:00
}
2009-04-19 18:07:22 +00:00
#endregion
}
}