diff options
author | Justin Clark-Casey (justincc) | 2014-11-29 00:12:11 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2014-11-29 00:12:11 +0000 |
commit | 265fe349e00b3ece59ec02e56f83bb7623e9d962 (patch) | |
tree | 42afe816271f54a017fe5f731d905e923ef5d67b /OpenSim | |
parent | Avoid repeated lag-generating continuous attempts to retrieve HG service Urls... (diff) | |
download | opensim-SC-265fe349e00b3ece59ec02e56f83bb7623e9d962.zip opensim-SC-265fe349e00b3ece59ec02e56f83bb7623e9d962.tar.gz opensim-SC-265fe349e00b3ece59ec02e56f83bb7623e9d962.tar.bz2 opensim-SC-265fe349e00b3ece59ec02e56f83bb7623e9d962.tar.xz |
Somewhat improve avatar region crossings by properly preserving velocity when avatar enters the new region.
This commit addresses the following issues were causing velocity to be set to 0 on the new region, disrupting flight in particular
* Full avatar updates contained no velocity information, which does appear to have some effect in testing.
* BulletSim was always setting the velocity to 0 for the new BSCharacter. Now, physics engines take a velocity parameter when setting up characters so we can avoid this.
This patch applies to both Bullet and ODE.
Diffstat (limited to '')
12 files changed, 94 insertions, 54 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 85f9d68..5da0ca1 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -5195,8 +5195,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5195 | { | 5195 | { |
5196 | ScenePresence presence = (ScenePresence)entity; | 5196 | ScenePresence presence = (ScenePresence)entity; |
5197 | 5197 | ||
5198 | // m_log.DebugFormat( | 5198 | // m_log.DebugFormat( |
5199 | // "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name); | 5199 | // "[LLCLIENTVIEW]: Sending terse update to {0} with pos {1}, vel {2} in {3}", |
5200 | // Name, presence.OffsetPosition, presence.Velocity, m_scene.Name); | ||
5200 | 5201 | ||
5201 | attachPoint = presence.State; | 5202 | attachPoint = presence.State; |
5202 | collisionPlane = presence.CollisionPlane; | 5203 | collisionPlane = presence.CollisionPlane; |
@@ -5333,13 +5334,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5333 | protected ObjectUpdatePacket.ObjectDataBlock CreateAvatarUpdateBlock(ScenePresence data) | 5334 | protected ObjectUpdatePacket.ObjectDataBlock CreateAvatarUpdateBlock(ScenePresence data) |
5334 | { | 5335 | { |
5335 | // m_log.DebugFormat( | 5336 | // m_log.DebugFormat( |
5336 | // "[LLCLIENTVIEW]: Sending full update to {0} with position {1} in {2}", Name, data.OffsetPosition, m_scene.Name); | 5337 | // "[LLCLIENTVIEW]: Sending full update to {0} with pos {1}, vel {2} in {3}", Name, data.OffsetPosition, data.Velocity, m_scene.Name); |
5337 | 5338 | ||
5338 | byte[] objectData = new byte[76]; | 5339 | byte[] objectData = new byte[76]; |
5339 | 5340 | ||
5340 | data.CollisionPlane.ToBytes(objectData, 0); | 5341 | data.CollisionPlane.ToBytes(objectData, 0); |
5341 | data.OffsetPosition.ToBytes(objectData, 16); | 5342 | data.OffsetPosition.ToBytes(objectData, 16); |
5342 | // data.Velocity.ToBytes(objectData, 28); | 5343 | data.Velocity.ToBytes(objectData, 28); |
5343 | // data.Acceleration.ToBytes(objectData, 40); | 5344 | // data.Acceleration.ToBytes(objectData, 40); |
5344 | 5345 | ||
5345 | // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis | 5346 | // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 5a35aff..966152a 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -636,6 +636,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
636 | 636 | ||
637 | set | 637 | set |
638 | { | 638 | { |
639 | // Util.PrintCallStack(); | ||
640 | // m_log.DebugFormat( | ||
641 | // "[SCENE PRESENCE]: In {0} set velocity of {1} to {2}", | ||
642 | // Scene.RegionInfo.RegionName, Name, value); | ||
643 | |||
639 | if (PhysicsActor != null) | 644 | if (PhysicsActor != null) |
640 | { | 645 | { |
641 | try | 646 | try |
@@ -648,11 +653,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
648 | } | 653 | } |
649 | } | 654 | } |
650 | 655 | ||
651 | m_velocity = value; | 656 | m_velocity = value; |
652 | |||
653 | // m_log.DebugFormat( | ||
654 | // "[SCENE PRESENCE]: In {0} set velocity of {1} to {2}", | ||
655 | // Scene.RegionInfo.RegionName, Name, m_velocity); | ||
656 | } | 657 | } |
657 | } | 658 | } |
658 | /* | 659 | /* |
@@ -1185,15 +1186,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
1185 | } | 1186 | } |
1186 | AbsolutePosition = pos; | 1187 | AbsolutePosition = pos; |
1187 | 1188 | ||
1189 | // m_log.DebugFormat( | ||
1190 | // "Set pos {0}, vel {1} in {1} to {2} from input position of {3} on MakeRootAgent", | ||
1191 | // Name, Scene.Name, AbsolutePosition, pos); | ||
1192 | // | ||
1188 | if (m_teleportFlags == TeleportFlags.Default) | 1193 | if (m_teleportFlags == TeleportFlags.Default) |
1189 | { | 1194 | { |
1190 | Vector3 vel = Velocity; | ||
1191 | AddToPhysicalScene(isFlying); | 1195 | AddToPhysicalScene(isFlying); |
1192 | if (PhysicsActor != null) | 1196 | // |
1193 | PhysicsActor.SetMomentum(vel); | 1197 | // Console.WriteLine( |
1198 | // "Set velocity of {0} in {1} to {2} from input velocity of {3} on MakeRootAgent", | ||
1199 | // Name, Scene.Name, PhysicsActor.Velocity, vel); | ||
1200 | // } | ||
1194 | } | 1201 | } |
1195 | else | 1202 | else |
1203 | { | ||
1196 | AddToPhysicalScene(isFlying); | 1204 | AddToPhysicalScene(isFlying); |
1205 | } | ||
1197 | 1206 | ||
1198 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a | 1207 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a |
1199 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it | 1208 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it |
@@ -1211,6 +1220,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1211 | Flying = false; | 1220 | Flying = false; |
1212 | } | 1221 | } |
1213 | } | 1222 | } |
1223 | |||
1214 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying | 1224 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying |
1215 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent | 1225 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent |
1216 | // elsewhere anyway | 1226 | // elsewhere anyway |
@@ -1275,7 +1285,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1275 | // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will | 1285 | // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will |
1276 | // stall on the border crossing since the existing child agent will still have the last movement | 1286 | // stall on the border crossing since the existing child agent will still have the last movement |
1277 | // recorded, which stops the input from being processed. | 1287 | // recorded, which stops the input from being processed. |
1278 | |||
1279 | MovementFlag = 0; | 1288 | MovementFlag = 0; |
1280 | 1289 | ||
1281 | m_scene.EventManager.TriggerOnMakeRootAgent(this); | 1290 | m_scene.EventManager.TriggerOnMakeRootAgent(this); |
@@ -3668,10 +3677,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3668 | // Compute the avatar position in the next physics tick. | 3677 | // Compute the avatar position in the next physics tick. |
3669 | // If the avatar will be crossing, we force the crossing to happen now | 3678 | // If the avatar will be crossing, we force the crossing to happen now |
3670 | // in the hope that this will make the avatar movement smoother when crossing. | 3679 | // in the hope that this will make the avatar movement smoother when crossing. |
3671 | float timeStep = 0.1f; | 3680 | pos2 += vel * 0.1f; |
3672 | pos2.X = pos2.X + (vel.X * timeStep); | ||
3673 | pos2.Y = pos2.Y + (vel.Y * timeStep); | ||
3674 | pos2.Z = pos2.Z + (vel.Z * timeStep); | ||
3675 | 3681 | ||
3676 | if (m_scene.PositionIsInCurrentRegion(pos2)) | 3682 | if (m_scene.PositionIsInCurrentRegion(pos2)) |
3677 | return; | 3683 | return; |
@@ -3682,9 +3688,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3682 | // Disconnect from the current region | 3688 | // Disconnect from the current region |
3683 | bool isFlying = Flying; | 3689 | bool isFlying = Flying; |
3684 | RemoveFromPhysicalScene(); | 3690 | RemoveFromPhysicalScene(); |
3691 | |||
3685 | // pos2 is the forcasted position so make that the 'current' position so the crossing | 3692 | // pos2 is the forcasted position so make that the 'current' position so the crossing |
3686 | // code will move us into the newly addressed region. | 3693 | // code will move us into the newly addressed region. |
3687 | m_pos = pos2; | 3694 | m_pos = pos2; |
3695 | |||
3688 | if (CrossToNewRegion()) | 3696 | if (CrossToNewRegion()) |
3689 | { | 3697 | { |
3690 | AddToPhysicalScene(isFlying); | 3698 | AddToPhysicalScene(isFlying); |
@@ -4116,19 +4124,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
4116 | if (Appearance.AvatarHeight == 0) | 4124 | if (Appearance.AvatarHeight == 0) |
4117 | // Appearance.SetHeight(); | 4125 | // Appearance.SetHeight(); |
4118 | Appearance.SetSize(new Vector3(0.45f,0.6f,1.9f)); | 4126 | Appearance.SetSize(new Vector3(0.45f,0.6f,1.9f)); |
4119 | 4127 | ||
4120 | PhysicsScene scene = m_scene.PhysicsScene; | ||
4121 | |||
4122 | Vector3 pVec = AbsolutePosition; | ||
4123 | |||
4124 | /* | 4128 | /* |
4125 | PhysicsActor = scene.AddAvatar( | 4129 | PhysicsActor = scene.AddAvatar( |
4126 | LocalId, Firstname + "." + Lastname, pVec, | 4130 | LocalId, Firstname + "." + Lastname, pVec, |
4127 | new Vector3(0.45f, 0.6f, Appearance.AvatarHeight), isFlying); | 4131 | new Vector3(0.45f, 0.6f, Appearance.AvatarHeight), isFlying); |
4128 | */ | 4132 | */ |
4129 | 4133 | ||
4130 | PhysicsActor = scene.AddAvatar( | 4134 | PhysicsActor = m_scene.PhysicsScene.AddAvatar( |
4131 | LocalId, Firstname + "." + Lastname, pVec, | 4135 | LocalId, Firstname + "." + Lastname, AbsolutePosition, Velocity, |
4132 | Appearance.AvatarBoxSize, isFlying); | 4136 | Appearance.AvatarBoxSize, isFlying); |
4133 | 4137 | ||
4134 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; | 4138 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; |
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs index f53adcb..06a205e 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsScene.cs | |||
@@ -80,10 +80,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin | |||
80 | return prim; | 80 | return prim; |
81 | } | 81 | } |
82 | 82 | ||
83 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 83 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
84 | { | 84 | { |
85 | BasicActor act = new BasicActor(size); | 85 | BasicActor act = new BasicActor(size); |
86 | act.Position = position; | 86 | act.Position = position; |
87 | act.Velocity = velocity; | ||
87 | act.Flying = isFlying; | 88 | act.Flying = isFlying; |
88 | _actors.Add(act); | 89 | _actors.Add(act); |
89 | return act; | 90 | return act; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs index 14518e9..8e998ba 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs | |||
@@ -30,6 +30,7 @@ using System.Collections.Generic; | |||
30 | using System.Linq; | 30 | using System.Linq; |
31 | using System.Text; | 31 | using System.Text; |
32 | 32 | ||
33 | using OpenSim.Framework; | ||
33 | using OpenSim.Region.Physics.Manager; | 34 | using OpenSim.Region.Physics.Manager; |
34 | 35 | ||
35 | using OMV = OpenMetaverse; | 36 | using OMV = OpenMetaverse; |
@@ -109,6 +110,10 @@ public class BSActorAvatarMove : BSActor | |||
109 | { | 110 | { |
110 | if (m_velocityMotor != null) | 111 | if (m_velocityMotor != null) |
111 | { | 112 | { |
113 | // if (targ == OMV.Vector3.Zero) | ||
114 | // Util.PrintCallStack(); | ||
115 | // | ||
116 | // Console.WriteLine("SetVelocityAndTarget, {0} {1}", vel, targ); | ||
112 | m_velocityMotor.Reset(); | 117 | m_velocityMotor.Reset(); |
113 | m_velocityMotor.SetTarget(targ); | 118 | m_velocityMotor.SetTarget(targ); |
114 | m_velocityMotor.SetCurrent(vel); | 119 | m_velocityMotor.SetCurrent(vel); |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index 4c54f9f..f29784a 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | |||
@@ -64,15 +64,25 @@ public sealed class BSCharacter : BSPhysObject | |||
64 | private bool _usePID; | 64 | private bool _usePID; |
65 | private float _PIDTau; | 65 | private float _PIDTau; |
66 | 66 | ||
67 | public BSCharacter(uint localID, String avName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 size, bool isFlying) | 67 | // public override OMV.Vector3 RawVelocity |
68 | // { get { return base.RawVelocity; } | ||
69 | // set { | ||
70 | // if (value != base.RawVelocity) | ||
71 | // Util.PrintCallStack(); | ||
72 | // Console.WriteLine("Set rawvel to {0}", value); | ||
73 | // base.RawVelocity = value; } | ||
74 | // } | ||
75 | |||
76 | public BSCharacter( | ||
77 | uint localID, String avName, BSScene parent_scene, OMV.Vector3 pos, OMV.Vector3 vel, OMV.Vector3 size, bool isFlying) | ||
68 | : base(parent_scene, localID, avName, "BSCharacter") | 78 | : base(parent_scene, localID, avName, "BSCharacter") |
69 | { | 79 | { |
70 | _physicsActorType = (int)ActorTypes.Agent; | 80 | _physicsActorType = (int)ActorTypes.Agent; |
71 | RawPosition = pos; | 81 | RawPosition = pos; |
72 | 82 | ||
73 | _flying = isFlying; | 83 | _flying = isFlying; |
74 | RawOrientation = OMV.Quaternion.Identity; | 84 | RawOrientation = OMV.Quaternion.Identity; |
75 | RawVelocity = OMV.Vector3.Zero; | 85 | RawVelocity = vel; |
76 | _buoyancy = ComputeBuoyancyFromFlying(isFlying); | 86 | _buoyancy = ComputeBuoyancyFromFlying(isFlying); |
77 | Friction = BSParam.AvatarStandingFriction; | 87 | Friction = BSParam.AvatarStandingFriction; |
78 | Density = BSParam.AvatarDensity; | 88 | Density = BSParam.AvatarDensity; |
@@ -89,13 +99,15 @@ public sealed class BSCharacter : BSPhysObject | |||
89 | // set _avatarVolume and _mass based on capsule size, _density and Scale | 99 | // set _avatarVolume and _mass based on capsule size, _density and Scale |
90 | ComputeAvatarVolumeAndMass(); | 100 | ComputeAvatarVolumeAndMass(); |
91 | 101 | ||
92 | DetailLog("{0},BSCharacter.create,call,size={1},scale={2},density={3},volume={4},mass={5},pos={6}", | 102 | DetailLog( |
93 | LocalID, _size, Scale, Density, _avatarVolume, RawMass, pos); | 103 | "{0},BSCharacter.create,call,size={1},scale={2},density={3},volume={4},mass={5},pos={6},vel={7}", |
104 | LocalID, _size, Scale, Density, _avatarVolume, RawMass, pos, vel); | ||
94 | 105 | ||
95 | // do actual creation in taint time | 106 | // do actual creation in taint time |
96 | PhysScene.TaintedObject(LocalID, "BSCharacter.create", delegate() | 107 | PhysScene.TaintedObject(LocalID, "BSCharacter.create", delegate() |
97 | { | 108 | { |
98 | DetailLog("{0},BSCharacter.create,taint", LocalID); | 109 | DetailLog("{0},BSCharacter.create,taint", LocalID); |
110 | |||
99 | // New body and shape into PhysBody and PhysShape | 111 | // New body and shape into PhysBody and PhysShape |
100 | PhysScene.Shapes.GetBodyAndShape(true, PhysScene.World, this); | 112 | PhysScene.Shapes.GetBodyAndShape(true, PhysScene.World, this); |
101 | 113 | ||
@@ -142,6 +154,7 @@ public sealed class BSCharacter : BSPhysObject | |||
142 | m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, false); | 154 | m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, false); |
143 | 155 | ||
144 | ForceVelocity = RawVelocity; | 156 | ForceVelocity = RawVelocity; |
157 | TargetVelocity = RawVelocity; | ||
145 | 158 | ||
146 | // This will enable or disable the flying buoyancy of the avatar. | 159 | // This will enable or disable the flying buoyancy of the avatar. |
147 | // Needs to be reset especially when an avatar is recreated after crossing a region boundry. | 160 | // Needs to be reset especially when an avatar is recreated after crossing a region boundry. |
@@ -256,7 +269,6 @@ public sealed class BSCharacter : BSPhysObject | |||
256 | // Called at taint time! | 269 | // Called at taint time! |
257 | public override void ZeroMotion(bool inTaintTime) | 270 | public override void ZeroMotion(bool inTaintTime) |
258 | { | 271 | { |
259 | RawVelocity = OMV.Vector3.Zero; | ||
260 | _acceleration = OMV.Vector3.Zero; | 272 | _acceleration = OMV.Vector3.Zero; |
261 | _rotationalVelocity = OMV.Vector3.Zero; | 273 | _rotationalVelocity = OMV.Vector3.Zero; |
262 | 274 | ||
@@ -267,6 +279,7 @@ public sealed class BSCharacter : BSPhysObject | |||
267 | PhysScene.PE.ClearAllForces(PhysBody); | 279 | PhysScene.PE.ClearAllForces(PhysBody); |
268 | }); | 280 | }); |
269 | } | 281 | } |
282 | |||
270 | public override void ZeroAngularMotion(bool inTaintTime) | 283 | public override void ZeroAngularMotion(bool inTaintTime) |
271 | { | 284 | { |
272 | _rotationalVelocity = OMV.Vector3.Zero; | 285 | _rotationalVelocity = OMV.Vector3.Zero; |
@@ -441,32 +454,40 @@ public sealed class BSCharacter : BSPhysObject | |||
441 | get { return RawVelocity; } | 454 | get { return RawVelocity; } |
442 | set { | 455 | set { |
443 | RawVelocity = value; | 456 | RawVelocity = value; |
444 | // m_log.DebugFormat("{0}: set velocity = {1}", LogHeader, RawVelocity); | 457 | OMV.Vector3 vel = RawVelocity; |
458 | |||
459 | DetailLog("{0}: set Velocity = {1}", LogHeader, value); | ||
460 | |||
445 | PhysScene.TaintedObject(LocalID, "BSCharacter.setVelocity", delegate() | 461 | PhysScene.TaintedObject(LocalID, "BSCharacter.setVelocity", delegate() |
446 | { | 462 | { |
447 | if (m_moveActor != null) | 463 | if (m_moveActor != null) |
448 | m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, true /* inTaintTime */); | 464 | m_moveActor.SetVelocityAndTarget(vel, vel, true /* inTaintTime */); |
449 | 465 | ||
450 | DetailLog("{0},BSCharacter.setVelocity,taint,vel={1}", LocalID, RawVelocity); | 466 | m_log.DebugFormat("{0},BSCharacter.setVelocity,taint,vel={1}", LocalID, vel); |
451 | ForceVelocity = RawVelocity; | 467 | ForceVelocity = vel; |
452 | }); | 468 | }); |
453 | } | 469 | } |
454 | } | 470 | } |
471 | |||
455 | public override OMV.Vector3 ForceVelocity { | 472 | public override OMV.Vector3 ForceVelocity { |
456 | get { return RawVelocity; } | 473 | get { return RawVelocity; } |
457 | set { | 474 | set { |
458 | PhysScene.AssertInTaintTime("BSCharacter.ForceVelocity"); | 475 | PhysScene.AssertInTaintTime("BSCharacter.ForceVelocity"); |
476 | // Util.PrintCallStack(); | ||
477 | DetailLog("{0}: set ForceVelocity = {1}", LogHeader, value); | ||
459 | 478 | ||
460 | RawVelocity = value; | 479 | RawVelocity = value; |
461 | PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity); | 480 | PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity); |
462 | PhysScene.PE.Activate(PhysBody, true); | 481 | PhysScene.PE.Activate(PhysBody, true); |
463 | } | 482 | } |
464 | } | 483 | } |
484 | |||
465 | public override OMV.Vector3 Torque { | 485 | public override OMV.Vector3 Torque { |
466 | get { return RawTorque; } | 486 | get { return RawTorque; } |
467 | set { RawTorque = value; | 487 | set { RawTorque = value; |
468 | } | 488 | } |
469 | } | 489 | } |
490 | |||
470 | public override float CollisionScore { | 491 | public override float CollisionScore { |
471 | get { return _collisionScore; } | 492 | get { return _collisionScore; } |
472 | set { _collisionScore = value; | 493 | set { _collisionScore = value; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs index f059322..e4d8df8 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs | |||
@@ -228,7 +228,7 @@ public abstract class BSPhysObject : PhysicsActor | |||
228 | public virtual OMV.Quaternion RawOrientation { get; set; } | 228 | public virtual OMV.Quaternion RawOrientation { get; set; } |
229 | public abstract OMV.Quaternion ForceOrientation { get; set; } | 229 | public abstract OMV.Quaternion ForceOrientation { get; set; } |
230 | 230 | ||
231 | public OMV.Vector3 RawVelocity { get; set; } | 231 | public virtual OMV.Vector3 RawVelocity { get; set; } |
232 | public abstract OMV.Vector3 ForceVelocity { get; set; } | 232 | public abstract OMV.Vector3 ForceVelocity { get; set; } |
233 | 233 | ||
234 | public OMV.Vector3 RawForce { get; set; } | 234 | public OMV.Vector3 RawForce { get; set; } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 0f79a10..414bc92 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -461,19 +461,19 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters | |||
461 | 461 | ||
462 | #region Prim and Avatar addition and removal | 462 | #region Prim and Avatar addition and removal |
463 | 463 | ||
464 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 464 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
465 | { | 465 | { |
466 | m_log.ErrorFormat("{0}: CALL TO AddAvatar in BSScene. NOT IMPLEMENTED", LogHeader); | 466 | m_log.ErrorFormat("{0}: CALL TO AddAvatar in BSScene. NOT IMPLEMENTED", LogHeader); |
467 | return null; | 467 | return null; |
468 | } | 468 | } |
469 | 469 | ||
470 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) | 470 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
471 | { | 471 | { |
472 | // m_log.DebugFormat("{0}: AddAvatar: {1}", LogHeader, avName); | 472 | // m_log.DebugFormat("{0}: AddAvatar: {1}", LogHeader, avName); |
473 | 473 | ||
474 | if (!m_initialized) return null; | 474 | if (!m_initialized) return null; |
475 | 475 | ||
476 | BSCharacter actor = new BSCharacter(localID, avName, this, position, size, isFlying); | 476 | BSCharacter actor = new BSCharacter(localID, avName, this, position, velocity, size, isFlying); |
477 | lock (PhysObjects) | 477 | lock (PhysObjects) |
478 | PhysObjects.Add(localID, actor); | 478 | PhysObjects.Add(localID, actor); |
479 | 479 | ||
diff --git a/OpenSim/Region/Physics/Manager/NullPhysicsScene.cs b/OpenSim/Region/Physics/Manager/NullPhysicsScene.cs index 1ccf46d..b52f1f6 100644 --- a/OpenSim/Region/Physics/Manager/NullPhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/NullPhysicsScene.cs | |||
@@ -45,7 +45,8 @@ namespace OpenSim.Region.Physics.Manager | |||
45 | // Does nothing right now | 45 | // Does nothing right now |
46 | } | 46 | } |
47 | 47 | ||
48 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 48 | public override PhysicsActor AddAvatar( |
49 | string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
49 | { | 50 | { |
50 | m_log.InfoFormat("[PHYSICS]: NullPhysicsScene : AddAvatar({0})", position); | 51 | m_log.InfoFormat("[PHYSICS]: NullPhysicsScene : AddAvatar({0})", position); |
51 | return PhysicsActor.Null; | 52 | return PhysicsActor.Null; |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs index 71ad795..9cdedbf 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs | |||
@@ -142,10 +142,12 @@ namespace OpenSim.Region.Physics.Manager | |||
142 | /// </summary> | 142 | /// </summary> |
143 | /// <param name="avName"></param> | 143 | /// <param name="avName"></param> |
144 | /// <param name="position"></param> | 144 | /// <param name="position"></param> |
145 | /// <param name="velocity"></param> | ||
145 | /// <param name="size"></param> | 146 | /// <param name="size"></param> |
146 | /// <param name="isFlying"></param> | 147 | /// <param name="isFlying"></param> |
147 | /// <returns></returns> | 148 | /// <returns></returns> |
148 | public abstract PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying); | 149 | public abstract PhysicsActor AddAvatar( |
150 | string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying); | ||
149 | 151 | ||
150 | /// <summary> | 152 | /// <summary> |
151 | /// Add an avatar | 153 | /// Add an avatar |
@@ -153,13 +155,18 @@ namespace OpenSim.Region.Physics.Manager | |||
153 | /// <param name="localID"></param> | 155 | /// <param name="localID"></param> |
154 | /// <param name="avName"></param> | 156 | /// <param name="avName"></param> |
155 | /// <param name="position"></param> | 157 | /// <param name="position"></param> |
158 | /// <param name="velocity"></param> | ||
156 | /// <param name="size"></param> | 159 | /// <param name="size"></param> |
157 | /// <param name="isFlying"></param> | 160 | /// <param name="isFlying"></param> |
158 | /// <returns></returns> | 161 | /// <returns></returns> |
159 | public virtual PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) | 162 | public virtual PhysicsActor AddAvatar( |
163 | uint localID, string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
160 | { | 164 | { |
161 | PhysicsActor ret = AddAvatar(avName, position, size, isFlying); | 165 | PhysicsActor ret = AddAvatar(avName, position, velocity, size, isFlying); |
162 | if (ret != null) ret.LocalID = localID; | 166 | |
167 | if (ret != null) | ||
168 | ret.LocalID = localID; | ||
169 | |||
163 | return ret; | 170 | return ret; |
164 | } | 171 | } |
165 | 172 | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 67503df..05eaf2a 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -167,6 +167,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
167 | /// <param name="avName"></param> | 167 | /// <param name="avName"></param> |
168 | /// <param name="parent_scene"></param> | 168 | /// <param name="parent_scene"></param> |
169 | /// <param name="pos"></param> | 169 | /// <param name="pos"></param> |
170 | /// <param name="vel"></param> | ||
170 | /// <param name="size"></param> | 171 | /// <param name="size"></param> |
171 | /// <param name="pid_d"></param> | 172 | /// <param name="pid_d"></param> |
172 | /// <param name="pid_p"></param> | 173 | /// <param name="pid_p"></param> |
@@ -178,7 +179,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
178 | /// <param name="walk_divisor"></param> | 179 | /// <param name="walk_divisor"></param> |
179 | /// <param name="rundivisor"></param> | 180 | /// <param name="rundivisor"></param> |
180 | public OdeCharacter( | 181 | public OdeCharacter( |
181 | String avName, OdeScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p, | 182 | String avName, OdeScene parent_scene, Vector3 pos, Vector3 vel, Vector3 size, float pid_d, float pid_p, |
182 | float capsule_radius, float tensor, float density, | 183 | float capsule_radius, float tensor, float density, |
183 | float walk_divisor, float rundivisor) | 184 | float walk_divisor, float rundivisor) |
184 | { | 185 | { |
@@ -210,6 +211,9 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
210 | m_log.WarnFormat("[ODE CHARACTER]: Got NaN Position on Character Create for {0}", avName); | 211 | m_log.WarnFormat("[ODE CHARACTER]: Got NaN Position on Character Create for {0}", avName); |
211 | } | 212 | } |
212 | 213 | ||
214 | _velocity = vel; | ||
215 | m_taintTargetVelocity = vel; | ||
216 | |||
213 | _parent_scene = parent_scene; | 217 | _parent_scene = parent_scene; |
214 | 218 | ||
215 | PID_D = pid_d; | 219 | PID_D = pid_d; |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index 6d7f079..5953557 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -1969,16 +1969,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1969 | 1969 | ||
1970 | #region Add/Remove Entities | 1970 | #region Add/Remove Entities |
1971 | 1971 | ||
1972 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 1972 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
1973 | { | 1973 | { |
1974 | Vector3 pos; | ||
1975 | pos.X = position.X; | ||
1976 | pos.Y = position.Y; | ||
1977 | pos.Z = position.Z; | ||
1978 | |||
1979 | OdeCharacter newAv | 1974 | OdeCharacter newAv |
1980 | = new OdeCharacter( | 1975 | = new OdeCharacter( |
1981 | avName, this, pos, size, avPIDD, avPIDP, | 1976 | avName, this, position, velocity, size, avPIDD, avPIDP, |
1982 | avCapRadius, avStandupTensor, avDensity, | 1977 | avCapRadius, avStandupTensor, avDensity, |
1983 | avMovementDivisorWalk, avMovementDivisorRun); | 1978 | avMovementDivisorWalk, avMovementDivisorRun); |
1984 | 1979 | ||
diff --git a/OpenSim/Region/Physics/POSPlugin/POSScene.cs b/OpenSim/Region/Physics/POSPlugin/POSScene.cs index d30d482..080c6ab 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSScene.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSScene.cs | |||
@@ -58,7 +58,8 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
58 | { | 58 | { |
59 | } | 59 | } |
60 | 60 | ||
61 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 61 | public override PhysicsActor AddAvatar( |
62 | string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
62 | { | 63 | { |
63 | POSCharacter act = new POSCharacter(); | 64 | POSCharacter act = new POSCharacter(); |
64 | act.Position = position; | 65 | act.Position = position; |