/***************************************************************************
 *                               QuestArrow.cs
 *                            -------------------
 *   begin                : May 1, 2002
 *   copyright            : (C) The RunUO Software Team
 *   email                : info@runuo.com
 *
 *   $Id$
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

using System;
using Server;
using Server.Network;

namespace Server
{
	public class QuestArrow
	{
		private Mobile m_Mobile;
		private Mobile m_Target;
		private bool m_Running;

		public Mobile Mobile
		{
			get
			{
				return m_Mobile;
			}
		}

		public Mobile Target
		{
			get
			{
				return m_Target;
			}
		}

		public bool Running
		{
			get
			{
				return m_Running;
			}
		}

		public void Update()
		{
			Update( m_Target.X, m_Target.Y );
		}

		public void Update( int x, int y )
		{
			if ( !m_Running )
				return;

			NetState ns = m_Mobile.NetState;

			if ( ns == null )
				return;

			if ( ns.HighSeas )
				ns.Send( new SetArrowHS( x, y, m_Target.Serial ) );
			else
				ns.Send( new SetArrow( x, y ) );
		}

		public void Stop()
		{
			Stop( m_Target.X, m_Target.Y );
		}

		public void Stop( int x, int y )
		{
			if ( !m_Running )
				return;

			m_Mobile.ClearQuestArrow();

			NetState ns = m_Mobile.NetState;

			if ( ns != null ) {
				if ( ns.HighSeas )
					ns.Send( new CancelArrowHS( x, y, m_Target.Serial ) );
				else
					ns.Send( new CancelArrow() );
			}

			m_Running = false;
			OnStop();
		}

		public virtual void OnStop()
		{
		}

		public virtual void OnClick( bool rightClick )
		{
		}

		public QuestArrow( Mobile m, Mobile t )
		{
			m_Running = true;
			m_Mobile = m;
			m_Target = t;
		}

		public QuestArrow( Mobile m, Mobile t, int x, int y ) : this( m, t )
		{
			Update( x, y );
		}
	}
}