using System; using Server; using Server.Targeting; namespace Arya.Chess { public delegate void ChessTargetCallback( Mobile from, object targeted ); /// /// General purpose target for the chess system /// public class ChessTarget : Target { /// /// The message for the target request /// private string m_Message; /// /// The callback for this target /// private ChessTargetCallback m_Callback; /// /// The chess game managing this target /// private ChessGame m_Game; /// /// Flag for a target used outside a game /// private bool m_IgnoreGame = false; public ChessTarget( ChessGame game, Mobile m, string message, ChessTargetCallback callback ) : base( -1, true, TargetFlags.None ) { m_Message = message; m_Callback = callback; m_Game = game; if ( message != null ) m.SendMessage( 0x40, message ); } public ChessTarget( Mobile m, string message, ChessTargetCallback callback ) : base( -1, true, TargetFlags.None ) { m_IgnoreGame = true; m_Message = message; m_Callback = callback; if ( message != null ) m.SendMessage( 0x40, message ); } protected override void OnTarget(Mobile from, object targeted) { if ( !m_IgnoreGame && ( m_Game == null || !m_Game.AllowTarget ) ) return; if ( m_Callback != null ) { try { m_Callback.DynamicInvoke( new object[] { from, targeted } ); } catch ( Exception err ) { Console.WriteLine( err.ToString() ); } } } public void Remove( Mobile m ) { Invoke( m, new Point3D( 0, 0, 0 ) ); } } }