diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 34 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 27 |
2 files changed, 22 insertions, 39 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 21e2878..a810de2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -519,40 +519,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
519 | } | 519 | } |
520 | } | 520 | } |
521 | 521 | ||
522 | // returns offset position relative to root prim of object when siting | ||
523 | public Vector3 OffsetPositionToSOGRoot | ||
524 | { | ||
525 | get | ||
526 | { | ||
527 | if (ParentPart != null) | ||
528 | return ParentPart.OffsetPosition + (m_pos * ParentPart.RotationOffset); | ||
529 | else | ||
530 | return m_pos; | ||
531 | } | ||
532 | } | ||
533 | |||
534 | public Quaternion OffsetRotationToSOGRoot | ||
535 | { | ||
536 | get | ||
537 | { | ||
538 | if (ParentPart != null) | ||
539 | return ParentPart.RotationOffset * Rotation; | ||
540 | else | ||
541 | return Rotation; | ||
542 | } | ||
543 | } | ||
544 | |||
545 | public Quaternion WorldRotation | ||
546 | { | ||
547 | get | ||
548 | { | ||
549 | if (ParentPart != null) | ||
550 | return ParentPart.GetWorldRotation() * Rotation; | ||
551 | else | ||
552 | return Rotation; | ||
553 | } | ||
554 | } | ||
555 | |||
556 | /// <summary> | 522 | /// <summary> |
557 | /// Current velocity of the avatar. | 523 | /// Current velocity of the avatar. |
558 | /// </summary> | 524 | /// </summary> |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index b2c21cd..4f6803f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -8914,6 +8914,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8914 | // replies as SL wiki | 8914 | // replies as SL wiki |
8915 | 8915 | ||
8916 | LSL_List res = new LSL_List(); | 8916 | LSL_List res = new LSL_List(); |
8917 | SceneObjectPart sitPart = avatar.ParentPart; // most likelly it will be needed | ||
8917 | int idx = 0; | 8918 | int idx = 0; |
8918 | while (idx < rules.Length) | 8919 | while (idx < rules.Length) |
8919 | { | 8920 | { |
@@ -8949,7 +8950,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8949 | break; | 8950 | break; |
8950 | 8951 | ||
8951 | case (int)ScriptBaseClass.PRIM_ROTATION: | 8952 | case (int)ScriptBaseClass.PRIM_ROTATION: |
8952 | Quaternion rot = avatar.WorldRotation; | 8953 | Quaternion rot = avatar.Rotation; |
8954 | if (sitPart != null) | ||
8955 | { | ||
8956 | rot = sitPart.GetWorldRotation() * rot; // apply sit part world rotation | ||
8957 | } | ||
8958 | |||
8953 | res.Add(new LSL_Rotation (rot.X, rot.Y, rot.Z, rot.W)); | 8959 | res.Add(new LSL_Rotation (rot.X, rot.Y, rot.Z, rot.W)); |
8954 | break; | 8960 | break; |
8955 | 8961 | ||
@@ -9036,7 +9042,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9036 | return res; | 9042 | return res; |
9037 | face = (int)rules.GetLSLIntegerItem(idx++); | 9043 | face = (int)rules.GetLSLIntegerItem(idx++); |
9038 | 9044 | ||
9039 | int fullbright; | ||
9040 | if (face == ScriptBaseClass.ALL_SIDES) | 9045 | if (face == ScriptBaseClass.ALL_SIDES) |
9041 | { | 9046 | { |
9042 | for (face = 0; face < 21; face++) | 9047 | for (face = 0; face < 21; face++) |
@@ -9110,18 +9115,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
9110 | res.Add(new LSL_Vector(0f,0f,0f)); | 9115 | res.Add(new LSL_Vector(0f,0f,0f)); |
9111 | res.Add(new LSL_Float(1.0f)); | 9116 | res.Add(new LSL_Float(1.0f)); |
9112 | break; | 9117 | break; |
9118 | |||
9113 | case (int)ScriptBaseClass.PRIM_NAME: | 9119 | case (int)ScriptBaseClass.PRIM_NAME: |
9114 | res.Add(new LSL_String(avatar.Name)); | 9120 | res.Add(new LSL_String(avatar.Name)); |
9115 | break; | 9121 | break; |
9122 | |||
9116 | case (int)ScriptBaseClass.PRIM_DESC: | 9123 | case (int)ScriptBaseClass.PRIM_DESC: |
9117 | res.Add(new LSL_String("")); | 9124 | res.Add(new LSL_String("")); |
9118 | break; | 9125 | break; |
9119 | case (int)ScriptBaseClass.PRIM_ROT_LOCAL: | 9126 | |
9120 | Quaternion lrot = avatar.OffsetRotationToSOGRoot; | 9127 | case (int)ScriptBaseClass.PRIM_ROT_LOCAL: |
9128 | Quaternion lrot = avatar.Rotation; | ||
9129 | if (sitPart != null) | ||
9130 | { | ||
9131 | lrot = sitPart.RotationOffset * lrot; // apply sit part rotation offset | ||
9132 | } | ||
9121 | res.Add(new LSL_Rotation(lrot.X, lrot.Y, lrot.Z, lrot.W)); | 9133 | res.Add(new LSL_Rotation(lrot.X, lrot.Y, lrot.Z, lrot.W)); |
9122 | break; | 9134 | break; |
9135 | |||
9123 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: | 9136 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: |
9124 | Vector3 lpos = avatar.OffsetPositionToSOGRoot; | 9137 | Vector3 lpos = avatar.OffsetPosition; // pos relative to sit part |
9138 | if (sitPart != null) | ||
9139 | { | ||
9140 | lpos = sitPart.OffsetPosition + (lpos * sitPart.RotationOffset); // make it relative to root prim | ||
9141 | } | ||
9125 | res.Add(new LSL_Vector(lpos.X,lpos.Y,lpos.Z)); | 9142 | res.Add(new LSL_Vector(lpos.X,lpos.Y,lpos.Z)); |
9126 | break; | 9143 | break; |
9127 | } | 9144 | } |