Merge branch 'master' of git://github.com/siana/SingularityViewer.git

This commit is contained in:
Shyotl
2011-03-02 21:23:10 -06:00
39 changed files with 2633 additions and 1086 deletions

View File

@@ -3592,7 +3592,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
if (face == -1) // ALL_SIDES
{
start_face = 0;
end_face = getNumFaces() - 1;
end_face = getNumVolumeFaces() - 1;
}
else
{

View File

@@ -64,6 +64,8 @@ include_directories(
)
set(viewer_SOURCE_FILES
aoremotectrl.cpp
floaterao.cpp
floatervoicelicense.cpp
cofmgr.cpp
ascentdaycyclemanager.cpp
@@ -93,7 +95,6 @@ set(viewer_SOURCE_FILES
llagentlanguage.cpp
llagentpilot.cpp
llanimstatelabels.cpp
llao.cpp
llappviewer.cpp
llassetconverter.cpp
llassetuploadresponders.cpp
@@ -532,6 +533,8 @@ set(viewer_HEADER_FILES
CMakeLists.txt
ViewerInstall.cmake
aoremotectrl.h
floaterao.h
floatervoicelicense.h
cofmgr.h
ascentdaycyclemanager.h
@@ -559,7 +562,6 @@ set(viewer_HEADER_FILES
llagentlanguage.h
llagentpilot.h
llanimstatelabels.h
llao.h
llappearance.h
llappviewer.h
llassetconverter.h

View File

@@ -0,0 +1,122 @@
/**
* @file aoremotectrl.cpp
* @brief toolbar remote for toggling the viewer AO
*
* $LicenseInfo:firstyear=2009&license=viewergpl$
*
* Copyright (c) 2010, McCabe Maxsted
*
* Imprudence Viewer Source Code
* The source code in this file ("Source Code") is provided to you
* under the terms of the GNU General Public License, version 2.0
* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
* this distribution, or online at
* http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "aoremotectrl.h"
#include "floaterao.h"
#include "llbutton.h"
#include "lloverlaybar.h"
#include "lluictrlfactory.h"
#include "llviewercontrol.h"
AORemoteCtrl::AORemoteCtrl()
{
setIsChrome(TRUE);
build();
setFocusRoot(TRUE);
}
AORemoteCtrl::~AORemoteCtrl()
{
}
void AORemoteCtrl::draw()
{
LLButton* expand_button = getChild<LLButton>("popup_btn");
if (expand_button)
{
if (expand_button->getToggleState())
{
expand_button->setImageOverlay("arrow_down.tga");
}
else
{
expand_button->setImageOverlay("arrow_up.tga");
}
}
LLPanel::draw();
}
void AORemoteCtrl::build()
{
if (gSavedSettings.getBOOL("ShowAOSitPopup"))
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_ao_remote_expanded.xml");
}
else
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_ao_remote.xml");
}
}
BOOL AORemoteCtrl::postBuild()
{
childSetAction("ao_btn", onClickToggleAO, this);
childSetAction("ao_sit_btn", onClickToggleAOSit, this);
childSetAction("ao_show_btn", onClickShowAO, this);
childSetAction("popup_btn", onClickPopupBtn, this);
return TRUE;
}
// static
void AORemoteCtrl::onClickToggleAO(void* data)
{
BOOL ao_enable = gSavedSettings.getBOOL("AOEnabled");
gSavedSettings.setBOOL("AOEnabled", !ao_enable);
}
//static
void AORemoteCtrl::onClickToggleAOSit(void* data)
{
BOOL sit_enable = gSavedSettings.getBOOL("AOSitsEnabled");
gSavedSettings.setBOOL("AOSitsEnabled", !sit_enable);
}
//static
void AORemoteCtrl::onClickShowAO(void* data)
{
LLFloaterAO::show(NULL);
}
//static
void AORemoteCtrl::onClickPopupBtn(void* data)
{
AORemoteCtrl* remotep = (AORemoteCtrl*)data;
remotep->deleteAllChildren();
remotep->build();
gOverlayBar->layoutButtons();
}

View File

@@ -0,0 +1,54 @@
/**
* @file aoremotectrl.h
* @brief toolbar remote for toggling the viewer AO
*
* $LicenseInfo:firstyear=2009&license=viewergpl$
*
* Copyright (c) 2010, McCabe Maxsted
*
* Imprudence Viewer Source Code
* The source code in this file ("Source Code") is provided to you
* under the terms of the GNU General Public License, version 2.0
* ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
* this distribution, or online at
* http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef AOREMOTECTRL_H
#define AOREMOTECTRL_H
#include "llpanel.h"
class AORemoteCtrl : public LLPanel
{
public:
AORemoteCtrl();
virtual ~AORemoteCtrl();
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
private:
void build();
static void onClickToggleAO(void* data);
static void onClickToggleAOSit(void* data);
static void onClickShowAO(void* data);
static void onClickPopupBtn(void* data);
};
#endif // AOREMOTECTRL_H

View File

@@ -0,0 +1,103 @@
############################################################
############################################################
##
## IMPRUDENCE AO TEMPLATE
##
############################################################
##
## INSTRUCTIONS:
##
## 1. Detach any AO you are currently wearing or it will interfere.
##
## 2. Place all of the animations you want ot use into a folder in your inventory.
##
## 3. Place the notecard for the AO in the *SAME* folder.
##
## 4. Find the line that matches the animation you're changing.
## For example, if you're adding a walk animation,
## find the line that starts with [ Walking ]
##
## If the notecard already has walking animations, the line will look something like this:
## [ Walking ]SexyWalk1|SexyWalk2
##
## 5. Type the name of the new animation at the end of this line.
## If the line already contains some animations, type '|' before
## typing the animation name. Once you're done, the line should look like this:
## [ Walking ]NewWalkAnim
## or
## [ Walking ]SexyWalk1|SexyWalk2|NewWalkAnim
##
## 6. Once you're done, save the notecard.
##
## 7. Open the client AO window (CTRL-SHIFT-O) then drag the notecard onto the indicated spot.
##
## 8. Press the "Reload" button in the AO.
##
############################################################
############################################################
############################################################
##
## LIST YOUR ANIMATIONS HERE
##
############################################################
############################################################
[ Standing ]
[ Walking ]
[ Sitting ]
[ Sitting On Ground ]
[ Crouching ]
[ Crouch Walking ]
[ Landing ]
[ Standing Up ]
[ Falling ]
[ Flying Down ]
[ Flying Up ]
[ Flying ]
[ Flying Slow ]
[ Hovering ]
[ Jumping ]
[ Pre Jumping ]
[ Running ]
[ Turning Right ]
[ Turning Left ]
[ Floating ]
[ Swimming Forward ]
[ Swimming Up ]
[ Swimming Down ]
#############################################################
#############################################################
##
## FOR ADVANCED USERS ONLY
##
#############################################################
##
## Lines starting with a # are treated as comments and ignored. Blank lines are ignored. Valid lines look like this:
##
## [ Walking ]SexyWalk1|SexyWalk2|SexyWalk3
##
## The token (in this case, [ Walking ] - note the spaces inside the [ ]) identifies the animation to be overridden. The rest is a list of
## animations, separated by the '|' (pipe) character. You can specify multiple animations for Stands, Walks, Sits, and GroundSits.
## Multiple animations on any other line are invalid. You can list as many animations as you want.
##
## You can repeat tokens, so you can split the Stands up across multiple lines. Use the [ Standing ] token in each line, and
## the viewer will add the animation lists together.
##
## Each 'animation name' can be a comma-separated list of animations, which will be played together. For example:
## [ Walking ]SexyWalk1UpperBody,SexyWalk1LowerBody|SexyWalk2|SexyWalk3
##
## Note the ',' between SexyWalk1UpperBody and SexyWalk1LowerBody - this tells AO to treat these as a single
## 'animation' and play them together. The '|' between this 'animation' and SexyWalk2 tells AO to treat SexyWalk2 and
## SexyWalk3 as separate walk animations. You can use this to layer animations on top of each other.
##
## Do not add any spaces around animation names!!!
##
## If you have read and understood these instructions, feel free to delete these lines.
##
## Imprudence's AO notecard system is based on the ZHAO-II HUD by Second Life resident Ziggy Puff.
##
############################################################

View File

@@ -8,7 +8,140 @@
<string>settings_sh.xml</string>
<string>settings_rlv.xml</string>
</array>
<!-- Begin: AO-->
<key>ShowAOSitPopup</key>
<map>
<key>Comment</key>
<string>Show AO sit popup</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>EnableAORemote</key>
<map>
<key>Comment</key>
<string>Enable AO quick access remote in toolbar</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>DisableInternalFlyUpAnimation</key>
<map>
<key>Comment</key>
<string>Disables the internal hover up animation (on your local computer only). Enable if you use an AO and wear hand attachments like rings, prim nails etc. that often loose their correct position while flying.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AOEnabled</key>
<map>
<key>Comment</key>
<string>Turn on Animation Overrider</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AOAdvanced</key>
<map>
<key>Comment</key>
<string>Advanced options</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AOSitsEnabled</key>
<map>
<key>Comment</key>
<string>Overrides sit animations.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AONoStandsInMouselook</key>
<map>
<key>Comment</key>
<string>Disables stand anims during mouselook</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AOStandInterval</key>
<map>
<key>Comment</key>
<string>AO stand time in seconds</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>20</real>
</map>
<key>AOStandRandomize</key>
<map>
<key>Comment</key>
<string>Randomize stand anims</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AORect</key>
<map>
<key>Comment</key>
<string>Rectangle for AO window</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Rect</string>
<key>Value</key>
<array>
<integer>0</integer>
<integer>100</integer>
<integer>100</integer>
<integer>100</integer>
</array>
</map>
<key>ClientDefinitionsURL</key>
<map>
<key>Comment</key>
<string>Where to fetch updated client definitions from</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://app.singularityviewer.org/client_definitions.xml</string>
</map>
<key>LastSelectedGrid</key>
<map>
<key>Comment</key>
@@ -194,28 +327,6 @@
<key>Value</key>
<integer>3</integer>
</map>
<key>AO.Enabled</key>
<map>
<key>Comment</key>
<string>Enable animation overrider</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AO.Period</key>
<map>
<key>Comment</key>
<string>Period when changing stands in seconds</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<integer>20.0</integer>
</map>
<key>Blacklist.Settings</key>
<map>
<key>Comment</key>
@@ -5982,7 +6093,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>MtBkLfRg.ttf</string>
<string>Ubuntu-R.ttf</string>
</map>
<key>FontSansSerifBundledFallback</key>
<map>
@@ -6004,7 +6115,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>MtBdLfRg.ttf</string>
<string>Ubuntu-B.ttf</string>
</map>
<key>FontSansSerifFallback</key>
<map>
@@ -6026,7 +6137,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
<real>0.95</real>
</map>
<key>FontScreenDPI</key>
<map>
@@ -13135,6 +13246,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>WarnFirstAO</key>
<map>
<key>Comment</key>
<string>Enables FirstAO warning dialog</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>WarnFirstAppearance</key>
<map>
<key>Comment</key>

View File

@@ -8,6 +8,197 @@
</array-->
<!-- Begin AO -->
<key>AOConfigNotecardID</key>
<map>
<key>Comment</key>
<string>InventoryItemID of the AO config notecard</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultWalk</key>
<map>
<key>Comment</key>
<string>Default walk anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultSit</key>
<map>
<key>Comment</key>
<string>Default sit anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultRun</key>
<map>
<key>Comment</key>
<string>Default run anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultJump</key>
<map>
<key>Comment</key>
<string>Default jump anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultGroundSit</key>
<map>
<key>Comment</key>
<string>Default groundsit anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultCrouch</key>
<map>
<key>Comment</key>
<string>Default crouch anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultCrouchWalk</key>
<map>
<key>Comment</key>
<string>Default crouchwalk anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultFall</key>
<map>
<key>Comment</key>
<string>Default fall anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultHover</key>
<map>
<key>Comment</key>
<string>Default hover anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultFly</key>
<map>
<key>Comment</key>
<string>Default fly anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultFlySlow</key>
<map>
<key>Comment</key>
<string>Default flyslow anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultFlyUp</key>
<map>
<key>Comment</key>
<string>Default flyup anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultFlyDown</key>
<map>
<key>Comment</key>
<string>Default flydown anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultLand</key>
<map>
<key>Comment</key>
<string>Default land anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultStandUp</key>
<map>
<key>Comment</key>
<string>Default standup anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AODefaultPreJump</key>
<map>
<key>Comment</key>
<string>Default prejump anim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<!-- End AO -->
<!-- Ascent Account-Specific (Always) -->

1432
indra/newview/floaterao.cpp Normal file

File diff suppressed because it is too large Load Diff

131
indra/newview/floaterao.h Normal file
View File

@@ -0,0 +1,131 @@
#ifndef LL_LLFLOATERAO_H
#define LL_LLFLOATERAO_H
#include "llfloater.h"
#include "llviewercontrol.h"
#include "llagent.h"
class AONoteCardDropTarget;
const int STATE_AGENT_IDLE = 0;
const int STATE_AGENT_WALK = 1;
const int STATE_AGENT_RUN = 2;
const int STATE_AGENT_STAND = 3;
const int STATE_AGENT_PRE_JUMP = 4;
const int STATE_AGENT_JUMP = 5;
const int STATE_AGENT_TURNLEFT = 6;
const int STATE_AGENT_TURNRIGHT = 7;
const int STATE_AGENT_SIT = 8;
const int STATE_AGENT_GROUNDSIT = 9;
const int STATE_AGENT_HOVER = 10;
const int STATE_AGENT_HOVER_DOWN = 11;
const int STATE_AGENT_HOVER_UP = 12;
const int STATE_AGENT_CROUCH = 13;
const int STATE_AGENT_CROUCHWALK = 14;
const int STATE_AGENT_FALLDOWN = 15;
const int STATE_AGENT_STANDUP = 16;
const int STATE_AGENT_LAND = 17;
const int STATE_AGENT_FLY = 18;
const int STATE_AGENT_FLYSLOW = 19;
class AOStandTimer : public LLEventTimer
{
public:
AOStandTimer();
~AOStandTimer();
virtual BOOL tick();
virtual void reset();
};
class AOInvTimer : public LLEventTimer
{
public:
AOInvTimer();
~AOInvTimer();
BOOL tick();
};
class LLFloaterAO : public LLFloater
{
public:
LLFloaterAO();
virtual BOOL postBuild();
virtual ~LLFloaterAO();
static void show(void*);
static void init();
static void onClickToggleAO(LLUICtrl *, void*);
static void onClickToggleSits(LLUICtrl *, void*);
static void run();
static void updateLayout(LLFloaterAO* floater);
static BOOL loadAnims();
static int getAnimationState();
static void setAnimationState(int state);
static void setStates(const LLUUID& id, BOOL start);
static LLUUID getCurrentStandId();
static void setCurrentStandId(const LLUUID& id);
static int stand_iterator;
static BOOL ChangeStand();
static BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f, BOOL stand = FALSE);
static BOOL stopMotion(const LLUUID& id, BOOL stop_immediate, BOOL stand = FALSE);
static LLUUID GetAnimID(const LLUUID& id);
static int GetStateFromAnimID(const LLUUID& id);
static LLUUID GetAnimIDFromState(const int state);
static int GetStateFromToken(std::string strtoken);
static void onClickLess(void* data) ;
static void onClickMore(void* data) ;
static void onClickPrevStand(void* userdata);
static void onClickNextStand(void* userdata);
static void onClickReloadCard(void* userdata);
static void onClickOpenCard(void* userdata);
static void onClickNewCard(void* userdata);
static LLUUID invfolderid;
static const LLUUID& getAssetIDByName(const std::string& name);
static bool getInstance();
private:
static LLFloaterAO* sInstance;
static int mAnimationState;
static LLUUID mCurrentStandId;
static AONoteCardDropTarget* mAOItemDropTarget;
static void AOItemDrop(LLViewerInventoryItem* item);
static void onSpinnerCommit(LLUICtrl* ctrl, void* userdata);
static void onComboBoxCommit(LLUICtrl* ctrl, void* userdata);
static BOOL SetDefault(void *userdata, LLUUID ao_id, std::string defaultanim);
BOOL mDirty;
protected:
static void onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLAssetType::EType type,void* user_data, S32 status, LLExtStat ext_status);
};
extern AOInvTimer* gAOInvTimer;
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,22 +0,0 @@
Copyright Information Regarding Fonts, Disclaimer of Warranties
This license applies to the files named MtBkLfRg.ttf and MtBdLfRg.ttf
in this directory, referred to hereafter as "Meta font software files".
The Meta font software files contained in this folder are the
copyrighted property of FSI FontShop International ("FSI") and are
licensed by FSI solely for use by Linden Research, Inc. and by
residents or users of Second Life in the Second Life environment,
subject to the Second Life Terms of Service. These Meta font software
files may not be copied by residents or developers of Second Life or
used by them for any other purpose whatsoever.
FSI and its suppliers make no warranties express or implied relating
to the Meta font software, including without limitation, warranties as
to non-infringement of third party rights, merchantability, or fitness
for any particular purpose. In no event will FSI or its suppliers be
liable to you for any damages, including without limitation,
consequential, incidental or special damages, including any lost
profits or lost savings, even if a FSI representative has been advised
of the possibility of such damages, or for any claim by any third
party.

Binary file not shown.

Binary file not shown.

View File

@@ -67,6 +67,7 @@
#include "llface.h"
#include "llfirstuse.h"
#include "llfloater.h"
#include "floaterao.h"
#include "llfloateractivespeakers.h"
#include "llfloateravatarinfo.h"
#include "llfloaterbuildoptions.h"
@@ -139,9 +140,6 @@
#include "llviewerjoystick.h"
#include "llfollowcam.h"
#include "llao.h"
#include "llfollowcam.h"
// [RLVa:KB] - Checked: 2010-09-27 (RLVa-1.1.3b)
#include "rlvhandler.h"
#include "rlvinventory.h"
@@ -4073,6 +4071,7 @@ void LLAgent::changeCameraToMouselook(BOOL animate)
if( mCameraMode != CAMERA_MODE_MOUSELOOK )
{
gFocusMgr.setKeyboardFocus( NULL );
if (gSavedSettings.getBOOL("AONoStandsInMouselook")) LLFloaterAO::stopMotion(LLFloaterAO::getCurrentStandId(), FALSE,TRUE);
mLastCameraMode = mCameraMode;
mCameraMode = CAMERA_MODE_MOUSELOOK;
@@ -4995,12 +4994,8 @@ void LLAgent::requestStopMotion( LLMotion* motion )
void LLAgent::onAnimStop(const LLUUID& id)
{
// handle automatic state transitions (based on completion of animation playback)
if(LLAO::isStand(id))
if (id == ANIM_AGENT_STAND)
{
// <edit>
if(LLAO::isEnabled())
LLAO::mTimer->pause();//Timer only pauses if its not paused, check is inside function.
// </edit>
stopFidget();
}
else if (id == ANIM_AGENT_AWAY)

View File

@@ -1,574 +0,0 @@
// <edit>
/* DOUBLE EDIT REACH AROUND
Rewritten by Hg Beeks
*/
#include "llviewerprecompiledheaders.h"
#include "llagent.h"
#include "llanimstatelabels.h"
#include "llao.h"
#include "llfilepicker.h"
#include "llinventorymodel.h"
#include "llscrolllistctrl.h"
#include "llsdserialize.h"
#include "lluictrlfactory.h"
#include "llviewercontrol.h"
#include "llvoavatar.h"
//this is for debugging ;D
//#define AO_DEBUG
//static variables
std::list<std::string> LLAO::mStandOverrides;
LLSD LLAO::mAnimationOverrides;
S32 LLAO::mAnimationIndex;
LLUUID LLAO::mLastAnimation;
std::map<LLUUID,LLUUID> LLAO::mOverrides;
LLFloaterAO* LLFloaterAO::sInstance;
BOOL LLAO::mEnabled = FALSE;
F32 LLAO::mPeriod;
LLAOStandTimer* LLAO::mTimer = NULL;
class ObjectNameMatches : public LLInventoryCollectFunctor
{
public:
ObjectNameMatches(std::string name)
{
sName = name;
}
virtual ~ObjectNameMatches() {}
virtual bool operator()(LLInventoryCategory* cat,
LLInventoryItem* item)
{
if(item)
{
return (item->getName() == sName);
}
return false;
}
private:
std::string sName;
};
const LLUUID& LLAO::getAssetIDByName(const std::string& name)
{
if (name.empty()) return LLUUID::null;
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
ObjectNameMatches objectnamematches(name);
gInventory.collectDescendentsIf(LLUUID::null,cats,items,FALSE,objectnamematches);
if (items.count())
{
return items[0]->getAssetUUID();
}
return LLUUID::null;
};
LLUUID LLAO::getFrontUUID()
{
if (!LLAO::mStandOverrides.empty())
return LLUUID(LLAO::getAssetIDByName(LLAO::mStandOverrides.front()));
else
return LLUUID::null;
}
LLUUID LLAO::getBackUUID()
{
if (!LLAO::mStandOverrides.empty())
return LLUUID(LLAO::getAssetIDByName(LLAO::mStandOverrides.back()));
else
return LLUUID::null;
}
LLAOStandTimer::LLAOStandTimer(F32 period) : LLEventTimer(period)
{
}
BOOL LLAOStandTimer::tick()
{
if(!mPaused && LLAO::isEnabled() && !LLAO::mStandOverrides.empty())
{
#ifdef AO_DEBUG
llinfos << "tick" << llendl;
#endif
LLVOAvatar* avatarp = gAgent.getAvatarObject();
if (avatarp)
{
for ( LLVOAvatar::AnimIterator anim_it =
avatarp->mPlayingAnimations.begin();
anim_it != avatarp->mPlayingAnimations.end();
anim_it++)
{
if(LLAO::isStand(anim_it->first))
{
//back is always last played, front is next
avatarp->stopMotion(LLAO::getBackUUID());
#ifdef AO_DEBUG
//llinfos << "Stopping " << LLAO::mStandOverrides.back() << llendl;
#endif
avatarp->startMotion(LLAO::getFrontUUID());
#ifdef AO_DEBUG
//llinfos << "Starting " << LLAO::mStandOverrides.front() << llendl;
#endif
LLAO::mStandOverrides.push_back(LLAO::mStandOverrides.front());
LLAO::mStandOverrides.pop_front();
LLFloaterAO* ao = LLFloaterAO::sInstance;
if(ao)
{
//ao->mStandsCombo->setSimple(LLStringExplicit(LLAO::mStandOverrides.back().asString()));
}
break;
}
}
}
}
return FALSE;
}
void LLAOStandTimer::pause()
{
if(mPaused) return;
#ifdef AO_DEBUG
llinfos << "Pausing AO Timer...." << llendl;
#endif
LLVOAvatar* avatarp = gAgent.getAvatarObject();
if (avatarp)
{
#ifdef AO_DEBUG
//llinfos << "Stopping " << LLAO::mStandOverrides.back() << llendl;
#endif
gAgent.sendAnimationRequest(LLAO::getBackUUID(), ANIM_REQUEST_STOP);
avatarp->stopMotion(LLAO::getBackUUID());
}
mEventTimer.reset();
mEventTimer.stop();
mPaused = TRUE;
}
void LLAOStandTimer::resume()
{
if(!mPaused) return;
#ifdef AO_DEBUG
llinfos << "Unpausing AO Timer...." << llendl;
#endif
LLVOAvatar* avatarp = gAgent.getAvatarObject();
if (avatarp)
{
#ifdef AO_DEBUG
//llinfos << "Starting " << LLAO::mStandOverrides.back() << llendl;
#endif
gAgent.sendAnimationRequest(LLAO::getBackUUID(), ANIM_REQUEST_START);
avatarp->startMotion(LLAO::getBackUUID());
}
mEventTimer.reset();
mEventTimer.start();
mPaused = FALSE;
}
// Used for sorting
struct SortItemPtrsByName
{
bool operator()(const LLInventoryItem* i1, const LLInventoryItem* i2)
{
return (LLStringUtil::compareDict(i1->getName(), i2->getName()) < 0);
}
};
void LLAOStandTimer::reset()
{
mEventTimer.reset();
}
//static
void LLAO::setup()
{
mEnabled = gSavedSettings.getBOOL("AO.Enabled");
mPeriod = gSavedSettings.getF32("AO.Period");
mTimer = new LLAOStandTimer(mPeriod);
mAnimationIndex = 0;
mLastAnimation = LLUUID::null;
gSavedSettings.getControl("AO.Enabled")->getSignal()->connect(boost::bind(&handleAOEnabledChanged, _1));
gSavedSettings.getControl("AO.Period")->getSignal()->connect(boost::bind(&handleAOPeriodChanged, _1));
}
//static
void LLAO::runAnims(BOOL enabled)
{
LLVOAvatar* avatarp = gAgent.getAvatarObject();
if (avatarp)
{
for ( LLVOAvatar::AnimIterator anim_it =
avatarp->mPlayingAnimations.begin();
anim_it != avatarp->mPlayingAnimations.end();
anim_it++)
{
if(LLAO::mOverrides.find(anim_it->first) != LLAO::mOverrides.end())
{
LLUUID anim_id = mOverrides[anim_it->first];
// this is an override anim
if(enabled)
{
// make override start
avatarp->startMotion(anim_id);
}
else
{
avatarp->stopMotion(anim_id);
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_STOP);
}
}
}
if(mTimer)
{
if(enabled)
mTimer->resume();
else
mTimer->pause();
}
}
}
//static
bool LLAO::handleAOPeriodChanged(const LLSD& newvalue)
{
F32 value = (F32)newvalue.asReal();
mPeriod = value;
return true;
}
//static
bool LLAO::handleAOEnabledChanged(const LLSD& newvalue)
{
BOOL value = newvalue.asBoolean();
mEnabled = value;
runAnims(value);
return true;
}
//static
BOOL LLAO::isStand(LLUUID _id)
{
std::string id = _id.asString();
//ALL KNOWN STANDS
if(id == "2408fe9e-df1d-1d7d-f4ff-1384fa7b350f") return TRUE;
if(id == "15468e00-3400-bb66-cecc-646d7c14458e") return TRUE;
if(id == "370f3a20-6ca6-9971-848c-9a01bc42ae3c") return TRUE;
if(id == "42b46214-4b44-79ae-deb8-0df61424ff4b") return TRUE;
if(id == "f22fed8b-a5ed-2c93-64d5-bdd8b93c889f") return TRUE;
return FALSE;
}
BOOL LLAO::isVoice(LLUUID _id)
{
std::string id = _id.asString();
//ALL KNOWN VOICE ANIMS
if(id == "3557510a-5eb4-d0ce-0b91-67c72aa75312") return TRUE;
if(id == "a71890f1-0dab-8744-fd47-7defaf411dbf") return TRUE;
if(id == "c1802201-5f4e-366f-7f78-2d08ec6ea54a") return TRUE;
if(id == "68db359f-4c9c-0932-5f1e-e95e3a0b19bc") return TRUE;
if(id == "7ef0d5c0-3346-06e4-5cfc-f081db108baa") return TRUE;
if(id == "28a3f544-268d-da71-7da6-82c8dd522cb9") return TRUE;
if(id == "cc340155-3e9d-60fe-d8e3-9e9abc7062d1") return TRUE;
if(id == "55fe6788-8a16-d998-2f63-3c1eab2b6009") return TRUE;
if(id == "69d5a8ed-9ec6-6dac-842f-d92d82e69428") return TRUE;
if(id == "9a7f3201-7bbd-4f75-b762-24270536e4e3") return TRUE;
if(id == "37694185-3107-d418-3a20-0181424e542d") return TRUE;
if(id == "cb1139b6-e7c3-fdc7-a9c1-e21673d7a50e") return TRUE;
if(id == "bbf194d1-a118-1312-998b-8145cec6eaff") return TRUE;
if(id == "593e9a3d-58d8-c594-d6dd-f4b98965202e") return TRUE;
if(id == "2b78c24a-2451-6135-fc49-ad274552bb68") return TRUE;
if(id == "0f645c60-3151-2805-b6f7-28e710ed22ac") return TRUE;
return FALSE;
}
//static
void LLAO::refresh()
{
mOverrides.clear();
mAnimationOverrides.clear();
LLSD settings = gSavedPerAccountSettings.getLLSD("AO.Settings");
//S32 version = (S32)settings["version"].asInteger();
mAnimationOverrides = settings["overrides"];
llinfos << "Stand count: " << mAnimationOverrides["Stands"].size() << llendl;
}
//static ------------- Floater
void LLFloaterAO::show()
{
if(sInstance)
sInstance->open();
else
(new LLFloaterAO())->open();
}
LLFloaterAO::LLFloaterAO()
: LLFloater()
{
sInstance = this;
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ao.xml");
}
LLFloaterAO::~LLFloaterAO()
{
sInstance = NULL;
}
BOOL LLFloaterAO::postBuild(void)
{
LLComboBox* combo;
LLScrollListCtrl* list;
childSetAction("btn_save", onClickSave, this);
childSetAction("btn_load", onClickLoad, this);
combo = getChild<LLComboBox>( "combo_anim_type");
combo->setCommitCallback(onCommitType);
combo->setCallbackUserData(this);
combo->selectFirstItem();
mAnimTypeCombo = combo;
mCurrentAnimType = mAnimTypeCombo->getValue().asString();
combo = getChild<LLComboBox>( "combo_anim_list");
mAnimListCombo = combo;
childSetAction("combo_anim_add", onClickAnimAdd, this);
childSetAction("combo_anim_delete", onClickAnimRemove, this);
list = getChild<LLScrollListCtrl>("active_anim_list");
mAnimationList = list;
addAnimations();
refresh();
return TRUE;
}
void LLFloaterAO::refresh()
{
mAnimationList->deleteAllItems();
S32 count = LLAO::mAnimationOverrides[mCurrentAnimType].size();
llinfos << "Refreshed, building animation list for " << mCurrentAnimType << ", Count:" << count << llendl;
int i;
for(i = 0; i < count; i++)
{
std::string name = LLAO::mAnimationOverrides[mCurrentAnimType][i].asString();
llinfos << "Adding " << name << llendl;
mAnimationList->addSimpleElement(name, ADD_BOTTOM);
}
}
// static
void LLFloaterAO::onCommitType(LLUICtrl* ctrl, void* user_data)
{
LLFloaterAO* floater = (LLFloaterAO*)user_data;
floater->mCurrentAnimType = floater->mAnimTypeCombo->getValue().asString();
floater->refresh();
}
void LLFloaterAO::addAnimations()
{
mAnimListCombo->removeall();
std::string none_text = getString("none_text");
mAnimListCombo->add(none_text, LLUUID::null);
S32 i;
// Get all inventory items that are animations
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
LLIsTypeWithPermissions is_copyable_animation(LLAssetType::AT_ANIMATION,
PERM_NONE,
gAgent.getID(),
gAgent.getGroupID());
gInventory.collectDescendentsIf(gAgent.getInventoryRootID(),
cats,
items,
LLInventoryModel::EXCLUDE_TRASH,
is_copyable_animation);
// Copy into something we can sort
std::vector<LLInventoryItem*> animations;
S32 count = items.count();
for(i = 0; i < count; ++i)
{
animations.push_back( items.get(i) );
}
// Do the sort
std::sort(animations.begin(), animations.end(), SortItemPtrsByName());
// And load up the combobox
std::vector<LLInventoryItem*>::iterator it;
for (it = animations.begin(); it != animations.end(); ++it)
{
LLInventoryItem* item = *it;
mAnimListCombo->add(item->getName(), item->getAssetUUID(), ADD_BOTTOM);
}
}
// static
void LLFloaterAO::onCommitAnim(LLUICtrl* ctrl, void* user_data)
{
LLFloaterAO* floater = (LLFloaterAO*)user_data;
LLSD settings;
settings["version"] = 2;
settings["overrides"] = LLAO::mAnimationOverrides;
gSavedPerAccountSettings.setLLSD("AO.Settings", settings);
LLAO::refresh();
floater->refresh();
}
//static
void LLFloaterAO::onClickAnimRemove(void* user_data)
{
LLFloaterAO* floater = (LLFloaterAO*)user_data;
std::vector<LLScrollListItem*> items = floater->mAnimationList->getAllSelected();
for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter)
{
LLScrollListItem* item = *iter;
if (item->getValue().asString() != "")
{
std::string anim_name = item->getValue().asString();
S32 count = LLAO::mAnimationOverrides[floater->mCurrentAnimType].size();
S32 index;
LLSD new_list;
for (index = 0; index < count; index++)
{
if (LLAO::mAnimationOverrides[floater->mCurrentAnimType][index].isDefined())
{
std::string this_anim = LLAO::mAnimationOverrides[floater->mCurrentAnimType][index].asString();
if (this_anim != anim_name)
{
new_list.append(this_anim);
}
}
}
LLAO::mAnimationOverrides[floater->mCurrentAnimType] = new_list;
}
}
onCommitAnim(NULL,user_data);
}
//static
void LLFloaterAO::onClickAnimAdd(void* user_data)
{
LLFloaterAO* floater = (LLFloaterAO*)user_data;
std::string anim_name = floater->mAnimListCombo->getSimple();
if (anim_name == "")
return;
LLUUID id(LLAO::getAssetIDByName(anim_name));
#ifdef AO_DEBUG
llinfos << "Attempting to add " << anim_name << " (" << id << ") " << " to " << floater->mCurrentAnimType << llendl;
#endif
if(id.notNull() && !LLAO::mAnimationOverrides[floater->mCurrentAnimType].has(anim_name))
{
#ifdef AO_DEBUG
llinfos << "Actually adding animation, this should be refreshed. Count:" << LLAO::mAnimationOverrides[floater->mCurrentAnimType].size() << llendl;
#endif
LLAO::mAnimationOverrides[floater->mCurrentAnimType].append(anim_name);
#ifdef AO_DEBUG
llinfos << "Added animation. Count:" << LLAO::mAnimationOverrides[floater->mCurrentAnimType].size() << llendl;
#endif
LLAO::mTimer->reset();
}
onCommitAnim(NULL,user_data);
}
BOOL LLFloaterAO::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg)
{
BOOL handled = TRUE;
switch(cargo_type)
{
case DAD_ANIMATION:
{
LLInventoryItem* item = (LLInventoryItem*)cargo_data;
if (item
&& gInventory.getItem(item->getUUID()))
{
if (drop)
{
if (cargo_type == DAD_ANIMATION)
{
std::string anim_name = item->getName();
if (anim_name == "")
return true;
LLUUID id(LLAO::getAssetIDByName(anim_name));
#ifdef AO_DEBUG
llinfos << "Actually adding animation, this should be refreshed. Count:" << LLAO::mAnimationOverrides[mCurrentAnimType].size() << llendl;
#endif
LLAO::mAnimationOverrides[mCurrentAnimType].append(anim_name);
#ifdef AO_DEBUG
llinfos << "Added animation. Count:" << LLAO::mAnimationOverrides[mCurrentAnimType].size() << llendl;
#endif
LLAO::mTimer->reset();
onCommitAnim(NULL,this);
}
refresh();
}
*accept = ACCEPT_YES_COPY_MULTI;
}
else
{
// Not in user's inventory means it was in object inventory
*accept = ACCEPT_NO;
}
break;
}
default:
*accept = ACCEPT_NO;
if (tooltip_msg.empty())
{
tooltip_msg.assign("Only animations can be added to the AO.");
}
break;
}
return handled;
}
//static
void LLFloaterAO::onClickSave(void* user_data)
{
LLFilePicker& file_picker = LLFilePicker::instance();
if(file_picker.getSaveFile( LLFilePicker::FFSAVE_AO, LLDir::getScrubbedFileName("untitled.ao")))
{
std::string file_name = file_picker.getFirstFile();
llofstream export_file(file_name);
LLSDSerialize::toPrettyXML(gSavedPerAccountSettings.getLLSD("AO.Settings"), export_file);
export_file.close();
}
}
//static
void LLFloaterAO::onClickLoad(void* user_data)
{
LLFloaterAO* floater = (LLFloaterAO*)user_data;
LLFilePicker& file_picker = LLFilePicker::instance();
if(file_picker.getOpenFile(LLFilePicker::FFLOAD_AO))
{
std::string file_name = file_picker.getFirstFile();
llifstream xml_file(file_name);
if(!xml_file.is_open()) return;
LLSD data;
if(LLSDSerialize::fromXML(data, xml_file) >= 1)
{
if(LLAO::isEnabled())
LLAO::runAnims(FALSE);
gSavedPerAccountSettings.setLLSD("AO.Settings", data);
LLAO::refresh();
if(LLAO::isEnabled())
LLAO::runAnims(TRUE);
floater->refresh();
}
xml_file.close();
}
}
// </edit>

View File

@@ -1,89 +0,0 @@
// <edit>
#ifndef LL_LLAO_H
#define LL_LLAO_H
//this is for debugging ;D
//#define AO_DEBUG
#include "llfloater.h"
#include "llcombobox.h"
class LLAOStandTimer : public LLEventTimer
{
public:
LLAOStandTimer(F32 period);
BOOL tick();
void pause();
void resume();
void reset();
private:
BOOL mPaused;
};
class LLAO
{
public:
static void setup();
static std::map<LLUUID,LLUUID> mOverrides;
static std::list<std::string> mStandOverrides;
//Animation LLSD for full animation options -HgB
static LLSD mAnimationOverrides;
static S32 mAnimationIndex;
static LLUUID mLastAnimation;
static BOOL isEnabled(){ return mEnabled; }
static BOOL isStand(LLUUID _id);
static BOOL isVoice(LLUUID _id);
static void refresh();
static void runAnims(BOOL enabled);
static bool handleAOEnabledChanged(const LLSD& newvalue);
static bool handleAOPeriodChanged(const LLSD& newvalue);
static const LLUUID& getAssetIDByName(const std::string& name);
static LLUUID getFrontUUID();
static LLUUID getBackUUID();
static LLAOStandTimer* mTimer;
//Horribly hacked-up stuff from llpreviewgesture.h, try to fix in the near future. -HgB
/*virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);*/
private:
static BOOL mEnabled;
static F32 mPeriod;
};
class LLFloaterAO : public LLFloater
{
public:
static LLFloaterAO* sInstance;
static void show();
LLFloaterAO();
void addAnimations();
BOOL postBuild(void);
void refresh();
static void onCommitAnim(LLUICtrl* ctrl, void* user_data);
static void onCommitType(LLUICtrl* ctrl,void* user_data);
static void onClickAnimRemove(void* user_data);
static void onClickAnimAdd(void* user_data);
static void onClickSave(void* user_data);
static void onClickLoad(void* user_data);
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
private:
LLComboBox* mAnimListCombo;
LLComboBox* mAnimTypeCombo;
LLScrollListCtrl* mAnimationList;
std::string mCurrentAnimType;
virtual ~LLFloaterAO();
protected:
static void onCommitAnimation(LLUICtrl* ctrl, void* data);
};
#endif
// </edit>

View File

@@ -99,7 +99,6 @@
#include "llimageworker.h"
// <edit>
#include "llao.h" //for setting up listener
#include "lldelayeduidelete.h"
#include "llbuildnewviewsscheduler.h"
// </edit>
@@ -160,6 +159,7 @@
#include "llvosurfacepatch.h"
// includes for idle() idleShutdown()
#include "floaterao.h"
#include "llviewercontrol.h"
#include "lleventnotifier.h"
#include "llcallbacklist.h"
@@ -678,10 +678,6 @@ bool LLAppViewer::init()
settings_to_globals();
// Setup settings listeners
settings_setup_listeners();
// <edit>
// Setup AO settings listener
LLAO::setup();
// </edit>
// Modify settings based on system configuration and compile options
settings_modify();
@@ -1757,6 +1753,7 @@ bool LLAppViewer::initConfiguration()
LLFirstUse::addConfigVariable("FirstTeleport");
LLFirstUse::addConfigVariable("FirstOverrideKeys");
LLFirstUse::addConfigVariable("FirstAttach");
LLFirstUse::addConfigVariable("FirstAO");
LLFirstUse::addConfigVariable("FirstAppearance");
LLFirstUse::addConfigVariable("FirstInventory");
LLFirstUse::addConfigVariable("FirstSandbox");

View File

@@ -203,6 +203,17 @@ void LLFirstUse::useAttach()
// nothing for now
}
// static
void LLFirstUse::useAO()
{
if (gSavedSettings.getWarning("FirstAO"))
{
gSavedSettings.setWarning("FirstAO", FALSE);
LLNotifications::instance().add("FirstAO");
}
}
// static
void LLFirstUse::useAppearance()
{

View File

@@ -103,6 +103,7 @@ public:
static void useTeleport();
static void useOverrideKeys();
static void useAttach();
static void useAO();
static void useAppearance();
static void useInventory();
static void useSandbox();

View File

@@ -37,6 +37,7 @@
#include "lloverlaybar.h"
#include "aoremotectrl.h"
#include "llaudioengine.h"
#include "importtracker.h"
#include "llrender.h"
@@ -116,6 +117,13 @@ void* LLOverlayBar::createAdvSettings(void* userdata)
return self->mAdvSettings;
}
void* LLOverlayBar::createAORemote(void* userdata)
{
LLOverlayBar *self = (LLOverlayBar*)userdata;
self->mAORemote = new AORemoteCtrl();
return self->mAORemote;
}
void* LLOverlayBar::createChatBar(void* userdata)
{
gChatBar = new LLChatBar();
@@ -126,6 +134,7 @@ LLOverlayBar::LLOverlayBar()
: LLPanel(),
mMediaRemote(NULL),
mVoiceRemote(NULL),
mAORemote(NULL),
mMusicState(STOPPED),
mOriginalIMLabel("")
{
@@ -138,6 +147,7 @@ LLOverlayBar::LLOverlayBar()
factory_map["media_remote"] = LLCallbackMap(LLOverlayBar::createMediaRemote, this);
factory_map["voice_remote"] = LLCallbackMap(LLOverlayBar::createVoiceRemote, this);
factory_map["Adv_Settings"] = LLCallbackMap(LLOverlayBar::createAdvSettings, this);
factory_map["ao_remote"] = LLCallbackMap(LLOverlayBar::createAORemote, this);
factory_map["chat_bar"] = LLCallbackMap(LLOverlayBar::createChatBar, this);
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_overlaybar.xml", &factory_map);
@@ -157,6 +167,13 @@ bool updateChatVisible(const LLSD &data)
return true;
}
bool updateAORemote(const LLSD &data)
{
gOverlayBar->childSetVisible("ao_remote_container", gSavedSettings.getBOOL("EnableAORemote"));
return true;
}
BOOL LLOverlayBar::postBuild()
{
childSetAction("New IM",onClickIMReceived,this);
@@ -180,8 +197,10 @@ BOOL LLOverlayBar::postBuild()
gSavedSettings.getControl("wlfAdvSettingsPopup")->getSignal()->connect(&updateAdvSettingsPopup);
gSavedSettings.getControl("ChatVisible")->getSignal()->connect(&updateChatVisible);
gSavedSettings.getControl("EnableAORemote")->getSignal()->connect(&updateAORemote);
childSetVisible("AdvSettings_container", !sAdvSettingsPopup);
childSetVisible("AdvSettings_container_exp", sAdvSettingsPopup);
childSetVisible("ao_remote_container", gSavedSettings.getBOOL("EnableAORemote"));
return TRUE;
}
@@ -345,6 +364,7 @@ void LLOverlayBar::refresh()
buttons_changed = TRUE;
}
moveChildToBackOfTabGroup(mAORemote);
moveChildToBackOfTabGroup(mMediaRemote);
moveChildToBackOfTabGroup(mVoiceRemote);
@@ -362,6 +382,7 @@ void LLOverlayBar::refresh()
childSetVisible("voice_remote_container", FALSE);
childSetVisible("AdvSettings_container", FALSE);
childSetVisible("AdvSettings_container_exp", FALSE);
childSetVisible("ao_remote_container", FALSE);
childSetVisible("state_buttons", FALSE);
}
else
@@ -371,6 +392,7 @@ void LLOverlayBar::refresh()
childSetVisible("voice_remote_container", LLVoiceClient::voiceEnabled());
childSetVisible("AdvSettings_container", !sAdvSettingsPopup);//!gSavedSettings.getBOOL("wlfAdvSettingsPopup"));
childSetVisible("AdvSettings_container_exp", sAdvSettingsPopup);//gSavedSettings.getBOOL("wlfAdvSettingsPopup"));
childSetVisible("ao_remote_container", gSavedSettings.getBOOL("EnableAORemote"));
childSetVisible("state_buttons", TRUE);
}
}

