move ugly convertion of axis locks 3 bit flags to a wasted vector3 down to PhysicsActor. Let engines use LockAngularMotion with either Vector3 argument or byte
parent
d8528a7ba0
commit
0045398324
|
@ -3861,16 +3861,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
|
|
||||||
if (pa != null)
|
if (pa != null)
|
||||||
{
|
{
|
||||||
// physics should also get a byte and not a Vector3 TODO
|
pa.LockAngularMotion(RotationAxisLocks);
|
||||||
Vector3 lrRotationAxis = Vector3.One;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) != 0 )
|
|
||||||
lrRotationAxis.X = 0f;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y) != 0 )
|
|
||||||
lrRotationAxis.Y = 0f;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z) != 0 )
|
|
||||||
lrRotationAxis.Z = 0f;
|
|
||||||
|
|
||||||
pa.LockAngularMotion(lrRotationAxis);
|
|
||||||
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(pa);
|
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(pa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4882,16 +4873,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
||||||
|
|
||||||
if(LocalId == ParentGroup.RootPart.LocalId)
|
if(LocalId == ParentGroup.RootPart.LocalId)
|
||||||
{
|
{
|
||||||
// ugly code: physics should also get a byte and not a Vector3 TODO
|
pa.LockAngularMotion(RotationAxisLocks);
|
||||||
Vector3 lrRotationAxis = Vector3.One;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) != 0 )
|
|
||||||
lrRotationAxis.X = 0f;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y) != 0 )
|
|
||||||
lrRotationAxis.Y = 0f;
|
|
||||||
if((RotationAxisLocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z) != 0 )
|
|
||||||
lrRotationAxis.Z = 0f;
|
|
||||||
|
|
||||||
pa.LockAngularMotion(lrRotationAxis);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VolumeDetectActive) // change if not the default only
|
if (VolumeDetectActive) // change if not the default only
|
||||||
|
|
|
@ -230,7 +230,20 @@ namespace OpenSim.Region.PhysicsModules.SharedBase
|
||||||
|
|
||||||
public abstract void delink();
|
public abstract void delink();
|
||||||
|
|
||||||
public abstract void LockAngularMotion(Vector3 axis);
|
public virtual void LockAngularMotion(Vector3 axis) { }
|
||||||
|
|
||||||
|
public virtual void LockAngularMotion(byte axislocks)
|
||||||
|
{
|
||||||
|
Vector3 lrRotationAxis = Vector3.One;
|
||||||
|
if((axislocks & 0x02) != 0 )
|
||||||
|
lrRotationAxis.X = 0f;
|
||||||
|
if((axislocks & 0x04) != 0 )
|
||||||
|
lrRotationAxis.Y = 0f;
|
||||||
|
if((axislocks & 0x08) != 0 )
|
||||||
|
lrRotationAxis.Z = 0f;
|
||||||
|
|
||||||
|
LockAngularMotion(lrRotationAxis);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void RequestPhysicsterseUpdate()
|
public virtual void RequestPhysicsterseUpdate()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue