From e50a2e2ce21d74f7d575f97201c246c1cd00bee5 Mon Sep 17 00:00:00 2001
From: MW
Date: Sun, 4 Nov 2007 14:06:41 +0000
Subject: Applying Teravus patch # 557. Some glue code for the updating of
prim's velocity.
---
OpenSim/Region/ClientStack/ClientView.API.cs | 43 +++++++++++++++++-----
.../Region/Environment/Scenes/SceneObjectPart.cs | 38 +++++++++++++++++--
.../Region/Examples/SimpleApp/MyNpcCharacter.cs | 6 ++-
3 files changed, 73 insertions(+), 14 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs
index 83b4cbc..b02fcf6 100644
--- a/OpenSim/Region/ClientStack/ClientView.API.cs
+++ b/OpenSim/Region/ClientStack/ClientView.API.cs
@@ -1049,14 +1049,28 @@ namespace OpenSim.Region.ClientStack
public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position,
LLQuaternion rotation)
{
+ LLVector3 velocity = new LLVector3(0f,0f,0f);
ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
terse.RegionData.RegionHandle = regionHandle;
terse.RegionData.TimeDilation = timeDilation;
terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
- terse.ObjectData[0] = CreatePrimImprovedBlock(localID, position, rotation);
+ terse.ObjectData[0] = CreatePrimImprovedBlock(localID, position, rotation, velocity);
OutPacket(terse);
}
+ public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position,
+ LLQuaternion rotation, LLVector3 velocity)
+ {
+
+ ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+ terse.RegionData.RegionHandle = regionHandle;
+ terse.RegionData.TimeDilation = timeDilation;
+ terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+ terse.ObjectData[0] = CreatePrimImprovedBlock(localID, position, rotation, velocity);
+
+ OutPacket(terse);
+ }
+
#endregion
@@ -1158,7 +1172,7 @@ namespace OpenSim.Region.ClientStack
///
protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreatePrimImprovedBlock(uint localID,
LLVector3 position,
- LLQuaternion rotation)
+ LLQuaternion rotation, LLVector3 velocity)
{
uint ID = localID;
byte[] bytes = new byte[60];
@@ -1178,13 +1192,24 @@ namespace OpenSim.Region.ClientStack
i += 12;
ushort ac = 32767;
+ ushort velx, vely, velz;
+ Vector3 vel = new Vector3(velocity.X, velocity.Y, velocity.Z);
+
+ vel = vel/128.0f;
+ vel.x += 1;
+ vel.y += 1;
+ vel.z += 1;
//vel
- bytes[i++] = (byte) (ac%256);
- bytes[i++] = (byte) ((ac >> 8)%256);
- bytes[i++] = (byte) (ac%256);
- bytes[i++] = (byte) ((ac >> 8)%256);
- bytes[i++] = (byte) (ac%256);
- bytes[i++] = (byte) ((ac >> 8)%256);
+ velx = (ushort)(32768 * (vel.x));
+ vely = (ushort)(32768 * (vel.y));
+ velz = (ushort)(32768 * (vel.z));
+
+ bytes[i++] = (byte) (velx % 256);
+ bytes[i++] = (byte) ((velx >> 8) % 256);
+ bytes[i++] = (byte) (vely % 256);
+ bytes[i++] = (byte) ((vely >> 8) % 256);
+ bytes[i++] = (byte) (velz % 256);
+ bytes[i++] = (byte) ((velz >> 8) % 256);
//accel
bytes[i++] = (byte) (ac%256);
@@ -1372,4 +1397,4 @@ namespace OpenSim.Region.ClientStack
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 535e765..1852ba7 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -235,7 +235,22 @@ namespace OpenSim.Region.Environment.Scenes
///
public LLVector3 Velocity
{
- get { return m_velocity; }
+ get {
+ //if (PhysActor.Velocity.x != 0 || PhysActor.Velocity.y != 0
+ //|| PhysActor.Velocity.z != 0)
+ //{
+ if (PhysActor != null)
+ {
+ if (PhysActor.IsPhysical)
+ {
+ m_velocity.X = PhysActor.Velocity.X;
+ m_velocity.Y = PhysActor.Velocity.Y;
+ m_velocity.Z = PhysActor.Velocity.Z;
+ }
+ }
+
+ return m_velocity;
+ }
set { m_velocity = value; }
}
@@ -995,13 +1010,28 @@ namespace OpenSim.Region.Environment.Scenes
LLVector3 lPos;
lPos = OffsetPosition;
LLQuaternion mRot = RotationOffset;
- remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot);
+ if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) == 0)
+ {
+ remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot);
+ }
+ else
+ {
+ remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot, Velocity);
+ }
}
public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos)
{
LLQuaternion mRot = RotationOffset;
- remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot);
+ if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) == 0)
+ {
+ remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot);
+ }
+ else
+ {
+ remoteClient.SendPrimTerseUpdate(m_regionHandle, 64096, LocalID, lPos, mRot, Velocity);
+ //System.Console.WriteLine("Vel:" + Velocity);
+ }
}
#endregion
@@ -1113,4 +1143,4 @@ namespace OpenSim.Region.Environment.Scenes
}
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
index 9ed1f35..e7a09ac 100644
--- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
@@ -281,6 +281,10 @@ namespace SimpleApp
LLVector3 position, LLQuaternion rotation)
{
}
+ public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID,
+ LLVector3 position, LLQuaternion rotation,LLVector3 velocity)
+ {
+ }
public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items)
{
@@ -430,4 +434,4 @@ namespace SimpleApp
{
}
}
-}
\ No newline at end of file
+}
--
cgit v1.1