/***************************************************************************
 *                               QuestArrow.cs
 *                            -------------------
 *   begin                : May 1, 2002
 *   copyright            : (C) The RunUO Software Team
 *   email                : info@runuo.com
 *
 *   $Id: QuestArrow.cs 619 2010-12-12 23:55:08Z mark $
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   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);
        }
    }
}