Files
ClassicAssist.Avalonia/ClassicAssist.Shared/Data/SpecialMoves/SpecialMovesManager.cs
T
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

102 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using ClassicAssist.Shared;
using ClassicAssist.Data.Spells;
using ClassicAssist.Shared.Resources;
using ClassicAssist.UO.Network;
using UOC = ClassicAssist.Shared.UO.Commands;
namespace ClassicAssist.Data.SpecialMoves
{
public class SpecialMovesManager
{
public delegate void dSpecialMovesChanged( string name, bool enabled );
private static SpecialMovesManager _instance;
private static readonly object _lock = new object();
private bool[] _enabledIds = new bool[ushort.MaxValue];
private SpecialMovesManager()
{
IncomingPacketHandlers.ToggleSpecialMoveEvent += SetID;
Engine.PlayerInitializedEvent += p => Clear();
}
public event dSpecialMovesChanged SpecialMovesChanged;
private void SetID( int spellid, bool enabled )
{
_enabledIds[spellid] = enabled;
OnSpecialMovesChanged( spellid, enabled );
}
private void OnSpecialMovesChanged( int spellid, bool enabled )
{
SpellManager manager = SpellManager.GetInstance();
SpellData spellData = manager.GetSpellData( spellid );
SpecialMovesChanged?.Invoke( spellData?.Name ?? string.Empty, enabled );
}
private void Clear()
{
_enabledIds = new bool[ushort.MaxValue];
}
public bool SpecialMoveExists( string name )
{
name = name.ToLower();
SpellData data = SpellManager.GetInstance().GetSpellData( name );
if ( data != null )
{
return _enabledIds[data.ID];
}
UOC.SystemMessage( Strings.Unknown_buff_name___ );
return false;
}
public string[] GetEnabledNames()
{
List<int> enabled = new List<int>();
for ( int i = 0; i < _enabledIds.Length; i++ )
{
if ( _enabledIds[i] )
{
enabled.Add( i );
}
}
SpellManager manager = SpellManager.GetInstance();
return enabled.Select( manager.GetSpellData ).Select( data => data?.Name ).ToArray();
}
public static SpecialMovesManager GetInstance()
{
// ReSharper disable once InvertIf
if ( _instance == null )
{
lock ( _lock )
{
if ( _instance != null )
{
return _instance;
}
_instance = new SpecialMovesManager();
return _instance;
}
}
return _instance;
}
}
}