// 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 RY_S_PHRASE_H #define RY_S_PHRASE_H #include "nel/misc/types_nl.h" #include "game_item_manager/game_item.h" class CStaticBrick; struct CEvalReturnInfos; /** * Base virtual class for all Sabrina phrases * \author David Fleury * \author Nevrax France * \date 2003 */ class CSPhrase { public: enum TPhraseState { New = 0, Evaluated, Validated, //Idle, ExecutionInProgress, SecondValidated, WaitNextCycle, Latent, LatencyEnded, UnknownState, }; public: /// Constructor CSPhrase() { _State = New; _Idle = false; _ExecutionEndDate = 0; _LatencyEndDate = 0; _NbWaitingRequests = 0; _PhraseBookIndex = 0; _NextCounter = 0; _IsStatic = false; } /// destructor virtual ~CSPhrase() {} /// get Id //inline const TPhraseId &getId() const { return _Id; } /// get internal state inline TPhraseState state() const { return _State; } /// get idle flag inline bool idle() const { return _Idle; } /// set idle flag inline void idle( bool idle ) { _Idle = idle; } /// get execution end date inline NLMISC::TGameCycle executionEndDate() const { return _ExecutionEndDate; } /// get latency end date inline NLMISC::TGameCycle latencyEndDate() const { return _LatencyEndDate; } /// get nb of waiting request to other services inline uint16 getNbWaitingRequests() const { return _NbWaitingRequests; } /// add a waiting request inline void addRequest() { ++_NbWaitingRequests; } /// remove a waiting request inline void removeRequest() { if (_NbWaitingRequests) --_NbWaitingRequests; } /** * build the phrase from bricks, actor and main target * \param actorRowId: row of the entity creating the phrase * \param bricks : bricks composing the phrase * \return true on success */ virtual bool build( const TDataSetRow & actorRowId, const std::vector< const CStaticBrick* >& bricks ) = 0; /** * set the actor */ virtual void setActor( const TDataSetRow &entityRowId ) = 0; /** * set the primary item * \param itemPtr pointer on primary item */ // virtual void setPrimaryItem( CGameItemPtr itemPtr ) = 0; /** * set the secondary item * \param itemPtr pointer on secondary item */ // virtual void setSecondaryItem( CGameItemPtr itemPtr ) = 0; /** * add a consumable ressource (object) * \param itemPtr pointer on the consumable item */ // virtual void addConsumableItem( CGameItemPtr itemPtr ) = 0; /** * set the primary target * \param entityId id of the primary target */ virtual void setPrimaryTarget( const TDataSetRow &entityRowId ) = 0; /** * add a target entity * \param entityId id of the target */ virtual void addTargetEntity( const TDataSetRow &entityRowId ) = 0; /** * evaluate phrase * \param evalReturnInfos struct that will receive evaluation results * \return true if eval has been made without errors */ virtual bool evaluate(CEvalReturnInfos *msg = NULL) = 0; /** * validate phrase * \return true of the phrase is valid */ virtual bool validate() = 0; /** * update phrase * \return true of the phrase is valid */ virtual bool update() = 0; /** * execute this phrase */ virtual void execute() = 0; /** * at end of execution, apply phrase */ virtual void apply() = 0; /** * called at the end of the latency time */ virtual void end() = 0; /** * called for brutal stop of the phrase */ virtual void stop() { end(); } /// get being processed flag inline bool beingProcessed() const { return _BeingProcessed; } /// inline uint8 nextCounter() const { return _NextCounter; } inline void nextCounter(uint8 c) { _NextCounter = c; } /// inline sint16 phraseBookIndex() const { return _PhraseBookIndex; } inline void phraseBookIndex(sint16 i) { _PhraseBookIndex = i; } /// inline bool isStatic() const { return _IsStatic; } inline void isStatic(bool b) { _IsStatic = b; } protected: /// phrase state TPhraseState _State; /// idle or not bool _Idle; /// execution end date NLMISC::TGameCycle _ExecutionEndDate; /// latency end date NLMISC::TGameCycle _LatencyEndDate; /// nb of request to other services (GPMS for area effects) uint16 _NbWaitingRequests; /// index in client phrase book (0 = not in the phrase book) uint16 _PhraseBookIndex; /// next counter uint8 _NextCounter; /// is static bool _IsStatic; /// being processed flag mutable bool _BeingProcessed; }; #endif // RY_S_PHRASE_H /* End of s_phrase.h */