Difference between revisions of "TranslateTo - ObjectReference"
Jump to navigation
Jump to search
imported>Fg109 (added note, changed description of angle parameters) |
(added a new discovery (flagging as full LOD) that causes the function to fail.) |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Scripting]] | [[Category:Scripting]] | ||
[[Category:Papyrus]] | [[Category:Papyrus]] | ||
'''Member of:''' [[ObjectReference Script]] | '''Member of:''' [[ObjectReference Script]] | ||
Line 46: | Line 45: | ||
*The OnTranslationComplete event will fire when the object reaches both the target position and target rotation. | *The OnTranslationComplete event will fire when the object reaches both the target position and target rotation. | ||
*The OnTranslationAlmostComplete event can fire even when the target rotation is far from being reached. | *The OnTranslationAlmostComplete event can fire even when the target rotation is far from being reached. | ||
== Collision boxes, bugs and other oddities == | |||
The collision "boxes" may not be updated after using this function. Here are some of the observations reported on the forums. [http://forums.bethsoft.com/topic/1383367-getting-collisions-to-move-with-translateto/page__view__findpost__p__20989813 (source)] | |||
* The collision box is property updated for moveable statics. | |||
* The collision box is not moved for other static objects. To fix this the object must be declared as a MoveableStatic and its mesh must have the bhkRigidBody settings corrected (see [http://forums.bethsoft.com/topic/1383367-getting-collisions-to-move-with-translateto/page__view__findpost__p__20988707 this post]). | |||
* The collision box is voided for actors (but they will still collide with the ground). They will go through other actors, activators, etc. | |||
Besides of that, a few bugs and oddities have been reported: | |||
* Using havok collision in an activator then trying to translate it doesn't work... it just sits there motionless. | |||
* You can however translate an enabled activator when it has no 3D... meaning you can do it from ANYWHERE at any time - as long as it was enabled (and a slight wait or other function afterwards). | |||
* The function does not work on MiscItems (presumably for the same reason). [[SetPosition - ObjectReference]] works though. | |||
* '''It is possible to translate havok-enabled items''' by [[SetMotionType_-_ObjectReference|setting their MotionType]] to motion_keyframed. After being translated, they can be forced back into Havok simulation by changing their motion type back to motion_dynamic and [[ApplyHavokImpulse - ObjectReference|applying a small havok impulse]]. Deleting havok objects or changing their motion type mid-translation may cause a CTD: use [[StopTranslation - ObjectReference|StopTranslation]] first. | |||
* You cannot translate something that is disabled (or was just enabled). You will get a no3D error. It may even be necessary to add a [[Wait - Utility]] statement or double-check the load status using [[Is3DLoaded - ObjectReference]] before translating an object after its OnLoad event is called. | |||
*You cannot translate an object that is flagged as '''Full LOD''', it will simply ignore the command and papyrus logs will show no errors. | |||
Translating water activators: | |||
* Water plane activators can be translated, but their collision does not move with them unless the "Movable" keyword is added to the activator. This can be seen in TG08Water1024. | |||
* The collision for water planes is handled in a very "coarse" manner. Non-horizontal water planes will intersect strangely and may cause objects to float well above their surfaces. | |||
== See Also == | == See Also == | ||
Line 56: | Line 74: | ||
*[[OnTranslationComplete - ObjectReference]] | *[[OnTranslationComplete - ObjectReference]] | ||
*[[OnTranslationFailed - ObjectReference]] | *[[OnTranslationFailed - ObjectReference]] | ||
*[[Spatial functions and snippets]] |
Latest revision as of 22:47, 15 November 2024
Member of: ObjectReference Script
Makes the object translate to the passed in position and orientation at the given speed.
Syntax[edit | edit source]
Function TranslateTo(float afX, float afY, float afZ, float afAngleX, float afAngleY, float afAngleZ, float afSpeed, \
float afMaxRotationSpeed = 0.0) native
Parameters[edit | edit source]
- afX: Position along the X axis (Absolute world coordinates).
- afY: Position along the Y axis (Absolute world coordinates).
- afZ: Position along the Z axis (Absolute world coordinates).
- afAngleX: Destination X Angle (Absolute world rotation).
- afAngleY: Destination Y Angle (Absolute world rotation) (rarely used).
- afAngleZ: Destination Z Angle (Absolute world rotation).
- afSpeed: Movement Speed.
- afMaxRotationSpeed: Maximum rotation Speed (default is 0 to mean "don't clamp the rotation speed") - Negative values cause unpredictable rotation.
Return Value[edit | edit source]
None.
Examples[edit | edit source]
; Translate the bird slowly to 0,0,0 with a rotation of 90,90,90
Bird.TranslateTo(0.0, 0.0, 0.0, 90.0, 90.0, 90.0, 1.0)
; Translate the bird slowly to 0,0,0 with a rotation of 90,90,90 with a max rotation speed of 10
Bird.TranslateTo(0.0, 0.0, 0.0, 90.0, 90.0, 90.0, 1.0, 10.0)
Tips[edit | edit source]
A movement speed parameter (afSpeed) of 1 is extremely slow - nearly imperceptible to the human eye. Starting at a an afSpeed of 100 and working up or down towards the desired speed is recommended.
Notes[edit | edit source]
- The movement speed is in units per second.
- The rotation speed is in degrees per second.
- afMaxRotationSpeed equal to 0 means that the object will reach the target rotation when it reaches the target position.
- It is not possible to cause the object to rotate faster than it would with afMaxRotationSpeed equal to 0. (Cannot reach target rotation before target position.)
- The OnTranslationComplete event will fire when the object reaches both the target position and target rotation.
- The OnTranslationAlmostComplete event can fire even when the target rotation is far from being reached.
Collision boxes, bugs and other oddities[edit | edit source]
The collision "boxes" may not be updated after using this function. Here are some of the observations reported on the forums. (source)
- The collision box is property updated for moveable statics.
- The collision box is not moved for other static objects. To fix this the object must be declared as a MoveableStatic and its mesh must have the bhkRigidBody settings corrected (see this post).
- The collision box is voided for actors (but they will still collide with the ground). They will go through other actors, activators, etc.
Besides of that, a few bugs and oddities have been reported:
- Using havok collision in an activator then trying to translate it doesn't work... it just sits there motionless.
- You can however translate an enabled activator when it has no 3D... meaning you can do it from ANYWHERE at any time - as long as it was enabled (and a slight wait or other function afterwards).
- The function does not work on MiscItems (presumably for the same reason). SetPosition - ObjectReference works though.
- It is possible to translate havok-enabled items by setting their MotionType to motion_keyframed. After being translated, they can be forced back into Havok simulation by changing their motion type back to motion_dynamic and applying a small havok impulse. Deleting havok objects or changing their motion type mid-translation may cause a CTD: use StopTranslation first.
- You cannot translate something that is disabled (or was just enabled). You will get a no3D error. It may even be necessary to add a Wait - Utility statement or double-check the load status using Is3DLoaded - ObjectReference before translating an object after its OnLoad event is called.
- You cannot translate an object that is flagged as Full LOD, it will simply ignore the command and papyrus logs will show no errors.
Translating water activators:
- Water plane activators can be translated, but their collision does not move with them unless the "Movable" keyword is added to the activator. This can be seen in TG08Water1024.
- The collision for water planes is handled in a very "coarse" manner. Non-horizontal water planes will intersect strangely and may cause objects to float well above their surfaces.
See Also[edit | edit source]
- ObjectReference Script
- SplineTranslateTo - ObjectReference
- SplineTranslateToRef - ObjectReference
- SplineTranslateToRefNode - ObjectReference
- StopTranslation - ObjectReference
- TranslateToRef - ObjectReference
- OnTranslationComplete - ObjectReference
- OnTranslationFailed - ObjectReference
- Spatial functions and snippets