// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef CL_BOT_CHAT_MANAGER_H #define CL_BOT_CHAT_MANAGER_H class CBotChatPage; class CPrerequisitInfos; namespace NLGUI { class CInterfaceGroup; } class IMissionPrereqInfosWaiter { public: IMissionPrereqInfosWaiter() { MissionSlotId = 0; } virtual ~IMissionPrereqInfosWaiter() {} // The mission SheetId. If differ from current sheet in the SlotId, the infos are not updated / requested // uint ItemSheet; // The mission SlotId to retrieve info. uint16 MissionSlotId; // Called when the info is received for this slot. virtual void missionInfoReceived(const CPrerequisitInfos &infos) = 0; }; /** Bot chat management. * The bot chat manager allow to change the current bot chat page, and contains pointer to the various pages * \author Nicolas Vizerie * \author Nevrax France * \date August 2003 */ class CBotChatManager { public: ~CBotChatManager(); // Get the unique instance of that class static CBotChatManager *getInstance(); // release singleton static void releaseInstance(); // Get current setupped page, or NULL if none CBotChatPage *getCurrPage() const { return _CurrPage; } /** Set the current page to display. Any previous page is hidden. Passing NULL just close all windows. * NB : this doesn't send the BOT_CHAT:END msg to the server, see endDialog */ void setCurrPage(CBotChatPage *page); // Increment current session ID. (a session is all talk heppening during the selection of a target npc) uint16 getSessionID() { return _SessionID; } void incrementSessionID() { ++ _SessionID; } // Update the current page. Should be called at each frame void update(); // Close the botchat, and send 'end' msg to the server void endDialog(); // this class retains the flags of mission option that has been chosen in the contextual menu /* uint getChosenMissionFlags() const { return _ChosenMissionFlags; } void setChosenMissionFlags(uint flag) { _ChosenMissionFlags = flag; } */ // *** // Add a Waiter on mission prereq info (MissionHelp opening). no-op if here, but reorder void addMissionInfoWaiter(IMissionPrereqInfosWaiter *waiter); // remove a Waiter on mission prereq info (MissionHelp closing). no-op if not here. NB: no delete void removeMissionInfoWaiter(IMissionPrereqInfosWaiter *waiter); // Called on impulse void onReceiveMissionInfo(uint16 missionSlotId, const CPrerequisitInfos &infos); // Called for local client debugging void debugLocalReceiveMissionInfo(); ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// private: CBotChatPage *_CurrPage; uint16 _SessionID; static CBotChatManager *_Instance; //uint _ChosenMissionFlags; // *** keep infos on opened mission help windows (for prerequisits) typedef std::list TMissionPrereqInfosWaiter; TMissionPrereqInfosWaiter _MissionInfoWaiters; private: CBotChatManager(); }; #endif