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

124 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ClassicAssist.Shared;
using ClassicAssist.UO.Network.Packets;
using Newtonsoft.Json;
namespace ClassicAssist.Data.Spells
{
public class SpellManager
{
private static readonly object _lock = new object();
private static SpellManager _instance;
private readonly List<SpellData> _masteryData;
private readonly List<SpellData> _spellData;
private SpellManager()
{
string dataPath = Path.Combine( Engine.StartupPath ?? Environment.CurrentDirectory, "Data" );
_spellData = JsonConvert
.DeserializeObject<SpellData[]>( File.ReadAllText( Path.Combine( dataPath, "Spells.json" ) ) ).ToList();
_masteryData = JsonConvert
.DeserializeObject<SpellData[]>( File.ReadAllText( Path.Combine( dataPath, "Masteries.json" ) ) )
.ToList();
}
public SpellData GetSpellData( int id )
{
SpellData sd = _spellData.FirstOrDefault( s => s.ID == id );
return sd;
}
public SpellData GetSpellData( string name )
{
SpellData sd = _spellData.FirstOrDefault( s => s.Name.ToLower().Equals( name.ToLower() ) );
return sd;
}
public SpellData GetMasteryData( int id )
{
SpellData sd = _masteryData.FirstOrDefault( s => s.ID == id );
return sd;
}
public SpellData GetMasteryData( string name )
{
SpellData sd = _masteryData.FirstOrDefault( s => s.Name.ToLower().Equals( name.ToLower() ) );
return sd;
}
public SpellData[] GetSpellData()
{
return _spellData.ToArray();
}
public SpellData[] GetMasteryData()
{
return _masteryData.ToArray();
}
public void CastSpell( string name )
{
SpellData sd = GetSpellData( name );
if ( sd != null )
{
if ( sd.Target )
{
Engine.WaitingForTarget = true;
}
CastSpell( sd.ID );
return;
}
SpellData md = GetMasteryData( name );
if ( md == null )
{
return;
}
if ( md.Target )
{
Engine.WaitingForTarget = true;
}
CastSpell( md.ID );
}
public void CastSpell( int id )
{
Engine.LastSpellID = id;
Engine.SendPacketToServer( new CastSpell( id ) );
}
public static SpellManager GetInstance()
{
// ReSharper disable once InvertIf
if ( _instance == null )
{
lock ( _lock )
{
if ( _instance != null )
{
return _instance;
}
_instance = new SpellManager();
return _instance;
}
}
return _instance;
}
}
}