ModernUO/Scripts/Engines/ConPVP/Ruleset.cs
2018-09-14 08:46:14 -07:00

109 lines
No EOL
2.3 KiB
C#

using System.Collections;
namespace Server.Engines.ConPVP
{
public class Ruleset
{
private RulesetLayout m_Layout;
private BitArray m_Options;
private string m_Title;
private Ruleset m_Base;
private ArrayList m_Flavors = new ArrayList();
private bool m_Changed;
public RulesetLayout Layout => m_Layout;
public BitArray Options => m_Options;
public string Title{ get => m_Title;
set => m_Title = value;
}
public Ruleset Base => m_Base;
public ArrayList Flavors => m_Flavors;
public bool Changed{ get => m_Changed;
set => m_Changed = value;
}
public void ApplyDefault( Ruleset newDefault )
{
m_Base = newDefault;
m_Changed = false;
m_Options = new BitArray( newDefault.m_Options );
ApplyFlavorsTo( this );
}
public void ApplyFlavorsTo( Ruleset ruleset )
{
for ( int i = 0; i < m_Flavors.Count; ++i )
{
Ruleset flavor = (Ruleset)m_Flavors[i];
m_Options.Or( flavor.m_Options );
}
}
public void AddFlavor( Ruleset flavor )
{
if ( m_Flavors.Contains( flavor ) )
return;
m_Flavors.Add( flavor );
m_Options.Or( flavor.m_Options );
}
public void RemoveFlavor( Ruleset flavor )
{
if ( !m_Flavors.Contains( flavor ) )
return;
m_Flavors.Remove( flavor );
m_Options.And( flavor.m_Options.Not() );
flavor.m_Options.Not();
}
public void SetOptionRange( string title, bool value )
{
RulesetLayout layout = m_Layout.FindByTitle( title );
if ( layout == null )
return;
for ( int i = 0; i < layout.TotalLength; ++i )
m_Options[i + layout.Offset] = value;
m_Changed = true;
}
public bool GetOption( string title, string option )
{
int index = 0;
RulesetLayout layout = m_Layout.FindByOption( title, option, ref index );
if ( layout == null )
return true;
return m_Options[layout.Offset + index];
}
public void SetOption( string title, string option, bool value )
{
int index = 0;
RulesetLayout layout = m_Layout.FindByOption( title, option, ref index );
if ( layout == null )
return;
m_Options[layout.Offset + index] = value;
m_Changed = true;
}
public Ruleset( RulesetLayout layout )
{
m_Layout = layout;
m_Options = new BitArray( layout.TotalLength );
}
}
}