private void OnAttack(AttackTargetMessage message)
        {
            if (m_CurrentTarget != null)
            {
                m_Renderer.Scene.Remove(m_CurrentTarget + "target");

                var vessel = m_VesselRepository.GetByName(m_CurrentSelection);
                var target = m_VesselRepository.GetByName(m_CurrentTarget);
                if (vessel != null && target != null)
                {
                    // get vessel position
                    Vector vesselPositon = vessel.GetPosition(message.Time);

                    // get the targets position
                    Vector targetPosition = target.GetPosition(message.Time);

                    // zero around vessel
                    Vector vesselToTarget = targetPosition - vesselPositon;

                    // get the facing so we can check weapons.
                    Facing facingWeapons = vessel.GetHeading(message.Time).ToFacing(vesselToTarget);

                    // get weapons
                    var weapons = vessel.AvailableWeapons(facingWeapons, vesselToTarget.Length);
                    // post firing.
                    // send???
                    if (weapons.Any())
                    {
                        m_Attacks.Add(new Attack(message.Time, m_CurrentTarget, vesselPositon));

                        m_Renderer.Scene.Add("Attack" + message.Time, m_CurrentTarget, "square", "target_highlight");
                        m_Bus.Send(new RequestPathMessage(m_CurrentTarget));
                    }
                }

                m_CurrentTarget = null;
            }
        }