aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/OpenSim.Region/World
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/OpenSim.Region/World')
-rw-r--r--OpenSim/OpenSim.Region/World/Avatar.cs10
-rw-r--r--OpenSim/OpenSim.Region/World/Primitive.cs141
-rw-r--r--OpenSim/OpenSim.Region/World/World.cs23
3 files changed, 82 insertions, 92 deletions
diff --git a/OpenSim/OpenSim.Region/World/Avatar.cs b/OpenSim/OpenSim.Region/World/Avatar.cs
index 88a7969..65af5a6 100644
--- a/OpenSim/OpenSim.Region/World/Avatar.cs
+++ b/OpenSim/OpenSim.Region/World/Avatar.cs
@@ -66,7 +66,6 @@ namespace OpenSim.Region
66 Wearables = AvatarWearable.DefaultWearables; 66 Wearables = AvatarWearable.DefaultWearables;
67 67
68 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); 68 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
69 Console.WriteLine("avatar point 4");
70 69
71 //register for events 70 //register for events
72 ControllingClient.OnRequestWearables += new GenericCall(this.SendOurAppearance); 71 ControllingClient.OnRequestWearables += new GenericCall(this.SendOurAppearance);
@@ -77,14 +76,7 @@ namespace OpenSim.Region
77 ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); 76 ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack);
78 ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); 77 ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
79 ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); 78 ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
80 * */ 79 */
81
82 ControllingClient.OnParcelPropertiesRequest +=new ParcelPropertiesRequest(this.m_world.parcelManager.handleParcelPropertiesRequest);
83 ControllingClient.OnParcelDivideRequest += new ParcelDivideRequest(this.m_world.parcelManager.handleParcelDivideRequest);
84 ControllingClient.OnParcelJoinRequest += new ParcelJoinRequest(this.m_world.parcelManager.handleParcelJoinRequest);
85 ControllingClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(this.m_world.parcelManager.handleParcelPropertiesUpdateRequest);
86
87 ControllingClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(this.m_world.estateManager.handleEstateOwnerMessage);
88 } 80 }
89 81
90 /// <summary> 82 /// <summary>
diff --git a/OpenSim/OpenSim.Region/World/Primitive.cs b/OpenSim/OpenSim.Region/World/Primitive.cs
index 1f70550..d540a3b 100644
--- a/OpenSim/OpenSim.Region/World/Primitive.cs
+++ b/OpenSim/OpenSim.Region/World/Primitive.cs
@@ -14,12 +14,12 @@ namespace OpenSim.Region
14 public class Primitive : Entity 14 public class Primitive : Entity
15 { 15 {
16 protected PrimData primData; 16 protected PrimData primData;
17 //private ObjectUpdatePacket OurPacket;
18 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); 17 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
19 private Dictionary<uint, IClientAPI> m_clientThreads; 18 private Dictionary<uint, IClientAPI> m_clientThreads;
20 private ulong m_regionHandle; 19 private ulong m_regionHandle;
21 private const uint FULL_MASK_PERMISSIONS = 2147483647; 20 private const uint FULL_MASK_PERMISSIONS = 2147483647;
22 private bool physicsEnabled = false; 21 private bool physicsEnabled = false;
22 private byte updateFlag = 0;
23 23
24 private Dictionary<LLUUID, InventoryItem> inventoryItems; 24 private Dictionary<LLUUID, InventoryItem> inventoryItems;
25 25
@@ -66,7 +66,7 @@ namespace OpenSim.Region
66 inventoryItems = new Dictionary<LLUUID, InventoryItem>(); 66 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
67 } 67 }
68 68
69 public Primitive(Dictionary<uint, IClientAPI> clientThreads, ulong regionHandle, World world, LLUUID owner) 69 public Primitive(Dictionary<uint, IClientAPI> clientThreads, ulong regionHandle, World world, LLUUID owner, LLUUID fullID, uint localID)
70 { 70 {
71 m_clientThreads = clientThreads; 71 m_clientThreads = clientThreads;
72 m_regionHandle = regionHandle; 72 m_regionHandle = regionHandle;
@@ -75,8 +75,34 @@ namespace OpenSim.Region
75 this.primData = new PrimData(); 75 this.primData = new PrimData();
76 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; 76 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
77 this.primData.OwnerID = owner; 77 this.primData.OwnerID = owner;
78 this.primData.FullID = this.uuid = fullID;
79 this.primData.LocalID = this.localid = localID;
78 } 80 }
79 81
82 /// <summary>
83 /// Constructor to create a default cube
84 /// </summary>
85 /// <param name="clientThreads"></param>
86 /// <param name="regionHandle"></param>
87 /// <param name="world"></param>
88 /// <param name="owner"></param>
89 /// <param name="localID"></param>
90 /// <param name="position"></param>
91 public Primitive(Dictionary<uint, IClientAPI> clientThreads, ulong regionHandle, World world, LLUUID owner, uint localID, LLVector3 position)
92 {
93 m_clientThreads = clientThreads;
94 m_regionHandle = regionHandle;
95 m_world = world;
96 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
97 this.primData = PrimData.DefaultCube();
98 this.primData.OwnerID = owner;
99 this.primData.LocalID = this.localid = localID;
100 this.Pos = this.primData.Position = position;
101
102 this.updateFlag = 1;
103 }
104
105
80 public byte[] GetByteArray() 106 public byte[] GetByteArray()
81 { 107 {
82 byte[] result = null; 108 byte[] result = null;
@@ -115,7 +141,11 @@ namespace OpenSim.Region
115 141
116 public override void update() 142 public override void update()
117 { 143 {
118 LLVector3 pos2 = new LLVector3(0, 0, 0); 144 if (this.updateFlag == 1)
145 {
146 this.SendFullUpdateToAllClients();
147 this.updateFlag = 0;
148 }
119 } 149 }
120 150
121 public override void BackUp() 151 public override void BackUp()
@@ -275,17 +305,39 @@ namespace OpenSim.Region
275 305
276 public void SendFullUpdateToAllClients() 306 public void SendFullUpdateToAllClients()
277 { 307 {
278 308 List<Avatar> avatars = this.m_world.RequestAvatarList();
309 for (int i = 0; i < avatars.Count; i++)
310 {
311 this.SendFullUpdateToClient(avatars[i].ControllingClient);
312 }
279 } 313 }
280 314
281 public void SendTerseUpdateToClient(IClientAPI RemoteClient) 315 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
282 { 316 {
317 LLVector3 lPos;
318 Axiom.MathLib.Quaternion lRot;
319 if (this._physActor != null && this.physicsEnabled)
320 {
321 PhysicsVector pPos = this._physActor.Position;
322 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
323 lRot = this._physActor.Orientation;
324 }
325 else
326 {
327 lPos = this.Pos;
328 lRot = this.rotation;
329 }
283 330
331
284 } 332 }
285 333
286 public void SendTerseUpdateToALLClients() 334 public void SendTerseUpdateToALLClients()
287 { 335 {
288 336 List<Avatar> avatars = this.m_world.RequestAvatarList();
337 for (int i = 0; i < avatars.Count; i++)
338 {
339 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
340 }
289 } 341 }
290 342
291 #endregion 343 #endregion
@@ -324,6 +376,8 @@ namespace OpenSim.Region
324 this.primData.FullID = this.uuid = LLUUID.Random(); 376 this.primData.FullID = this.uuid = LLUUID.Random();
325 this.localid = (uint)(localID); 377 this.localid = (uint)(localID);
326 this.primData.Position = this.Pos = pos1; 378 this.primData.Position = this.Pos = pos1;
379
380 this.updateFlag = 1;
327 } 381 }
328 382
329 public void CreateFromBytes(byte[] data) 383 public void CreateFromBytes(byte[] data)
@@ -343,82 +397,5 @@ namespace OpenSim.Region
343 397
344 #endregion 398 #endregion
345 399
346
347 protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedBlock()
348 {
349 uint ID = this.localid;
350 byte[] bytes = new byte[60];
351
352 int i = 0;
353 ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
354 dat.TextureEntry = new byte[0];
355 bytes[i++] = (byte)(ID % 256);
356 bytes[i++] = (byte)((ID >> 8) % 256);
357 bytes[i++] = (byte)((ID >> 16) % 256);
358 bytes[i++] = (byte)((ID >> 24) % 256);
359 bytes[i++] = 0;
360 bytes[i++] = 0;
361
362 LLVector3 lPos;
363 Axiom.MathLib.Quaternion lRot;
364 if (this._physActor != null && this.physicsEnabled)
365 {
366 PhysicsVector pPos = this._physActor.Position;
367 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
368 lRot = this._physActor.Orientation;
369 }
370 else
371 {
372 lPos = this.Pos;
373 lRot = this.rotation;
374 }
375 byte[] pb = lPos.GetBytes();
376 Array.Copy(pb, 0, bytes, i, pb.Length);
377 i += 12;
378 ushort ac = 32767;
379
380 //vel
381 bytes[i++] = (byte)(ac % 256);
382 bytes[i++] = (byte)((ac >> 8) % 256);
383 bytes[i++] = (byte)(ac % 256);
384 bytes[i++] = (byte)((ac >> 8) % 256);
385 bytes[i++] = (byte)(ac % 256);
386 bytes[i++] = (byte)((ac >> 8) % 256);
387
388 //accel
389 bytes[i++] = (byte)(ac % 256);
390 bytes[i++] = (byte)((ac >> 8) % 256);
391 bytes[i++] = (byte)(ac % 256);
392 bytes[i++] = (byte)((ac >> 8) % 256);
393 bytes[i++] = (byte)(ac % 256);
394 bytes[i++] = (byte)((ac >> 8) % 256);
395
396 ushort rw, rx, ry, rz;
397 rw = (ushort)(32768 * (lRot.w + 1));
398 rx = (ushort)(32768 * (lRot.x + 1));
399 ry = (ushort)(32768 * (lRot.y + 1));
400 rz = (ushort)(32768 * (lRot.z + 1));
401
402 //rot
403 bytes[i++] = (byte)(rx % 256);
404 bytes[i++] = (byte)((rx >> 8) % 256);
405 bytes[i++] = (byte)(ry % 256);
406 bytes[i++] = (byte)((ry >> 8) % 256);
407 bytes[i++] = (byte)(rz % 256);
408 bytes[i++] = (byte)((rz >> 8) % 256);
409 bytes[i++] = (byte)(rw % 256);
410 bytes[i++] = (byte)((rw >> 8) % 256);
411
412 //rotation vel
413 bytes[i++] = (byte)(ac % 256);
414 bytes[i++] = (byte)((ac >> 8) % 256);
415 bytes[i++] = (byte)(ac % 256);
416 bytes[i++] = (byte)((ac >> 8) % 256);
417 bytes[i++] = (byte)(ac % 256);
418 bytes[i++] = (byte)((ac >> 8) % 256);
419
420 dat.Data = bytes;
421 return dat;
422 }
423 } 400 }
424} 401}
diff --git a/OpenSim/OpenSim.Region/World/World.cs b/OpenSim/OpenSim.Region/World/World.cs
index c5c554d..49ba8fa 100644
--- a/OpenSim/OpenSim.Region/World/World.cs
+++ b/OpenSim/OpenSim.Region/World/World.cs
@@ -450,7 +450,19 @@ namespace OpenSim.Region
450 /// <param name="ownerID"></param> 450 /// <param name="ownerID"></param>
451 public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID) 451 public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID)
452 { 452 {
453 453 try
454 {
455 // MainConsole.Instance.Notice("World.cs: AddNewPrim() - Creating new prim");
456 Primitive prim = new Primitive(m_clientThreads, m_regionHandle, this);
457 prim.CreateFromPacket(addPacket, ownerID, this._primCount);
458
459 this.Entities.Add(prim.uuid, prim);
460 this._primCount++;
461 }
462 catch (Exception e)
463 {
464 // MainConsole.Instance.Warn("World.cs: AddNewPrim() - Failed with exception " + e.ToString());
465 }
454 } 466 }
455 467
456 #endregion 468 #endregion
@@ -469,6 +481,15 @@ namespace OpenSim.Region
469 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); 481 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
470 remoteClient.OnChatFromViewer += new ChatFromViewer(this.SimChat); 482 remoteClient.OnChatFromViewer += new ChatFromViewer(this.SimChat);
471 remoteClient.OnRequestWearables += new GenericCall(this.InformClientOfNeighbours); 483 remoteClient.OnRequestWearables += new GenericCall(this.InformClientOfNeighbours);
484 remoteClient.OnAddPrim += new GenericCall4(this.AddNewPrim);
485
486 /*
487 remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest);
488 remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest);
489 remoteClient.OnParcelJoinRequest += new ParcelJoinRequest(parcelManager.handleParcelJoinRequest);
490 remoteClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(parcelManager.handleParcelPropertiesUpdateRequest);
491 remoteClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(estateManager.handleEstateOwnerMessage);
492 */
472 493
473 Avatar newAvatar = null; 494 Avatar newAvatar = null;
474 try 495 try