3.7 KiB
Land, terrain, environment, and sound
GridClient owns one lazily constructed ParcelManager, TerrainManager,
EnvironmentManager, and SoundManager. Cloning a manager keeps the same
registries and state; disposing it releases packet and capability
subscriptions. Incoming state is committed before an event callback is run,
and registries snapshot callbacks before invoking them so callbacks never run
under a manager lock.
Parcels
Parcel properties received from the capability event queue retain their request sequence, result, selection state, region-local coordinates, flags, permissions, media settings, and 512-byte occupancy bitmap. The bitmap is expanded to the simulator's four-metre parcel map. Overlay packets are four fixed 1 KiB segments: they may arrive out of order, duplicate sequence IDs do not advance completion, and the downloaded event is emitted only after all four unique segments are present.
Requests select the reference LLUDP packet for property, access-list, dwell, owner, update, subdivision/join, purchase, reclaim, deed, release, auction, selection/return, and terraform operations. Remote parcel lookup and script resource summary/detail use their named capabilities. Resource replies, variable blocks, strings, bitmaps, and HTTP bodies are bounded before state is published. Bulk parcel discovery is cancellation-aware and skips cells already covered by received bitmaps.
Parcel and estate mutation methods send real protocol operations. Applications must place user confirmation and authorization policy in front of destructive operations. Live-grid tests must remain ignored unless explicit credentials and opt-in configuration are supplied; the default tests use only synthetic packets and in-memory HTTP handlers.
Terrain and wind
TerrainCompressor implements the 16×16 DCT patch format, including zig-zag
coefficient order, quantization headers, normal and large-region coordinate
encodings, end markers, and bounded layer construction. TerrainManager
decodes land and wind layer packets, stores patches before emitting
LandPatchReceived, and keeps width and height independent for rectangular
variable regions. Simulator::terrain_height_at_point resolves a local metre
coordinate through the stored patch grid.
PBR terrain material overrides use the ModifyRegion capability. Exactly four
slots are accepted. Empty maps remain empty slots; non-empty maps use the
native AssetMaterial override codec. Capability and LLSD response bodies are
limited to 16 MiB and operations honor cancellation.
Environment
Extended environment requests use ExtEnvironment; parcel operations append
the compatibility query key parcelid, while region operations leave the URI
unchanged. GET, POST, and DELETE implement retrieval, update, and reset.
EnvironmentSettings provides the legacy LLSD path. Parsed region and legacy
state is installed before update events, and all request/response bodies are
limited to 16 MiB.
Sound
The sound manager emits typed events for attached sounds, attached gain
changes, preload queues, and positional sound triggers. UUID identity, gain,
region handle, position, and SoundFlags (including queueing) are retained.
Outgoing triggers validate IDs and finite values, clamp gain to the protocol
range, and select the current or explicitly supplied simulator and region
handle.
Focused validation
The native tests cover terrain golden round trips and bounds, rectangular region addressing, parcel bitmap and overlay correlation, capability parcel state publication, environment LLSD shapes, sound packet identity/queueing, and state-before-callback ordering. The translated compatibility cases cover extended-environment HTTP selection and all four terrain-material slots.