View File

@@ -51,6 +51,7 @@ class LLStatGraph;
class LLSlider;
class LLVoiceRemoteCtrl;
class wlfPanel_AdvSettings;
class AORemoteCtrl;
class LLOverlayBar
: public LLPanel
@@ -94,6 +95,7 @@ protected:
static void* createMediaRemote(void* userdata);
static void* createVoiceRemote(void* userdata);
static void* createAdvSettings(void* userdata);
static void* createAORemote(void* userdata);
static void* createChatBar(void* userdata);
void enableMediaButtons();
@@ -103,6 +105,7 @@ protected:
LLVoiceRemoteCtrl* mVoiceRemote;
LLButton* mCancelBtn;
wlfPanel_AdvSettings* mAdvSettings;
AORemoteCtrl* mAORemote;
bool mBuilt; // dialog constructed yet?
enum { STOPPED=0, PLAYING=1, PAUSED=2 };
S32 mMusicState;

View File

@@ -767,4 +767,9 @@ LLUUID LLPreviewNotecard::getItemID()
}
// </edit>
LLTextEditor* LLPreviewNotecard::getEditor()
{
return getChild<LLViewerTextEditor>("Notecard Editor");
}
// EOF

View File

@@ -43,6 +43,7 @@
// This class allows us to edit notecards
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLTextEditor;
class LLViewerTextEditor;
class LLButton;
@@ -84,16 +85,18 @@ public:
// asset system. :(
void refreshFromInventory();
// <edit>
LLUUID getNotecardItemID();
LLUUID getObjectID();
virtual LLUUID getItemID();
// <edit>
LLUUID getNotecardItemID();
LLUUID getObjectID();
virtual LLUUID getItemID();
// </edit>
protected:
virtual void loadAsset();
LLTextEditor* getEditor();
bool saveIfNeeded(LLInventoryItem* copyitem = NULL);
protected:
virtual void loadAsset();
static LLPreviewNotecard* getInstance(const LLUUID& uuid);
static void onLoadComplete(LLVFS *vfs,
@@ -102,7 +105,7 @@ protected:
void* user_data, S32 status, LLExtStat ext_status);
static void onClickSave(void* data);
// <edit>
// <edit>
static void onClickGetItems(void* data);
static void onSaveComplete(const LLUUID& asset_uuid,
@@ -122,9 +125,9 @@ protected:
LLUUID mNotecardItemID;
LLUUID mObjectID;
// <edit>
virtual BOOL canSaveAs() const;
virtual void saveAs();
// <edit>
virtual BOOL canSaveAs() const;
virtual void saveAs();
// </edit>
};

