MAINT-7699: More robust cap protocol, better support for delete and support for individual tracks, support for setting environment by asset id in the cap
MAINT-7703: Initial flags sent in message protocol for parcelsmaster
parent
dbbb89a13c
commit
b50d546d5f
|
|
@ -231,6 +231,9 @@ void LLParcel::init(const LLUUID &owner_id,
|
|||
setAllowGroupAVSounds(TRUE);
|
||||
setAllowAnyAVSounds(TRUE);
|
||||
setHaveNewParcelLimitData(FALSE);
|
||||
|
||||
setRegionAllowEnvironmentOverride(FALSE);
|
||||
setParcelEnvironmentVersion(-1);
|
||||
}
|
||||
|
||||
void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned)
|
||||
|
|
|
|||
|
|
@ -511,6 +511,10 @@ public:
|
|||
{ return mRegionDenyAgeUnverifiedOverride; }
|
||||
BOOL getRegionAllowAccessOverride() const
|
||||
{ return mRegionAllowAccessoverride; }
|
||||
BOOL getRegionAllowEnvironmentOverride() const
|
||||
{ return mRegionAllowEnvironmentOverride; }
|
||||
S32 getParcelEnvironmentVersion() const
|
||||
{ return mCurrentEnvironmentVersion; }
|
||||
|
||||
|
||||
BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; }
|
||||
|
|
@ -581,6 +585,9 @@ public:
|
|||
void setRegionDenyAnonymousOverride(BOOL override) { mRegionDenyAnonymousOverride = override; }
|
||||
void setRegionDenyAgeUnverifiedOverride(BOOL override) { mRegionDenyAgeUnverifiedOverride = override; }
|
||||
void setRegionAllowAccessOverride(BOOL override) { mRegionAllowAccessoverride = override; }
|
||||
void setRegionAllowEnvironmentOverride(BOOL override) { mRegionAllowEnvironmentOverride = override; }
|
||||
|
||||
void setParcelEnvironmentVersion(S32 version) { mCurrentEnvironmentVersion = version; }
|
||||
|
||||
// Accessors for parcel sellWithObjects
|
||||
void setPreviousOwnerID(LLUUID prev_owner) { mPreviousOwnerID = prev_owner; }
|
||||
|
|
@ -662,8 +669,10 @@ protected:
|
|||
BOOL mRegionDenyAnonymousOverride;
|
||||
BOOL mRegionDenyAgeUnverifiedOverride;
|
||||
BOOL mRegionAllowAccessoverride;
|
||||
BOOL mRegionAllowEnvironmentOverride;
|
||||
BOOL mAllowGroupAVSounds;
|
||||
BOOL mAllowAnyAVSounds;
|
||||
S32 mCurrentEnvironmentVersion;
|
||||
|
||||
bool mIsDefaultDayCycle;
|
||||
|
||||
|
|
|
|||
|
|
@ -300,7 +300,6 @@ bool LLSettingsBase::validate()
|
|||
{
|
||||
LL_WARNS("SETTINGS") << "Validation warnings: " << result["warnings"] << LL_ENDL;
|
||||
}
|
||||
LL_WARNS("SETTINGS") << "Validation success is " << result["success"] << LL_ENDL;
|
||||
|
||||
return result["success"].asBoolean();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1375,7 +1375,9 @@ char const* const _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getIn
|
|||
char const* const _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock");
|
||||
char const* const _PREHASH_RegionAllowAccessBlock = LLMessageStringTable::getInstance()->getString("RegionAllowAccessBlock");
|
||||
char const* const _PREHASH_RegionAllowAccessOverride = LLMessageStringTable::getInstance()->getString("RegionAllowAccessOverride");
|
||||
|
||||
char const* const _PREHASH_ParcelEnvironmentBlock = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentBlock");
|
||||
char const* const _PREHASH_ParcelEnvironmentVersion = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentVersion");
|
||||
char const* const _PREHASH_RegionAllowEnvironmentOverride = LLMessageStringTable::getInstance()->getString("RegionAllowEnvironmentOverride");
|
||||
char const* const _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord");
|
||||
char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord");
|
||||
char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
|
||||
|
|
|
|||
|
|
@ -1375,6 +1375,9 @@ extern char const* const _PREHASH_RegionDenyAgeUnverified;
|
|||
extern char const* const _PREHASH_AgeVerificationBlock;
|
||||
extern char const* const _PREHASH_RegionAllowAccessBlock;
|
||||
extern char const* const _PREHASH_RegionAllowAccessOverride;
|
||||
extern char const* const _PREHASH_ParcelEnvironmentBlock;
|
||||
extern char const* const _PREHASH_ParcelEnvironmentVersion;
|
||||
extern char const* const _PREHASH_RegionAllowEnvironmentOverride;
|
||||
extern char const* const _PREHASH_UCoord;
|
||||
extern char const* const _PREHASH_VCoord;
|
||||
extern char const* const _PREHASH_FaceIndex;
|
||||
|
|
|
|||
|
|
@ -61,6 +61,18 @@
|
|||
//=========================================================================
|
||||
namespace
|
||||
{
|
||||
const std::string KEY_ENVIRONMENT("environment");
|
||||
const std::string KEY_DAYASSET("day_asset");
|
||||
const std::string KEY_DAYCYCLE("day_cycle");
|
||||
const std::string KEY_DAYHASH("day_hash");
|
||||
const std::string KEY_DAYLENGTH("day_length");
|
||||
const std::string KEY_DAYOFFSET("day_offset");
|
||||
const std::string KEY_ISDEFAULT("is_default");
|
||||
const std::string KEY_PARCELID("parcel_id");
|
||||
const std::string KEY_REGIONID("region_id");
|
||||
const std::string KEY_TRACKALTS("track_altitudes");
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
LLTrace::BlockTimerStatHandle FTM_ENVIRONMENT_UPDATE("Update Environment Tick");
|
||||
LLTrace::BlockTimerStatHandle FTM_SHADER_PARAM_UPDATE("Update Shader Parameters");
|
||||
|
||||
|
|
@ -254,6 +266,8 @@ const LLUUID LLEnvironment::KNOWN_SKY_MIDDAY("07589e0e-8e2e-4864-8e58-07b516efd9
|
|||
const LLUUID LLEnvironment::KNOWN_SKY_SUNSET("8113ba47-3223-46ba-bae6-12c875091b32");
|
||||
const LLUUID LLEnvironment::KNOWN_SKY_MIDNIGHT("90187088-d7f3-4656-8c27-8ba0e19e21e9");
|
||||
|
||||
const S32 LLEnvironment::NO_TRACK(-1);
|
||||
|
||||
const F32 LLEnvironment::SUN_DELTA_YAW(F_PI); // 180deg
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -269,6 +283,7 @@ LLEnvironment::LLEnvironment():
|
|||
{
|
||||
}
|
||||
|
||||
#pragma optimize ("", off)
|
||||
void LLEnvironment::initSingleton()
|
||||
{
|
||||
LLSettingsSky::ptr_t p_default_sky = LLSettingsVOSky::buildDefaultSky();
|
||||
|
|
@ -280,16 +295,17 @@ void LLEnvironment::initSingleton()
|
|||
|
||||
mEnvironments[ENV_DEFAULT] = mCurrentEnvironment;
|
||||
|
||||
requestRegionEnvironment();
|
||||
requestRegion();
|
||||
|
||||
LLRegionInfoModel::instance().setUpdateCallback([this]() { onParcelChange(); });
|
||||
gAgent.addParcelChangedCallback([this]() { onParcelChange(); });
|
||||
|
||||
//TODO: This frequently results in one more request than we need. It isn't breaking, but should be nicer.
|
||||
gAgent.addRegionChangedCallback([this]() { requestRegionEnvironment(); });
|
||||
LLRegionInfoModel::instance().setUpdateCallback([this]() { requestRegion(); });
|
||||
gAgent.addRegionChangedCallback([this]() { requestRegion(); });
|
||||
|
||||
gAgent.whenPositionChanged([this](const LLVector3 &localpos, const LLVector3d &) { onAgentPositionHasChanged(localpos); });
|
||||
}
|
||||
#pragma optimize ("", on)
|
||||
|
||||
LLEnvironment::~LLEnvironment()
|
||||
{
|
||||
|
|
@ -391,6 +407,7 @@ bool LLEnvironment::isInventoryEnabled() const
|
|||
!gAgent.getRegionCapability("UpdateSettingsTaskInventory").empty());
|
||||
}
|
||||
|
||||
#pragma optimize ("", off)
|
||||
void LLEnvironment::onParcelChange()
|
||||
{
|
||||
S32 parcel_id(INVALID_PARCEL_ID);
|
||||
|
|
@ -403,11 +420,7 @@ void LLEnvironment::onParcelChange()
|
|||
|
||||
requestParcel(parcel_id);
|
||||
}
|
||||
|
||||
void LLEnvironment::requestRegionEnvironment()
|
||||
{
|
||||
requestRegion();
|
||||
}
|
||||
#pragma optimize ("", on)
|
||||
|
||||
void LLEnvironment::onLegacyRegionSettings(LLSD data)
|
||||
{
|
||||
|
|
@ -950,22 +963,10 @@ void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
|
|||
|
||||
void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo)
|
||||
{
|
||||
LL_WARNS("ENVIRONMENT") << "Have environment" << LL_ENDL;
|
||||
|
||||
LLSettingsDay::ptr_t pday = LLSettingsVODay::buildFromEnvironmentMessage(envinfo->mDaycycleData);
|
||||
|
||||
LL_WARNS("ENVIRONMENT") << "serverhash=" << envinfo->mDayHash << " viewerhash=" << pday->getHash() << LL_ENDL;
|
||||
|
||||
if (envinfo->mParcelId == INVALID_PARCEL_ID)
|
||||
{ // the returned info applies to an entire region.
|
||||
LL_WARNS("LAPRAS") << "Setting Region environment" << LL_ENDL;
|
||||
setEnvironment(ENV_REGION, pday, envinfo->mDayLength, envinfo->mDayOffset);
|
||||
if (parcel_id != INVALID_PARCEL_ID)
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "Had requested parcel environment #" << parcel_id << " but got region." << LL_ENDL;
|
||||
clearEnvironment(ENV_PARCEL);
|
||||
}
|
||||
|
||||
setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
|
||||
mTrackAltitudes = envinfo->mAltitudes;
|
||||
|
||||
LL_WARNS("LAPRAS") << "Altitudes set to {" << mTrackAltitudes[0] << ", "<< mTrackAltitudes[1] << ", " << mTrackAltitudes[2] << ", " << mTrackAltitudes[3] << LL_ENDL;
|
||||
|
|
@ -973,7 +974,6 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
|
|||
else
|
||||
{
|
||||
LLParcel *parcel = LLViewerParcelMgr::instance().getAgentParcel();
|
||||
|
||||
LL_WARNS("LAPRAS") << "Have parcel environment #" << envinfo->mParcelId << LL_ENDL;
|
||||
if (parcel && (parcel->getLocalID() != parcel_id))
|
||||
{
|
||||
|
|
@ -981,23 +981,33 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI
|
|||
return;
|
||||
}
|
||||
|
||||
setEnvironment(ENV_PARCEL, pday, envinfo->mDayLength, envinfo->mDayOffset);
|
||||
if (!envinfo->mDayCycle)
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "Clearing environment on parcel #" << parcel_id << LL_ENDL;
|
||||
clearEnvironment(ENV_PARCEL);
|
||||
}
|
||||
else
|
||||
{
|
||||
setEnvironment(ENV_PARCEL, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset);
|
||||
}
|
||||
}
|
||||
|
||||
updateEnvironment();
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
#pragma optimize ("", off)
|
||||
void LLEnvironment::requestRegion()
|
||||
{
|
||||
if (!isExtendedEnvironmentEnabled())
|
||||
{
|
||||
{ /*TODO: When EEP is live on the entire grid, this can go away. */
|
||||
LLEnvironmentRequest::initiate();
|
||||
return;
|
||||
}
|
||||
|
||||
requestParcel(INVALID_PARCEL_ID);
|
||||
}
|
||||
#pragma optimize ("", on)
|
||||
|
||||
void LLEnvironment::updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset)
|
||||
{
|
||||
|
|
@ -1048,8 +1058,14 @@ void LLEnvironment::requestParcel(S32 parcel_id)
|
|||
|
||||
void LLEnvironment::updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset)
|
||||
{
|
||||
LLSettingsVOBase::getSettingsAsset(asset_id,
|
||||
[this, parcel_id, day_length, day_offset](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onUpdateParcelAssetLoaded(asset_id, settings, status, parcel_id, day_length, day_offset); });
|
||||
std::string coroname =
|
||||
LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
|
||||
[this, parcel_id, asset_id, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK,
|
||||
LLSettingsDay::ptr_t(), asset_id, day_length, day_offset, environment_apply_fn()); });
|
||||
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
|
||||
|
||||
// LLSettingsVOBase::getSettingsAsset(asset_id,
|
||||
// [this, parcel_id, day_length, day_offset](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onUpdateParcelAssetLoaded(asset_id, settings, status, parcel_id, day_length, day_offset); });
|
||||
}
|
||||
|
||||
void LLEnvironment::onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset)
|
||||
|
|
@ -1096,17 +1112,19 @@ void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday
|
|||
{
|
||||
std::string coroname =
|
||||
LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment",
|
||||
boost::bind(&LLEnvironment::coroUpdateEnvironment, this, parcel_id,
|
||||
pday, day_length, day_offset,
|
||||
[this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }));
|
||||
[this, parcel_id, pday, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK,
|
||||
pday, LLUUID::null, day_length, day_offset, environment_apply_fn()); });
|
||||
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LLEnvironment::resetParcel(S32 parcel_id)
|
||||
{
|
||||
std::string coroname =
|
||||
LLCoros::instance().launch("LLEnvironment::coroResetEnvironment",
|
||||
boost::bind(&LLEnvironment::coroResetEnvironment, this, parcel_id,
|
||||
[this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }));
|
||||
[this, parcel_id]() { coroResetEnvironment(parcel_id, NO_TRACK, environment_apply_fn()); });
|
||||
// [this](S32 pid, EnvironmentInfo::ptr_t envinfo) { recordEnvironment(pid, envinfo); }); });
|
||||
}
|
||||
|
||||
void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environment_apply_fn apply)
|
||||
|
|
@ -1151,7 +1169,7 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
|
|||
}
|
||||
else
|
||||
{
|
||||
LLSD environment = result["environment"];
|
||||
LLSD environment = result[KEY_ENVIRONMENT];
|
||||
if (environment.isDefined() && apply)
|
||||
{
|
||||
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
|
||||
|
|
@ -1166,7 +1184,7 @@ void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environ
|
|||
}
|
||||
}
|
||||
|
||||
void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pday, S32 day_length, S32 day_offset, LLEnvironment::environment_apply_fn apply)
|
||||
void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, S32 track_no, LLSettingsDay::ptr_t pday, LLUUID settings_asset, S32 day_length, S32 day_offset, LLEnvironment::environment_apply_fn apply)
|
||||
{
|
||||
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
|
||||
|
|
@ -1192,22 +1210,39 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
|
|||
}
|
||||
|
||||
LLSD body(LLSD::emptyMap());
|
||||
body["environment"] = LLSD::emptyMap();
|
||||
body[KEY_ENVIRONMENT] = LLSD::emptyMap();
|
||||
|
||||
if (day_length >= 0)
|
||||
body["environment"]["day_length"] = day_length;
|
||||
if (day_offset >= 0)
|
||||
body["environment"]["day_offset"] = day_offset;
|
||||
if (track_no == NO_TRACK)
|
||||
{ // day length and offset are only applicable if we are addressing the entire day cycle.
|
||||
if (day_length >= 0)
|
||||
body[KEY_ENVIRONMENT][KEY_DAYLENGTH] = day_length;
|
||||
if (day_offset >= 0)
|
||||
body[KEY_ENVIRONMENT][KEY_DAYOFFSET] = day_offset;
|
||||
}
|
||||
if (pday)
|
||||
body["environment"]["day_cycle"] = pday->getSettings();
|
||||
body[KEY_ENVIRONMENT][KEY_DAYCYCLE] = pday->getSettings();
|
||||
else if (!settings_asset.isNull())
|
||||
body[KEY_ENVIRONMENT][KEY_DAYASSET] = settings_asset;
|
||||
|
||||
|
||||
LL_WARNS("LAPRAS") << "Body = " << body << LL_ENDL;
|
||||
|
||||
if (parcel_id != INVALID_PARCEL_ID)
|
||||
if ((parcel_id != INVALID_PARCEL_ID) || (track_no != NO_TRACK))
|
||||
{
|
||||
std::stringstream query;
|
||||
query << "?";
|
||||
|
||||
query << "?parcelid=" << parcel_id;
|
||||
if (parcel_id != INVALID_PARCEL_ID)
|
||||
{
|
||||
query << "parcelid=" << parcel_id;
|
||||
|
||||
if (track_no != NO_TRACK)
|
||||
query << "&";
|
||||
}
|
||||
if (track_no != NO_TRACK)
|
||||
{
|
||||
query << "trackno=" << track_no;
|
||||
}
|
||||
url += query.str();
|
||||
}
|
||||
|
||||
|
|
@ -1228,7 +1263,7 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
|
|||
}
|
||||
else
|
||||
{
|
||||
LLSD environment = result["environment"];
|
||||
LLSD environment = result[KEY_ENVIRONMENT];
|
||||
if (environment.isDefined() && apply)
|
||||
{
|
||||
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
|
||||
|
|
@ -1243,7 +1278,7 @@ void LLEnvironment::coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pd
|
|||
}
|
||||
}
|
||||
|
||||
void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn apply)
|
||||
void LLEnvironment::coroResetEnvironment(S32 parcel_id, S32 track_no, environment_apply_fn apply)
|
||||
{
|
||||
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
|
||||
|
|
@ -1254,11 +1289,22 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn app
|
|||
if (url.empty())
|
||||
return;
|
||||
|
||||
if (parcel_id != INVALID_PARCEL_ID)
|
||||
if ((parcel_id != INVALID_PARCEL_ID) || (track_no != NO_TRACK))
|
||||
{
|
||||
std::stringstream query;
|
||||
query << "?";
|
||||
|
||||
query << "?parcelid=" << parcel_id;
|
||||
if (parcel_id != INVALID_PARCEL_ID)
|
||||
{
|
||||
query << "parcelid=" << parcel_id;
|
||||
|
||||
if (track_no != NO_TRACK)
|
||||
query << "&";
|
||||
}
|
||||
if (track_no != NO_TRACK)
|
||||
{
|
||||
query << "trackno=" << track_no;
|
||||
}
|
||||
url += query.str();
|
||||
}
|
||||
|
||||
|
|
@ -1279,7 +1325,7 @@ void LLEnvironment::coroResetEnvironment(S32 parcel_id, environment_apply_fn app
|
|||
}
|
||||
else
|
||||
{
|
||||
LLSD environment = result["environment"];
|
||||
LLSD environment = result[KEY_ENVIRONMENT];
|
||||
if (environment.isDefined() && apply)
|
||||
{
|
||||
EnvironmentInfo::ptr_t envinfo = LLEnvironment::EnvironmentInfo::extract(environment);
|
||||
|
|
@ -1339,10 +1385,9 @@ LLEnvironment::EnvironmentInfo::EnvironmentInfo():
|
|||
mDayLength(0),
|
||||
mDayOffset(0),
|
||||
mDayHash(0),
|
||||
mDaycycleData(),
|
||||
mDayCycle(),
|
||||
mAltitudes({ { 0.0, 0.0, 0.0, 0.0 } }),
|
||||
mIsDefault(false),
|
||||
mIsRegion(false)
|
||||
mIsDefault(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -1350,32 +1395,28 @@ LLEnvironment::EnvironmentInfo::ptr_t LLEnvironment::EnvironmentInfo::extract(LL
|
|||
{
|
||||
ptr_t pinfo = std::make_shared<EnvironmentInfo>();
|
||||
|
||||
if (environment.has("parcel_id"))
|
||||
pinfo->mParcelId = environment["parcel_id"].asInteger();
|
||||
if (environment.has("region_id"))
|
||||
pinfo->mRegionId = environment["region_id"].asUUID();
|
||||
if (environment.has("day_length"))
|
||||
pinfo->mDayLength = LLSettingsDay::Seconds(environment["day_length"].asInteger());
|
||||
if (environment.has("day_offset"))
|
||||
pinfo->mDayOffset = LLSettingsDay::Seconds(environment["day_offset"].asInteger());
|
||||
if (environment.has("day_hash"))
|
||||
pinfo->mDayHash = environment["day_hash"].asInteger();
|
||||
if (environment.has("day_cycle"))
|
||||
pinfo->mDaycycleData = environment["day_cycle"];
|
||||
if (environment.has("is_default"))
|
||||
pinfo->mIsDefault = environment["is_default"].asBoolean();
|
||||
if (environment.has("track_altitudes"))
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "track_altitudes=" << environment["track_altitudes"] << LL_ENDL;
|
||||
pinfo->mIsDefault = environment.has(KEY_ISDEFAULT) ? environment[KEY_ISDEFAULT].asBoolean() : true;
|
||||
pinfo->mParcelId = environment.has(KEY_PARCELID) ? environment[KEY_PARCELID].asInteger() : INVALID_PARCEL_ID;
|
||||
pinfo->mRegionId = environment.has(KEY_REGIONID) ? environment[KEY_REGIONID].asUUID() : LLUUID::null;
|
||||
|
||||
/*LAPRAS: TODO: Fix the simulator message. Shouldn't be 5, just 4*/
|
||||
int idx = 1;
|
||||
for (F32 &altitude : pinfo->mAltitudes)
|
||||
if (environment.has(KEY_TRACKALTS))
|
||||
{
|
||||
for (int idx = 0; idx < 3; idx++)
|
||||
{
|
||||
altitude = environment["track_altitudes"][idx++].asReal();
|
||||
pinfo->mAltitudes[idx+1] = environment[KEY_TRACKALTS][idx].asReal();
|
||||
}
|
||||
pinfo->mAltitudes[0] = 0;
|
||||
}
|
||||
|
||||
if (environment.has(KEY_DAYCYCLE))
|
||||
{
|
||||
pinfo->mDayCycle = LLSettingsVODay::buildFromEnvironmentMessage(environment[KEY_DAYCYCLE]);
|
||||
pinfo->mDayLength = LLSettingsDay::Seconds(environment.has(KEY_DAYLENGTH) ? environment[KEY_DAYLENGTH].asInteger() : -1);
|
||||
pinfo->mDayOffset = LLSettingsDay::Seconds(environment.has(KEY_DAYOFFSET) ? environment[KEY_DAYOFFSET].asInteger() : -1);
|
||||
pinfo->mDayHash = environment.has(KEY_DAYHASH) ? environment[KEY_DAYHASH].asInteger() : 0;
|
||||
}
|
||||
|
||||
|
||||
return pinfo;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,25 +65,24 @@ public:
|
|||
static const LLUUID KNOWN_SKY_SUNSET;
|
||||
static const LLUUID KNOWN_SKY_MIDNIGHT;
|
||||
|
||||
static const S32 NO_TRACK;
|
||||
|
||||
struct EnvironmentInfo
|
||||
{
|
||||
EnvironmentInfo();
|
||||
|
||||
typedef std::shared_ptr<EnvironmentInfo> ptr_t;
|
||||
|
||||
S32 mParcelId;
|
||||
LLUUID mRegionId;
|
||||
S64Seconds mDayLength;
|
||||
S64Seconds mDayOffset;
|
||||
size_t mDayHash;
|
||||
LLSD mDaycycleData;
|
||||
std::array<F32, 4> mAltitudes;
|
||||
bool mIsDefault;
|
||||
bool mIsRegion;
|
||||
|
||||
|
||||
static ptr_t extract(LLSD);
|
||||
S32 mParcelId;
|
||||
LLUUID mRegionId;
|
||||
S64Seconds mDayLength;
|
||||
S64Seconds mDayOffset;
|
||||
size_t mDayHash;
|
||||
LLSettingsDay::ptr_t mDayCycle;
|
||||
std::array<F32, 4> mAltitudes;
|
||||
bool mIsDefault;
|
||||
|
||||
static ptr_t extract(LLSD);
|
||||
};
|
||||
|
||||
enum EnvSelection_t
|
||||
|
|
@ -226,8 +225,6 @@ public:
|
|||
//-------------------------------------------
|
||||
connection_t setEnvironmentChanged(environment_changed_fn cb);
|
||||
|
||||
void requestRegionEnvironment();
|
||||
|
||||
void onLegacyRegionSettings(LLSD data);
|
||||
|
||||
void requestRegion();
|
||||
|
|
@ -359,21 +356,20 @@ private:
|
|||
DayInstance::ptr_t getSelectedEnvironmentInstance();
|
||||
|
||||
|
||||
void updateCloudScroll();
|
||||
void updateCloudScroll();
|
||||
|
||||
void onParcelChange();
|
||||
void onParcelChange();
|
||||
|
||||
void coroRequestEnvironment(S32 parcel_id, environment_apply_fn apply);
|
||||
void coroUpdateEnvironment(S32 parcel_id, LLSettingsDay::ptr_t pday, S32 day_length, S32 day_offset, environment_apply_fn apply);
|
||||
void coroResetEnvironment(S32 parcel_id, environment_apply_fn apply);
|
||||
void coroRequestEnvironment(S32 parcel_id, environment_apply_fn apply);
|
||||
void coroUpdateEnvironment(S32 parcel_id, S32 track_no, LLSettingsDay::ptr_t pday, LLUUID settings_asset, S32 day_length, S32 day_offset, environment_apply_fn apply);
|
||||
void coroResetEnvironment(S32 parcel_id, S32 track_no, environment_apply_fn apply);
|
||||
|
||||
void recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment);
|
||||
void recordEnvironment(S32 parcel_id, EnvironmentInfo::ptr_t environment);
|
||||
|
||||
void onAgentPositionHasChanged(const LLVector3 &localpos);
|
||||
|
||||
void onSetEnvAssetLoaded(EnvSelection_t env, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);
|
||||
void onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset);
|
||||
void onAgentPositionHasChanged(const LLVector3 &localpos);
|
||||
|
||||
void onSetEnvAssetLoaded(EnvSelection_t env, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);
|
||||
void onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ void LLSettingsVOBase::onAssetDownloadComplete(LLVFS *vfs, const LLUUID &asset_i
|
|||
if (!settings)
|
||||
{
|
||||
status = 1;
|
||||
LL_WARNS("SETTINGS") << "Unable to creat settings object." << LL_ENDL;
|
||||
LL_WARNS("SETTINGS") << "Unable to create settings object." << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1483,6 +1483,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
BOOL region_deny_transacted_override = false; // Deprecated
|
||||
BOOL region_deny_age_unverified_override = false;
|
||||
BOOL region_allow_access_override = true;
|
||||
BOOL region_allow_environment_override = true;
|
||||
S32 parcel_environment_version = 0;
|
||||
BOOL agent_parcel_update = false; // updating previous(existing) agent parcel
|
||||
|
||||
S32 other_clean_time = 0;
|
||||
|
|
@ -1573,6 +1575,12 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
msg->getBOOLFast(_PREHASH_RegionAllowAccessBlock, _PREHASH_RegionAllowAccessOverride, region_allow_access_override);
|
||||
}
|
||||
|
||||
if (msg->getNumberOfBlocks(_PREHASH_ParcelEnvironmentBlock))
|
||||
{
|
||||
msg->getS32Fast(_PREHASH_ParcelEnvironmentBlock, _PREHASH_ParcelEnvironmentVersion, parcel_environment_version);
|
||||
msg->getBOOLFast(_PREHASH_ParcelEnvironmentBlock, _PREHASH_RegionAllowEnvironmentOverride, region_allow_environment_override);
|
||||
}
|
||||
|
||||
msg->getS32("ParcelData", "OtherCleanTime", other_clean_time );
|
||||
|
||||
// Actually extract the data.
|
||||
|
|
@ -1590,6 +1598,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
}
|
||||
}
|
||||
|
||||
bool environment_changed = (parcel->getParcelEnvironmentVersion() != parcel_environment_version);
|
||||
|
||||
parcel->init(owner_id,
|
||||
FALSE, FALSE, FALSE,
|
||||
claim_date, claim_price_per_meter, rent_price_per_meter,
|
||||
|
|
@ -1615,6 +1625,10 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
parcel->setRegionDenyAnonymousOverride(region_deny_anonymous_override);
|
||||
parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override);
|
||||
parcel->setRegionAllowAccessOverride(region_allow_access_override);
|
||||
|
||||
parcel->setParcelEnvironmentVersion(parcel_environment_version);
|
||||
parcel->setRegionAllowEnvironmentOverride(region_allow_environment_override);
|
||||
|
||||
parcel->unpackMessage(msg);
|
||||
|
||||
if (parcel == parcel_mgr.mAgentParcel)
|
||||
|
|
@ -1632,9 +1646,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
// Let interesting parties know about agent parcel change.
|
||||
LLViewerParcelMgr* instance = LLViewerParcelMgr::getInstance();
|
||||
|
||||
// Notify anything that wants to know when the agent changes parcels
|
||||
gAgent.changeParcels();
|
||||
|
||||
if (instance->mTeleportInProgress)
|
||||
{
|
||||
instance->mTeleportInProgress = FALSE;
|
||||
|
|
@ -1648,12 +1659,21 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (agent_parcel_update)
|
||||
{
|
||||
// updated agent parcel
|
||||
parcel_mgr.mAgentParcel->unpackMessage(msg);
|
||||
}
|
||||
|
||||
LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
|
||||
// Notify anything that wants to know when the agent changes parcels
|
||||
gAgent.changeParcels();
|
||||
}
|
||||
else if (agent_parcel_update)
|
||||
{
|
||||
// updated agent parcel
|
||||
parcel_mgr.mAgentParcel->unpackMessage(msg);
|
||||
if ((LLEnvironment::instance().isExtendedEnvironmentEnabled() && environment_changed))
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
|
||||
LLEnvironment::instance().requestParcel(local_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle updating selections, if necessary.
|
||||
|
|
@ -1835,26 +1855,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
}//if gAudiop
|
||||
};
|
||||
|
||||
if (LLEnvironment::instance().isExtendedEnvironmentEnabled())
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "TODO: Hey Rider! Fix this. 1) don't rerequest parcel information. 2) if sequent_id == -1 we are selecting a parcel. Deal with that correctly." << LL_ENDL;
|
||||
|
||||
if (sequence_id == SELECTED_PARCEL_SEQ_ID)
|
||||
{
|
||||
LL_WARNS("LAPRAS") << "TODO: Hay Rider! Fix this. Get environment for selected parcel." << LL_ENDL;
|
||||
}
|
||||
else if ((sequence_id == HOVERED_PARCEL_SEQ_ID) ||
|
||||
(sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID) ||
|
||||
(sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID) ||
|
||||
(sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID))
|
||||
{
|
||||
/*NoOp*/
|
||||
}
|
||||
else
|
||||
{
|
||||
LLEnvironment::instance().requestParcel(local_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerParcelMgr::optionally_start_music(const std::string& music_url)
|
||||
|
|
|
|||
|
|
@ -4503,6 +4503,11 @@ version 2.0
|
|||
RegionAllowAccessBlock Single
|
||||
{ RegionAllowAccessOverride BOOL }
|
||||
}
|
||||
{
|
||||
ParcelEnvironmentBlock Single
|
||||
{ ParcelEnvironmentVersion S32 }
|
||||
{ RegionAllowEnvironmentOverride BOOL }
|
||||
}
|
||||
}
|
||||
|
||||
// ParcelPropertiesUpdate
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
337f351910b0c8821cb3d447bc6578516a043c80
|
||||
4c5ec7187d1af05b52b5c1bbac68d46fbc65da05
|
||||
Loading…
Reference in New Issue