ModernUO/Scripts/Engines/ConPVP/Ruleset.cs

101 lines
No EOL
2 KiB
C#

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