View File

@@ -53,6 +53,7 @@
#include "hippogridmanager.h"
#include "hippolimits.h"
#include "floaterao.h"
#include "llares.h"
#include "llcachename.h"
@@ -203,7 +204,6 @@
//#include "llactivation.h"
#include "wlfPanel_AdvSettings.h" //Lower right Windlight and Rendering options
#include "ascentdaycyclemanager.h"
#include "llao.h"
#include "llfloaterblacklist.h"
#include "scriptcounter.h"
// </edit>
@@ -984,9 +984,6 @@ bool idle_startup()
// Overwrite default user settings with user settings
LLAppViewer::instance()->loadSettingsFromDirectory("Account");
//User settings are loaded, get the AO settings - HgB
LLAO::refresh();
// Need to set the LastLogoff time here if we don't have one. LastLogoff is used for "Recent Items" calculation
// and startup time is close enough if we don't have a real value.
if (gSavedPerAccountSettings.getU32("LastLogoff") == 0)
@@ -2861,6 +2858,12 @@ bool idle_startup()
gFloaterWorldMap->observeFriends();
}
// Start the AO now that settings have loaded and login successful -- MC
if (!gAOInvTimer)
{
gAOInvTimer = new AOInvTimer();
}
gViewerWindow->showCursor();
gViewerWindow->getWindow()->resetBusyCount();
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);

