animateSource: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\{\{GameCategory\|(arma[0123])\|New[ _]Scripting[ _]Commands[ _]List\}\}" to "{{GameCategory|$1|New Scripting Commands}}")
m (Some wiki formatting)
 
(28 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Command|Comments=
{{RV|type=command
____________________________________________________________________________________________


| arma3 |Game name=
|game1= arma3
|1.58|Game Version (number surrounded by NO SPACES)=
|version1= 1.58
|eff= global|Multiplayer Effects=
|arg= global|Multiplayer Arguments=


|gr1= Animations |GROUP1=
|eff= global
____________________________________________________________________________________________
|arg= global


| Process an animation of the object. If [[animate]] uses class name from [[CfgModels]] ''Animations'', [[animateSource]] uses name defined by ''source'' property. This allows to use just one command on a bunch of animations related to the same source simultaneously. Since Arma 3 v1.65.138459 speed of animation can be altered with coefficient.
|gr1= Animations
<br><br>
A class with the same source name should also be present in main config in [[CfgVehicles]] ''AnimationSources'' and have to be bound to the "user" controller for the command to work. If in order to animate door in example below using [[animate]] command it would require 2 calls:
<br><br>
<tt>house [[animate]] ["Door_1_rot", 1];</tt>
<br>
<tt>house [[animate]] ["Door_Handle_1_rot", 1];</tt>
<br><br>
With [[animateSource]] this would require only 1 (provided everything is configured correctly):
<br><br>
<tt>house [[animateSource]] ["Door_1_sound_source", 1];</tt>
<br><br>
<syntaxhighlight lang="cpp">
// model.cfg
....
class Animations
{
class Door_1_rot
{
type = rotation;
source = Door_1_sound_source;
selection = Door_1;
axis = Door_1_axis;
memory = 1;
minValue = 0.1;
maxValue = 1;
angle0 = 0;
angle1 = (rad 110);
};
class Door_Handle_1_rot
{
type = rotation;
source = Door_1_noSound_source;
selection = Door_Handle_1;
axis = Door_Handle_1_axis;
memory = 1;
minValue = 0;
maxValue = 0.1;
angle0 = 0;
angle1 = (rad -50);
};
};
...


// config.cpp
|descr= Process an animation of the object. If [[animate]] uses class name from [[CfgModels]] ''Animations'', [[animateSource]] uses name defined by the ''source'' property. AnimationSources can animate multiple [[animate]] Animations. AnimationSource is defined in [[:Category:CfgVehicles|CfgVehicles]]' [[Model Config#AnimationSources|AnimationSources]] (see [[Arma 3: createVehicle/vehicles]]).
...
class AnimationSources
{
        class Door_1_sound_source
        {
        source = "user";
        initPhase = 0;
        animPeriod = 1;
        sound = "GenericDoorsSound";
        soundPosition = "Door_1_trigger";
        };
};
...</syntaxhighlight>


If you don't know much about model config you can use this page [[createVehicle/vehicles]] for reference. Some of the ''AnimationSources'' are listed with the class names of the available assets in Arma 3. If it says "user", the chances are it could work with [[animateSource]] (see example 2).
{{Feature|arma3| It is recommended that [[animateSource]] command is used instead of [[animate]] whenever is possible, as it is more efficient and optimized for MP}}
{{Feature|warning|Mixing [[animateSource]] command with [[animate]] command to animate the same part may produce some undefined behaviour.}}


{{Feature|arma3| It is recommended that [[animateSource]] command is used instead of [[animate]] whenever is possible, as it is more efficient and optimized for MP}}<br><br>
|s1= object [[animateSource]] [source, phase, speed]


{{Warning | Mixing [[animateSource]] command with [[animate]] command to animate the same part can lead to unexpected behavior}}
|p1= object: [[Object]]
|DESCRIPTION=
____________________________________________________________________________________________


| object '''animateSource''' [source, phase, speed] |SYNTAX=
|p2= source: [[String]] - common source


|p1= object: [[Object]] |PARAMETER1=
|p3= phase: [[Number]] - wanted animation phase


|p2= [source, phase, speed]: [[Array]] |PARAMETER2=  
|p5= speed: [[Boolean]] or [[Number]] - (Optional, default [[false]])
* [[Boolean]] - when set to [[true]], animation is instant
* {{GVI|arma3|1.66|size= 0.75}} [[Number]] > 0 is treated as config speed value multiplier. Since {{GVI|arma3|2.10|size= 0.75}} values <= 0 will instantly reset animation to initPhase.


|p3= source: [[String]] - common source |PARAMETER3=
|r1= [[Nothing]]


|p4= phase: [[Number]] - wanted animation phase |PARAMETER4=
|x1= <sqf>house animateSource ["Door_1_source", 1, true];</sqf>


|p5= speed: [[Boolean]] or [[Number]] - When [[true]] animation is instant. Since Arma 3 v1.65.138459 [[Number]] > 0 is treated as config speed value multiplier  |PARAMETER5=
|x2= Create UGV and manipulate its turret (Not possible to do with [[animate]] command. See [[Arma 3: createVehicle/vehicles]] for reference)
 
<sqf>
| [[Nothing]] |RETURNVALUE=
ugv = "B_UGV_01_F" createVehicle (player getRelPos [5, 0]);
 
ugv addAction ["Show Turret",
 
|x1= <code>house [[animateSource]] ["Door_1_source", 1, [[true]]];</code>|EXAMPLE1=
 
|x2= Create UGV and manipulate its turret (Currently not possible to do with [[animate]] command. See [[createVehicle/vehicles]] for reference)<code>ugv = "B_UGV_01_F" [[createVehicle]] ([[player]] [[getRelPos]] [5, 0]);
ugv [[addAction]] ["Show Turret",
{
{
ugv [[animateSource]] ["Turret", 0];
ugv animateSource ["Turret", 0];
ugv [[animateSource]] ["MainTurret", [[rad]] 0, [[true]]];
ugv animateSource ["MainTurret", rad 0, true];
ugv [[animateSource]] ["MainGun", [[rad]] 0, [[true]]];
ugv animateSource ["MainGun", rad 0, true];
}];
}];
ugv [[addAction]] ["Hide Turret", {ugv [[animateSource]] ["Turret", 1]}];
ugv addAction ["Hide Turret", { ugv animateSource ["Turret", 1] }];
ugv [[addAction]] ["Turret Left", {ugv [[animateSource]] ["MainTurret", [[rad]] 90]}];
ugv addAction ["Turret Left", { ugv animateSource ["MainTurret", rad 90] }];
ugv [[addAction]] ["Turret Right", {ugv [[animateSource]] ["MainTurret", -[[rad]] 90]}];
ugv addAction ["Turret Right", { ugv animateSource ["MainTurret", -rad 90] }];
ugv [[addAction]] ["Turret Up", {ugv [[animateSource]] ["MainGun", [[rad]] 30]}];
ugv addAction ["Turret Up", { ugv animateSource ["MainGun", rad 30] }];
ugv [[addAction]] ["Turret Down", {ugv [[animateSource]] ["MainGun", -[[rad]] 20]}];</code>|EXAMPLE2=
ugv addAction ["Turret Down", { ugv animateSource ["MainGun", -rad 20] }];
</sqf>


|x3= <code>barGate [[animateSource]] ["Door_1_sound_source", 1]; //Open
|x3= <sqf>
barGate [[animateSource]] ["Door_1_sound_source", 0]; //Close</code>|EXAMPLE3=
barGate animateSource ["Door_1_sound_source", 1]; // Open
barGate animateSource ["Door_1_sound_source", 0]; // Close
</sqf>


|x4= Open/close Bar Gate automatically: <code>//--- init of the Bar Gate
|x4= Open/close Bar Gate automatically:
[[if]] ([[isServer]]) [[then]]
<sqf>
// Bar Gate init
if (isServer) then
{
{
_gateTrigger = [[createTrigger]] ["EmptyDetector", [[getPosWorld]] [[this]], [[false]]];
private _gateTrigger = createTrigger ["EmptyDetector", getPosWorld this, false];
_gateTrigger [[setVariable]] ["BarGateObj", [[this]]];
_gateTrigger setVariable ["BarGateObj", this];
_gateTrigger [[setTriggerActivation]] ["ANYPLAYER", "PRESENT", [[true]]];
_gateTrigger setTriggerActivation ["ANYPLAYER", "PRESENT", true];
_gateTrigger [[setTriggerArea]] [5, 25, [[getDir]] [[this]], [[true]]];
_gateTrigger setTriggerArea [5, 25, getDir this, true];
_gateTrigger [[setTriggerStatements]]
_gateTrigger setTriggerStatements  
[
[
"this",  
"this",
"[[thisTrigger]] [[getVariable]] ""BarGateObj"" [[animateSource]] [""Door_1_sound_source"", 1]",  
"thisTrigger getVariable 'BarGateObj' animateSource ['Door_1_sound_source', 1]",
"[[thisTrigger]] [[getVariable]] ""BarGateObj"" [[animateSource]] [""Door_1_sound_source"", 0]"
"thisTrigger getVariable 'BarGateObj' animateSource ['Door_1_sound_source', 0]"
];
];
};</code>|= EXAMPL4
};
____________________________________________________________________________________________
</sqf>
 
| [[animationSourcePhase]], [[setFaceAnimation]], [[animate]], [[animationPhase]], [[animateDoor]], [[doorPhase]], [[animationNames]] |SEEALSO=


| |MPBEHAVIOUR=  
|seealso= [[animationSourcePhase]] [[setFaceAnimation]] [[animate]] [[animationPhase]] [[animateDoor]] [[doorPhase]] [[animationNames]]
____________________________________________________________________________________________
}}
}}
<h3 style='display:none'>Notes</h3>
<dl class='command_description'>
<!-- Note Section BEGIN -->
<!-- Note Section END -->
</dl>
<h3 style='display:none'>Bottom Section</h3>
{{GameCategory|arma3|New Scripting Commands}}
{{GameCategory|arma3|Scripting Commands}}
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]

