- View the diff current.
- View the source.
- Go to OpenSim/llLookAt.
1: 2015-02-26 (Thu) 22:16:24 iseki | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | *** llLookAt() by Janus Dugong [#wb1da18a] | ||
+ | public void llLookAt(LSL_Vector target, double strength, double damping) | ||
+ | { | ||
+ | m_host.AddScriptLPS(1); | ||
+ | // Determine where we are looking from | ||
+ | LSL_Vector from = llGetPos(); | ||
+ | // normalized direction to target | ||
+ | LSL_Vector dir = llVecNorm(target - from); | ||
+ | |||
+ | // Janus Dugong & Fumi.Hax | ||
+ | if (LSL_Vector.Mag(dir)<=0.0) return; | ||
+ | // | ||
+ | LSL_Vector vec_yaw = new LSL_Vector(0.0, 0.0, Math.Atan2(dir.y, dir.x)); // yaw | ||
+ | LSL_Vector vec_pth = new LSL_Vector(0.0, Math.Acos(dir.z), 0.0); // pitch | ||
+ | LSL_Rotation rot_yaw = llEuler2Rot(vec_yaw); | ||
+ | LSL_Rotation rot_pth = llEuler2Rot(vec_pth); | ||
+ | LSL_Rotation rot = rot_pth * rot_yaw; | ||
+ | |||
+ | // Per discussion with Melanie, for non-physical objects llLookAt appears to simply | ||
+ | // set the rotation of the object, copy that behavior | ||
+ | PhysicsActor pa = m_host.PhysActor; | ||
+ | |||
+ | if (strength == 0 || pa == null || !pa.IsPhysical) | ||
+ | { | ||
+ | llSetRot(rot); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | m_host.StartLookAt(rot, (float)strength, (float)damping); | ||
+ | } | ||
+ | } |
- Backup list of OpenSim/llLookAt
- Backup diff of OpenSim/llLookAt(No. All)
- 1: 2015-02-26 (Thu) 22:16:24 iseki
- Cur: 2015-02-26 (Thu) 22:16:41 iseki