public UpdateResult Update(out BattleAction decision)
    {
        UpdateResult result = Update();

        if (result == UpdateResult.Completed)
        {
            BattleMenu menu = Next;
            while (menu != null)
            {
                menu.Destruct();
                menu = menu.Next;
            }

            if (m_Next.Count == m_Command.Selections.Count)
            {
                // Destroy this menu
                Destruct();

                // Construct final decision using m_Command.Actions
                decision = m_Command.Construct(m_Agent, m_Selections);

                if (m_Command.Expends != BattleCommand.Type.None)
                {
                    string turn = "Turn:" + m_Command.Expends;
                    --m_Agent[turn];
                }

                return(result);
            }
            else
            {
                m_Next.Push(m_Command.Selections[m_Next.Count].Construct(m_Agent, m_Selections));
                Next.Construct();

                if (!(Next is BattleListMenu))
                {
                    Destruct();
                }
            }
        }

        decision = null;
        return(result);
    }