Latest revision as of 12:30, 12 March 2024

Hover & click on the images for description

Description

Description:
Process an animation of the object. If animate uses class name from CfgModels Animations, animateSource uses name defined by the source property. AnimationSources can animate multiple animate Animations. AnimationSource is defined in CfgVehicles' AnimationSources (see Arma 3: createVehicle/vehicles).
Arma 3
It is recommended that animateSource command is used instead of animate whenever is possible, as it is more efficient and optimized for MP
Mixing animateSource command with animate command to animate the same part may produce some undefined behaviour.
Groups:
Animations

Syntax

Syntax:
object animateSource [source, phase, speed]
Parameters:
object: Object
source: String - common source
phase: Number - wanted animation phase
speed: Boolean or Number - (Optional, default false)
  • Boolean - when set to true, animation is instant
  • Arma 3 logo black.png1.66 Number > 0 is treated as config speed value multiplier. Since Arma 3 logo black.png2.10 values <= 0 will instantly reset animation to initPhase.
Return Value:
Nothing

Examples

Example 1:
house animateSource ["Door_1_source", 1, true];
Example 2:
Create UGV and manipulate its turret (Not possible to do with animate command. See Arma 3: createVehicle/vehicles for reference)
ugv = "B_UGV_01_F" createVehicle (player getRelPos [5, 0]); ugv addAction ["Show Turret", { ugv animateSource ["Turret", 0]; ugv animateSource ["MainTurret", rad 0, true]; ugv animateSource ["MainGun", rad 0, true]; }]; ugv addAction ["Hide Turret", { ugv animateSource ["Turret", 1] }]; ugv addAction ["Turret Left", { ugv animateSource ["MainTurret", rad 90] }]; ugv addAction ["Turret Right", { ugv animateSource ["MainTurret", -rad 90] }]; ugv addAction ["Turret Up", { ugv animateSource ["MainGun", rad 30] }]; ugv addAction ["Turret Down", { ugv animateSource ["MainGun", -rad 20] }];
Example 3:
barGate animateSource ["Door_1_sound_source", 1]; // Open barGate animateSource ["Door_1_sound_source", 0]; // Close
Example 4:
Open/close Bar Gate automatically:
// Bar Gate init if (isServer) then { private _gateTrigger = createTrigger ["EmptyDetector", getPosWorld this, false]; _gateTrigger setVariable ["BarGateObj", this]; _gateTrigger setTriggerActivation ["ANYPLAYER", "PRESENT", true]; _gateTrigger setTriggerArea [5, 25, getDir this, true]; _gateTrigger setTriggerStatements [ "this", "thisTrigger getVariable 'BarGateObj' animateSource ['Door_1_sound_source', 1]", "thisTrigger getVariable 'BarGateObj' animateSource ['Door_1_sound_source', 0]" ]; };

Additional Information

See also:
animationSourcePhase setFaceAnimation animate animationPhase animateDoor doorPhase animationNames

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