Difference between revisions of "TranslateTo - ObjectReference"
Jump to navigation
Jump to search
imported>Verteiron m (→Collision boxes, bugs and other oddities: Added note about translating water activators.) |
(added a new discovery (flagging as full LOD) that causes the function to fail.) |
||
Line 59: | Line 59: | ||
* '''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. | * '''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 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: | Translating water activators: |
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