summaryrefslogtreecommitdiff
path: root/indra/newview/llregioninfomodel.cpp
blob: 3a00bc7c323977491c8fa68f3ce34dbe1e4ce7b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/** 
 * @file llregioninfomodel.cpp
 * @brief Region info model
 *
 * $LicenseInfo:firstyear=2011&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2011, Linden Research, Inc.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License only.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */

#include "llviewerprecompiledheaders.h"

#include "llregioninfomodel.h"

// libs
#include "message.h"
#include "llregionflags.h"

// viewers

void LLRegionInfoModel::reset()
{
	mSimAccess			= 0;
	mAgentLimit			= 0;

	mRegionFlags		= 0;
	mEstateID			= 0;
	mParentEstateID		= 0;

	mPricePerMeter		= 0;
	mRedirectGridX		= 0;
	mRedirectGridY		= 0;

	mBillableFactor		= 0.0f;
	mObjectBonusFactor	= 0.0f;
	mWaterHeight		= 0.0f;
	mTerrainRaiseLimit	= 0.0f;
	mTerrainLowerLimit	= 0.0f;
	mSunHour			= 0.0f;

	mUseEstateSun		= false;

	mSimType.clear();
	mSimName.clear();
}

LLRegionInfoModel::LLRegionInfoModel()
{
	reset();
}

boost::signals2::connection LLRegionInfoModel::setUpdateCallback(const update_signal_t::slot_type& cb)
{
	return mUpdateSignal.connect(cb);
}

bool LLRegionInfoModel::getUseFixedSun()
{
	return mRegionFlags & REGION_FLAGS_SUN_FIXED;
}

void LLRegionInfoModel::update(LLMessageSystem* msg)
{
	reset();

	msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, mSimName);
	msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, mEstateID);
	msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, mParentEstateID);
	msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_RegionFlags, mRegionFlags);
	msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_SimAccess, mSimAccess);
	msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_MaxAgents, mAgentLimit);
	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, mObjectBonusFactor);
	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, mBillableFactor);
	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, mWaterHeight);
	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, mTerrainRaiseLimit);
	msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, mTerrainLowerLimit);
	msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, mPricePerMeter);
	msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridX, mRedirectGridX);
	msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridY, mRedirectGridY);

	msg->getBOOL(_PREHASH_RegionInfo, _PREHASH_UseEstateSun, mUseEstateSun);

	// actually the "last set" sun hour, not the current sun hour. JC
	msg->getF32(_PREHASH_RegionInfo, _PREHASH_SunHour, mSunHour);

	// the only reasonable way to decide if we actually have any data is to
	// check to see if any of these fields have nonzero sizes
	if (msg->getSize(_PREHASH_RegionInfo2, _PREHASH_ProductSKU) > 0 ||
		msg->getSize(_PREHASH_RegionInfo2, "ProductName") > 0)
	{
		msg->getString(_PREHASH_RegionInfo2, "ProductName", mSimType);
	}

	// Let interested parties know that region info has been updated.
	mUpdateSignal();
}