2009-04-19 18:07:22 +00:00
#region = = = = = = = = = = = = = = = = = = Namespaces
using System ;
using System.Collections.Generic ;
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
using CodeImp.DoomBuilder.Types ;
2009-04-19 18:07:22 +00:00
#endregion
namespace CodeImp.DoomBuilder.Map
{
2009-05-21 08:18:34 +00:00
/// <summary>
/// List of universal fields and their values.
/// </summary>
2016-02-01 22:04:00 +00:00
[Serializable]
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
public class UniFields : Dictionary < string , UniValue >
2009-04-19 18:07:22 +00:00
{
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
#region = = = = = = = = = = = = = = = = = = Variables
2009-06-11 21:21:20 +00:00
// Owner of this list
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
private MapElement owner ;
#endregion
#region = = = = = = = = = = = = = = = = = = Properties
2009-06-11 21:21:20 +00:00
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
public MapElement Owner { get { return owner ; } internal set { owner = value ; } }
#endregion
#region = = = = = = = = = = = = = = = = = = Constructors
2009-04-19 18:07:22 +00:00
// New constructor
2009-05-21 08:18:34 +00:00
///<summary></summary>
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
public UniFields ( ) : base ( 2 ) { }
2009-04-19 18:07:22 +00:00
// New constructor
2009-05-21 08:18:34 +00:00
///<summary></summary>
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
public UniFields ( int capacity ) : base ( capacity ) { }
2009-04-19 18:07:22 +00:00
2010-08-15 13:45:43 +00:00
// Copy constructor (makes a deep copy)
2009-05-21 08:18:34 +00:00
///<summary></summary>
2010-08-15 13:45:43 +00:00
public UniFields ( UniFields copyfrom ) : base ( copyfrom . Count )
2009-04-19 18:07:22 +00:00
{
2010-08-15 13:45:43 +00:00
foreach ( KeyValuePair < string , UniValue > v in copyfrom )
this . Add ( v . Key , new UniValue ( v . Value ) ) ;
2009-04-19 18:07:22 +00:00
}
2009-06-11 21:21:20 +00:00
// New constructor
///<summary></summary>
public UniFields ( MapElement owner ) : base ( 2 )
{
this . owner = owner ;
}
// New constructor
///<summary></summary>
public UniFields ( MapElement owner , int capacity ) : base ( capacity )
{
this . owner = owner ;
}
// Copy constructor
///<summary></summary>
2013-09-05 13:03:17 +00:00
public UniFields ( MapElement owner , UniFields copyfrom ) : base ( copyfrom . Count )
2009-06-11 21:21:20 +00:00
{
this . owner = owner ;
2013-09-05 13:03:17 +00:00
foreach ( KeyValuePair < string , UniValue > v in copyfrom ) //mxd. No-no-no, David Blaine, I don't want to copy these by reference!
this . Add ( v . Key , new UniValue ( v . Value ) ) ;
2009-06-11 21:21:20 +00:00
}
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = Mathods
2009-06-11 21:21:20 +00:00
/// <summary>Call this before making changes to the fields, or they may not be updated correctly with undo/redo!</summary>
public void BeforeFieldsChange ( )
{
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
if ( owner ! = null ) owner . BeforeFieldsChange ( ) ;
2009-06-11 21:21:20 +00:00
}
2010-09-15 20:29:40 +00:00
/// <summary>This returns the value of a field by name, or returns the specified value when no such field exists or the field value fails to convert to the same datatype.</summary>
public T GetValue < T > ( string fieldname , T defaultvalue )
{
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
if ( ! this . ContainsKey ( fieldname ) ) return defaultvalue ;
2010-09-15 20:29:40 +00:00
try
{
T val = ( T ) this [ fieldname ] . Value ;
return val ;
}
catch ( InvalidCastException )
{
return defaultvalue ;
}
}
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = mxd . Static methods
// float
public static void SetFloat ( UniFields fields , string key , float value ) { SetFloat ( fields , key , value , 0f ) ; }
public static void SetFloat ( UniFields fields , string key , float value , float defaultvalue )
{
if ( fields = = null ) return ;
if ( value ! = defaultvalue )
{
if ( ! fields . ContainsKey ( key ) ) fields . Add ( key , new UniValue ( UniversalType . Float , value ) ) ;
else fields [ key ] . Value = value ;
}
// Don't save default value
else if ( fields . ContainsKey ( key ) )
{
fields . Remove ( key ) ;
}
}
public static float GetFloat ( UniFields fields , string key ) { return GetFloat ( fields , key , 0f ) ; }
public static float GetFloat ( UniFields fields , string key , float defaultvalue )
{
if ( fields = = null ) return defaultvalue ;
return fields . GetValue ( key , defaultvalue ) ;
}
// int
public static void SetInteger ( UniFields fields , string key , int value ) { SetInteger ( fields , key , value , 0 ) ; }
public static void SetInteger ( UniFields fields , string key , int value , int defaultvalue )
{
if ( fields = = null ) return ;
if ( value ! = defaultvalue )
{
if ( ! fields . ContainsKey ( key ) ) fields . Add ( key , new UniValue ( UniversalType . Integer , value ) ) ;
else fields [ key ] . Value = value ;
}
// Don't save default value
else if ( fields . ContainsKey ( key ) )
{
fields . Remove ( key ) ;
}
}
public static int GetInteger ( UniFields fields , string key ) { return GetInteger ( fields , key , 0 ) ; }
public static int GetInteger ( UniFields fields , string key , int defaultvalue )
{
if ( fields = = null ) return defaultvalue ;
return fields . GetValue ( key , defaultvalue ) ;
}
// String
public static void SetString ( UniFields fields , string key , string value , string defaultvalue )
{
if ( fields = = null ) return ;
if ( value ! = defaultvalue )
{
if ( ! fields . ContainsKey ( key ) ) fields . Add ( key , new UniValue ( UniversalType . String , value ) ) ;
else fields [ key ] . Value = value ;
}
// Don't save default value
else if ( fields . ContainsKey ( key ) )
{
fields . Remove ( key ) ;
}
}
/// <summary>This removes fields with given names.</summary>
public static void RemoveFields ( UniFields fields , IEnumerable < string > keys )
{
if ( fields = = null ) return ;
foreach ( string key in keys )
if ( fields . ContainsKey ( key ) ) fields . Remove ( key ) ;
}
/// <summary>This removes a field with given name.</summary>
public static void RemoveField ( UniFields fields , string key )
{
if ( fields = = null | | ! fields . ContainsKey ( key ) ) return ;
fields . Remove ( key ) ;
}
/// <summary>This compares all fields.</summary>
public static bool AllFieldsMatch ( UniFields fields1 , UniFields fields2 )
{
if ( fields1 . Keys . Count ! = fields2 . Keys . Count ) return false ;
foreach ( KeyValuePair < string , UniValue > group in fields1 )
{
if ( ! fields2 . ContainsKey ( group . Key ) | | ! UniValuesMatch ( fields1 [ group . Key ] , fields2 [ group . Key ] ) )
return false ;
}
return true ;
}
/// <summary>This compares non-UI fields (e.g. fields, visible in the "Custom" tab).</summary>
public static bool CustomFieldsMatch ( UniFields fields1 , UniFields fields2 )
{
if ( fields1 . owner = = null | | fields2 . owner = = null ) throw new NotSupportedException ( "Cannot compare custom fields without owners!" ) ;
if ( fields1 . owner . ElementType ! = fields2 . owner . ElementType ) return false ;
return CustomFieldsMatch ( fields1 , fields2 , fields1 . owner . ElementType ) ;
}
private static bool CustomFieldsMatch ( UniFields fields1 , UniFields fields2 , MapElementType type )
{
// Collect non-UI fields
UniFields filtered1 = new UniFields ( ) ;
UniFields filtered2 = new UniFields ( ) ;
foreach ( string key in fields1 . Keys )
{
if ( ! General . Map . FormatInterface . UIFields [ type ] . ContainsKey ( key ) )
filtered1 . Add ( key , fields1 [ key ] ) ;
}
foreach ( string key in fields2 . Keys )
{
if ( ! General . Map . FormatInterface . UIFields [ type ] . ContainsKey ( key ) )
filtered2 . Add ( key , fields2 [ key ] ) ;
}
if ( filtered1 . Keys . Count ! = filtered2 . Keys . Count ) return false ;
return AllFieldsMatch ( filtered1 , filtered2 ) ;
}
/// <summary>This compares types and values of given UniValues.</summary>
public static bool UniValuesMatch ( UniValue val1 , UniValue val2 )
{
if ( val1 . Type ! = val2 . Type ) return false ;
2016-06-20 13:36:10 +00:00
if ( val1 . Value is int ) return ( int ) val1 . Value = = ( int ) val2 . Value ;
if ( val1 . Value is float ) return ( float ) val1 . Value = = ( float ) val2 . Value ;
if ( val1 . Value is bool ) return ( bool ) val1 . Value = = ( bool ) val2 . Value ;
if ( val1 . Value is string ) return ( string ) val1 . Value = = ( string ) val2 . Value ;
throw new NotImplementedException ( "Unknown Custom Field type: " + val1 . Value . GetType ( ) ) ;
Removed "Paste Properties Options" action.
Added "Paste Properties Special" actions in "Classic" and "Visual" categories. They work the same way as "Paste Special" action.
Added: "Copy Properties", "Paste Properties" and "Paste Properties Special" options are now shown in the Edit menu if current classic mode supports them.
Changed, Paste Properties Special window: only options relevant to current map format are now displayed.
Changed, Paste Properties Special window, UDMF: all UI-managed options are now available.
Fixed: MAPINFO parser was unable to process "include" directives.
Fixed, General interface: selection info was reset to "Nothing selected" after few seconds regardless of current selection.
Fixed, Visual mode: thing bounding boxes were not updated when changing things positions using Randomize mode.
Fixed, Visual mode: event lines were displayed at incorrect height when entering Visual mode for the first time.
Fixed, Texture Browser window: when MixTexturesFlats Game Configuration option is disabled, textures/flats are no longer shown in the Used group when flats/textures with the same names are used in the map.
Fixed(?): probably fixed an exception some users reported when trying to initialize a Classic mode after switching from Visual mode with "Sync cameras" option enabled.
Changed, Game configurations, Thing Categories: a block must have at least one thing category property to be recognized as a thing category.
Changed, Visplane Explorer: the plugin now outputs more info when it fails to initialize vpo.dll.
Cosmetic, Thing Edit window, Doom/Hexen map format: adjusted UI layout so thing flags control no longer displays scrollbars in Hexen map format.
Internal: merged methods from UDMFTools into UniFields, removed UDMFTools.
Updated Inno Setup script (added VC++ 2008 SP1 distributive).
Updated ZDoom_DECORATE.cfg (A_CheckBlock).
Updated documentation (added "System Requirements" page).
2015-10-09 12:38:12 +00:00
}
/// <summary>This compares types and values of given UniFields by key.</summary>
public static bool ValuesMatch ( string key , UniFields fields1 , UniFields fields2 )
{
bool f1 = fields1 . ContainsKey ( key ) ;
bool f2 = fields2 . ContainsKey ( key ) ;
if ( ! f1 & & ! f2 ) return true ;
if ( f1 ! = f2 ) return false ;
return UniValuesMatch ( fields1 [ key ] , fields2 [ key ] ) ;
}
/// <summary>This compares types and values of given UniFields by 2 keys. Returns true when both values match.</summary>
public static bool ValuesMatch ( string key1 , string key2 , UniFields fields1 , UniFields fields2 )
{
return ValuesMatch ( key1 , fields1 , fields2 ) & & ValuesMatch ( key2 , fields1 , fields2 ) ;
}
/// <summary>This compares UniFields types and values of given MapElements by key.</summary>
public static bool ValuesMatch ( string key , MapElement e1 , MapElement e2 )
{
if ( e1 . ElementType ! = e2 . ElementType | | ( e1 . Fields = = null & & e2 . Fields ! = null ) | | e2 . Fields = = null ) return false ;
if ( e1 . Fields = = null & & e2 . Fields = = null ) return true ;
return ValuesMatch ( key , e1 . Fields , e2 . Fields ) ;
}
/// <summary>This compares UniFields types and values of given MapElements by 2 keys. Returns true when both values match.</summary>
public static bool ValuesMatch ( string key1 , string key2 , MapElement e1 , MapElement e2 )
{
if ( e1 . ElementType ! = e2 . ElementType | | ( e1 . Fields = = null & & e2 . Fields ! = null ) | | e2 . Fields = = null ) return false ;
if ( e1 . Fields = = null & & e2 . Fields = = null ) return true ;
return ValuesMatch ( key1 , key2 , e1 . Fields , e2 . Fields ) ;
}
#endregion
2009-04-19 18:07:22 +00:00
}
}