Difference between revisions of "TranslateTo - ObjectReference"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Verteiron
m (→‎Collision boxes, bugs and other oddities: Added note regarding translation of havok items using SetMotionType.)
imported>Verteiron
m (→‎Collision boxes, bugs and other oddities: Added note about translating water activators.)
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.
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 ==

Revision as of 14:01, 4 December 2013

Member of: ObjectReference Script

Makes the object translate to the passed in position and orientation at the given speed.

Syntax

Function TranslateTo(float afX, float afY, float afZ, float afAngleX, float afAngleY, float afAngleZ, float afSpeed, \
  float afMaxRotationSpeed = 0.0) native

Parameters

  • 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

None.

Examples

; 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

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

  • 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

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.

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