Merge branch 'master' of git://github.com/AlericInglewood/SingularityViewer
This commit is contained in:
@@ -239,12 +239,15 @@ protected:
|
||||
// A list of all audio sources that are known to the viewer at this time.
|
||||
// This is most likely a superset of the ones that we actually have audio
|
||||
// data for, or are playing back.
|
||||
public://Jay: IDGAF
|
||||
typedef std::map<LLUUID, LLAudioSource *> source_map;
|
||||
protected:
|
||||
typedef std::map<LLUUID, LLAudioData *> data_map;
|
||||
|
||||
|
||||
public://Jay: IDGAF
|
||||
source_map mAllSources;
|
||||
protected:
|
||||
data_map mAllData;
|
||||
|
||||
LLAudioChannel *mChannels[MAX_CHANNELS];
|
||||
|
||||
// Buffers needs to change into a different data structure, as the number of buffers
|
||||
@@ -351,6 +354,9 @@ public:
|
||||
protected:
|
||||
LLUUID mID; // The ID of the source is that of the object if it's attached to an object.
|
||||
LLUUID mOwnerID; // owner of the object playing the sound
|
||||
public:
|
||||
const LLUUID &getOwnerID() { return mOwnerID; }
|
||||
protected:
|
||||
F32 mPriority;
|
||||
F32 mGain;
|
||||
bool mSourceMuted;
|
||||
|
||||
@@ -1723,7 +1723,7 @@ void LLWindowSDL::processMiscNativeEvents()
|
||||
|
||||
void LLWindowSDL::gatherInput()
|
||||
{
|
||||
const Uint32 CLICK_THRESHOLD = 300; // milliseconds
|
||||
const Uint32 CLICK_THRESHOLD = 500; // milliseconds
|
||||
static int leftClick = 0;
|
||||
static int rightClick = 0;
|
||||
static Uint32 lastLeftDown = 0;
|
||||
|
||||
@@ -57,6 +57,10 @@
|
||||
|
||||
#include "llsdutil.h"
|
||||
|
||||
#include "llaudioengine.h"
|
||||
|
||||
#include "llstartup.h"
|
||||
|
||||
//<edit>
|
||||
#include "llviewermenu.h"
|
||||
//</edit>
|
||||
@@ -125,7 +129,8 @@ void chat_avatar_status(std::string name, LLUUID key, ERadarAlertType type, bool
|
||||
LLAvatarListEntry::LLAvatarListEntry(const LLUUID& id, const std::string &name, const LLVector3d &position) :
|
||||
mID(id), mName(name), mPosition(position), mDrawPosition(), mMarked(FALSE), mFocused(FALSE),
|
||||
mUpdateTimer(), mFrame(gFrameCount), mInSimFrame(U32_MAX), mInDrawFrame(U32_MAX),
|
||||
mInChatFrame(U32_MAX), mInShoutFrame(U32_MAX)
|
||||
mInChatFrame(U32_MAX), mInShoutFrame(U32_MAX),
|
||||
mActivityType(ACTIVITY_NEW), mActivityTimer()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -214,6 +219,26 @@ BOOL LLAvatarListEntry::isDead()
|
||||
{
|
||||
return getEntryAgeSeconds() > DEAD_KEEP_TIME;
|
||||
}
|
||||
const F32 ACTIVITY_TIMEOUT = 1.0f;
|
||||
void LLAvatarListEntry::setActivity(ACTIVITY_TYPE activity)
|
||||
{
|
||||
if ( activity >= mActivityType || mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT )
|
||||
{
|
||||
mActivityType = activity;
|
||||
mActivityTimer.start();
|
||||
}
|
||||
}
|
||||
|
||||
LLAvatarListEntry::ACTIVITY_TYPE LLAvatarListEntry::getActivity()
|
||||
{
|
||||
if ( mActivityTimer.getElapsedTimeF32() > ACTIVITY_TIMEOUT )
|
||||
{
|
||||
mActivityType = ACTIVITY_NONE;
|
||||
}
|
||||
if(isDead())return ACTIVITY_DEAD;
|
||||
|
||||
return mActivityType;
|
||||
}
|
||||
|
||||
LLFloaterAvatarList* LLFloaterAvatarList::sInstance = NULL;
|
||||
|
||||
@@ -359,10 +384,29 @@ BOOL LLFloaterAvatarList::postBuild()
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void updateParticleActivity(LLDrawable *drawablep)
|
||||
{
|
||||
if (LLFloaterAvatarList::getInstance())
|
||||
{
|
||||
LLViewerObject *vobj = drawablep->getVObj();
|
||||
if (vobj && vobj->isParticleSource())
|
||||
{
|
||||
LLUUID id = vobj->mPartSourcep->getOwnerUUID();
|
||||
LLAvatarListEntry *ent = LLFloaterAvatarList::getInstance()->getAvatarEntry(id);
|
||||
if ( NULL != ent )
|
||||
{
|
||||
ent->setActivity(LLAvatarListEntry::ACTIVITY_PARTICLES);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterAvatarList::updateAvatarList()
|
||||
{
|
||||
if (sInstance != this) return;
|
||||
|
||||
//if(LLStartUp::getStartupState() < STATE_STARTED)return;
|
||||
|
||||
//llinfos << "radar refresh: updating map" << llendl;
|
||||
|
||||
// Check whether updates are enabled
|
||||
@@ -377,6 +421,25 @@ void LLFloaterAvatarList::updateAvatarList()
|
||||
{
|
||||
mUpdate = TRUE;
|
||||
}
|
||||
//moved to pipeline to prevent a crash
|
||||
//gPipeline.forAllVisibleDrawables(updateParticleActivity);
|
||||
|
||||
|
||||
//todo: make this less of a hacked up copypasta from dales 1.18.
|
||||
if(gAudiop != NULL)
|
||||
{
|
||||
LLAudioEngine::source_map::iterator iter;
|
||||
for (iter = gAudiop->mAllSources.begin(); iter != gAudiop->mAllSources.end(); ++iter)
|
||||
{
|
||||
LLAudioSource *sourcep = iter->second;
|
||||
LLUUID uuid = sourcep->getOwnerID();
|
||||
LLAvatarListEntry *ent = getAvatarEntry(uuid);
|
||||
if ( ent )
|
||||
{
|
||||
ent->setActivity(LLAvatarListEntry::ACTIVITY_SOUND);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLVector3d mypos = gAgent.getPositionGlobal();
|
||||
|
||||
@@ -469,6 +532,7 @@ void LLFloaterAvatarList::updateAvatarList()
|
||||
// Avatar already in list, update position
|
||||
F32 dist = (F32)(position - mypos).magVec();
|
||||
mAvatars[avid].setPosition(position, (avatarp->getRegion() == gAgent.getRegion()), true, dist < 20.0, dist < 100.0);
|
||||
if(avatarp->isTyping())mAvatars[avid].setActivity(LLAvatarListEntry::ACTIVITY_TYPING);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -813,6 +877,40 @@ void LLFloaterAvatarList::refreshAvatarList()
|
||||
snprintf(temp, sizeof(temp), "%d", (S32)position.mdV[VZ]);
|
||||
}
|
||||
element["columns"][LIST_ALTITUDE]["value"] = temp;
|
||||
|
||||
element["columns"][LIST_ACTIVITY]["column"] = "activity";
|
||||
element["columns"][LIST_ACTIVITY]["type"] = "icon";
|
||||
|
||||
std::string activity_icon = "";
|
||||
switch(entry->getActivity())
|
||||
{
|
||||
case LLAvatarListEntry::ACTIVITY_MOVING:
|
||||
activity_icon = "inv_item_animation.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_GESTURING:
|
||||
activity_icon = "inv_item_gesture.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_SOUND:
|
||||
activity_icon = "inv_item_sound.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_REZZING:
|
||||
activity_icon = "ff_edit_theirs.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_PARTICLES:
|
||||
activity_icon = "particles_scan.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_NEW:
|
||||
activity_icon = "avatar_new.tga";
|
||||
break;
|
||||
case LLAvatarListEntry::ACTIVITY_TYPING:
|
||||
activity_icon = "avatar_typing.tga";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
element["columns"][LIST_ACTIVITY]["value"] = activity_icon;//icon_image_id; //"icn_active-speakers-dot-lvl0.tga";
|
||||
//element["columns"][LIST_AVATAR_ACTIVITY]["color"] = icon_color.getValue();
|
||||
|
||||
element["columns"][LIST_CLIENT]["column"] = "client";
|
||||
element["columns"][LIST_CLIENT]["type"] = "text";
|
||||
|
||||
@@ -33,6 +33,18 @@ class LLAvatarListEntry {
|
||||
|
||||
public:
|
||||
|
||||
enum ACTIVITY_TYPE
|
||||
{
|
||||
ACTIVITY_NONE, /** Avatar not doing anything */
|
||||
ACTIVITY_MOVING, /** Changing position */
|
||||
ACTIVITY_GESTURING, /** Playing a gesture */
|
||||
ACTIVITY_REZZING, /** Rezzing objects */
|
||||
ACTIVITY_PARTICLES, /** Creating particles */
|
||||
ACTIVITY_TYPING, /** Typing */
|
||||
ACTIVITY_NEW, /** Avatar just appeared */
|
||||
ACTIVITY_SOUND, /** Playing a sound */
|
||||
ACTIVITY_DEAD /** Avatar isn't around anymore, and will be removed soon from the list */
|
||||
};
|
||||
/**
|
||||
* @brief Initializes a list entry
|
||||
* @param id Avatar's key
|
||||
@@ -72,6 +84,13 @@ public:
|
||||
*/
|
||||
LLUUID getID() { return mID; }
|
||||
|
||||
void setActivity(ACTIVITY_TYPE activity);
|
||||
|
||||
/**
|
||||
* @brief Returns the activity type
|
||||
*/
|
||||
ACTIVITY_TYPE getActivity();
|
||||
|
||||
/**
|
||||
* @brief Sets the 'focus' status on this entry (camera focused on this avatar)
|
||||
*/
|
||||
@@ -106,8 +125,13 @@ private:
|
||||
/**
|
||||
* @brief Timer to keep track of whether avatars are still there
|
||||
*/
|
||||
|
||||
LLTimer mUpdateTimer;
|
||||
|
||||
ACTIVITY_TYPE mActivityType;
|
||||
|
||||
LLTimer mActivityTimer;
|
||||
|
||||
/**
|
||||
* @brief Last frame when this avatar was updated
|
||||
*/
|
||||
@@ -204,9 +228,11 @@ private:
|
||||
LIST_DISTANCE,
|
||||
LIST_POSITION,
|
||||
LIST_ALTITUDE,
|
||||
LIST_ACTIVITY,
|
||||
LIST_CLIENT,
|
||||
};
|
||||
|
||||
|
||||
typedef void (*avlist_command_t)(const LLUUID &avatar, const std::string &name);
|
||||
|
||||
/**
|
||||
|
||||
@@ -2895,7 +2895,8 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
||||
}
|
||||
if (is_movable)
|
||||
{
|
||||
is_movable = (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ANY)) && (RlvFolderLocks::instance().canMoveItem(inv_item->getUUID(), mUUID));
|
||||
is_movable = (!RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ANY)) ||
|
||||
(RlvFolderLocks::instance().canMoveItem(inv_item->getUUID(), mUUID));
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
@@ -676,8 +676,9 @@ protected:
|
||||
TPACKETID mLatestRecvPacketID; // Latest time stamp on message from simulator
|
||||
// extra data sent from the sim...currently only used for tree species info
|
||||
U8* mData;
|
||||
|
||||
public://Jay: IDGAF
|
||||
LLPointer<LLViewerPartSourceScript> mPartSourcep; // Particle source associated with this object.
|
||||
protected:
|
||||
LLAudioSourceVO* mAudioSourcep;
|
||||
F32 mAudioGain;
|
||||
|
||||
|
||||
@@ -992,6 +992,9 @@ private:
|
||||
LLFrameTimer mTimeVisible;
|
||||
std::deque<LLChat> mChats;
|
||||
BOOL mTyping;
|
||||
public:
|
||||
BOOL isTyping(){ return mTyping; }
|
||||
private:
|
||||
LLFrameTimer mTypingTimer;
|
||||
static void on_avatar_name_response(const LLUUID& agent_id, const LLAvatarName& av_name, void *userdata);
|
||||
|
||||
|
||||
@@ -3105,6 +3105,8 @@ void renderSoundHighlights(LLDrawable* drawablep)
|
||||
}
|
||||
}
|
||||
|
||||
void updateParticleActivity(LLDrawable *drawablep);
|
||||
|
||||
void LLPipeline::postSort(LLCamera& camera)
|
||||
{
|
||||
LLMemType mt(LLMemType::MTYPE_PIPELINE_POST_SORT);
|
||||
@@ -3235,6 +3237,9 @@ void LLPipeline::postSort(LLCamera& camera)
|
||||
std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());
|
||||
}
|
||||
llpushcallstacks ;
|
||||
|
||||
forAllVisibleDrawables(updateParticleActivity);
|
||||
|
||||
// only render if the flag is set. The flag is only set if we are in edit mode or the toggle is set in the menus
|
||||
static const LLCachedControl<bool> beacons_visible("BeaconsVisible", false);
|
||||
if (beacons_visible && !sShadowRender)
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "llgl.h"
|
||||
#include "lldrawable.h"
|
||||
#include "llrendertarget.h"
|
||||
#include "llfasttimer.h"
|
||||
|
||||
#include <stack>
|
||||
|
||||
|
||||
BIN
indra/newview/skins/default/textures/avatar_gone.tga
Normal file
BIN
indra/newview/skins/default/textures/avatar_gone.tga
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/default/textures/avatar_new.tga
Normal file
BIN
indra/newview/skins/default/textures/avatar_new.tga
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/default/textures/avatar_typing.tga
Normal file
BIN
indra/newview/skins/default/textures/avatar_typing.tga
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/default/textures/particles_scan.tga
Normal file
BIN
indra/newview/skins/default/textures/particles_scan.tga
Normal file
Binary file not shown.
@@ -13,7 +13,8 @@
|
||||
<column name="distance" label="Dist." width="48" tool_tip="Distance from your avatar (red=within chat range, yellow=within shout range, green=within draw distance)"/>
|
||||
<column name="position" label="Pos." width="60" tool_tip="Position (X, Y) within this sim, or general direction (cardinal point) for outside sims"/>
|
||||
<column name="altitude" label="Alt." width="48" tool_tip="Altitude"/>
|
||||
<column name="client" label="Client" width="80" dynamicwidth="true" tool_tip="Client the avatar is possibly using"/>
|
||||
<column name="activity" label="Act." width="24" tool_tip="Activity"/>
|
||||
<column name="client" label="Client" width="80" dynamicwidth="true" tool_tip="Client the avatar is possibly using"/>
|
||||
</scroll_list>
|
||||
|
||||
<tab_container border="false" bottom_delta="-130" height="120" left="6" mouse_opaque="false"
|
||||
|
||||
Reference in New Issue
Block a user