View File

@@ -244,7 +244,6 @@
#include "dofloaterhex.h"
#include "hgfloatertexteditor.h"
#include "llfloatermessagelog.h"
#include "llao.h"
#include "llfloatervfs.h"
#include "llfloatervfsexplorer.h"
// </edit>
@@ -252,6 +251,7 @@
#include "scriptcounter.h"
#include "llfloaterdisplayname.h"
#include "llavatarnamecache.h"
#include "floaterao.h"
#include "hippogridmanager.h"
@@ -426,13 +426,46 @@ void handle_leave_god_mode(void*);
// <edit>
void handle_fake_away_status(void*);
void handle_area_search(void*);
void handle_pose_stand_ltao(void*);
void handle_pose_stand_ltah(void*);
void handle_pose_stand_ltad(void*);
void handle_pose_stand_loau(void*);
void handle_pose_stand_loao(void*);
void handle_pose_stand_lhao(void*);
void handle_pose_stand_stop(void*);
// <dogmode> for pose stand
LLUUID current_pose = LLUUID::null;
void set_current_pose(std::string anim)
{
if (current_pose == LLUUID::null)
gSavedSettings.setF32("AscentAvatarZModifier", gSavedSettings.getF32("AscentAvatarZModifier") + 7.5);
gAgent.sendAgentSetAppearance();
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_STOP);
current_pose.set(anim);
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_START);
}
void handle_pose_stand(void*)
{
set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53");
}
void handle_pose_stand_stop(void*)
{
if (current_pose != LLUUID::null)
{
gSavedSettings.setF32("AscentAvatarZModifier", gSavedSettings.getF32("AscentAvatarZModifier") - 7.5);
gAgent.sendAgentSetAppearance();
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_STOP);
current_pose = LLUUID::null;
}
}
void handle_toggle_pose(void* userdata) {
if(current_pose.isNull())
handle_pose_stand(userdata);
else
handle_pose_stand_stop(userdata);
}
BOOL handle_check_pose(void* userdata) {
return current_pose.notNull();
}
void handle_force_ground_sit(void*);
void handle_phantom_avatar(void*);
@@ -570,9 +603,6 @@ BOOL enable_region_owner(void*);
void menu_toggle_attached_lights(void* user_data);
void menu_toggle_attached_particles(void* user_data);
// <dogmode> for pose stand
LLUUID current_pose = LLUUID::null;
class LLMenuParcelObserver : public LLParcelObserver
{
public:
@@ -769,12 +799,7 @@ void init_menus()
menu->append(new LLMenuItemCallGL( "Force Ground Sit", &handle_force_ground_sit, NULL));
menu->append(new LLMenuItemCallGL( "Phantom Avatar", &handle_phantom_avatar, NULL));
menu->appendSeparator();
menu->append(new LLMenuItemCheckGL( "Enable AO",
&menu_toggle_control,
NULL,
&menu_check_control,
(void*)"AO.Enabled"));
menu->append(new LLMenuItemCallGL( "Edit AO...",
menu->append(new LLMenuItemCallGL( "Animation Override...",
&handle_edit_ao, NULL));
menu->append(new LLMenuItemCheckGL( "Nimble",
&menu_toggle_control,
@@ -799,7 +824,7 @@ void init_menus()
// <dogmode>
// Add in the pose stand -------------------------------------------
LLMenuGL* sub = new LLMenuGL("Pose Stand...");
/*LLMenuGL* sub = new LLMenuGL("Pose Stand...");
menu->appendMenu(sub);
sub->append(new LLMenuItemCallGL( "Legs Together Arms Out", &handle_pose_stand_ltao, NULL));
@@ -809,7 +834,9 @@ void init_menus()
sub->append(new LLMenuItemCallGL( "Legs Out Arms Out", &handle_pose_stand_loao, NULL));
sub->append(new LLMenuItemCallGL( "Legs Half Arms Out", &handle_pose_stand_lhao, NULL));
sub->append(new LLMenuItemCallGL( "Stop Pose Stand", &handle_pose_stand_stop, NULL));
// </dogmode> ------------------------------------------------------
// </dogmode> ------------------------------------------------------*/
menu->append(new LLMenuItemCheckGL("Pose Stand",&handle_toggle_pose, NULL, &handle_check_pose, NULL));
//these should always be last in a sub menu
menu->createJumpKeys();
@@ -840,6 +867,7 @@ void init_menus()
LLRect menuBarRect = gLoginMenuBarView->getRect();
menu = new LLMenuGL(CLIENT_MENU_NAME);
menu->setCanTearOff(FALSE);
menu->append(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL));
gLoginMenuBarView->appendMenu(menu);
menu->updateParent(LLMenuGL::sMenuContainer);
@@ -3620,7 +3648,7 @@ void handle_open_message_log(void*)
void handle_edit_ao(void*)
{
LLFloaterAO::show();
LLFloaterAO::show(NULL);
}
void handle_local_assets(void*)
@@ -3654,56 +3682,6 @@ void handle_close_all_notifications(void*)
}
}
// <dogmode>
// The following animations were made by Charley Levenque and are
// not public property or free to use via UUID. When replicating
// this code, please supply your own animations.
void set_current_pose(std::string anim)
{
if (current_pose == LLUUID::null)
gSavedSettings.setF32("AscentAvatarZModifier", gSavedSettings.getF32("AscentAvatarZModifier") + 7.5);
gAgent.sendAgentSetAppearance();
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_STOP);
current_pose.set(anim);
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_START);
}
void handle_pose_stand_ltao(void*)
{
set_current_pose("6c082c7b-f70e-9da0-0451-54793f869ff4");
}
void handle_pose_stand_ltah(void*)
{
set_current_pose("45e59c14-913b-c58c-2a55-c0a5c1eeef53");
}
void handle_pose_stand_ltad(void*)
{
set_current_pose("421d6bb4-94a9-3c42-4593-f2bc1f6a26e6");
}
void handle_pose_stand_loau(void*)
{
set_current_pose("8b3bb239-d610-1c0f-4d1a-69d29bc17e2c");
}
void handle_pose_stand_loao(void*)
{
set_current_pose("4d70e328-48b6-dc6a-0be1-85dd6b333e81");
}
void handle_pose_stand_lhao(void*)
{
set_current_pose("f088eaf0-f1c9-8cf1-99c8-09df96bb13ae");
}
void handle_pose_stand_stop(void*)
{
if (current_pose != LLUUID::null)
{
gSavedSettings.setF32("AscentAvatarZModifier", gSavedSettings.getF32("AscentAvatarZModifier") - 7.5);
gAgent.sendAgentSetAppearance();
gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_STOP);
current_pose = LLUUID::null;
}
}
// </dogmode> ---------------------------------------------------
void handle_area_search(void*)
{
JCFloaterAreaSearch::toggle();

View File

@@ -93,10 +93,10 @@
#include "llsdserialize.h" //For the client definitions
#include "llcachename.h"
#include "floaterao.h"
// <edit>
#include "llfloaterexploreanimations.h"
#include "llao.h"
#include "llimagemetadatareader.h"
// </edit>
@@ -2727,10 +2727,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
// trigger fidget anims
if (isAnyAnimationSignaled(AGENT_STAND_ANIMS, NUM_AGENT_STAND_ANIMS))
{
// <edit>
if(LLAO::isEnabled())
LLAO::mTimer->resume();//Timer only pauses if its not paused, check is inside function.
// </edit>
agent.fidget();
}
}
@@ -3333,8 +3329,9 @@ void LLVOAvatar::idleUpdateWindEffect()
bool LLVOAvatar::updateClientTags()
{
std::string client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_definitions.xml");
LLSD response = LLHTTPClient::blockingGet("http://46.4.144.79/client_definitions.xml");
std::string client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_tags_sg1.xml");
std::string client_list_url = gSavedSettings.getString("ClientDefinitionsURL");
LLSD response = LLHTTPClient::blockingGet(client_list_url);
if(response.has("body"))
{
const LLSD &client_list = response["body"];
@@ -3354,11 +3351,11 @@ bool LLVOAvatar::updateClientTags()
bool LLVOAvatar::loadClientTags()
{
//Changed the file name to keep Emerald from overwriting it. Hokey stuff in there, and it's missing clients. -HGB
std::string client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_definitions.xml");
std::string client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_tags_sg1.xml");
if(!LLFile::isfile(client_list_filename))
{
client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "client_definitions.xml");
client_list_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "client_tags_sg1.xml");
}
if(LLFile::isfile(client_list_filename))
@@ -5544,9 +5541,13 @@ void LLVOAvatar::processAnimationStateChanges()
if (found_anim == mSignaledAnimations.end())
{
if (mIsSelf)
{
if ((gSavedSettings.getBOOL("AOEnabled")) && LLFloaterAO::stopMotion(anim_it->first, FALSE)) // if the AO replaced this anim serverside then stop it serverside
{
// return TRUE; //no local stop needed
}
}
processSingleAnimationStateChange(anim_it->first, FALSE);
// <edit>
@@ -5572,6 +5573,11 @@ void LLVOAvatar::processAnimationStateChanges()
// </edit>
if (processSingleAnimationStateChange(anim_it->first, TRUE))
{
if (mIsSelf && gSavedSettings.getBOOL("AOEnabled")) // AO is only for ME
{
LLFloaterAO::startMotion(anim_it->first, 0,FALSE); // AO overrides the anim if needed
}
mPlayingAnimations[anim_it->first] = anim_it->second;
++anim_it;
continue;
@@ -5581,16 +5587,6 @@ void LLVOAvatar::processAnimationStateChanges()
++anim_it;
}
// clear source information for animations which have been stopped
if (mIsSelf)
{
@@ -5646,6 +5642,14 @@ void LLVOAvatar::undeform()
if (found_anim == mSignaledAnimations.end())
{
if (mIsSelf)
{
if ((gSavedSettings.getBOOL("AOEnabled")) && LLFloaterAO::stopMotion(anim_it->first, FALSE)) // if the AO replaced this anim serverside then stop it serverside
{
// return TRUE; //no local stop needed
}
}
processSingleAnimationStateChange(anim_it->first, FALSE);
mPlayingAnimations.erase(anim_it++);
continue;
@@ -5786,81 +5790,16 @@ std::string LLVOAvatar::getIdleTime()
//-----------------------------------------------------------------------------
BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
{
LLMemType mt(LLMemType::MTYPE_AVATAR);
// <edit>
if(mIsSelf)
// [Ansariel Hiller]: Disable pesky hover up animation that changes
// hand and finger position and often breaks correct
// fit of prim nails, rings etc. when flying and
// using an AO.
if ("62c5de58-cb33-5743-3d07-9e4cd4352864" == id.getString() && gSavedSettings.getBOOL("DisableInternalFlyUpAnimation"))
{
if(LLAO::isEnabled())
{
std::string ao_id;
if (LLAO::isStand(id))
{
ao_id = "Stands";
}
else if (LLAO::isVoice(id))
{
ao_id = "Voices";
}
else
{
ao_id = id.asString();
}
if (LLAO::mAnimationOverrides[ao_id].size() > 0)
{
if (LLAO::mLastAnimation.notNull())
{
gAgent.sendAnimationRequest(LLAO::mLastAnimation, ANIM_REQUEST_STOP);
stopMotion(LLAO::mLastAnimation, true);
llinfos << "Stopping old animation." << llendl;
}
std::string anim_name;
LLUUID new_anim = LLUUID::null;
while (new_anim.isNull())
{
LLAO::mAnimationIndex++;
if (LLAO::mAnimationOverrides[ao_id].size() <= LLAO::mAnimationIndex)
{
LLAO::mAnimationIndex = 0;
}
anim_name = static_cast<const std::string&> (LLAO::mAnimationOverrides[ao_id][LLAO::mAnimationIndex]);
new_anim = LLAO::getAssetIDByName(anim_name);
if (new_anim.isNull())
{
LLChat chat;
chat.mSourceType = CHAT_SOURCE_SYSTEM;
chat.mText = llformat("Could not find animation %s, skipping and moving to next.", anim_name.c_str());
LLFloaterChat::addChat(chat);
}
}
llinfos << "Switching to anim #" << LLAO::mAnimationIndex << ": " << anim_name << "(UUID " << new_anim << ")" << llendl;
gAgent.sendAnimationRequest(new_anim, ANIM_REQUEST_START);
startMotion(new_anim, time_offset);
//LLMotion* motion = findMotion(new_anim);
/*if (motion)
{
motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle())));
}*/
LLAO::mLastAnimation = new_anim;
}
/*if(LLAO::mOverrides.find(id) != LLAO::mOverrides.end())
{
// avoid infinite loops!
if( (id != LLAO::mOverrides[id])
&& (LLAO::mOverrides.find(LLAO::mOverrides[id]) == LLAO::mOverrides.end()) )
{
//llinfos << "AO: Replacing " << id.asString() << " with " << LLAO::mOverrides[id].asString() << llendl;
gAgent.sendAnimationRequest(LLAO::mOverrides[id], ANIM_REQUEST_START);
startMotion(LLAO::mOverrides[id], time_offset);
}
}*/
}
return TRUE;
}
// </edit>
LLMemType mt(LLMemType::MTYPE_AVATAR);
// start special case female walk for female avatars
if (getSex() == SEX_FEMALE)
@@ -5880,36 +5819,6 @@ BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
gAgent.setAFK();
}
if( id == ANIM_AGENT_BUSY ||
id == ANIM_AGENT_CROUCH ||
id == ANIM_AGENT_CROUCHWALK ||
id == ANIM_AGENT_FEMALE_WALK ||
id == ANIM_AGENT_FLY ||
id == ANIM_AGENT_FLYSLOW ||
id == ANIM_AGENT_HOVER ||
id == ANIM_AGENT_HOVER_DOWN ||
id == ANIM_AGENT_HOVER_UP ||
id == ANIM_AGENT_JUMP ||
id == ANIM_AGENT_LAND ||
id == ANIM_AGENT_PRE_JUMP ||
id == ANIM_AGENT_RUN ||
id == ANIM_AGENT_SHOUT ||
id == ANIM_AGENT_SIT ||
id == ANIM_AGENT_SIT_FEMALE ||
id == ANIM_AGENT_SIT_GENERIC ||
id == ANIM_AGENT_SIT_GROUND ||
id == ANIM_AGENT_SIT_GROUND_CONSTRAINED ||
id == ANIM_AGENT_SNAPSHOT ||
id == ANIM_AGENT_STAND ||
id == ANIM_AGENT_TURNLEFT ||
id == ANIM_AGENT_TURNRIGHT ||
id == ANIM_AGENT_TYPE ||
id == ANIM_AGENT_WALK ||
id == ANIM_AGENT_WHISPER ||
id == ANIM_AGENT_WHISPER
)
mIdleTimer.reset();
return LLCharacter::startMotion(id, time_offset);
}
@@ -5920,50 +5829,8 @@ BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
{
if (mIsSelf)
{
// <edit>
if(LLAO::isEnabled())
{
std::string ao_id;
if (LLAO::isStand(id))
{
ao_id = "Stands";
}
else if (LLAO::isVoice(id))
{
ao_id = "Voices";
}
else
{
ao_id = id.asString();
}
if (LLAO::mAnimationOverrides[ao_id].size() > 0)
{
LLUUID new_anim = LLAO::getAssetIDByName(LLAO::mAnimationOverrides[ao_id][LLAO::mAnimationIndex]);
gAgent.sendAnimationRequest(new_anim, ANIM_REQUEST_STOP);
stopMotion(new_anim, stop_immediate);
LLAO::mLastAnimation.setNull();
}
/*if( (LLAO::mOverrides.find(id) != LLAO::mOverrides.end())
&& (id != LLAO::mOverrides[id]) )
{
gAgent.sendAnimationRequest(LLAO::mOverrides[id], ANIM_REQUEST_STOP);
stopMotion(LLAO::mOverrides[id], stop_immediate);
}*/
}
else //if this code ever works without crashing the viewer -HgB
{
if (!LLAO::mLastAnimation.isNull())
{
llinfos << "Stopped last animation automatically. May not have needed to be stopped yet." << llendl;
gAgent.sendAnimationRequest(LLAO::mLastAnimation, ANIM_REQUEST_STOP);
LLAO::mLastAnimation = LLUUID::null;
}
}
// </edit>
gAgent.onAnimStop(id);
}
if (id == ANIM_AGENT_WALK)
{
@@ -5973,10 +5840,6 @@ BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
{
LLCharacter::stopMotion(ANIM_AGENT_SIT_FEMALE, stop_immediate);
}
if(id == ANIM_AGENT_AWAY ||
id == ANIM_AGENT_BUSY)
mIdleTimer.reset();
return LLCharacter::stopMotion(id, stop_immediate);
}
@@ -6010,6 +5873,11 @@ void LLVOAvatar::stopMotionFromSource(const LLUUID& source_id)
//-----------------------------------------------------------------------------
LLVector3 LLVOAvatar::getVolumePos(S32 joint_index, LLVector3& volume_offset)
{
if(joint_index < 0)
{
return LLVector3::zero;
}
if (joint_index > mNumCollisionVolumes)
{
return LLVector3::zero;
@@ -7367,6 +7235,7 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
gPipeline.markMoved(mDrawable, TRUE);
mIsSitting = TRUE;
LLFloaterAO::ChangeStand();
mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject
mRoot.setPosition(getPosition());
mRoot.updateWorldMatrixChildren();
@@ -7443,6 +7312,7 @@ void LLVOAvatar::getOffObject()
mRoot.getXform()->update();
startMotion(ANIM_AGENT_BODY_NOISE);
LLFloaterAO::ChangeStand();
if (mIsSelf)
{

View File

@@ -2057,7 +2057,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
if (face == -1)
{
start_face = 0;
end_face = volume->getNumFaces();
end_face = volume->getNumVolumeFaces();
}
else
{

View File

@@ -1322,12 +1322,13 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
F32 dot_radius)
{
const F32 HEIGHT_THRESHOLD = 7.f;
LLUIImagePtr dot_image = sAvatarSmallImage;
LLUIImagePtr dot_image = sAvatarLevelImage;
if (relative_z == 16000.f) // Unknown altitude (0m or > 1020m)
{
F32 mag = color.length();
color=color*0.5f + LLColor4(mag, mag, mag)*0.25f;
//F32 mag = color.length();
//color=color*0.5f + LLColor4(mag, mag, mag)*0.25f;
dot_image = sAvatarSmallImage;
}
else if (relative_z < -HEIGHT_THRESHOLD)
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 858 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,101 +1,247 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
width="305" height="590" min_width="275" min_height="400"
name="AO Editor" title="AO Editor" rect_control="FloaterAORect">
<text follows="top|left" height="15" left="10" name="text_stand1" bottom="-40">
Action:
</text>
<combo_box name="combo_anim_type" max_length="36" allow_text_entry="true" follows="top||left|right" height="20" left="75" right="-7" bottom_delta="0">
<combo_item type="string" length="1" enabled="true" name="Crouch" value="201f3fdf-cb1f-dbec-201f-7333e328ae7c">
Crouch
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Crouchwalk" value="47f5f6fb-22e5-ae44-f871-73aaaf4a6022">
Crouchwalk
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Fall" value="666307d9-a860-572d-6fd4-c3ab8865c094">
Fall
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Fly" value="aec4610c-757f-bc4e-c092-c6e9caf18daf">
Fly
</combo_item>
<combo_item type="string" length="1" enabled="true" name="FlyDown" value="20f063ea-8306-2562-0b07-5c853b37b31e">
Fly Down
</combo_item>
<combo_item type="string" length="1" enabled="true" name="FlyUp" value="62c5de58-cb33-5743-3d07-9e4cd4352864">
Fly Up
</combo_item>
<combo_item type="string" length="1" enabled="true" name="GroundSit" value="1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e">
Ground Sit
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Hover" value="4ae8016b-31b9-03bb-c401-b1ea941db41d">
Hover
</combo_item>
<combo_item type="string" length="1" enabled="true" name="SoftLand" value="7a17b059-12b2-41b1-570a-186368b6aa6f">
Land (Soft)
</combo_item>
<combo_item type="string" length="1" enabled="true" name="MediumLand" value="f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57">
Land (Medium)
</combo_item>
<combo_item type="string" length="1" enabled="true" name="HardLand" value="3da1d753-028a-5446-24f3-9c9b856d9422">
Land (Hard)
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Jump" value="2305bd75-1ca9-b03b-1faa-b176b8a8c49e">
Jump
</combo_item>
<combo_item type="string" length="1" enabled="true" name="PreJump" value="7a4e87fe-de39-6fcb-6223-024b00893244">
Pre-Jump
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Run" value="05ddbff8-aaa9-92a1-2b74-8fe77a29b445">
Run
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Sit" value="1a5fe8ac-a804-8a5d-7cbd-56bd83184568">
Sit
</combo_item>
<combo_item type="string" length="1" enabled="true" name="SlowFly" value="2b5a38b2-5e00-3a97-a495-4c826bc443e6">
Slow Fly
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Stand" value="Stands">
Stand
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Stride" value="1cb562b0-ba21-2202-efb3-30f82cdf9595">
Stride
</combo_item>
<combo_item type="string" length="1" enabled="true" name="TurnLeft" value="56e0ba0d-4a9f-7f27-6117-32f2ebbf6135">
Turn Left
</combo_item>
<combo_item type="string" length="1" enabled="true" name="TurnRight" value="2d6daa51-3192-6794-8e2e-a15f8338ec30">
Turn Right
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Type" value="c541c47f-e0c0-058b-ad1a-d6ae3a4584d9">
Typing
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Voice" value="Voices">
Voice
</combo_item>
<combo_item type="string" length="1" enabled="true" name="Walk" value="6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0">
Walk
</combo_item>
</combo_box>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater
name="geminifloater"
rect_control="AORect"
title="Animation Overrider"
can_resize="false"
can_minimize="true"
can_close="true"
can_drag_on_left="false"
width="610"
height="380">
<text follows="top|left" height="15" left="10" name="text_walking" bottom_delta="-25">
Animations:
</text>
<combo_box name="combo_anim_list" max_length="36" allow_text_entry="true" follows="top|left|right" height="20" left="75" right="-52" bottom_delta="0">
</combo_box>
<button follows="top|right" bottom_delta="0" height="20" label="+" right="-29" name="combo_anim_add" width="21" />
<button follows="top|right" bottom_delta="0" height="20" label="-" right="-7" name="combo_anim_delete" width="21" />
<text follows="top|left" height="15" left="10" name="text_running" bottom_delta="-25">
Current List:
</text>
<scroll_list bottom="35" can_resize="true" column_padding="0" draw_heading="true"
follows="left|top|bottom|right" left="7" multi_select="true" right="-7"
name="active_anim_list" width="280" search_column="1"
tool_tip="Hold shift or control while clicking to select multiple files"
top="-68">
<column dynamicwidth="true" label="Animation" name="anim_name" tool_tip="Name of the animation." />
</scroll_list>
<button follows="right|bottom" bottom="7" halign="center" height="24" label="Load..."
left="120" name="btn_load" width="80" />
<button follows="right|bottom" bottom="7" halign="center" height="24" label="Save..."
left_delta="90" name="btn_save" width="80" />
<view_border blevel_style="in" border_thickness="0" bottom="-380" follows="left|top" height="380" left="1"
mouse_opaque="false" name="ao_notecard" width="610" />
<view_border blevel_style="in" bottom="340" follows="left|top" height="16" left="10"
mouse_opaque="false" name="ao_notecard_vis" width="180" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="0" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0"
mouse_opaque="true" name="Give inventory"
tool_tip="Drop a ZHAO notecard here. Animations have to be in the same Inventory folder as the notecard." v_pad="2"
width="180">
Drop a ZHAO II notecard here
</text>
<view_border blevel_style="in" bottom_delta="-18" follows="left|top" height="16" left_delta="0"
mouse_opaque="false" name="ao_notecard_disp" width="180" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="0" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="center" height="16" left_delta="0"
mouse_opaque="true" name="ao_nc_text"
tool_tip="" v_pad="2"
width="180">
Currently set to: ITEM
</text>
<button
name="opencard"
label="View Notecard"
font="SansSerifSmall"
left="10"
bottom_delta="-30"
width="110"
height="20"
follows="bottom|left"
/>
<button
name="reloadcard"
label="Reload"
font="SansSerifSmall"
left="124"
bottom_delta="0"
width="70"
height="20"
follows="bottom|left"
/>
<check_box bottom_delta="-24" control_name="AOEnabled" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="false" label="Enable animations override" left="10"
mouse_opaque="true" name="AOEnabled" radio_style="false" width="90" />
<check_box bottom_delta="-18" control_name="AOSitsEnabled" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="true" label="Enable sits override" left="10"
mouse_opaque="true" name="AOSitsEnabled" radio_style="false" width="90" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="buttons_desc" v_pad="0" width="180">
Stands:
</text>
<combo_box name="stands" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="-20"/>
<button
name="prevstand"
tool_tip="previous stand"
label="&lt;&lt;"
font="SansSerifSmall"
left="10"
bottom_delta="-25"
width="90"
height="20"
follows="bottom|left"
/>
<button
name="nextstand"
tool_tip="next stand"
label="&gt;&gt;"
font="SansSerifSmall"
left="104"
bottom_delta="0"
width="90"
height="20"
follows="bottom|left"
/>
<check_box bottom_delta="-20" control_name="AOStandRandomize" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="false" label="Randomize stand order" left="10"
mouse_opaque="true" name="AOStandRandomize" radio_style="false" width="200" />
<check_box bottom_delta="-20" control_name="AONoStandsInMouselook" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
label="Disable stands in mouselook" left="10" mouse_opaque="true"
name="AONoStandsInMouselook" radio_style="false" width="180" />
<check_box bottom_delta="-20" control_name="EnableAORemote" enabled="true"
follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
label="Show AO toolbar" left="10" mouse_opaque="true"
name="ao_remote_checkbox" radio_style="false" width="180" />
<spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" control_name="AOStandInterval"
increment="1" initial_val="20" left="10" max_val="9000" min_val="1.00"
mouse_opaque="true" name="standtime" label="Stand time:" label_width="80"
tool_tip="AO stand time in seconds" width="180" />
<button
name="newcard"
label="New Notecard Template"
font="SansSerifSmall"
left="10"
bottom_delta="-32"
width="180"
height="20"
follows="bottom|left"
/>
<button bottom="4" follows="left|bottom" font="SansSerifSmall" halign="center"
height="20" label="More &gt;&gt;" left="118"
mouse_opaque="true" name="more_btn" scale_image="TRUE"
tool_tip="Advanced Options" width="76" />
<button bottom_delta="0" follows="left|bottom" font="SansSerifSmall" halign="center"
height="20" label="&lt;&lt; Less" left_delta="0"
mouse_opaque="true" name="less_btn" scale_image="TRUE"
tool_tip="Advanced Options" width="76" />
<tab_container label="Default" bottom="6" left="210" mouse_opaque="false" name="tabcontainer" tab_min_width="50" tab_position="top" width="390" height="350" bg_opaque_color="0,0,0,0.0">
<panel border="true" left="0" bottom="0" follows="left|top|right|bottom" height="350" label="Default Anims" mouse_opaque="true" name="tabdefaultanims" width="390">
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultwalk" v_pad="0" width="180">
Default Walk:
</text>
<combo_box name="walks" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultWalk" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultrun" v_pad="0" width="180">
Default Run:
</text>
<combo_box name="runs" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultRun" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultjump" v_pad="0" width="180">
Default Jump:
</text>
<combo_box name="jumps" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultJump" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultsit" v_pad="0" width="180">
Default Sit:
</text>
<combo_box name="sits" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultSit" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultgsit" v_pad="0" width="180">
Default Groundsit:
</text>
<combo_box name="gsits" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultGroundSit" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultcrouch" v_pad="0" width="180">
Default Crouch:
</text>
<combo_box name="crouchs" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultCrouch" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultcrouchwalk" v_pad="0" width="180">
Default Crouchwalk:
</text>
<combo_box name="cwalks" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultCrouchWalk" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
mouse_opaque="true" name="textdefaultfall" v_pad="0" width="180">
Default Fall:
</text>
<combo_box name="falls" label="" follows="left|top" height="20" left="10" width="180" bottom_delta="0" control_name="AODefaultFall" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="280" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="200"
mouse_opaque="true" name="textdefaulthover" v_pad="0" width="180">
Default Hover:
</text>
<combo_box name="hovers" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultHover" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultfly" v_pad="0" width="180">
Default Fly:
</text>
<combo_box name="flys" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultFly" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultflyslow" v_pad="0" width="180">
Default Slow Fly:
</text>
<combo_box name="flyslows" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultFlySlow" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultflyup" v_pad="0" width="180">
Default Upward Fly:
</text>
<combo_box name="flyups" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultFlyUp" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultflydown" v_pad="0" width="180">
Default Downward Fly:
</text>
<combo_box name="flydowns" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultFlyDown" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultland" v_pad="0" width="180">
Default Land:
</text>
<combo_box name="lands" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultLand" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultstandup" v_pad="0" width="180">
Default Standup:
</text>
<combo_box name="standups" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultStandUp" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-40" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="0"
mouse_opaque="true" name="textdefaultprejump" v_pad="0" width="180">
Default Pre-Jump:
</text>
<combo_box name="prejumps" label="" follows="left|top" height="20" left_delta="0" width="180" bottom_delta="0" control_name="AODefaultPreJump" />
</panel>
</tab_container>
</floater>

View File

@@ -6837,6 +6837,13 @@ No
[OLD_NAME] ([SLID]) is now known as [NEW_NAME].
</notification>
<notification
icon="notify.tga"
name="FirstAO"
type="notify">
For instructions, make a new template in the AO. Use the toolbar to toggle the AO on/off.
</notification>
</notifications>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel bg_visible="false" border="false" border_visible="false" bottom="0"
enabled="true" follows="right|bottom" height="20" left="0" mouse_opaque="true"
name="ao_remote" use_bounding_rect="true" width="96">
<panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="22" left="0" width="96" />
<panel bottom="3" filename="panel_ao_remote_controls.xml" name="panel_ao_controls" height="20" left="0" width="96" />
</panel>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel bg_visible="false" border="false" border_visible="false" bottom="1"
enabled="true" follows="right|bottom" height="20" left="0"
name="ao_controls" width="96">
<button bottom="-22" follows="left|bottom" font="SansSerif" halign="center" height="22"
label="AO Off" label_selected="AO On" left="3" name="ao_btn" control_name="AOEnabled"
tool_tip="Click here to toggle the Animation Overrider" width="66" />
<button bottom="-22" follows="left|bottom" font="SansSerif" halign="center" height="22" toggle="true"
label="" left_delta="68" name="popup_btn" scale_image="true" control_name="ShowAOSitPopup"
tool_tip="Click here for more options" width="22" />
</panel>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel bg_visible="false" border="false" border_visible="false" bottom="0"
enabled="true" follows="right|bottom" height="45" left="0" mouse_opaque="true"
name="ao_remote" use_bounding_rect="true" width="96">
<panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="47" left="0" width="96" />
<button bottom="-20" control_name="AOSitsEnabled" enabled="true"
follows="left|top" font="SansSerif" height="22" label="AO Sits Off" label_selected="AO Sits On"
mouse_opaque="true" name="ao_sit_btn" width="92" left="3" />
<panel bottom="13" filename="panel_ao_remote_controls.xml" name="panel_ao_controls" left="0" width="96" />
</panel>

View File

@@ -42,7 +42,7 @@
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="54" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16"
font="SansSerif" h_pad="0" halign="left" height="16"
left="339" mouse_opaque="true" name="grids_combo_text" v_pad="0" width="120">
Grid:
</text>
@@ -56,7 +56,7 @@
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="54" drop_shadow_visible="true" follows="left|bottom"
font="SansSerifSmall" h_pad="0" halign="left" height="16"
font="SansSerif" h_pad="0" halign="left" height="16"
left="475" mouse_opaque="true" name="start_location_text" v_pad="0" width="120">
Start Location:
</text>

View File

@@ -45,6 +45,11 @@
use_bounding_rect="true" width="395" />
</layout_stack>
</layout_panel>
<layout_panel auto_resize="false" bottom="0" left="0" min_width="96" mouse_opaque="false"
name="ao_remote_container" use_bounding_rect="true" user_resize="false"
width="100">
<panel background_visible="false" border="false" bottom="0" name="ao_remote" />
</layout_panel>
<layout_panel auto_resize="false" bottom="0" left="0" min_width="220" mouse_opaque="false"
name="media_remote_container" use_bounding_rect="true" user_resize="false"
width="220">