setVelocityTransformation: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
No edit summary
(description, diagram)
Line 5: Line 5:


|1.51|= Game version
|1.51|= Game version
|eff= global|= Effects in MP
|arg= local|= Arguments in MP
____________________________________________________________________________________________
____________________________________________________________________________________________


| Places an object at an interpolated position between two other objects and sets its vectors in proportion to the relative position. The final position/vector is determined by the "interval" specified in the command. This assumes an imaginary path between the two reference objects, where at the ''beginning'' of the path (interval: 0) the position and vector are identical to the ''first'' reference object,
| Interpolates and applies [[PositionASL]], [[velocity]], [[vectorDir]] and [[vectorUp]] to the given object based on the interval value. <br>
at the ''end'' of the path (interval: 1) they're identical to the ''second'' reference object, and at 0.5 they are halfway in between (See [http://resources.bisimulations.com/wiki/setVelocityTransformation setVelocityTransformation (VBS2)] for more details).
When interval is 0 the "fromXXX" values are used for the beginning of the interpolation. When interval is 1, the "toXXX" values are used. When interval value is in between, interpolated values are used (see diagram below). The interpolation is linear and along straight line between "from" and "to" positions. If curve is needed, then it should be constructed from multiple straight sections.  
 
<br>The [[velocity]] param doesn't do much in SP, but in MP, provided the velocity component is set correctly, it helps the engine to figure out what the next position of the moving object should be on other clients.
<br><br>This command works in multiplayer provided the velocity component is set correctly. It helps the engine to figure out what the next position of the moving object should be on other clients. |= Description
<br><br>
[[Image:setVelocityTransformation.jpg|800px]]
<br><br>
{{Important | In multiplayer, this command should be applied where object is [[local]]}} |= Description
____________________________________________________________________________________________
____________________________________________________________________________________________


| object '''setVelocityTransformation''' [position1, position2, velocity1, velocity2, direction1, direction2, upVector1, upVector2, interval] |= Syntax
| object '''setVelocityTransformation''' [fromPosASL, toPosASL, fromVelocity, toVelocity, fromVectorDir, toVectorDir, fromVectorUp, toVectorUp, interval] |= Syntax


|p1= object: [[Object]] - Object to be positioned |=  
|p1= object: [[Object]] - object to be interpolated |=  
|p2= position1: [[PositionASL]] - ASL position of first reference object
|p2= [fromPosASL, toPosASL, fromVelocity, toVelocity, fromVectorDir, toVectorDir, fromVectorUp, toVectorUp, interval] : [[Array]]
|p3= position2: [[PositionASL]] - ASL position of second reference object  
|p3= fromPosASL: [[PositionASL]] - starting [[getPosASL]] of the object
|p4= velocity1: [[Vector3D]] - [[velocity|Velocity]] of first reference object
|p4= toPosASL: [[PositionASL]] - ending [[getPosASL]] of the object  
|p5= velocity2: [[Vector3D]] - [[velocity|Velocity]] of second reference object
|p5= fromVelocity: [[Array]] - starting [[velocity]] of the object
|p6= direction1: [[Vector3D]] - [[vectorDir|Direction vector]] of first reference object
|p6= toVelocity: [[Array]] - ending [[velocity]] of the object
|p7= direction2: [[Vector3D]] - [[vectorDir|Direction vector]] of second reference object
|p7= fromVectorDir: [[Array]] - starting [[vectorDir]] of the object
|p8= upVector1: [[Vector3D]] - [[vectorUp|Upright vector]] of first reference object
|p8= toVectorDir: [[Array]] - ending [[vectorDir]] of the object
|p9= upVector2: [[Vector3D]] - [[vectorUp|Upright vector]] of second reference object
|p9= fromVectorUp: [[Array]] - starting [[vectorUp]]  of the object
|p10= interval: [[Number]] - Relative position between the two reference objects where the manipulated object will be placed at. (Range 0..1)
|p10= toVectorUp: [[Array]] - ending [[vectorUp]]  of the object
|p11= interval: [[Number]] - interpolation interval (Normally 0..1)
| [[Nothing]] |= Return value
| [[Nothing]] |= Return value



Revision as of 16:38, 17 December 2018

Hover & click on the images for description

Description

