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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/**
* @file llviewerparceloverlay.h
* @brief LLViewerParcelOverlay class header file
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLVIEWERPARCELOVERLAY_H
#define LL_LLVIEWERPARCELOVERLAY_H
// The ownership data for land parcels.
// One of these structures per region.
#include "llbbox.h"
#include "llframetimer.h"
#include "lluuid.h"
#include "llviewertexture.h"
class LLViewerRegion;
class LLVector3;
class LLColor4U;
class LLUIColor;
class LLVector2;
class LLViewerParcelOverlay : public LLGLUpdate
{
public:
LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters);
~LLViewerParcelOverlay();
// ACCESS
LLViewerTexture* getTexture() const { return mTexture; }
bool isOwned(const LLVector3& pos) const;
bool isOwnedSelf(const LLVector3& pos) const;
bool isOwnedGroup(const LLVector3& pos) const;
bool isOwnedOther(const LLVector3& pos) const;
// "encroaches" means the prim hangs over the parcel, but its center
// might be in another parcel. for now, we simply test axis aligned
// bounding boxes which isn't perfect, but is close
bool encroachesOwned(const std::vector<LLBBox>& boxes) const;
bool encroachesOnUnowned(const std::vector<LLBBox>& boxes) const;
bool encroachesOnNearbyParcel(const std::vector<LLBBox>& boxes) const;
bool isSoundLocal(const LLVector3& pos) const;
F32 getOwnedRatio() const;
// Returns the number of vertices drawn
void renderPropertyLines();
void renderPropertyLinesOnMinimap(F32 scale_pixels_per_meter, const F32* parcel_outline_color);
U8 ownership(const LLVector3& pos) const;
U8 parcelLineFlags(const LLVector3& pos) const;
U8 parcelLineFlags(S32 row, S32 col) const;
// MANIPULATE
void uncompressLandOverlay(S32 chunk, U8* compressed_overlay);
// Indicate property lines and overlay texture need to be rebuilt.
void setDirty();
void idleUpdate(bool update_now = false);
void updateGL();
private:
// This is in parcel rows and columns, not grid rows and columns
// Stored in bottom three bits.
U8 ownership(S32 row, S32 col) const { return parcelFlags(row, col, (U8)0x7); }
U8 parcelFlags(S32 row, S32 col, U8 flags) const;
void addPropertyLine(F32 start_x, F32 start_y, F32 dx, F32 dy, F32 tick_dx, F32 tick_dy, const LLColor4U& color);
void updateOverlayTexture();
void updatePropertyLines();
private:
// Back pointer to the region that owns this structure.
LLViewerRegion* mRegion;
S32 mParcelGridsPerEdge;
LLPointer<LLViewerTexture> mTexture;
LLPointer<LLImageRaw> mImageRaw;
// Size: mParcelGridsPerEdge * mParcelGridsPerEdge
// Each value is 0-3, PARCEL_AVAIL to PARCEL_SELF in the two low bits
// and other flags in the upper bits.
U8 *mOwnership;
// Update propery lines and overlay texture
bool mDirty;
LLFrameTimer mTimeSinceLastUpdate;
S32 mOverlayTextureIdx;
struct Edge
{
void pushVertex(U32 lod, F32 x, F32 y, F32 z, F32 water_z);
// LOD: 0 - detailized, 1 - simplified
std::vector<LLVector4a> verticesAboveWater[2];
std::vector<LLVector4a> verticesUnderWater[2];
LLColor4U color;
};
std::vector<Edge> mEdges;
static bool sColorSetInitialized;
static LLUIColor sAvailColor;
static LLUIColor sOwnedColor;
static LLUIColor sGroupColor;
static LLUIColor sSelfColor;
static LLUIColor sForSaleColor;
static LLUIColor sAuctionColor;
};
#endif
|