aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs1236
1 files changed, 618 insertions, 618 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
index 347625a..e37d105 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
@@ -1,618 +1,618 @@
1/* 1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/ 2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using libsecondlife; 30using libsecondlife;
31using libsecondlife.Packets; 31using libsecondlife.Packets;
32using OpenSim.Framework.Interfaces; 32using OpenSim.Framework.Interfaces;
33using OpenSim.Framework.Types; 33using OpenSim.Framework.Types;
34 34
35namespace OpenSim.Region.Environment.Scenes 35namespace OpenSim.Region.Environment.Scenes
36{ 36{
37 public partial class Scene 37 public partial class Scene
38 { 38 {
39 /// <summary> 39 /// <summary>
40 /// Modifies terrain using the specified information 40 /// Modifies terrain using the specified information
41 /// </summary> 41 /// </summary>
42 /// <param name="height">The height at which the user started modifying the terrain</param> 42 /// <param name="height">The height at which the user started modifying the terrain</param>
43 /// <param name="seconds">The number of seconds the modify button was pressed</param> 43 /// <param name="seconds">The number of seconds the modify button was pressed</param>
44 /// <param name="brushsize">The size of the brush used</param> 44 /// <param name="brushsize">The size of the brush used</param>
45 /// <param name="action">The action to be performed</param> 45 /// <param name="action">The action to be performed</param>
46 /// <param name="north">Distance from the north border where the cursor is located</param> 46 /// <param name="north">Distance from the north border where the cursor is located</param>
47 /// <param name="west">Distance from the west border where the cursor is located</param> 47 /// <param name="west">Distance from the west border where the cursor is located</param>
48 public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west) 48 public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west)
49 { 49 {
50 // Shiny. 50 // Shiny.
51 double size = (double)(1 << brushsize); 51 double size = (double)(1 << brushsize);
52 52
53 switch (action) 53 switch (action)
54 { 54 {
55 case 0: 55 case 0:
56 // flatten terrain 56 // flatten terrain
57 Terrain.flatten(north, west, size, (double)seconds / 100.0); 57 Terrain.flatten(north, west, size, (double)seconds / 100.0);
58 RegenerateTerrain(true, (int)north, (int)west); 58 RegenerateTerrain(true, (int)north, (int)west);
59 break; 59 break;
60 case 1: 60 case 1:
61 // raise terrain 61 // raise terrain
62 Terrain.raise(north, west, size, (double)seconds / 100.0); 62 Terrain.raise(north, west, size, (double)seconds / 100.0);
63 RegenerateTerrain(true, (int)north, (int)west); 63 RegenerateTerrain(true, (int)north, (int)west);
64 break; 64 break;
65 case 2: 65 case 2:
66 //lower terrain 66 //lower terrain
67 Terrain.lower(north, west, size, (double)seconds / 100.0); 67 Terrain.lower(north, west, size, (double)seconds / 100.0);
68 RegenerateTerrain(true, (int)north, (int)west); 68 RegenerateTerrain(true, (int)north, (int)west);
69 break; 69 break;
70 case 3: 70 case 3:
71 // smooth terrain 71 // smooth terrain
72 Terrain.smooth(north, west, size, (double)seconds / 100.0); 72 Terrain.smooth(north, west, size, (double)seconds / 100.0);
73 RegenerateTerrain(true, (int)north, (int)west); 73 RegenerateTerrain(true, (int)north, (int)west);
74 break; 74 break;
75 case 4: 75 case 4:
76 // noise 76 // noise
77 Terrain.noise(north, west, size, (double)seconds / 100.0); 77 Terrain.noise(north, west, size, (double)seconds / 100.0);
78 RegenerateTerrain(true, (int)north, (int)west); 78 RegenerateTerrain(true, (int)north, (int)west);
79 break; 79 break;
80 case 5: 80 case 5:
81 // revert 81 // revert
82 Terrain.revert(north, west, size, (double)seconds / 100.0); 82 Terrain.revert(north, west, size, (double)seconds / 100.0);
83 RegenerateTerrain(true, (int)north, (int)west); 83 RegenerateTerrain(true, (int)north, (int)west);
84 break; 84 break;
85 85
86 // CLIENT EXTENSIONS GO HERE 86 // CLIENT EXTENSIONS GO HERE
87 case 128: 87 case 128:
88 // erode-thermal 88 // erode-thermal
89 break; 89 break;
90 case 129: 90 case 129:
91 // erode-aerobic 91 // erode-aerobic
92 break; 92 break;
93 case 130: 93 case 130:
94 // erode-hydraulic 94 // erode-hydraulic
95 break; 95 break;
96 } 96 }
97 return; 97 return;
98 } 98 }
99 99
100 /// <summary> 100 /// <summary>
101 /// 101 ///
102 /// </summary> 102 /// </summary>
103 /// <remarks>Inefficient. TODO: Fixme</remarks> 103 /// <remarks>Inefficient. TODO: Fixme</remarks>
104 /// <param name="fromAgentID"></param> 104 /// <param name="fromAgentID"></param>
105 /// <param name="toAgentID"></param> 105 /// <param name="toAgentID"></param>
106 /// <param name="timestamp"></param> 106 /// <param name="timestamp"></param>
107 /// <param name="fromAgentName"></param> 107 /// <param name="fromAgentName"></param>
108 /// <param name="message"></param> 108 /// <param name="message"></param>
109 public void InstantMessage(LLUUID fromAgentID, LLUUID toAgentID, uint timestamp, string fromAgentName, string message) 109 public void InstantMessage(LLUUID fromAgentID, LLUUID toAgentID, uint timestamp, string fromAgentName, string message)
110 { 110 {
111 if (this.Avatars.ContainsKey(toAgentID)) 111 if (this.Avatars.ContainsKey(toAgentID))
112 { 112 {
113 if (this.Avatars.ContainsKey(fromAgentID)) 113 if (this.Avatars.ContainsKey(fromAgentID))
114 { 114 {
115 // Local sim message 115 // Local sim message
116 ScenePresence fromAvatar = this.Avatars[fromAgentID]; 116 ScenePresence fromAvatar = this.Avatars[fromAgentID];
117 ScenePresence toAvatar = this.Avatars[toAgentID]; 117 ScenePresence toAvatar = this.Avatars[toAgentID];
118 string fromName = fromAvatar.firstname + " " + fromAvatar.lastname; 118 string fromName = fromAvatar.firstname + " " + fromAvatar.lastname;
119 toAvatar.ControllingClient.SendInstantMessage(message, toAgentID, fromName); 119 toAvatar.ControllingClient.SendInstantMessage(message, toAgentID, fromName);
120 } 120 }
121 else 121 else
122 { 122 {
123 // Message came from a user outside the sim, ignore? 123 // Message came from a user outside the sim, ignore?
124 } 124 }
125 } 125 }
126 else 126 else
127 { 127 {
128 // Grid message 128 // Grid message
129 } 129 }
130 } 130 }
131 131
132 /// <summary> 132 /// <summary>
133 /// 133 ///
134 /// </summary> 134 /// </summary>
135 /// <param name="message"></param> 135 /// <param name="message"></param>
136 /// <param name="type"></param> 136 /// <param name="type"></param>
137 /// <param name="fromPos"></param> 137 /// <param name="fromPos"></param>
138 /// <param name="fromName"></param> 138 /// <param name="fromName"></param>
139 /// <param name="fromAgentID"></param> 139 /// <param name="fromAgentID"></param>
140 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) 140 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
141 { 141 {
142 ScenePresence avatar = null; 142 ScenePresence avatar = null;
143 if (this.Avatars.ContainsKey(fromAgentID)) 143 if (this.Avatars.ContainsKey(fromAgentID))
144 { 144 {
145 avatar = this.Avatars[fromAgentID]; 145 avatar = this.Avatars[fromAgentID];
146 fromPos = avatar.Pos; 146 fromPos = avatar.Pos;
147 fromName = avatar.firstname + " " + avatar.lastname; 147 fromName = avatar.firstname + " " + avatar.lastname;
148 avatar = null; 148 avatar = null;
149 } 149 }
150 150
151 this.ForEachScenePresence(delegate(ScenePresence presence) 151 this.ForEachScenePresence(delegate(ScenePresence presence)
152 { 152 {
153 int dis = -1000; 153 int dis = -1000;
154 if (this.Avatars.ContainsKey(presence.ControllingClient.AgentId)) 154 if (this.Avatars.ContainsKey(presence.ControllingClient.AgentId))
155 { 155 {
156 avatar = this.Avatars[presence.ControllingClient.AgentId]; 156 avatar = this.Avatars[presence.ControllingClient.AgentId];
157 dis = (int)avatar.Pos.GetDistanceTo(fromPos); 157 dis = (int)avatar.Pos.GetDistanceTo(fromPos);
158 } 158 }
159 159
160 switch (type) 160 switch (type)
161 { 161 {
162 case 0: // Whisper 162 case 0: // Whisper
163 if ((dis < 10) && (dis > -10)) 163 if ((dis < 10) && (dis > -10))
164 { 164 {
165 //should change so the message is sent through the avatar rather than direct to the ClientView 165 //should change so the message is sent through the avatar rather than direct to the ClientView
166 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName, 166 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
167 fromAgentID); 167 fromAgentID);
168 } 168 }
169 break; 169 break;
170 case 1: // Say 170 case 1: // Say
171 if ((dis < 30) && (dis > -30)) 171 if ((dis < 30) && (dis > -30))
172 { 172 {
173 //Console.WriteLine("sending chat"); 173 //Console.WriteLine("sending chat");
174 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName, 174 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
175 fromAgentID); 175 fromAgentID);
176 } 176 }
177 break; 177 break;
178 case 2: // Shout 178 case 2: // Shout
179 if ((dis < 100) && (dis > -100)) 179 if ((dis < 100) && (dis > -100))
180 { 180 {
181 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName, 181 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
182 fromAgentID); 182 fromAgentID);
183 } 183 }
184 break; 184 break;
185 185
186 case 0xff: // Broadcast 186 case 0xff: // Broadcast
187 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName, 187 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
188 fromAgentID); 188 fromAgentID);
189 break; 189 break;
190 } 190 }
191 }); 191 });
192 } 192 }
193 193
194 /// <summary> 194 /// <summary>
195 /// 195 ///
196 /// </summary> 196 /// </summary>
197 /// <param name="primAsset"></param> 197 /// <param name="primAsset"></param>
198 /// <param name="pos"></param> 198 /// <param name="pos"></param>
199 public void RezObject(AssetBase primAsset, LLVector3 pos) 199 public void RezObject(AssetBase primAsset, LLVector3 pos)
200 { 200 {
201 201
202 } 202 }
203 203
204 /// <summary> 204 /// <summary>
205 /// 205 ///
206 /// </summary> 206 /// </summary>
207 /// <param name="packet"></param> 207 /// <param name="packet"></param>
208 /// <param name="simClient"></param> 208 /// <param name="simClient"></param>
209 public void DeRezObject(Packet packet, IClientAPI simClient) 209 public void DeRezObject(Packet packet, IClientAPI simClient)
210 { 210 {
211 211
212 } 212 }
213 213
214 /// <summary> 214 /// <summary>
215 /// 215 ///
216 /// </summary> 216 /// </summary>
217 /// <param name="remoteClient"></param> 217 /// <param name="remoteClient"></param>
218 public void SendAvatarsToClient(IClientAPI remoteClient) 218 public void SendAvatarsToClient(IClientAPI remoteClient)
219 { 219 {
220 220
221 } 221 }
222 222
223 /// <summary> 223 /// <summary>
224 /// 224 ///
225 /// </summary> 225 /// </summary>
226 /// <param name="originalPrim"></param> 226 /// <param name="originalPrim"></param>
227 /// <param name="offset"></param> 227 /// <param name="offset"></param>
228 /// <param name="flags"></param> 228 /// <param name="flags"></param>
229 public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags) 229 public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags)
230 { 230 {
231 SceneObject originPrim = null; 231 SceneObject originPrim = null;
232 foreach (EntityBase ent in Entities.Values) 232 foreach (EntityBase ent in Entities.Values)
233 { 233 {
234 if (ent is SceneObject) 234 if (ent is SceneObject)
235 { 235 {
236 if (((SceneObject)ent).rootLocalID == originalPrim) 236 if (((SceneObject)ent).rootLocalID == originalPrim)
237 { 237 {
238 originPrim = (SceneObject)ent; 238 originPrim = (SceneObject)ent;
239 break; 239 break;
240 } 240 }
241 } 241 }
242 } 242 }
243 243
244 if (originPrim != null) 244 if (originPrim != null)
245 { 245 {
246 SceneObject copy = originPrim.Copy(); 246 SceneObject copy = originPrim.Copy();
247 copy.Pos = copy.Pos + offset; 247 copy.Pos = copy.Pos + offset;
248 this.Entities.Add(copy.rootUUID, copy); 248 this.Entities.Add(copy.rootUUID, copy);
249 249
250 List<ScenePresence> avatars = this.RequestAvatarList(); 250 List<ScenePresence> avatars = this.RequestAvatarList();
251 for (int i = 0; i < avatars.Count; i++) 251 for (int i = 0; i < avatars.Count; i++)
252 { 252 {
253 copy.SendAllChildPrimsToClient(avatars[i].ControllingClient); 253 copy.SendAllChildPrimsToClient(avatars[i].ControllingClient);
254 } 254 }
255 255
256 } 256 }
257 else 257 else
258 { 258 {
259 OpenSim.Framework.Console.MainLog.Instance.Warn("Attempted to duplicate nonexistant prim"); 259 OpenSim.Framework.Console.MainLog.Instance.Warn("Attempted to duplicate nonexistant prim");
260 } 260 }
261 261
262 } 262 }
263 263
264 /// <summary> 264 /// <summary>
265 /// 265 ///
266 /// </summary> 266 /// </summary>
267 /// <param name="parentPrim"></param> 267 /// <param name="parentPrim"></param>
268 /// <param name="childPrims"></param> 268 /// <param name="childPrims"></param>
269 public void LinkObjects(uint parentPrim, List<uint> childPrims) 269 public void LinkObjects(uint parentPrim, List<uint> childPrims)
270 { 270 {
271 SceneObject parenPrim = null; 271 SceneObject parenPrim = null;
272 foreach (EntityBase ent in Entities.Values) 272 foreach (EntityBase ent in Entities.Values)
273 { 273 {
274 if (ent is SceneObject) 274 if (ent is SceneObject)
275 { 275 {
276 if (((SceneObject)ent).rootLocalID == parentPrim) 276 if (((SceneObject)ent).rootLocalID == parentPrim)
277 { 277 {
278 parenPrim = (SceneObject)ent; 278 parenPrim = (SceneObject)ent;
279 break; 279 break;
280 } 280 }
281 } 281 }
282 } 282 }
283 283
284 List<SceneObject> children = new List<SceneObject>(); 284 List<SceneObject> children = new List<SceneObject>();
285 if (parenPrim != null) 285 if (parenPrim != null)
286 { 286 {
287 for (int i = 0; i < childPrims.Count; i++) 287 for (int i = 0; i < childPrims.Count; i++)
288 { 288 {
289 foreach (EntityBase ent in Entities.Values) 289 foreach (EntityBase ent in Entities.Values)
290 { 290 {
291 if (ent is SceneObject) 291 if (ent is SceneObject)
292 { 292 {
293 if (((SceneObject)ent).rootLocalID == childPrims[i]) 293 if (((SceneObject)ent).rootLocalID == childPrims[i])
294 { 294 {
295 children.Add((SceneObject)ent); 295 children.Add((SceneObject)ent);
296 } 296 }
297 } 297 }
298 } 298 }
299 } 299 }
300 } 300 }
301 301
302 foreach (SceneObject sceneObj in children) 302 foreach (SceneObject sceneObj in children)
303 { 303 {
304 parenPrim.AddNewChildPrims(sceneObj); 304 parenPrim.AddNewChildPrims(sceneObj);
305 } 305 }
306 } 306 }
307 307
308 /// <summary> 308 /// <summary>
309 /// 309 ///
310 /// </summary> 310 /// </summary>
311 /// <param name="primLocalID"></param> 311 /// <param name="primLocalID"></param>
312 /// <param name="shapeBlock"></param> 312 /// <param name="shapeBlock"></param>
313 public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock) 313 public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock)
314 { 314 {
315 Primitive prim = null; 315 Primitive prim = null;
316 foreach (EntityBase ent in Entities.Values) 316 foreach (EntityBase ent in Entities.Values)
317 { 317 {
318 if (ent is SceneObject) 318 if (ent is SceneObject)
319 { 319 {
320 prim = ((SceneObject)ent).HasChildPrim(primLocalID); 320 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
321 if (prim != null) 321 if (prim != null)
322 { 322 {
323 prim.UpdateShape(shapeBlock); 323 prim.UpdateShape(shapeBlock);
324 break; 324 break;
325 } 325 }
326 } 326 }
327 } 327 }
328 } 328 }
329 329
330 /// <summary> 330 /// <summary>
331 /// 331 ///
332 /// </summary> 332 /// </summary>
333 /// <param name="primLocalID"></param> 333 /// <param name="primLocalID"></param>
334 /// <param name="remoteClient"></param> 334 /// <param name="remoteClient"></param>
335 public void SelectPrim(uint primLocalID, IClientAPI remoteClient) 335 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
336 { 336 {
337 foreach (EntityBase ent in Entities.Values) 337 foreach (EntityBase ent in Entities.Values)
338 { 338 {
339 if (ent is SceneObject) 339 if (ent is SceneObject)
340 { 340 {
341 if (((SceneObject)ent).rootLocalID == primLocalID) 341 if (((SceneObject)ent).rootLocalID == primLocalID)
342 { 342 {
343 ((SceneObject)ent).GetProperites(remoteClient); 343 ((SceneObject)ent).GetProperites(remoteClient);
344 ((SceneObject)ent).isSelected = true; 344 ((SceneObject)ent).isSelected = true;
345 this.ParcelManager.setPrimsTainted(); 345 this.ParcelManager.setPrimsTainted();
346 break; 346 break;
347 } 347 }
348 } 348 }
349 } 349 }
350 } 350 }
351 351
352 /// <summary> 352 /// <summary>
353 /// 353 ///
354 /// </summary> 354 /// </summary>
355 /// <param name="primLocalID"></param> 355 /// <param name="primLocalID"></param>
356 /// <param name="remoteClient"></param> 356 /// <param name="remoteClient"></param>
357 public void DeselectPrim(uint primLocalID, IClientAPI remoteClient) 357 public void DeselectPrim(uint primLocalID, IClientAPI remoteClient)
358 { 358 {
359 foreach (EntityBase ent in Entities.Values) 359 foreach (EntityBase ent in Entities.Values)
360 { 360 {
361 if (ent is SceneObject) 361 if (ent is SceneObject)
362 { 362 {
363 if (((SceneObject)ent).rootLocalID == primLocalID) 363 if (((SceneObject)ent).rootLocalID == primLocalID)
364 { 364 {
365 ((SceneObject)ent).isSelected = false; 365 ((SceneObject)ent).isSelected = false;
366 this.ParcelManager.setPrimsTainted(); 366 this.ParcelManager.setPrimsTainted();
367 break; 367 break;
368 } 368 }
369 } 369 }
370 } 370 }
371 } 371 }
372 372
373 /// <summary> 373 /// <summary>
374 /// 374 ///
375 /// </summary> 375 /// </summary>
376 /// <param name="primLocalID"></param> 376 /// <param name="primLocalID"></param>
377 /// <param name="description"></param> 377 /// <param name="description"></param>
378 public void PrimDescription(uint primLocalID, string description) 378 public void PrimDescription(uint primLocalID, string description)
379 { 379 {
380 Primitive prim = null; 380 Primitive prim = null;
381 foreach (EntityBase ent in Entities.Values) 381 foreach (EntityBase ent in Entities.Values)
382 { 382 {
383 if (ent is SceneObject) 383 if (ent is SceneObject)
384 { 384 {
385 prim = ((SceneObject)ent).HasChildPrim(primLocalID); 385 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
386 if (prim != null) 386 if (prim != null)
387 { 387 {
388 prim.Description = description; 388 prim.Description = description;
389 break; 389 break;
390 } 390 }
391 } 391 }
392 } 392 }
393 } 393 }
394 394
395 /// <summary> 395 /// <summary>
396 /// 396 ///
397 /// </summary> 397 /// </summary>
398 /// <param name="primLocalID"></param> 398 /// <param name="primLocalID"></param>
399 /// <param name="description"></param> 399 /// <param name="description"></param>
400 public void PrimName(uint primLocalID, string name) 400 public void PrimName(uint primLocalID, string name)
401 { 401 {
402 Primitive prim = null; 402 Primitive prim = null;
403 foreach (EntityBase ent in Entities.Values) 403 foreach (EntityBase ent in Entities.Values)
404 { 404 {
405 if (ent is SceneObject) 405 if (ent is SceneObject)
406 { 406 {
407 prim = ((SceneObject)ent).HasChildPrim(primLocalID); 407 prim = ((SceneObject)ent).HasChildPrim(primLocalID);
408 if (prim != null) 408 if (prim != null)
409 { 409 {
410 prim.Name = name; 410 prim.Name = name;
411 break; 411 break;
412 } 412 }
413 } 413 }
414 } 414 }
415 } 415 }
416 416
417 public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) 417 public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
418 { 418 {
419 Primitive prim = null; 419 Primitive prim = null;
420 foreach (EntityBase ent in Entities.Values) 420 foreach (EntityBase ent in Entities.Values)
421 { 421 {
422 if (ent is SceneObject) 422 if (ent is SceneObject)
423 { 423 {
424 prim = ((SceneObject)ent).HasChildPrim(objectID); 424 prim = ((SceneObject)ent).HasChildPrim(objectID);
425 if (prim != null) 425 if (prim != null)
426 { 426 {
427 ((SceneObject)ent).GrapMovement(offset, pos, remoteClient); 427 ((SceneObject)ent).GrapMovement(offset, pos, remoteClient);
428 break; 428 break;
429 } 429 }
430 } 430 }
431 } 431 }
432 /* 432 /*
433 if (this.Entities.ContainsKey(objectID)) 433 if (this.Entities.ContainsKey(objectID))
434 { 434 {
435 if (this.Entities[objectID] is SceneObject) 435 if (this.Entities[objectID] is SceneObject)
436 { 436 {
437 ((SceneObject)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient); 437 ((SceneObject)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient);
438 } 438 }
439 }*/ 439 }*/
440 } 440 }
441 441
442 /// <summary> 442 /// <summary>
443 /// 443 ///
444 /// </summary> 444 /// </summary>
445 /// <param name="localID"></param> 445 /// <param name="localID"></param>
446 /// <param name="packet"></param> 446 /// <param name="packet"></param>
447 /// <param name="remoteClient"></param> 447 /// <param name="remoteClient"></param>
448 public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient) 448 public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient)
449 { 449 {
450 450
451 } 451 }
452 452
453 /// <summary> 453 /// <summary>
454 /// 454 ///
455 /// </summary> 455 /// </summary>
456 /// <param name="localID"></param> 456 /// <param name="localID"></param>
457 /// <param name="texture"></param> 457 /// <param name="texture"></param>
458 /// <param name="remoteClient"></param> 458 /// <param name="remoteClient"></param>
459 public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) 459 public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient)
460 { 460 {
461 Primitive prim = null; 461 Primitive prim = null;
462 foreach (EntityBase ent in Entities.Values) 462 foreach (EntityBase ent in Entities.Values)
463 { 463 {
464 if (ent is SceneObject) 464 if (ent is SceneObject)
465 { 465 {
466 prim = ((SceneObject)ent).HasChildPrim(localID); 466 prim = ((SceneObject)ent).HasChildPrim(localID);
467 if (prim != null) 467 if (prim != null)
468 { 468 {
469 prim.UpdateTextureEntry(texture); 469 prim.UpdateTextureEntry(texture);
470 } 470 }
471 } 471 }
472 } 472 }
473 } 473 }
474 474
475 /// <summary> 475 /// <summary>
476 /// 476 ///
477 /// </summary> 477 /// </summary>
478 /// <param name="localID"></param> 478 /// <param name="localID"></param>
479 /// <param name="pos"></param> 479 /// <param name="pos"></param>
480 /// <param name="remoteClient"></param> 480 /// <param name="remoteClient"></param>
481 public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient) 481 public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
482 { 482 {
483 Primitive prim = null; 483 Primitive prim = null;
484 foreach (EntityBase ent in Entities.Values) 484 foreach (EntityBase ent in Entities.Values)
485 { 485 {
486 if (ent is SceneObject) 486 if (ent is SceneObject)
487 { 487 {
488 prim = ((SceneObject)ent).HasChildPrim(localID); 488 prim = ((SceneObject)ent).HasChildPrim(localID);
489 if (prim != null) 489 if (prim != null)
490 { 490 {
491 prim.UpdateGroupPosition(pos); 491 prim.UpdateGroupPosition(pos);
492 break; 492 break;
493 } 493 }
494 } 494 }
495 } 495 }
496 } 496 }
497 497
498 public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) 498 public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
499 { 499 {
500 Primitive prim = null; 500 Primitive prim = null;
501 foreach (EntityBase ent in Entities.Values) 501 foreach (EntityBase ent in Entities.Values)
502 { 502 {
503 if (ent is SceneObject) 503 if (ent is SceneObject)
504 { 504 {
505 prim = ((SceneObject)ent).HasChildPrim(localID); 505 prim = ((SceneObject)ent).HasChildPrim(localID);
506 if (prim != null) 506 if (prim != null)
507 { 507 {
508 prim.UpdateSinglePosition(pos); 508 prim.UpdateSinglePosition(pos);
509 break; 509 break;
510 } 510 }
511 } 511 }
512 } 512 }
513 } 513 }
514 514
515 /// <summary> 515 /// <summary>
516 /// 516 ///
517 /// </summary> 517 /// </summary>
518 /// <param name="localID"></param> 518 /// <param name="localID"></param>
519 /// <param name="pos"></param> 519 /// <param name="pos"></param>
520 /// <param name="rot"></param> 520 /// <param name="rot"></param>
521 /// <param name="remoteClient"></param> 521 /// <param name="remoteClient"></param>
522 public void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient) 522 public void UpdatePrimRotation(uint localID, LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient)
523 { 523 {
524 Primitive prim = null; 524 Primitive prim = null;
525 foreach (EntityBase ent in Entities.Values) 525 foreach (EntityBase ent in Entities.Values)
526 { 526 {
527 if (ent is SceneObject) 527 if (ent is SceneObject)
528 { 528 {
529 prim = ((SceneObject)ent).HasChildPrim(localID); 529 prim = ((SceneObject)ent).HasChildPrim(localID);
530 if (prim != null) 530 if (prim != null)
531 { 531 {
532 prim.UpdateGroupMouseRotation(pos, rot); 532 prim.UpdateGroupMouseRotation(pos, rot);
533 break; 533 break;
534 } 534 }
535 } 535 }
536 } 536 }
537 } 537 }
538 538
539 /// <summary> 539 /// <summary>
540 /// 540 ///
541 /// </summary> 541 /// </summary>
542 /// <param name="localID"></param> 542 /// <param name="localID"></param>
543 /// <param name="rot"></param> 543 /// <param name="rot"></param>
544 /// <param name="remoteClient"></param> 544 /// <param name="remoteClient"></param>
545 public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) 545 public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient)
546 { 546 {
547 Primitive prim = null; 547 Primitive prim = null;
548 foreach (EntityBase ent in Entities.Values) 548 foreach (EntityBase ent in Entities.Values)
549 { 549 {
550 if (ent is SceneObject) 550 if (ent is SceneObject)
551 { 551 {
552 prim = ((SceneObject)ent).HasChildPrim(localID); 552 prim = ((SceneObject)ent).HasChildPrim(localID);
553 if (prim != null) 553 if (prim != null)
554 { 554 {
555 prim.UpdateGroupRotation(rot); 555 prim.UpdateGroupRotation(rot);
556 break; 556 break;
557 } 557 }
558 } 558 }
559 } 559 }
560 } 560 }
561 561
562 /// <summary> 562 /// <summary>
563 /// 563 ///
564 /// </summary> 564 /// </summary>
565 /// <param name="localID"></param> 565 /// <param name="localID"></param>
566 /// <param name="rot"></param> 566 /// <param name="rot"></param>
567 /// <param name="remoteClient"></param> 567 /// <param name="remoteClient"></param>
568 public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) 568 public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient)
569 { 569 {
570 //Console.WriteLine("trying to update single prim rotation"); 570 //Console.WriteLine("trying to update single prim rotation");
571 Primitive prim = null; 571 Primitive prim = null;
572 foreach (EntityBase ent in Entities.Values) 572 foreach (EntityBase ent in Entities.Values)
573 { 573 {
574 if (ent is SceneObject) 574 if (ent is SceneObject)
575 { 575 {
576 prim = ((SceneObject)ent).HasChildPrim(localID); 576 prim = ((SceneObject)ent).HasChildPrim(localID);
577 if (prim != null) 577 if (prim != null)
578 { 578 {
579 prim.UpdateSingleRotation(rot); 579 prim.UpdateSingleRotation(rot);
580 break; 580 break;
581 } 581 }
582 } 582 }
583 } 583 }
584 } 584 }
585 585
586 /// <summary> 586 /// <summary>
587 /// 587 ///
588 /// </summary> 588 /// </summary>
589 /// <param name="localID"></param> 589 /// <param name="localID"></param>
590 /// <param name="scale"></param> 590 /// <param name="scale"></param>
591 /// <param name="remoteClient"></param> 591 /// <param name="remoteClient"></param>
592 public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient) 592 public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
593 { 593 {
594 Primitive prim = null; 594 Primitive prim = null;
595 foreach (EntityBase ent in Entities.Values) 595 foreach (EntityBase ent in Entities.Values)
596 { 596 {
597 if (ent is SceneObject) 597 if (ent is SceneObject)
598 { 598 {
599 prim = ((SceneObject)ent).HasChildPrim(localID); 599 prim = ((SceneObject)ent).HasChildPrim(localID);
600 if (prim != null) 600 if (prim != null)
601 { 601 {
602 prim.ResizeGoup(scale); 602 prim.ResizeGoup(scale);
603 break; 603 break;
604 } 604 }
605 } 605 }
606 } 606 }
607 } 607 }
608 608
609 /// <summary> 609 /// <summary>
610 /// Sends prims to a client 610 /// Sends prims to a client
611 /// </summary> 611 /// </summary>
612 /// <param name="RemoteClient">Client to send to</param> 612 /// <param name="RemoteClient">Client to send to</param>
613 public void GetInitialPrims(IClientAPI RemoteClient) 613 public void GetInitialPrims(IClientAPI RemoteClient)
614 { 614 {
615 615
616 } 616 }
617 } 617 }
618} 618}