aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
authorMelanie Thielker2008-10-18 05:51:36 +0000
committerMelanie Thielker2008-10-18 05:51:36 +0000
commitefe3f3eb2a0a31b1da474974c7d8193c2b28e13f (patch)
treedf1d30ad2f9230ea4e8fbfd1e6368d539600c785 /OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
parent* Fix an over compensation for bounciness on flat Primitive (diff)
downloadopensim-SC-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.zip
opensim-SC-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.gz
opensim-SC-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.bz2
opensim-SC-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.xz
Megapatch. :) Fix skull attachment editing. Streamline Object terse updates.
Add rezzing time to objects. Add Object return and traffic fields to land database. Add plumbing for auto return. Implement auto return. Contains a migration. May contain nuts.
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs118
1 files changed, 69 insertions, 49 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index bf6025e..6c76d54 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -212,6 +212,7 @@ namespace OpenSim.Region.Environment.Scenes
212 // It's not necessary to persist this 212 // It's not necessary to persist this
213 m_TextureAnimation = new byte[0]; 213 m_TextureAnimation = new byte[0];
214 m_particleSystem = new byte[0]; 214 m_particleSystem = new byte[0];
215 Rezzed = DateTime.Now;
215 } 216 }
216 217
217 public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, UUID ownerID, uint localID, 218 public SceneObjectPart(ulong regionHandle, SceneObjectGroup parent, UUID ownerID, uint localID,
@@ -237,6 +238,7 @@ namespace OpenSim.Region.Environment.Scenes
237 m_regionHandle = regionHandle; 238 m_regionHandle = regionHandle;
238 m_parentGroup = parent; 239 m_parentGroup = parent;
239 240
241 Rezzed = DateTime.Now;
240 _creationDate = (Int32) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; 242 _creationDate = (Int32) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
241 _ownerID = ownerID; 243 _ownerID = ownerID;
242 _creatorID = _ownerID; 244 _creatorID = _ownerID;
@@ -311,6 +313,8 @@ namespace OpenSim.Region.Environment.Scenes
311 RotationOffset = rotation; 313 RotationOffset = rotation;
312 ObjectFlags = flags; 314 ObjectFlags = flags;
313 315
316 Rezzed = DateTime.Now;
317
314 m_TextureAnimation = new byte[0]; 318 m_TextureAnimation = new byte[0];
315 m_particleSystem = new byte[0]; 319 m_particleSystem = new byte[0];
316 // Since we don't store script state, this is only a 'temporary' objectflag now 320 // Since we don't store script state, this is only a 'temporary' objectflag now
@@ -339,6 +343,7 @@ namespace OpenSim.Region.Environment.Scenes
339 */ 343 */
340 344
341 //System.Console.WriteLine("SceneObjectPart Deserialize END"); 345 //System.Console.WriteLine("SceneObjectPart Deserialize END");
346 Rezzed = DateTime.Now;
342 } 347 }
343 348
344 #endregion Constructors 349 #endregion Constructors
@@ -362,6 +367,7 @@ namespace OpenSim.Region.Environment.Scenes
362 private uint _nextOwnerMask = (uint)PermissionMask.All; 367 private uint _nextOwnerMask = (uint)PermissionMask.All;
363 private PrimFlags _flags = 0; 368 private PrimFlags _flags = 0;
364 private DateTime m_expires; 369 private DateTime m_expires;
370 private DateTime m_rezzed;
365 371
366 public UUID CreatorID { 372 public UUID CreatorID {
367 get 373 get
@@ -459,6 +465,13 @@ namespace OpenSim.Region.Environment.Scenes
459 set { m_expires = value; } 465 set { m_expires = value; }
460 } 466 }
461 467
468 [XmlIgnore]
469 public DateTime Rezzed
470 {
471 get { return m_rezzed; }
472 set { m_rezzed = value; }
473 }
474
462 /// <summary> 475 /// <summary>
463 /// The position of the entire group that this prim belongs to. 476 /// The position of the entire group that this prim belongs to.
464 /// </summary> 477 /// </summary>
@@ -1270,6 +1283,7 @@ if (m_shape != null) {
1270 dupe._objectSaleType = _objectSaleType; 1283 dupe._objectSaleType = _objectSaleType;
1271 dupe._salePrice = _salePrice; 1284 dupe._salePrice = _salePrice;
1272 dupe._category = _category; 1285 dupe._category = _category;
1286 dupe.m_rezzed = m_rezzed;
1273 1287
1274 dupe.TaskInventory = (TaskInventoryDictionary)dupe.TaskInventory.Clone(); 1288 dupe.TaskInventory = (TaskInventoryDictionary)dupe.TaskInventory.Clone();
1275 1289
@@ -2226,10 +2240,10 @@ if (m_shape != null) {
2226 /// Send a terse update to the client. 2240 /// Send a terse update to the client.
2227 /// </summary> 2241 /// </summary>
2228 /// <param name="remoteClient"></param> 2242 /// <param name="remoteClient"></param>
2229 public void SendTerseUpdate(IClientAPI remoteClient) 2243// public void SendTerseUpdate(IClientAPI remoteClient)
2230 { 2244// {
2231 m_parentGroup.SendPartTerseUpdate(remoteClient, this); 2245// SendTerseUpdateToClient(remoteClient);
2232 } 2246// }
2233 2247
2234 /// <summary> 2248 /// <summary>
2235 /// 2249 ///
@@ -2239,54 +2253,14 @@ if (m_shape != null) {
2239 List<ScenePresence> avatars = m_parentGroup.Scene.GetScenePresences(); 2253 List<ScenePresence> avatars = m_parentGroup.Scene.GetScenePresences();
2240 for (int i = 0; i < avatars.Count; i++) 2254 for (int i = 0; i < avatars.Count; i++)
2241 { 2255 {
2242 m_parentGroup.SendPartTerseUpdate(avatars[i].ControllingClient, this); 2256 SendTerseUpdateToClient(avatars[i].ControllingClient);
2243 }
2244 }
2245
2246 public void SendTerseUpdateToClient(IClientAPI remoteClient)
2247 {
2248 Vector3 lPos;
2249 lPos = OffsetPosition;
2250 Quaternion mRot = RotationOffset;
2251 // TODO: I have no idea why we are making this check. This should be sorted out
2252 if ((ObjectFlags & (uint) PrimFlags.Physics) == 0)
2253 {
2254 remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, RotationalVelocity, Shape.State, FromAssetID);
2255 }
2256 else
2257 {
2258 remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity,
2259 RotationalVelocity);
2260 //System.Console.WriteLine("LID: " + LocalID + " RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString());
2261 } 2257 }
2262 } 2258 }
2263 2259
2264 public void SendTerseUpdateToClient(IClientAPI remoteClient, Vector3 lPos) 2260// public void SendTerseUpdateToClient(IClientAPI remoteClient, Vector3 lPos)
2265 { 2261// {
2266 Quaternion mRot = RotationOffset; 2262// SendTerseUpdateToClient(remoteclient);
2267 //bool isattachment = IsAttachment; 2263// }
2268 //if (LocalId != ParentGroup.RootPart.LocalId)
2269 //isattachment = ParentGroup.RootPart.IsAttachment;
2270
2271 if (IsAttachment)
2272 {
2273 //m_log.Debug(AttachmentPoint.ToString());
2274 remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, RotationalVelocity, (byte)((AttachmentPoint % 16) * 16 + (AttachmentPoint / 16)),FromAssetID);
2275 }
2276 else
2277 {
2278 if ((ObjectFlags & (uint)PrimFlags.Physics) == 0)
2279 {
2280 remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, RotationalVelocity, Shape.State, FromAssetID);
2281 }
2282 else
2283 {
2284 remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity,
2285 RotationalVelocity);
2286 //System.Console.WriteLine("LID: " + LocalID + "RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString());
2287 }
2288 }
2289 }
2290 2264
2291 public void SetAttachmentPoint(uint AttachmentPoint) 2265 public void SetAttachmentPoint(uint AttachmentPoint)
2292 { 2266 {
@@ -3257,6 +3231,15 @@ if (m_shape != null) {
3257 PhysActor.Shape = m_shape; 3231 PhysActor.Shape = m_shape;
3258 } 3232 }
3259 3233
3234 // This is what makes vehicle trailers work
3235 // A script in a child prim re-issues
3236 // llSetPrimitiveParams(PRIM_TYPE) every few seconds. That
3237 // prevents autoreturn. This is not well known. It also works
3238 // in SL.
3239 //
3240 if (ParentGroup.RootPart != this)
3241 ParentGroup.RootPart.Rezzed = DateTime.Now;
3242
3260 ParentGroup.HasGroupChanged = true; 3243 ParentGroup.HasGroupChanged = true;
3261 ScheduleFullUpdate(); 3244 ScheduleFullUpdate();
3262 } 3245 }
@@ -3427,5 +3410,42 @@ if (m_shape != null) {
3427 } 3410 }
3428 3411
3429 #endregion Public Methods 3412 #endregion Public Methods
3413
3414 private byte GetAttachPointEncoded()
3415 {
3416 return (byte)((AttachmentPoint % 16) * 16 + (AttachmentPoint / 16));
3417 }
3418
3419 public void SendTerseUpdateToClient(IClientAPI remoteClient)
3420 {
3421 if (ParentGroup == null || ParentGroup.RootPart == null)
3422 return;
3423
3424 Vector3 lPos = OffsetPosition;
3425
3426 byte state = Shape.State;
3427 if (IsAttachment)
3428 {
3429 if (ParentGroup.RootPart != this)
3430 return;
3431
3432 lPos = ParentGroup.RootPart.AttachedPos;
3433 state = GetAttachPointEncoded();
3434 }
3435 else
3436 {
3437 if (ParentGroup.RootPart == this)
3438 lPos = AbsolutePosition;
3439 }
3440
3441 remoteClient.SendPrimTerseUpdate(m_regionHandle,
3442 (ushort)(m_parentGroup.GetTimeDilation() *
3443 (float)ushort.MaxValue), LocalId, lPos,
3444 RotationOffset, Velocity,
3445 RotationalVelocity, state, FromAssetID);
3446 }
3430 } 3447 }
3431} 3448}
3449
3450
3451