Description:
Interpolates and applies PositionASL, velocity, vectorDir and vectorUp to the given object based on the interval value.
When interval is 0 the "fromXXX" values are used for the beginning of the interpolation. When interval is 1, the "toXXX" values are used. When interval value is in between, interpolated values are used (see diagram below). The interpolation is linear and along straight line between "from" and "to" positions. If curve is needed, then it should be constructed from multiple straight sections.
The velocity param doesn't do much in SP, but in MP, provided the velocity component is set correctly, it helps the engine to figure out what the next position of the moving object should be on other clients.

setVelocityTransformation.jpg

In multiplayer, this command should be applied where object is local
Groups:
Uncategorised

Syntax

Syntax:
object setVelocityTransformation [fromPosASL, toPosASL, fromVelocity, toVelocity, fromVectorDir, toVectorDir, fromVectorUp, toVectorUp, interval]
Parameters:
object: Object - object to be interpolated
[fromPosASL, toPosASL, fromVelocity, toVelocity, fromVectorDir, toVectorDir, fromVectorUp, toVectorUp, interval] : Array
fromPosASL: PositionASL - starting getPosASL of the object
toPosASL: PositionASL - ending getPosASL of the object
fromVelocity: Array - starting velocity of the object
toVelocity: Array - ending velocity of the object
fromVectorDir: Array - starting vectorDir of the object
toVectorDir: Array - ending vectorDir of the object
fromVectorUp: Array - starting vectorUp of the object
toVectorUp: Array - ending vectorUp of the object
interval: Number - interpolation interval (Normally 0..1)
Return Value:
Nothing

Examples

Example 1:
_tracker setVelocityTransformation [ getPosASL _currentPos, getPosASL _nextPos, velocity _currentVelocity, velocity _nextVelocity, vectorDir _currentVectorDir, vectorDir _nextVectorDir, vectorUp _currentVectorUp, vectorUp _nextVectorUp, _timeDiff ];
Example 2:
Bob on imaginary stairway to heaven:bob = createAgent ["C_man_1", player getRelPos [5, 0], [], 0, "CAN_COLLIDE"]; bob switchMove "ladderciviluploop"; pos1 = getPosASL bob; pos2 = pos1 vectorAdd [0,0,0.75]; bob addEventHandler ["AnimDone", { pos1 = pos2; pos2 = pos2 vectorAdd [0,0,0.75] }]; onEachFrame { if (!alive bob) then { onEachFrame {}; bob switchMove ""; bob removeAllEventHandlers "AnimDone"; }; bob setVelocityTransformation [ pos1, pos2, [0,0,0], [0,0,0], [0,1,0], [0,1,0], [0,0,1], [0,0,1], moveTime bob ]; };

Additional Information

See also:
velocitysetVelocityvelocityModelSpacesetVelocityModelSpacesetVelocityTransformationspeedmoveTime

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note

Notes

Posted on Aug 4, 2014 – 12:35
ffur2007slx2_5
(A3 1.24) Generally speaking setVelocityTransformation is more likely a combination of setPosASL, setVectorDirAndUp (or BIS_fnc_setPitchBank) and time multiplier. It can be used as a position tracker with all necessary information collected, copied and then released within one function. Here’s a simple reproduction on how setVelocityTransformation works in game: private ["_dataOld","_dataNext","_capturedData","_obj","_fps","_startTrackingTime","_stepOld","_stepNext","_tracker","_tempTime"]; _stepOld = 0; _tempTime = 0; _stepNext = 1; while {true} do { _capturedData = _capturedData + [[ getPosASL _obj,velocity _obj,vectorDir _obj,vectorUp _obj]]; sleep _fps; _tempTime = _tempTime + _fps; if (_tempTime >= _startTrackingTime) then { _dataOld = _capturedData select _stepOld; _dataNext = _capturedData select _stepNext; _stepOld = _stepOld + 1; _stepNext = if (_stepNext >= (count _capturedData)) then [{_stepOld},{_stepNext + 1}]; _tracker setVelocityTransformation [_dataOld select 0,_dataNext select 0,_dataOld select 1,_dataNext select 1, _dataOld select 2,_dataNext select 2,_dataOld select 3,_dataNext select 3,1]; }; }; Tracker starts coping the route and stance from the object when time start counting. TimeDiff determines the distance multiply between the current position and the next position.

Bottom Section