Fix llRotLookAt and llLookAt for non-physical objects. Per conversation
with Melanie and Nebadon, SL behavior seems to be that non physical objects snap to the request rotation.iar_mods
parent
57ba9ef5ad
commit
adea92f8b7
|
@ -2861,11 +2861,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// we need to convert from a vector describing
|
// we need to convert from a vector describing
|
||||||
// the angles of rotation in radians into rotation value
|
// the angles of rotation in radians into rotation value
|
||||||
|
|
||||||
LSL_Types.Quaternion rot = llEuler2Rot(angle);
|
LSL_Rotation rot = llEuler2Rot(angle);
|
||||||
Quaternion rotation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
|
|
||||||
m_host.startLookAt(rotation, (float)damping, (float)strength);
|
// Per discussion with Melanie, for non-physical objects llLookAt appears to simply
|
||||||
// Orient the object to the angle calculated
|
// set the rotation of the object, copy that behavior
|
||||||
//llSetRot(rot);
|
if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical)
|
||||||
|
{
|
||||||
|
llSetRot(rot);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_host.startLookAt(Rot2Quaternion(rot), (float)damping, (float)strength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llStopLookAt()
|
public void llStopLookAt()
|
||||||
|
@ -3241,8 +3248,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llRotLookAt(LSL_Rotation target, double strength, double damping)
|
public void llRotLookAt(LSL_Rotation target, double strength, double damping)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
Quaternion rot = new Quaternion((float)target.x, (float)target.y, (float)target.z, (float)target.s);
|
|
||||||
m_host.RotLookAt(rot, (float)strength, (float)damping);
|
// Per discussion with Melanie, for non-physical objects llLookAt appears to simply
|
||||||
|
// set the rotation of the object, copy that behavior
|
||||||
|
if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical)
|
||||||
|
{
|
||||||
|
llSetLocalRot(target);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_host.RotLookAt(Rot2Quaternion(target), (float)damping, (float)strength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llStringLength(string str)
|
public LSL_Integer llStringLength(string str)
|
||||||
|
|
Loading…
Reference in New Issue