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
|
/**
* @file llviewerparceloverlay.h
* @brief LLViewerParcelOverlay class header file
*
* Copyright (c) 2002-$CurrentYear$, Linden Research, Inc.
* $License$
*/
#ifndef LL_LLVIEWERPARCELOVERLAY_H
#define LL_LLVIEWERPARCELOVERLAY_H
// The ownership data for land parcels.
// One of these structures per region.
#include "lldarray.h"
#include "llframetimer.h"
#include "lluuid.h"
#include "llviewerimage.h"
class LLViewerRegion;
class LLVector3;
class LLColor4U;
class LLVector2;
class LLViewerParcelOverlay
{
public:
LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters);
~LLViewerParcelOverlay();
// ACCESS
LLImageGL* 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;
BOOL isSoundLocal(const LLVector3& pos) const;
BOOL isBuildCameraAllowed(const LLVector3& pos) const;
F32 getOwnedRatio() const;
// Returns the number of vertices drawn
S32 renderPropertyLines();
U8 ownership( const LLVector3& pos) 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);
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 0x7 & mOwnership[row * mParcelGridsPerEdge + col]; }
void addPropertyLine(LLDynamicArray<LLVector3, 256>& vertex_array,
LLDynamicArray<LLColor4U, 256>& color_array,
LLDynamicArray<LLVector2, 256>& coord_array,
const F32 start_x, const F32 start_y,
const U32 edge,
const LLColor4U& color);
void updateOverlayTexture();
void updatePropertyLines();
private:
// Back pointer to the region that owns this structure.
LLViewerRegion* mRegion;
S32 mParcelGridsPerEdge;
LLPointer<LLImageGL> 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;
LLUUID mLineImageID;
S32 mVertexCount;
F32* mVertexArray;
U8* mColorArray;
};
#endif
|