switchMove: Difference between revisions
Jump to navigation
Jump to search
BrettMayson (talk | contribs) mNo edit summary |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
Line 29: | Line 29: | ||
|descr= Immediately applies given animation to the unit. For a smooth transition from the current animation, use [[playMove]]. | |descr= Immediately applies given animation to the unit. For a smooth transition from the current animation, use [[playMove]]. | ||
{{Feature | | {{Feature|informative|see [[:Category:Moves]] for respective games animations.}} | ||
This command first resets the unit's animation states (including aiming state, gesture state, etc.) then puts the unit in the first frame of the animation (therefore showing no transition). | This command first resets the unit's animation states (including aiming state, gesture state, etc.) then puts the unit in the first frame of the animation (therefore showing no transition). | ||
If an invalid animation is provided, the unit's animations will be reset but no new animation will be played (see {{Link|#Example 3}}). | If an invalid animation is provided, the unit's animations will be reset but no new animation will be played (see {{Link|#Example 3}}). | ||
Line 40: | Line 41: | ||
}} | }} | ||
|mp= This command has a global effect when executed locally to the unit and will synchronise properly for JIP. In this case the animation on the executing machine is immediate while on remote machines it will be transitional. In order for the animation to change immediately on every PC in multiplayer, use global remote execution (see {{Link|#Example 2}}). When the argument is remote, the animation change on the executing PC is only temporary. | |mp= This command has a global effect when executed locally to the unit and will synchronise properly for JIP. | ||
In this case the animation on the executing machine is immediate while on remote machines it will be transitional. | |||
In order for the animation to change immediately on every PC in multiplayer, use global remote execution (see {{Link|#Example 2}}). | |||
When the argument is remote, the animation change on the executing PC is only temporary. | |||
|s1= person [[switchMove]] moveName | |s1= person [[switchMove]] moveName | ||
Line 51: | Line 55: | ||
|s2= person [[switchMove]] [moveName, time, blendFactor, resetAim] | |s2= person [[switchMove]] [moveName, time, blendFactor, resetAim] | ||
|s2since= arma3 2.18 | |s2since= arma3 2.18 | ||
|p21= person: [[Object]] - unit | |p21= person: [[Object]] - unit | ||
|p22= moveName: [[String]] - | |||
|p23= time: [[Number]] - (Optional, default | |p22= moveName: [[String]] - entry from {{hl|"CfgMovesMaleSdr" >> "states"}} or {{hl|"CfgGesturesMale" >> "states"}} | ||
|p24= blendFactor: [[Number]] - (Optional, default | |||
|p25= resetAim: [[Boolean]] - (Optional, default | |p23= time: [[Number]] - (Optional, default 0) progress time, in range 0..1, where 0 = beginning of the animation, and 1 = end of the animation | ||
|p24= blendFactor: [[Number]] - (Optional, default 0) blending of the new animation with the current animation, in range 0..1 | |||
|p25= resetAim: [[Boolean]] - (Optional, default true) whether the aim/head direction should be reset after switching | |||
|r2= [[Nothing]] | |r2= [[Nothing]] | ||
Line 68: | Line 79: | ||
<sqf>_unit switchMove "";</sqf> | <sqf>_unit switchMove "";</sqf> | ||
|x4= <sqf>// Create a dummy agent that copies your moves | |x4= <sqf> | ||
// Create a dummy agent that copies your moves | |||
ai1 = createAgent [typeOf player, getPosATL player, [], 0, "NONE"]; | ai1 = createAgent [typeOf player, getPosATL player, [], 0, "NONE"]; | ||
ai1 disableAI "ALL"; | ai1 disableAI "ALL"; | ||
Line 75: | Line 87: | ||
ai1 setAnimSpeedCoef getAnimSpeedCoef player; | ai1 setAnimSpeedCoef getAnimSpeedCoef player; | ||
ai1 setVectorDir vectorDir player; | ai1 setVectorDir vectorDir player; | ||
_m = animationState player; | private _m = animationState player; | ||
_g = gestureState player; | private _g = gestureState player; | ||
_i = getUnitMovesInfo player; | private _i = getUnitMovesInfo player; | ||
_a = getUnitMovesInfo ai1; | private _a = getUnitMovesInfo ai1; | ||
if (animationState ai1 != _m || abs(_i#1 - _a#1) > 0.1) then { | if (animationState ai1 != _m || abs(_i#1 - _a#1) > 0.1) then | ||
{ | |||
ai1 switchMove [_m, _i#0, _i#3, false]; | ai1 switchMove [_m, _i#0, _i#3, false]; | ||
}; | }; | ||
if ((gestureState ai1 != _g || abs(_i#6 - _a#6) > 0.1) && (_g != "<none>" && _g find "_player" < 0)) then { | |||
if ((gestureState ai1 != _g || abs(_i#6 - _a#6) > 0.1) && (_g != "<none>" && _g find "_player" < 0)) then | |||
{ | |||
ai1 switchGesture [_g, _i#5, _i#8, false]; | ai1 switchGesture [_g, _i#5, _i#8, false]; | ||
}; | }; |
Revision as of 17:01, 26 February 2024
Description
- Description:
- Immediately applies given animation to the unit. For a smooth transition from the current animation, use playMove.
This command first resets the unit's animation states (including aiming state, gesture state, etc.) then puts the unit in the first frame of the animation (therefore showing no transition). If an invalid animation is provided, the unit's animations will be reset but no new animation will be played (see Example 3).
- Multiplayer:
- This command has a global effect when executed locally to the unit and will synchronise properly for JIP. In this case the animation on the executing machine is immediate while on remote machines it will be transitional. In order for the animation to change immediately on every PC in multiplayer, use global remote execution (see Example 2). When the argument is remote, the animation change on the executing PC is only temporary.
- Groups:
- Animations
Syntax
- Syntax:
- person switchMove moveName
- Parameters:
- person: Object - unit
- moveName: String - animation state (see animationState)
- Return Value:
- Nothing
Alternative Syntax
- Syntax:
- person switchMove [moveName, time, blendFactor, resetAim]
- Parameters:
- person: Object - unit
- moveName: String - entry from "CfgMovesMaleSdr" >> "states" or "CfgGesturesMale" >> "states"
- time: Number - (Optional, default 0) progress time, in range 0..1, where 0 = beginning of the animation, and 1 = end of the animation
- blendFactor: Number - (Optional, default 0) blending of the new animation with the current animation, in range 0..1
- resetAim: Boolean - (Optional, default true) whether the aim/head direction should be reset after switching
- Return Value:
- Nothing
Examples
- Example 1:
- Prone:
- Example 2:
- Sit player immediately and globally:
- Example 3:
- Resets unit's animation:
_unit switchMove "";
- Example 4:
- // Create a dummy agent that copies your moves ai1 = createAgent [typeOf player, getPosATL player, [], 0, "NONE"]; ai1 disableAI "ALL"; onEachFrame { ai1 setAnimSpeedCoef getAnimSpeedCoef player; ai1 setVectorDir vectorDir player; private _m = animationState player; private _g = gestureState player; private _i = getUnitMovesInfo player; private _a = getUnitMovesInfo ai1; if (animationState ai1 != _m || abs(_i#1 - _a#1) > 0.1) then { ai1 switchMove [_m, _i#0, _i#3, false]; }; if ((gestureState ai1 != _g || abs(_i#6 - _a#6) > 0.1) && (_g != "<none>" && _g find "_player" < 0)) then { ai1 switchGesture [_g, _i#5, _i#8, false]; }; }
Additional Information
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
- Posted on Mar 25, 2007 - 23:48 (UTC)
- In some cases the movement won't stay. I.e. AI hostages that put their hands behind their heads (_hostage switchMove "AmovPercMstpSsurWnonDnon") won't hold their hands up, unless you first use disableAI "autoTarget" on them. They mostly put their hands down because they 'noticed' unknown objects.
- Posted on Aug 03, 2008 - 22:43 (UTC)
- This command will not cause an AnimChanged or AnimDone event. However, playMove will.
- Posted on Nov 12, 2016 - 20:11 (UTC)
-
When using this command on the player unit outside unscheduled UI contexts, it will cause a minor camera glitch for a single frame.
For example, Draw3D and KeyDown are UI contexts and so are not affected by the glitch, but EachFrame and scheduled scripts are not UI contexts and are affected by the glitch.
- Posted on Aug 08, 2021 - 15:59 (UTC)
-
If the animation you're trying to use with this command has no connection/interpolation to the unit's base animation (usually "AmovPercMstpSrasWrflDnon"), the move might not play using switchMove alone. In such cases you have to do this:
This must run in unscheduled environment (see isNil)
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint version 1.00
- Operation Flashpoint: New Scripting Commands
- Operation Flashpoint: Scripting Commands
- Operation Flashpoint: Elite: Scripting Commands
- ArmA: Armed Assault: Scripting Commands
- Arma 2: Scripting Commands
- Arma 2: Operation Arrowhead: Scripting Commands
- Take On Helicopters: Scripting Commands
- Arma 3: Scripting Commands
- Command Group: Animations
- Scripting Commands: Global Effect