diff options
author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-04-29 07:43:28 +0300 |
---|---|---|
committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-04-29 07:56:09 +0300 |
commit | 1b68f71348ecf3983b76b40d7940da8377f049b7 (patch) | |
tree | 2974eddaef130a067c26033d60a59fc790365b3d /indra/newview/llagent.h | |
parent | af4ea94efc1999f3b19fd8d643d0331f0b77e265 (diff) |
#824 Process source files in bulk: replace tabs with spaces, convert CRLF to LF, and trim trailing whitespaces as needed
Diffstat (limited to 'indra/newview/llagent.h')
-rw-r--r-- | indra/newview/llagent.h | 1308 |
1 files changed, 654 insertions, 654 deletions
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 43b4457bf5..71fa4e20b1 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -1,25 +1,25 @@ -/** +/** * @file llagent.h * @brief LLAgent class header file * * $LicenseInfo:firstyear=2000&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library 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 * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -28,10 +28,10 @@ #define LL_LLAGENT_H #include "indra_constants.h" -#include "llevent.h" // LLObservable base class -#include "llagentdata.h" // gAgentID, gAgentSessionID +#include "llevent.h" // LLObservable base class +#include "llagentdata.h" // gAgentID, gAgentSessionID #include "llcharacter.h" -#include "llcoordframe.h" // for mFrameAgent +#include "llcoordframe.h" // for mFrameAgent #include "llavatarappearancedefines.h" #include "llpermissionsflags.h" #include "llevents.h" @@ -43,9 +43,9 @@ #include <boost/shared_ptr.hpp> #include <boost/signals2.hpp> -extern const BOOL ANIMATE; -extern const U8 AGENT_STATE_TYPING; // Typing indication -extern const U8 AGENT_STATE_EDITING; // Set when agent has objects selected +extern const BOOL ANIMATE; +extern const U8 AGENT_STATE_TYPING; // Typing indication +extern const U8 AGENT_STATE_EDITING; // Set when agent has objects selected class LLViewerRegion; class LLMotion; @@ -69,19 +69,19 @@ typedef std::shared_ptr<LLTeleportRequest> LLTeleportRequestPtr; enum EAnimRequest { - ANIM_REQUEST_START, - ANIM_REQUEST_STOP + ANIM_REQUEST_START, + ANIM_REQUEST_STOP }; struct LLGroupData { - LLUUID mID; - LLUUID mInsigniaID; - U64 mPowers; - BOOL mAcceptNotices; - BOOL mListInProfile; - S32 mContribution; - std::string mName; + LLUUID mID; + LLUUID mInsigniaID; + U64 mPowers; + BOOL mAcceptNotices; + BOOL mListInProfile; + S32 mContribution; + std::string mName; }; class LLAgentListener; @@ -91,61 +91,61 @@ class LLAgentListener; //------------------------------------------------------------------------ class LLAgent : public LLOldEvents::LLObservable { - LOG_CLASS(LLAgent); + LOG_CLASS(LLAgent); public: - friend class LLAgentDropGroupViewerNode; + friend class LLAgentDropGroupViewerNode; /******************************************************************************** ** ** ** INITIALIZATION **/ - //-------------------------------------------------------------------- - // Constructors / Destructors - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Constructors / Destructors + //-------------------------------------------------------------------- public: - LLAgent(); - virtual ~LLAgent(); - void init(); - void cleanup(); + LLAgent(); + virtual ~LLAgent(); + void init(); + void cleanup(); private: - //-------------------------------------------------------------------- - // Login - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Login + //-------------------------------------------------------------------- public: - void onAppFocusGained(); - void setFirstLogin(bool b); - // Return TRUE if the database reported this login as the first for this particular user. - bool isFirstLogin() const { return mFirstLogin; } - bool isInitialized() const { return mInitialized; } + void onAppFocusGained(); + void setFirstLogin(bool b); + // Return TRUE if the database reported this login as the first for this particular user. + bool isFirstLogin() const { return mFirstLogin; } + bool isInitialized() const { return mInitialized; } void setFeatureVersion(S32 version, S32 flags); S32 getFeatureVersion(); void getFeatureVersionAndFlags(S32 &version, S32 &flags); void showLatestFeatureNotification(const std::string key); public: - std::string mMOTD; // Message of the day + std::string mMOTD; // Message of the day private: - bool mInitialized; - bool mFirstLogin; - std::shared_ptr<LLAgentListener> mListener; + bool mInitialized; + bool mFirstLogin; + std::shared_ptr<LLAgentListener> mListener; - //-------------------------------------------------------------------- - // Session - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Session + //-------------------------------------------------------------------- public: - const LLUUID& getID() const { return gAgentID; } - const LLUUID& getSessionID() const { return gAgentSessionID; } - // Note: NEVER send this value in the clear or over any weakly - // encrypted channel (such as simple XOR masking). If you are unsure - // ask Aaron or MarkL. - const LLUUID& getSecureSessionID() const { return mSecureSessionID; } + const LLUUID& getID() const { return gAgentID; } + const LLUUID& getSessionID() const { return gAgentSessionID; } + // Note: NEVER send this value in the clear or over any weakly + // encrypted channel (such as simple XOR masking). If you are unsure + // ask Aaron or MarkL. + const LLUUID& getSecureSessionID() const { return mSecureSessionID; } public: - LLUUID mSecureSessionID; // Secure token for this login session - + LLUUID mSecureSessionID; // Secure token for this login session + /** Initialization ** ** *******************************************************************************/ @@ -155,24 +155,24 @@ public: ** IDENTITY **/ - //-------------------------------------------------------------------- - // Name - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Name + //-------------------------------------------------------------------- public: - //*TODO remove, is not used as of August 20, 2009 - void buildFullnameAndTitle(std::string &name) const; + //*TODO remove, is not used as of August 20, 2009 + void buildFullnameAndTitle(std::string &name) const; - //-------------------------------------------------------------------- - // Gender - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Gender + //-------------------------------------------------------------------- public: - // On the very first login, outfit needs to be chosen by some - // mechanism, usually by loading the requested initial outfit. We - // don't render the avatar until the choice is made. - BOOL isOutfitChosen() const { return mOutfitChosen; } - void setOutfitChosen(BOOL b) { mOutfitChosen = b; } + // On the very first login, outfit needs to be chosen by some + // mechanism, usually by loading the requested initial outfit. We + // don't render the avatar until the choice is made. + BOOL isOutfitChosen() const { return mOutfitChosen; } + void setOutfitChosen(BOOL b) { mOutfitChosen = b; } private: - BOOL mOutfitChosen; + BOOL mOutfitChosen; /** Identity ** ** @@ -183,148 +183,148 @@ private: ** POSITION **/ - //-------------------------------------------------------------------- - // Position - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Position + //-------------------------------------------------------------------- public: typedef boost::signals2::signal<void(const LLVector3 &position_local, const LLVector3d &position_global)> position_signal_t; - LLVector3 getPosAgentFromGlobal(const LLVector3d &pos_global) const; - LLVector3d getPosGlobalFromAgent(const LLVector3 &pos_agent) const; - const LLVector3d &getPositionGlobal() const; - const LLVector3 &getPositionAgent(); - // Call once per frame to update position, angles (radians). - void updateAgentPosition(const F32 dt, const F32 yaw, const S32 mouse_x, const S32 mouse_y); - void setPositionAgent(const LLVector3 ¢er); + LLVector3 getPosAgentFromGlobal(const LLVector3d &pos_global) const; + LLVector3d getPosGlobalFromAgent(const LLVector3 &pos_agent) const; + const LLVector3d &getPositionGlobal() const; + const LLVector3 &getPositionAgent(); + // Call once per frame to update position, angles (radians). + void updateAgentPosition(const F32 dt, const F32 yaw, const S32 mouse_x, const S32 mouse_y); + void setPositionAgent(const LLVector3 ¢er); boost::signals2::connection whenPositionChanged(position_signal_t::slot_type fn); protected: - void propagate(const F32 dt); // ! BUG ! Should roll into updateAgentPosition + void propagate(const F32 dt); // ! BUG ! Should roll into updateAgentPosition private: - mutable LLVector3d mPositionGlobal; + mutable LLVector3d mPositionGlobal; position_signal_t mOnPositionChanged; LLVector3d mLastTestGlobal; - //-------------------------------------------------------------------- - // Velocity - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Velocity + //-------------------------------------------------------------------- public: - LLVector3 getVelocity() const; - F32 getVelocityZ() const { return getVelocity().mV[VZ]; } // ! HACK ! - - //-------------------------------------------------------------------- - // Coordinate System - //-------------------------------------------------------------------- + LLVector3 getVelocity() const; + F32 getVelocityZ() const { return getVelocity().mV[VZ]; } // ! HACK ! + + //-------------------------------------------------------------------- + // Coordinate System + //-------------------------------------------------------------------- public: - const LLCoordFrame& getFrameAgent() const { return mFrameAgent; } - void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place - void resetAxes(); - void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up - // The following three get*Axis functions return direction avatar is looking, not camera. - const LLVector3& getAtAxis() const { return mFrameAgent.getAtAxis(); } - const LLVector3& getUpAxis() const { return mFrameAgent.getUpAxis(); } - const LLVector3& getLeftAxis() const { return mFrameAgent.getLeftAxis(); } - LLQuaternion getQuat() const; // Returns the quat that represents the rotation of the agent in the absolute frame + const LLCoordFrame& getFrameAgent() const { return mFrameAgent; } + void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place + void resetAxes(); + void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up + // The following three get*Axis functions return direction avatar is looking, not camera. + const LLVector3& getAtAxis() const { return mFrameAgent.getAtAxis(); } + const LLVector3& getUpAxis() const { return mFrameAgent.getUpAxis(); } + const LLVector3& getLeftAxis() const { return mFrameAgent.getLeftAxis(); } + LLQuaternion getQuat() const; // Returns the quat that represents the rotation of the agent in the absolute frame private: - LLVector3d mAgentOriginGlobal; // Origin of agent coords from global coords - LLCoordFrame mFrameAgent; // Agent position and view, agent-region coordinates + LLVector3d mAgentOriginGlobal; // Origin of agent coords from global coords + LLCoordFrame mFrameAgent; // Agent position and view, agent-region coordinates - //-------------------------------------------------------------------- - // Home - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Home + //-------------------------------------------------------------------- public: - void setStartPosition(U32 location_id); // Marks current location as start, sends information to servers - void setHomePosRegion(const U64& region_handle, const LLVector3& pos_region); - BOOL getHomePosGlobal(LLVector3d* pos_global); - bool isInHomeRegion(); + void setStartPosition(U32 location_id); // Marks current location as start, sends information to servers + void setHomePosRegion(const U64& region_handle, const LLVector3& pos_region); + BOOL getHomePosGlobal(LLVector3d* pos_global); + bool isInHomeRegion(); private: void setStartPositionSuccess(const LLSD &result); - BOOL mHaveHomePosition; - U64 mHomeRegionHandle; - LLVector3 mHomePosRegion; + BOOL mHaveHomePosition; + U64 mHomeRegionHandle; + LLVector3 mHomePosRegion; - //-------------------------------------------------------------------- - // Parcel - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Parcel + //-------------------------------------------------------------------- public: - void changeParcels(); // called by LLViewerParcelMgr when we cross a parcel boundary - - // Register a boost callback to be called when the agent changes parcels - typedef boost::function<void()> parcel_changed_callback_t; - boost::signals2::connection addParcelChangedCallback(parcel_changed_callback_t); + void changeParcels(); // called by LLViewerParcelMgr when we cross a parcel boundary + + // Register a boost callback to be called when the agent changes parcels + typedef boost::function<void()> parcel_changed_callback_t; + boost::signals2::connection addParcelChangedCallback(parcel_changed_callback_t); private: - static void capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp); + static void capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp); - typedef boost::signals2::signal<void()> parcel_changed_signal_t; - parcel_changed_signal_t mParcelChangedSignal; + typedef boost::signals2::signal<void()> parcel_changed_signal_t; + parcel_changed_signal_t mParcelChangedSignal; - //-------------------------------------------------------------------- - // Region - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Region + //-------------------------------------------------------------------- public: - void setRegion(LLViewerRegion *regionp); - LLViewerRegion *getRegion() const; - LLHost getRegionHost() const; - BOOL inPrelude(); + void setRegion(LLViewerRegion *regionp); + LLViewerRegion *getRegion() const; + LLHost getRegionHost() const; + BOOL inPrelude(); - // Capability + // Capability std::string getRegionCapability(const std::string &name); // short hand for if (getRegion()) { getRegion()->getCapability(name) } - /** - * Register a boost callback to be called when the agent changes regions - * Note that if you need to access a capability for the region, you may need to wait - * for the capabilities to be received, since in some cases your region changed - * callback will be called before the capabilities have been received. Your callback - * may need to look something like: - * - * LLViewerRegion* region = gAgent.getRegion(); - * if (region->capabilitiesReceived()) - * { - * useCapability(region); - * } - * else // Need to handle via callback after caps arrive. - * { - * region->setCapabilitiesReceivedCallback(boost::bind(&useCapability,region,_1)); - * // you may or may not want to remove that callback - * } - */ - typedef boost::signals2::signal<void()> region_changed_signal_t; - - boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); - void removeRegionChangedCallback(boost::signals2::connection callback); - - - void changeInterestListMode(const std::string & new_mode); + /** + * Register a boost callback to be called when the agent changes regions + * Note that if you need to access a capability for the region, you may need to wait + * for the capabilities to be received, since in some cases your region changed + * callback will be called before the capabilities have been received. Your callback + * may need to look something like: + * + * LLViewerRegion* region = gAgent.getRegion(); + * if (region->capabilitiesReceived()) + * { + * useCapability(region); + * } + * else // Need to handle via callback after caps arrive. + * { + * region->setCapabilitiesReceivedCallback(boost::bind(&useCapability,region,_1)); + * // you may or may not want to remove that callback + * } + */ + typedef boost::signals2::signal<void()> region_changed_signal_t; + + boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); + void removeRegionChangedCallback(boost::signals2::connection callback); + + + void changeInterestListMode(const std::string & new_mode); const std::string & getInterestListMode() const { return mInterestListMode; } private: - LLViewerRegion *mRegionp; - region_changed_signal_t mRegionChangedSignal; + LLViewerRegion *mRegionp; + region_changed_signal_t mRegionChangedSignal; - std::string mInterestListMode; // How agent wants regions to send updates + std::string mInterestListMode; // How agent wants regions to send updates - //-------------------------------------------------------------------- - // History - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // History + //-------------------------------------------------------------------- public: - S32 getRegionsVisited() const; - F64 getDistanceTraveled() const; - void setDistanceTraveled(F64 dist) { mDistanceTraveled = dist; } - - const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; } - void setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; } + S32 getRegionsVisited() const; + F64 getDistanceTraveled() const; + void setDistanceTraveled(F64 dist) { mDistanceTraveled = dist; } + + const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; } + void setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; } private: - std::set<U64> mRegionsVisited; // Stat - what distinct regions has the avatar been to? - F64 mDistanceTraveled; // Stat - how far has the avatar moved? - LLVector3d mLastPositionGlobal; // Used to calculate travel distance - + std::set<U64> mRegionsVisited; // Stat - what distinct regions has the avatar been to? + F64 mDistanceTraveled; // Stat - how far has the avatar moved? + LLVector3d mLastPositionGlobal; // Used to calculate travel distance + /** Position ** ** *******************************************************************************/ @@ -334,192 +334,192 @@ private: ** ACTIONS **/ - //-------------------------------------------------------------------- - // Fidget - //-------------------------------------------------------------------- - // Trigger random fidget animations + //-------------------------------------------------------------------- + // Fidget + //-------------------------------------------------------------------- + // Trigger random fidget animations public: - void fidget(); - static void stopFidget(); + void fidget(); + static void stopFidget(); private: - LLFrameTimer mFidgetTimer; - LLFrameTimer mFocusObjectFadeTimer; - LLFrameTimer mMoveTimer; - F32 mNextFidgetTime; - S32 mCurrentFidget; + LLFrameTimer mFidgetTimer; + LLFrameTimer mFocusObjectFadeTimer; + LLFrameTimer mMoveTimer; + F32 mNextFidgetTime; + S32 mCurrentFidget; - //-------------------------------------------------------------------- - // Fly - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Fly + //-------------------------------------------------------------------- public: - BOOL getFlying() const; - void setFlying(BOOL fly, BOOL fail_sound = FALSE); - static void toggleFlying(); - static bool enableFlying(); - BOOL canFly(); // Does this parcel allow you to fly? - static bool isSitting(); + BOOL getFlying() const; + void setFlying(BOOL fly, BOOL fail_sound = FALSE); + static void toggleFlying(); + static bool enableFlying(); + BOOL canFly(); // Does this parcel allow you to fly? + static bool isSitting(); - //-------------------------------------------------------------------- - // Voice - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Voice + //-------------------------------------------------------------------- public: - bool isVoiceConnected() const { return mVoiceConnected; } - void setVoiceConnected(const bool b) { mVoiceConnected = b; } + bool isVoiceConnected() const { return mVoiceConnected; } + void setVoiceConnected(const bool b) { mVoiceConnected = b; } - static void pressMicrophone(const LLSD& name); - static void releaseMicrophone(const LLSD& name); - static void toggleMicrophone(const LLSD& name); - static bool isMicrophoneOn(const LLSD& sdname); - static bool isActionAllowed(const LLSD& sdname); + static void pressMicrophone(const LLSD& name); + static void releaseMicrophone(const LLSD& name); + static void toggleMicrophone(const LLSD& name); + static bool isMicrophoneOn(const LLSD& sdname); + static bool isActionAllowed(const LLSD& sdname); private: - bool mVoiceConnected; + bool mVoiceConnected; - //-------------------------------------------------------------------- - // Chat - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Chat + //-------------------------------------------------------------------- public: - void heardChat(const LLUUID& id); - F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); } - LLUUID getLastChatter() const { return mLastChatterID; } - F32 getNearChatRadius() { return mNearChatRadius; } + void heardChat(const LLUUID& id); + F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); } + LLUUID getLastChatter() const { return mLastChatterID; } + F32 getNearChatRadius() { return mNearChatRadius; } protected: - void ageChat(); // Helper function to prematurely age chat when agent is moving -private: - LLFrameTimer mChatTimer; - LLUUID mLastChatterID; - F32 mNearChatRadius; - - //-------------------------------------------------------------------- - // Typing - //-------------------------------------------------------------------- -public: - void startTyping(); - void stopTyping(); -public: - // When the agent hasn't typed anything for this duration, it leaves the - // typing state (for both chat and IM). - static const F32 TYPING_TIMEOUT_SECS; -private: - LLFrameTimer mTypingTimer; - - //-------------------------------------------------------------------- - // AFK - //-------------------------------------------------------------------- -public: - void setAFK(); - void clearAFK(); - BOOL getAFK() const; - static const F32 MIN_AFK_TIME; - - //-------------------------------------------------------------------- - // Run - //-------------------------------------------------------------------- -public: - enum EDoubleTapRunMode - { - DOUBLETAP_NONE, - DOUBLETAP_FORWARD, - DOUBLETAP_BACKWARD, - DOUBLETAP_SLIDELEFT, - DOUBLETAP_SLIDERIGHT - }; - - void setAlwaysRun() { mbAlwaysRun = true; } - void clearAlwaysRun() { mbAlwaysRun = false; } - void setRunning() { mbRunning = true; } - void clearRunning() { mbRunning = false; } - void sendWalkRun(bool running); - bool getAlwaysRun() const { return mbAlwaysRun; } - bool getRunning() const { return mbRunning; } -public: - LLFrameTimer mDoubleTapRunTimer; - EDoubleTapRunMode mDoubleTapRunMode; -private: - bool mbAlwaysRun; // Should the avatar run by default rather than walk? - bool mbRunning; // Is the avatar trying to run right now? - bool mbTeleportKeepsLookAt; // Try to keep look-at after teleport is complete - - //-------------------------------------------------------------------- - // Sit and stand - //-------------------------------------------------------------------- -public: - void standUp(); - /// @brief ground-sit at agent's current position - void sitDown(); - - //-------------------------------------------------------------------- - // Do Not Disturb - //-------------------------------------------------------------------- -public: - void setDoNotDisturb(bool pIsDoNotDisturb); - bool isDoNotDisturb() const; -private: - bool mIsDoNotDisturb; - - //-------------------------------------------------------------------- - // Grab - //-------------------------------------------------------------------- -public: - BOOL leftButtonGrabbed() const; - BOOL rotateGrabbed() const; - BOOL forwardGrabbed() const; - BOOL backwardGrabbed() const; - BOOL upGrabbed() const; - BOOL downGrabbed() const; - - //-------------------------------------------------------------------- - // Controls - //-------------------------------------------------------------------- -public: - U32 getControlFlags(); - void setControlFlags(U32 mask); // Performs bitwise mControlFlags |= mask - void clearControlFlags(U32 mask); // Performs bitwise mControlFlags &= ~mask - BOOL controlFlagsDirty() const; - void enableControlFlagReset(); - void resetControlFlags(); - BOOL anyControlGrabbed() const; // True iff a script has taken over a control - BOOL isControlGrabbed(S32 control_index) const; - // Send message to simulator to force grabbed controls to be - // released, in case of a poorly written script. - void forceReleaseControls(); - void setFlagsDirty() { mbFlagsDirty = TRUE; } - -private: - S32 mControlsTakenCount[TOTAL_CONTROLS]; - S32 mControlsTakenPassedOnCount[TOTAL_CONTROLS]; - U32 mControlFlags; // Replacement for the mFooKey's - BOOL mbFlagsDirty; - BOOL mbFlagsNeedReset; // ! HACK ! For preventing incorrect flags sent when crossing region boundaries - - //-------------------------------------------------------------------- - // Animations - //-------------------------------------------------------------------- -public: - void stopCurrentAnimations(); - void requestStopMotion(LLMotion* motion); - void onAnimStop(const LLUUID& id); - void sendAnimationRequests(const std::vector<LLUUID> &anim_ids, EAnimRequest request); - void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request); - void sendAnimationStateReset(); - void sendRevokePermissions(const LLUUID & target, U32 permissions); - - void endAnimationUpdateUI(); - void unpauseAnimation() { mPauseRequest = NULL; } - BOOL getCustomAnim() const { return mCustomAnim; } - void setCustomAnim(BOOL anim) { mCustomAnim = anim; } - - typedef boost::signals2::signal<void ()> camera_signal_t; - boost::signals2::connection setMouselookModeInCallback( const camera_signal_t::slot_type& cb ); - boost::signals2::connection setMouselookModeOutCallback( const camera_signal_t::slot_type& cb ); - -private: - camera_signal_t* mMouselookModeInSignal; - camera_signal_t* mMouselookModeOutSignal; - BOOL mCustomAnim; // Current animation is ANIM_AGENT_CUSTOMIZE ? - LLPointer<LLPauseRequestHandle> mPauseRequest; - BOOL mViewsPushed; // Keep track of whether or not we have pushed views - + void ageChat(); // Helper function to prematurely age chat when agent is moving +private: + LLFrameTimer mChatTimer; + LLUUID mLastChatterID; + F32 mNearChatRadius; + + //-------------------------------------------------------------------- + // Typing + //-------------------------------------------------------------------- +public: + void startTyping(); + void stopTyping(); +public: + // When the agent hasn't typed anything for this duration, it leaves the + // typing state (for both chat and IM). + static const F32 TYPING_TIMEOUT_SECS; +private: + LLFrameTimer mTypingTimer; + + //-------------------------------------------------------------------- + // AFK + //-------------------------------------------------------------------- +public: + void setAFK(); + void clearAFK(); + BOOL getAFK() const; + static const F32 MIN_AFK_TIME; + + //-------------------------------------------------------------------- + // Run + //-------------------------------------------------------------------- +public: + enum EDoubleTapRunMode + { + DOUBLETAP_NONE, + DOUBLETAP_FORWARD, + DOUBLETAP_BACKWARD, + DOUBLETAP_SLIDELEFT, + DOUBLETAP_SLIDERIGHT + }; + + void setAlwaysRun() { mbAlwaysRun = true; } + void clearAlwaysRun() { mbAlwaysRun = false; } + void setRunning() { mbRunning = true; } + void clearRunning() { mbRunning = false; } + void sendWalkRun(bool running); + bool getAlwaysRun() const { return mbAlwaysRun; } + bool getRunning() const { return mbRunning; } +public: + LLFrameTimer mDoubleTapRunTimer; + EDoubleTapRunMode mDoubleTapRunMode; +private: + bool mbAlwaysRun; // Should the avatar run by default rather than walk? + bool mbRunning; // Is the avatar trying to run right now? + bool mbTeleportKeepsLookAt; // Try to keep look-at after teleport is complete + + //-------------------------------------------------------------------- + // Sit and stand + //-------------------------------------------------------------------- +public: + void standUp(); + /// @brief ground-sit at agent's current position + void sitDown(); + + //-------------------------------------------------------------------- + // Do Not Disturb + //-------------------------------------------------------------------- +public: + void setDoNotDisturb(bool pIsDoNotDisturb); + bool isDoNotDisturb() const; +private: + bool mIsDoNotDisturb; + + //-------------------------------------------------------------------- + // Grab + //-------------------------------------------------------------------- +public: + BOOL leftButtonGrabbed() const; + BOOL rotateGrabbed() const; + BOOL forwardGrabbed() const; + BOOL backwardGrabbed() const; + BOOL upGrabbed() const; + BOOL downGrabbed() const; + + //-------------------------------------------------------------------- + // Controls + //-------------------------------------------------------------------- +public: + U32 getControlFlags(); + void setControlFlags(U32 mask); // Performs bitwise mControlFlags |= mask + void clearControlFlags(U32 mask); // Performs bitwise mControlFlags &= ~mask + BOOL controlFlagsDirty() const; + void enableControlFlagReset(); + void resetControlFlags(); + BOOL anyControlGrabbed() const; // True iff a script has taken over a control + BOOL isControlGrabbed(S32 control_index) const; + // Send message to simulator to force grabbed controls to be + // released, in case of a poorly written script. + void forceReleaseControls(); + void setFlagsDirty() { mbFlagsDirty = TRUE; } + +private: + S32 mControlsTakenCount[TOTAL_CONTROLS]; + S32 mControlsTakenPassedOnCount[TOTAL_CONTROLS]; + U32 mControlFlags; // Replacement for the mFooKey's + BOOL mbFlagsDirty; + BOOL mbFlagsNeedReset; // ! HACK ! For preventing incorrect flags sent when crossing region boundaries + + //-------------------------------------------------------------------- + // Animations + //-------------------------------------------------------------------- +public: + void stopCurrentAnimations(); + void requestStopMotion(LLMotion* motion); + void onAnimStop(const LLUUID& id); + void sendAnimationRequests(const std::vector<LLUUID> &anim_ids, EAnimRequest request); + void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request); + void sendAnimationStateReset(); + void sendRevokePermissions(const LLUUID & target, U32 permissions); + + void endAnimationUpdateUI(); + void unpauseAnimation() { mPauseRequest = NULL; } + BOOL getCustomAnim() const { return mCustomAnim; } + void setCustomAnim(BOOL anim) { mCustomAnim = anim; } + + typedef boost::signals2::signal<void ()> camera_signal_t; + boost::signals2::connection setMouselookModeInCallback( const camera_signal_t::slot_type& cb ); + boost::signals2::connection setMouselookModeOutCallback( const camera_signal_t::slot_type& cb ); + +private: + camera_signal_t* mMouselookModeInSignal; + camera_signal_t* mMouselookModeOutSignal; + BOOL mCustomAnim; // Current animation is ANIM_AGENT_CUSTOMIZE ? + LLPointer<LLPauseRequestHandle> mPauseRequest; + BOOL mViewsPushed; // Keep track of whether or not we have pushed views + /** Animation ** ** *******************************************************************************/ @@ -529,79 +529,79 @@ private: ** MOVEMENT **/ - //-------------------------------------------------------------------- - // Movement from user input - //-------------------------------------------------------------------- - // All set the appropriate animation flags. - // All turn off autopilot and make sure the camera is behind the avatar. - // Direction is either positive, zero, or negative -public: - void moveAt(S32 direction, bool reset_view = true); - void moveAtNudge(S32 direction); - void moveLeft(S32 direction); - void moveLeftNudge(S32 direction); - void moveUp(S32 direction); - void moveYaw(F32 mag, bool reset_view = true); - void movePitch(F32 mag); - - BOOL isMovementLocked() const { return mMovementKeysLocked; } - void setMovementLocked(BOOL set_locked) { mMovementKeysLocked = set_locked; } - - //-------------------------------------------------------------------- - // Move the avatar's frame - //-------------------------------------------------------------------- -public: - void rotate(F32 angle, const LLVector3 &axis); - void rotate(F32 angle, F32 x, F32 y, F32 z); - void rotate(const LLMatrix3 &matrix); - void rotate(const LLQuaternion &quaternion); - void pitch(F32 angle); - void roll(F32 angle); - void yaw(F32 angle); - LLVector3 getReferenceUpVector(); - - //-------------------------------------------------------------------- - // Autopilot - //-------------------------------------------------------------------- -public: - BOOL getAutoPilot() const { return mAutoPilot; } - LLVector3d getAutoPilotTargetGlobal() const { return mAutoPilotTargetGlobal; } - LLUUID getAutoPilotLeaderID() const { return mLeaderID; } - F32 getAutoPilotStopDistance() const { return mAutoPilotStopDistance; } - F32 getAutoPilotTargetDist() const { return mAutoPilotTargetDist; } - BOOL getAutoPilotUseRotation() const { return mAutoPilotUseRotation; } - LLVector3 getAutoPilotTargetFacing() const { return mAutoPilotTargetFacing; } - F32 getAutoPilotRotationThreshold() const { return mAutoPilotRotationThreshold; } - std::string getAutoPilotBehaviorName() const { return mAutoPilotBehaviorName; } - - void startAutoPilotGlobal(const LLVector3d &pos_global, - const std::string& behavior_name = std::string(), - const LLQuaternion *target_rotation = NULL, - void (*finish_callback)(BOOL, void *) = NULL, void *callback_data = NULL, - F32 stop_distance = 0.f, F32 rotation_threshold = 0.03f, - BOOL allow_flying = TRUE); - void startFollowPilot(const LLUUID &leader_id, BOOL allow_flying = TRUE, F32 stop_distance = 0.5f); - void stopAutoPilot(BOOL user_cancel = FALSE); - void setAutoPilotTargetGlobal(const LLVector3d &target_global); - void autoPilot(F32 *delta_yaw); // Autopilot walking action, angles in radians - void renderAutoPilotTarget(); -private: - BOOL mAutoPilot; - BOOL mAutoPilotFlyOnStop; - BOOL mAutoPilotAllowFlying; - LLVector3d mAutoPilotTargetGlobal; - F32 mAutoPilotStopDistance; - BOOL mAutoPilotUseRotation; - LLVector3 mAutoPilotTargetFacing; - F32 mAutoPilotTargetDist; - S32 mAutoPilotNoProgressFrameCount; - F32 mAutoPilotRotationThreshold; - std::string mAutoPilotBehaviorName; - void (*mAutoPilotFinishedCallback)(BOOL, void *); - void* mAutoPilotCallbackData; - LLUUID mLeaderID; - BOOL mMovementKeysLocked; - + //-------------------------------------------------------------------- + // Movement from user input + //-------------------------------------------------------------------- + // All set the appropriate animation flags. + // All turn off autopilot and make sure the camera is behind the avatar. + // Direction is either positive, zero, or negative +public: + void moveAt(S32 direction, bool reset_view = true); + void moveAtNudge(S32 direction); + void moveLeft(S32 direction); + void moveLeftNudge(S32 direction); + void moveUp(S32 direction); + void moveYaw(F32 mag, bool reset_view = true); + void movePitch(F32 mag); + + BOOL isMovementLocked() const { return mMovementKeysLocked; } + void setMovementLocked(BOOL set_locked) { mMovementKeysLocked = set_locked; } + + //-------------------------------------------------------------------- + // Move the avatar's frame + //-------------------------------------------------------------------- +public: + void rotate(F32 angle, const LLVector3 &axis); + void rotate(F32 angle, F32 x, F32 y, F32 z); + void rotate(const LLMatrix3 &matrix); + void rotate(const LLQuaternion &quaternion); + void pitch(F32 angle); + void roll(F32 angle); + void yaw(F32 angle); + LLVector3 getReferenceUpVector(); + + //-------------------------------------------------------------------- + // Autopilot + //-------------------------------------------------------------------- +public: + BOOL getAutoPilot() const { return mAutoPilot; } + LLVector3d getAutoPilotTargetGlobal() const { return mAutoPilotTargetGlobal; } + LLUUID getAutoPilotLeaderID() const { return mLeaderID; } + F32 getAutoPilotStopDistance() const { return mAutoPilotStopDistance; } + F32 getAutoPilotTargetDist() const { return mAutoPilotTargetDist; } + BOOL getAutoPilotUseRotation() const { return mAutoPilotUseRotation; } + LLVector3 getAutoPilotTargetFacing() const { return mAutoPilotTargetFacing; } + F32 getAutoPilotRotationThreshold() const { return mAutoPilotRotationThreshold; } + std::string getAutoPilotBehaviorName() const { return mAutoPilotBehaviorName; } + + void startAutoPilotGlobal(const LLVector3d &pos_global, + const std::string& behavior_name = std::string(), + const LLQuaternion *target_rotation = NULL, + void (*finish_callback)(BOOL, void *) = NULL, void *callback_data = NULL, + F32 stop_distance = 0.f, F32 rotation_threshold = 0.03f, + BOOL allow_flying = TRUE); + void startFollowPilot(const LLUUID &leader_id, BOOL allow_flying = TRUE, F32 stop_distance = 0.5f); + void stopAutoPilot(BOOL user_cancel = FALSE); + void setAutoPilotTargetGlobal(const LLVector3d &target_global); + void autoPilot(F32 *delta_yaw); // Autopilot walking action, angles in radians + void renderAutoPilotTarget(); +private: + BOOL mAutoPilot; + BOOL mAutoPilotFlyOnStop; + BOOL mAutoPilotAllowFlying; + LLVector3d mAutoPilotTargetGlobal; + F32 mAutoPilotStopDistance; + BOOL mAutoPilotUseRotation; + LLVector3 mAutoPilotTargetFacing; + F32 mAutoPilotTargetDist; + S32 mAutoPilotNoProgressFrameCount; + F32 mAutoPilotRotationThreshold; + std::string mAutoPilotBehaviorName; + void (*mAutoPilotFinishedCallback)(BOOL, void *); + void* mAutoPilotCallbackData; + LLUUID mLeaderID; + BOOL mMovementKeysLocked; + /** Movement ** ** *******************************************************************************/ @@ -612,122 +612,122 @@ private: **/ public: - enum ETeleportState - { - TELEPORT_NONE = 0, // No teleport in progress - TELEPORT_START = 1, // Transition to REQUESTED. Viewer has sent a TeleportRequest to the source simulator - TELEPORT_REQUESTED = 2, // Waiting for source simulator to respond - TELEPORT_MOVING = 3, // Viewer has received destination location from source simulator - TELEPORT_START_ARRIVAL = 4, // Transition to ARRIVING. Viewer has received avatar update, etc., from destination simulator - TELEPORT_ARRIVING = 5, // Make the user wait while content "pre-caches" - TELEPORT_LOCAL = 6, // Teleporting in-sim without showing the progress screen - TELEPORT_PENDING = 7 - }; + enum ETeleportState + { + TELEPORT_NONE = 0, // No teleport in progress + TELEPORT_START = 1, // Transition to REQUESTED. Viewer has sent a TeleportRequest to the source simulator + TELEPORT_REQUESTED = 2, // Waiting for source simulator to respond + TELEPORT_MOVING = 3, // Viewer has received destination location from source simulator + TELEPORT_START_ARRIVAL = 4, // Transition to ARRIVING. Viewer has received avatar update, etc., from destination simulator + TELEPORT_ARRIVING = 5, // Make the user wait while content "pre-caches" + TELEPORT_LOCAL = 6, // Teleporting in-sim without showing the progress screen + TELEPORT_PENDING = 7 + }; - static std::map<S32, std::string> sTeleportStateName; - static const std::string& teleportStateName(S32); - const std::string& getTeleportStateName() const; + static std::map<S32, std::string> sTeleportStateName; + static const std::string& teleportStateName(S32); + const std::string& getTeleportStateName() const; public: - static void parseTeleportMessages(const std::string& xml_filename); - const void getTeleportSourceSLURL(LLSLURL& slurl) const; + static void parseTeleportMessages(const std::string& xml_filename); + const void getTeleportSourceSLURL(LLSLURL& slurl) const; public: - // ! TODO ! Define ERROR and PROGRESS enums here instead of exposing the mappings. - static std::map<std::string, std::string> sTeleportErrorMessages; - static std::map<std::string, std::string> sTeleportProgressMessages; + // ! TODO ! Define ERROR and PROGRESS enums here instead of exposing the mappings. + static std::map<std::string, std::string> sTeleportErrorMessages; + static std::map<std::string, std::string> sTeleportProgressMessages; private: - LLSLURL * mTeleportSourceSLURL; // SLURL where last TP began + LLSLURL * mTeleportSourceSLURL; // SLURL where last TP began - //-------------------------------------------------------------------- - // Teleport Actions - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Teleport Actions + //-------------------------------------------------------------------- public: - void teleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark - void teleportHome() { teleportViaLandmark(LLUUID::null); } // Go home - void teleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location - void teleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated - void teleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation - void teleportCancel(); // May or may not be allowed by server + void teleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark + void teleportHome() { teleportViaLandmark(LLUUID::null); } // Go home + void teleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location + void teleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated + void teleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation + void teleportCancel(); // May or may not be allowed by server void restoreCanceledTeleportRequest(); - bool canRestoreCanceledTeleport() { return mTeleportCanceled != NULL; } - bool getTeleportKeepsLookAt() { return mbTeleportKeepsLookAt; } // Whether look-at reset after teleport + bool canRestoreCanceledTeleport() { return mTeleportCanceled != NULL; } + bool getTeleportKeepsLookAt() { return mbTeleportKeepsLookAt; } // Whether look-at reset after teleport protected: - bool teleportCore(bool is_local = false); // Stuff for all teleports; returns true if the teleport can proceed + bool teleportCore(bool is_local = false); // Stuff for all teleports; returns true if the teleport can proceed - //-------------------------------------------------------------------- - // Teleport State - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Teleport State + //-------------------------------------------------------------------- public: - bool hasRestartableFailedTeleportRequest(); - void restartFailedTeleportRequest(); - void clearTeleportRequest(); - void setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange); - void sheduleTeleportIM(); + bool hasRestartableFailedTeleportRequest(); + void restartFailedTeleportRequest(); + void clearTeleportRequest(); + void setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange); + void sheduleTeleportIM(); private: - friend class LLTeleportRequest; - friend class LLTeleportRequestViaLandmark; - friend class LLTeleportRequestViaLure; - friend class LLTeleportRequestViaLocation; - friend class LLTeleportRequestViaLocationLookAt; + friend class LLTeleportRequest; + friend class LLTeleportRequestViaLandmark; + friend class LLTeleportRequestViaLure; + friend class LLTeleportRequestViaLocation; + friend class LLTeleportRequestViaLocationLookAt; - LLTeleportRequestPtr mTeleportRequest; - LLTeleportRequestPtr mTeleportCanceled; - boost::signals2::connection mTeleportFinishedSlot; - boost::signals2::connection mTeleportFailedSlot; + LLTeleportRequestPtr mTeleportRequest; + LLTeleportRequestPtr mTeleportCanceled; + boost::signals2::connection mTeleportFinishedSlot; + boost::signals2::connection mTeleportFailedSlot; - bool mIsMaturityRatingChangingDuringTeleport; - bool mTPNeedsNeabyChatSeparator; - U8 mMaturityRatingChange; + bool mIsMaturityRatingChangingDuringTeleport; + bool mTPNeedsNeabyChatSeparator; + U8 mMaturityRatingChange; - bool hasPendingTeleportRequest(); - void startTeleportRequest(); + bool hasPendingTeleportRequest(); + void startTeleportRequest(); - void teleportRequest(const U64& region_handle, - const LLVector3& pos_local, // Go to a named location home - bool look_at_from_camera = false); - void doTeleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark - void doTeleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location - void doTeleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated - void doTeleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation + void teleportRequest(const U64& region_handle, + const LLVector3& pos_local, // Go to a named location home + bool look_at_from_camera = false); + void doTeleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark + void doTeleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location + void doTeleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated + void doTeleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation - void handleTeleportFinished(); - void handleTeleportFailed(); + void handleTeleportFinished(); + void handleTeleportFailed(); static void addTPNearbyChatSeparator(); static void onCapabilitiesReceivedAfterTeleport(); - //-------------------------------------------------------------------- - // Teleport State - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Teleport State + //-------------------------------------------------------------------- public: - ETeleportState getTeleportState() const; - void setTeleportState(ETeleportState state); + ETeleportState getTeleportState() const; + void setTeleportState(ETeleportState state); private: - ETeleportState mTeleportState; + ETeleportState mTeleportState; - //-------------------------------------------------------------------- - // Teleport Message - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Teleport Message + //-------------------------------------------------------------------- public: - const std::string& getTeleportMessage() const { return mTeleportMessage; } - void setTeleportMessage(const std::string& message) { mTeleportMessage = message; } + const std::string& getTeleportMessage() const { return mTeleportMessage; } + void setTeleportMessage(const std::string& message) { mTeleportMessage = message; } private: - std::string mTeleportMessage; - + std::string mTeleportMessage; + /** Teleport ** ** *******************************************************************************/ - // Build + // Build public: - bool canEditParcel() const { return mCanEditParcel; } + bool canEditParcel() const { return mCanEditParcel; } private: - static void setCanEditParcel(); - bool mCanEditParcel; + static void setCanEditParcel(); + bool mCanEditParcel; @@ -737,83 +737,83 @@ private: **/ public: - // Checks if agent can modify an object based on the permissions and the agent's proxy status. - BOOL isGrantedProxy(const LLPermissions& perm); - BOOL allowOperation(PermissionBit op, - const LLPermissions& perm, - U64 group_proxy_power = 0, - U8 god_minimum = GOD_MAINTENANCE); - const LLAgentAccess& getAgentAccess(); - BOOL canManageEstate() const; - BOOL getAdminOverride() const; -private: - LLAgentAccess * mAgentAccess; - - //-------------------------------------------------------------------- - // God - //-------------------------------------------------------------------- -public: - bool isGodlike() const; - bool isGodlikeWithoutAdminMenuFakery() const; - U8 getGodLevel() const; - void setAdminOverride(BOOL b); - void setGodLevel(U8 god_level); - void requestEnterGodMode(); - void requestLeaveGodMode(); - - typedef boost::function<void (U8)> god_level_change_callback_t; - typedef boost::signals2::signal<void (U8)> god_level_change_signal_t; - typedef boost::signals2::connection god_level_change_slot_t; - - god_level_change_slot_t registerGodLevelChanageListener(god_level_change_callback_t pGodLevelChangeCallback); - -private: - god_level_change_signal_t mGodLevelChangeSignal; - - - //-------------------------------------------------------------------- - // Maturity - //-------------------------------------------------------------------- -public: - // Note: this is a prime candidate for pulling out into a Maturity class. - // Rather than just expose the preference setting, we're going to actually - // expose what the client code cares about -- what the user should see - // based on a combination of the is* and prefers* flags, combined with god bit. - bool wantsPGOnly() const; - bool canAccessMature() const; - bool canAccessAdult() const; - bool canAccessMaturityInRegion( U64 region_handle ) const; - bool canAccessMaturityAtGlobal( LLVector3d pos_global ) const; - bool prefersPG() const; - bool prefersMature() const; - bool prefersAdult() const; - bool isTeen() const; - bool isMature() const; - bool isAdult() const; - void setMaturity(char text); - static int convertTextToMaturity(char text); - -private: - bool mIsDoSendMaturityPreferenceToServer; - unsigned int mMaturityPreferenceRequestId; - unsigned int mMaturityPreferenceResponseId; - unsigned int mMaturityPreferenceNumRetries; - U8 mLastKnownRequestMaturity; - U8 mLastKnownResponseMaturity; - LLCore::HttpRequest::policy_t mHttpPolicy; - - bool isMaturityPreferenceSyncedWithServer() const; - void sendMaturityPreferenceToServer(U8 pPreferredMaturity); + // Checks if agent can modify an object based on the permissions and the agent's proxy status. + BOOL isGrantedProxy(const LLPermissions& perm); + BOOL allowOperation(PermissionBit op, + const LLPermissions& perm, + U64 group_proxy_power = 0, + U8 god_minimum = GOD_MAINTENANCE); + const LLAgentAccess& getAgentAccess(); + BOOL canManageEstate() const; + BOOL getAdminOverride() const; +private: + LLAgentAccess * mAgentAccess; + + //-------------------------------------------------------------------- + // God + //-------------------------------------------------------------------- +public: + bool isGodlike() const; + bool isGodlikeWithoutAdminMenuFakery() const; + U8 getGodLevel() const; + void setAdminOverride(BOOL b); + void setGodLevel(U8 god_level); + void requestEnterGodMode(); + void requestLeaveGodMode(); + + typedef boost::function<void (U8)> god_level_change_callback_t; + typedef boost::signals2::signal<void (U8)> god_level_change_signal_t; + typedef boost::signals2::connection god_level_change_slot_t; + + god_level_change_slot_t registerGodLevelChanageListener(god_level_change_callback_t pGodLevelChangeCallback); + +private: + god_level_change_signal_t mGodLevelChangeSignal; + + + //-------------------------------------------------------------------- + // Maturity + //-------------------------------------------------------------------- +public: + // Note: this is a prime candidate for pulling out into a Maturity class. + // Rather than just expose the preference setting, we're going to actually + // expose what the client code cares about -- what the user should see + // based on a combination of the is* and prefers* flags, combined with god bit. + bool wantsPGOnly() const; + bool canAccessMature() const; + bool canAccessAdult() const; + bool canAccessMaturityInRegion( U64 region_handle ) const; + bool canAccessMaturityAtGlobal( LLVector3d pos_global ) const; + bool prefersPG() const; + bool prefersMature() const; + bool prefersAdult() const; + bool isTeen() const; + bool isMature() const; + bool isAdult() const; + void setMaturity(char text); + static int convertTextToMaturity(char text); + +private: + bool mIsDoSendMaturityPreferenceToServer; + unsigned int mMaturityPreferenceRequestId; + unsigned int mMaturityPreferenceResponseId; + unsigned int mMaturityPreferenceNumRetries; + U8 mLastKnownRequestMaturity; + U8 mLastKnownResponseMaturity; + LLCore::HttpRequest::policy_t mHttpPolicy; + + bool isMaturityPreferenceSyncedWithServer() const; + void sendMaturityPreferenceToServer(U8 pPreferredMaturity); void processMaturityPreferenceFromServer(const LLSD &result, U8 perferredMaturity); - void handlePreferredMaturityResult(U8 pServerMaturity); - void handlePreferredMaturityError(); - void reportPreferredMaturitySuccess(); - void reportPreferredMaturityError(); + void handlePreferredMaturityResult(U8 pServerMaturity); + void handlePreferredMaturityError(); + void reportPreferredMaturitySuccess(); + void reportPreferredMaturityError(); - // Maturity callbacks for PreferredMaturity control variable - void handleMaturity(const LLSD &pNewValue); - bool validateMaturity(const LLSD& newvalue); + // Maturity callbacks for PreferredMaturity control variable + void handleMaturity(const LLSD &pNewValue); + bool validateMaturity(const LLSD& newvalue); /** Access @@ -826,33 +826,33 @@ private: **/ public: - LLQuaternion getHeadRotation(); - BOOL needsRenderAvatar(); // TRUE when camera mode is such that your own avatar should draw - BOOL needsRenderHead(); - void setShowAvatar(BOOL show) { mShowAvatar = show; } - BOOL getShowAvatar() const { return mShowAvatar; } - + LLQuaternion getHeadRotation(); + BOOL needsRenderAvatar(); // TRUE when camera mode is such that your own avatar should draw + BOOL needsRenderHead(); + void setShowAvatar(BOOL show) { mShowAvatar = show; } + BOOL getShowAvatar() const { return mShowAvatar; } + private: - BOOL mShowAvatar; // Should we render the avatar? + BOOL mShowAvatar; // Should we render the avatar? - //-------------------------------------------------------------------- - // Rendering state bitmap helpers - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Rendering state bitmap helpers + //-------------------------------------------------------------------- public: - void setRenderState(U8 newstate); - void clearRenderState(U8 clearstate); - U8 getRenderState(); + void setRenderState(U8 newstate); + void clearRenderState(U8 clearstate); + U8 getRenderState(); private: - U8 mRenderState; // Current behavior state of agent + U8 mRenderState; // Current behavior state of agent - //-------------------------------------------------------------------- - // HUD - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // HUD + //-------------------------------------------------------------------- public: - const LLColor4 &getEffectColor(); - void setEffectColor(const LLColor4 &color); + const LLColor4 &getEffectColor(); + void setEffectColor(const LLColor4 &color); private: - LLUIColor * mEffectColor; + LLUIColor * mEffectColor; /** Rendering ** ** @@ -864,60 +864,60 @@ private: **/ public: - const LLUUID &getGroupID() const { return mGroupID; } - // Get group information by group_id, or FALSE if not in group. - BOOL getGroupData(const LLUUID& group_id, LLGroupData& data) const; - // Get just the agent's contribution to the given group. - S32 getGroupContribution(const LLUUID& group_id) const; - // Update internal datastructures and update the server. - BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); - BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); - const std::string &getGroupName() const { return mGroupName; } - BOOL canJoinGroups() const; + const LLUUID &getGroupID() const { return mGroupID; } + // Get group information by group_id, or FALSE if not in group. + BOOL getGroupData(const LLUUID& group_id, LLGroupData& data) const; + // Get just the agent's contribution to the given group. + S32 getGroupContribution(const LLUUID& group_id) const; + // Update internal datastructures and update the server. + BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); + BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); + const std::string &getGroupName() const { return mGroupName; } + BOOL canJoinGroups() const; private: - std::string mGroupName; - LLUUID mGroupID; + std::string mGroupName; + LLUUID mGroupID; - //-------------------------------------------------------------------- - // Group Membership - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Group Membership + //-------------------------------------------------------------------- public: - // Checks against all groups in the entire agent group list. - BOOL isInGroup(const LLUUID& group_id, BOOL ingnore_God_mod = FALSE) const; + // Checks against all groups in the entire agent group list. + BOOL isInGroup(const LLUUID& group_id, BOOL ingnore_God_mod = FALSE) const; protected: - // Only used for building titles. - BOOL isGroupMember() const { return !mGroupID.isNull(); } + // Only used for building titles. + BOOL isGroupMember() const { return !mGroupID.isNull(); } public: - std::vector<LLGroupData> mGroups; + std::vector<LLGroupData> mGroups; - //-------------------------------------------------------------------- - // Group Title - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Group Title + //-------------------------------------------------------------------- public: - void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; } - BOOL isGroupTitleHidden() const { return mHideGroupTitle; } + void setHideGroupTitle(BOOL hide) { mHideGroupTitle = hide; } + BOOL isGroupTitleHidden() const { return mHideGroupTitle; } private: - std::string mGroupTitle; // Honorific, like "Sir" - BOOL mHideGroupTitle; + std::string mGroupTitle; // Honorific, like "Sir" + BOOL mHideGroupTitle; - //-------------------------------------------------------------------- - // Group Powers - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Group Powers + //-------------------------------------------------------------------- public: - BOOL hasPowerInGroup(const LLUUID& group_id, U64 power) const; - BOOL hasPowerInActiveGroup(const U64 power) const; - U64 getPowerInGroup(const LLUUID& group_id) const; - U64 mGroupPowers; + BOOL hasPowerInGroup(const LLUUID& group_id, U64 power) const; + BOOL hasPowerInActiveGroup(const U64 power) const; + U64 getPowerInGroup(const LLUUID& group_id) const; + U64 mGroupPowers; - //-------------------------------------------------------------------- - // Friends - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Friends + //-------------------------------------------------------------------- public: - void observeFriends(); - void friendsChanged(); + void observeFriends(); + void friendsChanged(); private: - LLFriendObserver* mFriendObserver; - std::set<LLUUID> mProxyForAgents; + LLFriendObserver* mFriendObserver; + std::set<LLUUID> mProxyForAgents; /** Groups ** ** @@ -928,34 +928,34 @@ private: ** MESSAGING **/ - //-------------------------------------------------------------------- - // Send - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Send + //-------------------------------------------------------------------- public: - void sendMessage(); // Send message to this agent's region - void sendReliableMessage(); - void sendAgentDataUpdateRequest(); - void sendAgentUserInfoRequest(); + void sendMessage(); // Send message to this agent's region + void sendReliableMessage(); + void sendAgentDataUpdateRequest(); + void sendAgentUserInfoRequest(); // IM to Email and Online visibility - void sendAgentUpdateUserInfo(const std::string& directory_visibility); + void sendAgentUpdateUserInfo(const std::string& directory_visibility); private: void requestAgentUserInfoCoro(std::string capurl); void updateAgentUserInfoCoro(std::string capurl, std::string directory_visibility); - // DEPRECATED: may be removed when User Info cap propagates - void sendAgentUserInfoRequestMessage(); + // DEPRECATED: may be removed when User Info cap propagates + void sendAgentUserInfoRequestMessage(); void sendAgentUpdateUserInfoMessage(const std::string& directory_visibility); - //-------------------------------------------------------------------- - // Receive - //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Receive + //-------------------------------------------------------------------- public: - static void processAgentDataUpdate(LLMessageSystem *msg, void **); - static void processAgentGroupDataUpdate(LLMessageSystem *msg, void **); - static void processAgentDropGroup(LLMessageSystem *msg, void **); - static void processScriptControlChange(LLMessageSystem *msg, void **); - + static void processAgentDataUpdate(LLMessageSystem *msg, void **); + static void processAgentGroupDataUpdate(LLMessageSystem *msg, void **); + static void processAgentDropGroup(LLMessageSystem *msg, void **); + static void processScriptControlChange(LLMessageSystem *msg, void **); + /** Messaging ** ** *******************************************************************************/ @@ -967,8 +967,8 @@ public: public: typedef LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t httpCallback_t; - /// Utilities for allowing the the agent sub managers to post and get via - /// HTTP using the agent's policy settings and headers. + /// Utilities for allowing the the agent sub managers to post and get via + /// HTTP using the agent's policy settings and headers. bool requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); @@ -984,9 +984,9 @@ public: **/ public: - static void dumpGroupInfo(); - static void clearVisualParams(void *); - friend std::ostream& operator<<(std::ostream &s, const LLAgent &sphere); + static void dumpGroupInfo(); + static void clearVisualParams(void *); + friend std::ostream& operator<<(std::ostream &s, const LLAgent &sphere); /** Debugging ** ** @@ -998,7 +998,7 @@ extern LLAgent gAgent; inline bool operator==(const LLGroupData &a, const LLGroupData &b) { - return (a.mID == b.mID); + return (a.mID == b.mID); } #endif |