# Interactions_Subtemplates [Go back to index]

Asobo\Generic\Subtemplates\Interactions_Subtemplates.xml

Source XML
<ModelBehaviors> <Macro Name="IsUsingRelativePos">(M:InputType) 1 ==</Macro> <Macro Name="DragLockResetTimer">0.05 0.10 @IsUsingRelativePos ?</Macro> <Template Name = "ASOBO_GT_Interaction_LeftSingle_Leave_Code_Subtemplate1"> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_Leave_Code_Subtemplate2"> <Condition Check="WHEEL_DOWN_CODE"> <MOUSEFLAGS>#MOUSEFLAGS#+WheelDown</MOUSEFLAGS> <MOUSE_WHEEL_INPUTS> els{ (M:Event) 'WheelDown' scmi 0 == if{ #WHEEL_DOWN_CODE# } #MOUSE_WHEEL_INPUTS# }</MOUSE_WHEEL_INPUTS> </Condition> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_LeftSingle_Leave_Code_Subtemplate2"> <DefaultTemplateParameters> </DefaultTemplateParameters> <UseTemplate Name="ASOBO_GT_MouseRect"> <CALLBACKCODE> (M:Event) 'Lock' scmi 0 == if{ #LEFT_SINGLE_CODE# } els{ (M:Event) 'Unlock' scmi 0 == if{ #LEFT_LEAVE_CODE# } #MOUSE_WHEEL_INPUTS# } </CALLBACKCODE> </UseTemplate> </Template> <!-- DO NOT CALL THIS TEMPLATE - Use GT_Interaction_LeftSingle_MultiStates instead --> <Template Name = "ASOBO_GT_Interaction_LeftSingle_ParamSetup"> <DefaultTemplateParameters> <ON_STATE_CHANGED_EXTERNAL_CODE/> <Condition Check="MOMENTARY_SWITCH"> <STATE0_TIMER>0</STATE0_TIMER> <Condition NotEmpty="STATEMAX_TIMER"> <!-- This allows STATEMAX_TIMER to be equivalent to STATE_MAX_TIMER, which is more logical considering STATE0_TIMER doesn't have a space between STATE and 0 --> <True> <STATE_MAX_TIMER>#STATEMAX_TIMER#</STATE_MAX_TIMER> </True> <False> <STATE_MAX_TIMER>0</STATE_MAX_TIMER> </False> </Condition> </Condition> <MOMENTARY_REPEAT_DELAY>0.5</MOMENTARY_REPEAT_DELAY> </DefaultTemplateParameters> <OverrideTemplateParameters> <START_STATE Process="Int">#NUM_STATES# 1 -</START_STATE> <Condition Check="MOMENTARY_SWITCH"> <True> <MOMENTARY_UP_0> #STATE0_TIMER# 0 &gt; if{ (E:SIMULATION TIME, seconds) #STATE0_TIMER# + (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) (E:SIMULATION TIME, seconds) #MOMENTARY_REPEAT_DELAY# + (&gt;O:XMLVAR_Repeat_StartTime) } els{ 0 (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } 0 1 l1 ? (&gt;#SWITCH_POSITION_TYPE_ISDOWN#:#SWITCH_POSITION_VAR_ISDOWN#) </MOMENTARY_UP_0> <CODE_RELEASE>0 (&gt;#SWITCH_POSITION_TYPE_ISDOWN#:#SWITCH_POSITION_VAR_ISDOWN#)</CODE_RELEASE> </True> <False> <MOMENTARY_UP_0></MOMENTARY_UP_0> </False> </Condition> <Condition Valid="DISABLE_ON_STATE_CHANGED_EXTERNAL_CODE_IN_MR"> <ON_STATE_CHANGED_EXTERNAL_CODE/> </Condition> </OverrideTemplateParameters> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_1"> <CURRENT_ID>#START_STATE#</CURRENT_ID> <POS_MAX>#START_STATE#</POS_MAX> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_1"> <DefaultTemplateParameters> <CODE_POS_#CURRENT_ID#_VERIF>1</CODE_POS_#CURRENT_ID#_VERIF> <ANIMTIP_#CURRENT_ID#_ON_PERCENT Process="Float">#CURRENT_ID# #POS_MAX# /</ANIMTIP_#CURRENT_ID#_ON_PERCENT> </DefaultTemplateParameters> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_2"> <CURRENT_ENUM_VAL_POS Process="Param">ENUM_VAL_POS_#CURRENT_ID#</CURRENT_ENUM_VAL_POS> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_2"> <DefaultTemplateParameters> <Condition NotEmpty="CURRENT_ENUM_VAL_POS"> <True> <CODE_POS_#CURRENT_ID#> (A:#ENUM_SIMVAR#, Enum) #CURRENT_ENUM_VAL_POS# != if{ #CURRENT_ENUM_VAL_POS# (&gt;K:#ENUM_KEY#) } </CODE_POS_#CURRENT_ID#> </True> <False> <CODE_POS_#CURRENT_ID#/> </False> </Condition> </DefaultTemplateParameters> <OverrideTemplateParameters> <CURRENT_ID Process="Int">#CURRENT_ID# 1 -</CURRENT_ID> </OverrideTemplateParameters> <Condition> <Test> <GreaterOrEqual> <Number>#CURRENT_ID#</Number> <Number>0</Number> </GreaterOrEqual> </Test> <True> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_1"> </UseTemplate> </True> <False> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_CodeSetup_Recursive"> <CURRENT_ID>#START_STATE#</CURRENT_ID> <NEXT_ID Process="Int">#START_STATE# 1 -</NEXT_ID> <CODE_POS_MAX Process="Param">CODE_POS_#START_STATE#</CODE_POS_MAX> <CODE_POS_MAX_VERIF Process="Param">CODE_POS_#START_STATE#_VERIF</CODE_POS_MAX_VERIF> <ELSE_BRACKET_OPENING>els{</ELSE_BRACKET_OPENING> <ELSE_BRACKET_CLOSING>}</ELSE_BRACKET_CLOSING> </UseTemplate> </False> </Condition> </Template> <Template Name = "ASOBO_GT_Interaction_LeftSingle_CodeSetup_Recursive"> <DefaultTemplateParameters> <Condition Check="MOMENTARY_SWITCH"> <True> <Condition Check="MOMENTARY_SWITCH_DOWN_SET"> <True> <MOMENTARY_UP_#CURRENT_ID#></MOMENTARY_UP_#CURRENT_ID#> </True> <False> <MOMENTARY_SWITCH_DOWN_SET/> <MOMENTARY_UP_#CURRENT_ID#> #STATE_MAX_TIMER# 0 &gt; if{ (E:SIMULATION TIME, seconds) #STATE_MAX_TIMER# + (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) (E:SIMULATION TIME, seconds) #MOMENTARY_REPEAT_DELAY# + (&gt;O:XMLVAR_Repeat_StartTime) } els{ 0 (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } 0 1 l1 ? (&gt;#SWITCH_POSITION_TYPE_ISDOWN#:#SWITCH_POSITION_VAR_ISDOWN#) </MOMENTARY_UP_#CURRENT_ID#> <MOMENTARY_SWITCH_DOWN_INDEX>#CURRENT_ID#</MOMENTARY_SWITCH_DOWN_INDEX> <REST_STATE>#NEXT_ID#</REST_STATE> <CODE_POS_RETURN Process="Param">CODE_POS_#NEXT_ID#</CODE_POS_RETURN> </False> </Condition> </True> <False> <MOMENTARY_UP_#CURRENT_ID#></MOMENTARY_UP_#CURRENT_ID#> </False> </Condition> <THRESHOLD_MOUSE>0.03</THRESHOLD_MOUSE> <THRESHOLD_INPUT>0.05</THRESHOLD_INPUT> </DefaultTemplateParameters> <OverrideTemplateParameters> <CURRENT_POS_VERIF Process="Param">CODE_POS_#CURRENT_ID#_VERIF</CURRENT_POS_VERIF> <NEXT_POS_VERIF Process="Param">CODE_POS_#NEXT_ID#_VERIF</NEXT_POS_VERIF> <CURRENT_CODE_POS Process="Param">CODE_POS_#CURRENT_ID#</CURRENT_CODE_POS> <NEXT_CODE_POS Process="Param">CODE_POS_#NEXT_ID#</NEXT_CODE_POS> <CURRENT_MOMENTARY_UP Process="Param">MOMENTARY_UP_#CURRENT_ID#</CURRENT_MOMENTARY_UP> <NEXT_MOMENTARY_UP Process="Param">MOMENTARY_UP_#NEXT_ID#</NEXT_MOMENTARY_UP> <CURRENT_CODE_REPEAT Process="Param">CODE_REPEAT_#CURRENT_ID#</CURRENT_CODE_REPEAT> <!-- <NEXT_CODE_REPEAT Process="Param">CODE_REPEAT_#NEXT_ID#</NEXT_CODE_REPEAT> --> </OverrideTemplateParameters> <Condition> <Test> <GreaterOrEqual> <Number>#NEXT_ID#</Number> <Number>0</Number> </GreaterOrEqual> </Test> <True> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_CodeSetup_Recursive"> <CODE_UP> #CODE_UP# (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CURRENT_ID# == if{ #NEXT_POS_VERIF# if{ #NEXT_ID# (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #NEXT_CODE_POS# #ON_STATE_CHANGED_EXTERNAL_CODE# #NEXT_MOMENTARY_UP# } } #ELSE_BRACKET_OPENING# </CODE_UP> <CODE_UP_CLOSING> #ELSE_BRACKET_CLOSING# #CODE_UP_CLOSING# </CODE_UP_CLOSING> <CODE_DOWN> #ELSE_BRACKET_OPENING# (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #NEXT_ID# == if{ #CURRENT_POS_VERIF# if{ #CURRENT_ID# (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CURRENT_CODE_POS# #ON_STATE_CHANGED_EXTERNAL_CODE# #CURRENT_MOMENTARY_UP# } } #CODE_DOWN# #ELSE_BRACKET_CLOSING# </CODE_DOWN> <Condition Check="NEXT_ID" Match="1"> <True> <ELSE_BRACKET_OPENING></ELSE_BRACKET_OPENING> <ELSE_BRACKET_CLOSING></ELSE_BRACKET_CLOSING> </True> </Condition> <Condition Valid="CURRENT_CODE_REPEAT"> <CODE_REPEAT> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CURRENT_ID# == if{ #CURRENT_CODE_REPEAT# } els{ #CODE_REPEAT# } </CODE_REPEAT> </Condition> <CURRENT_ID>#NEXT_ID#</CURRENT_ID> <NEXT_ID Process="Int">#NEXT_ID# 1 -</NEXT_ID> </UseTemplate> </True> <False> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_1"> <Condition Valid="CURRENT_CODE_REPEAT"> <CODE_REPEAT> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CURRENT_ID# == if{ #CURRENT_CODE_REPEAT# } els{ #CODE_REPEAT# } </CODE_REPEAT> </Condition> </UseTemplate> </False> </Condition> </Template> <!-- DO NOT CALL THIS TEMPLATE - Use GT_Interaction_LeftSingle_MultiStates instead --> <Template Name = "ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_1"> <Parameters Type="Default"> <Condition Check="SWITCH_DIRECTION" Match="Vertical"> <UPARROW>UpArrow</UPARROW> <DOWNARROW>DownArrow</DOWNARROW> <DRAG_AXIS>Y</DRAG_AXIS> </Condition> <Condition Check="SWITCH_DIRECTION" Match="Horizontal"> <Condition Check="ARROW_TYPE" Match="Curved"> <True> <LEFTARROW>TurnLeft</LEFTARROW> <RIGHTARROW>TurnRight</RIGHTARROW> </True> <False> <LEFTARROW>LeftArrow</LEFTARROW> <RIGHTARROW>RightArrow</RIGHTARROW> </False> </Condition> <DRAG_AXIS>X</DRAG_AXIS> </Condition> <LEFT_DOWN_CODE/> <LEFT_UP_CODE/> <ANIMCURSOR_MIN>0</ANIMCURSOR_MIN> <Condition Check="ANIM_LENGTH"> <True> <ANIMCURSOR_MAX>#ANIM_LENGTH#</ANIMCURSOR_MAX> </True> <False> <ANIMCURSOR_MAX>100</ANIMCURSOR_MAX> </False> </Condition> <USE_PAD_DRAG_IM_LOCK>True</USE_PAD_DRAG_IM_LOCK> </Parameters> <Parameters Type="Override"> <THRESHOLD_MOUSE>0.001</THRESHOLD_MOUSE> </Parameters> <Parameters Type="Override"> <THRESHOLD>#THRESHOLD_INPUT# #THRESHOLD_MOUSE# (M:InputType) 1 == ?</THRESHOLD> </Parameters> <Parameters Type="Default"> <LOCKABLE_EVENT_PRIMARY>LeftSingle</LOCKABLE_EVENT_PRIMARY> <LOCKABLE_EVENT_SECONDARY>RightSingle</LOCKABLE_EVENT_SECONDARY> <NO_LOCK_EVENT_PRIMARY>RightSingle</NO_LOCK_EVENT_PRIMARY> <NO_LOCK_EVENT_SECONDARY>MiddleSingle</NO_LOCK_EVENT_SECONDARY> <LOCKABLE_HANDLE_CODE_UP/> <NO_LOCK_HANDLE_CODE_UP/> <LOCKABLE_HANDLE_CODE_DN/> <NO_LOCK_HANDLE_CODE_DN/> <ADDITIONAL_MOUSEFLAGS/> <CENTER_HANDLING_CODE_START/> <CENTER_HANDLING_CODE_END/> <Condition> <Test> <Or> <Arg NotEmpty="ON_PRIMARY_EVENT"/> <Arg NotEmpty="ON_SECONDARY_EVENT"/> </Or> </Test> <True> <CENTER_CURSOR>Hand</CENTER_CURSOR> <CENTER_RADIUS>0.004</CENTER_RADIUS> <DEFINE_CENTER_INTERACTION>True</DEFINE_CENTER_INTERACTION> </True> </Condition> </Parameters> <Parameters Type="Override"> <Condition NotEmpty="ON_PRIMARY_EVENT"> <LOCKABLE_HANDLE_CODE_UP>(M:Event) '#LOCKABLE_EVENT_PRIMARY#' scmi 0 == if{ #ON_PRIMARY_EVENT# quit }</LOCKABLE_HANDLE_CODE_UP> <NO_LOCK_HANDLE_CODE_UP>(M:Event) '#NO_LOCK_EVENT_PRIMARY#' scmi 0 == if{ #ON_PRIMARY_EVENT# quit }</NO_LOCK_HANDLE_CODE_UP> <ADDITIONAL_MOUSEFLAGS>+#LOCKABLE_EVENT_PRIMARY#+#NO_LOCK_EVENT_PRIMARY#</ADDITIONAL_MOUSEFLAGS> <CENTER_HANDLING_CODE_END> } els{ #ON_PRIMARY_EVENT# quit } </CENTER_HANDLING_CODE_END> </Condition> <Condition NotEmpty="ON_SECONDARY_EVENT"> <LOCKABLE_HANDLE_CODE_DN>(M:Event) '#LOCKABLE_EVENT_SECONDARY#' scmi 0 == if{ #ON_SECONDARY_EVENT# quit }</LOCKABLE_HANDLE_CODE_DN> <NO_LOCK_HANDLE_CODE_DN>(M:Event) '#NO_LOCK_EVENT_SECONDARY#' scmi 0 == if{ #ON_SECONDARY_EVENT# quit }</NO_LOCK_HANDLE_CODE_DN> <ADDITIONAL_MOUSEFLAGS>+#LOCKABLE_EVENT_SECONDARY#+#NO_LOCK_EVENT_SECONDARY#</ADDITIONAL_MOUSEFLAGS> <CENTER_HANDLING_CODE_END> } els{ #ON_SECONDARY_EVENT# quit } </CENTER_HANDLING_CODE_END> </Condition> <Condition Valid="DEFINE_CENTER_INTERACTION"> <True> <CENTER_HANDLING_CODE_START> (M:Relative#DRAG_AXIS#) abs #CENTER_RADIUS# &gt; if{ </CENTER_HANDLING_CODE_START> </True> </Condition> </Parameters> <Parameters Type="Default"> <LOCKABLE_INPUTS_HANDLING> #LOCKABLE_HANDLE_CODE_UP# #LOCKABLE_HANDLE_CODE_DN# </LOCKABLE_INPUTS_HANDLING> <NO_LOCK_INPUTS_HANDLING> #NO_LOCK_HANDLE_CODE_UP# #NO_LOCK_HANDLE_CODE_DN# </NO_LOCK_INPUTS_HANDLING> </Parameters> <Parameters Type="Default"> <IM_DRAG_ADDITIONAL_EVENT_HANDLING> (M:InputType) 1 == if{ #LOCKABLE_INPUTS_HANDLING# } els{ #NO_LOCK_INPUTS_HANDLING# } </IM_DRAG_ADDITIONAL_EVENT_HANDLING> </Parameters> <Parameters Type="Override"> <Condition Valid="USE_PAD_DRAG_IM_LOCK"> <True> <CHECK_AND_RESET_DRAG_LOCK> (O:_ResetDragTime) (E:SIMULATION TIME, second) &lt; if{ 0 (&gt;O:_IsLimited) } (E:SIMULATION TIME, second) @DragLockResetTimer + (&gt;O:_ResetDragTime) </CHECK_AND_RESET_DRAG_LOCK> <CHECK_IS_DRAG_LOCKED>(O:_IsLimited)</CHECK_IS_DRAG_LOCKED> <SET_DRAG_LOCK>1 (&gt;O:_IsLimited)</SET_DRAG_LOCK> <UNSET_DRAG_LOCK>0 (&gt;O:_IsLimited)</UNSET_DRAG_LOCK> </True> <False> <CHECK_AND_RESET_DRAG_LOCK/> <CHECK_IS_DRAG_LOCKED>0</CHECK_IS_DRAG_LOCKED> <SET_DRAG_LOCK/> <UNSET_DRAG_LOCK/> </False> </Condition> <Condition Valid="INVERT_WHEEL_INTERACTION"> <True> <Switch Param="SWITCH_DIRECTION"> <Case Value="Vertical"> <FLAG_POS_WHEEL_UP>2</FLAG_POS_WHEEL_UP> <FLAG_POS_WHEEL_DN>1</FLAG_POS_WHEEL_DN> </Case> <Case Value="Horizontal"> <FLAG_POS_WHEEL_UP>1</FLAG_POS_WHEEL_UP> <FLAG_POS_WHEEL_DN>2</FLAG_POS_WHEEL_DN> </Case> </Switch> </True> <False> <Switch Param="SWITCH_DIRECTION"> <Case Value="Vertical"> <FLAG_POS_WHEEL_UP>1</FLAG_POS_WHEEL_UP> <FLAG_POS_WHEEL_DN>2</FLAG_POS_WHEEL_DN> </Case> <Case Value="Horizontal"> <FLAG_POS_WHEEL_UP>2</FLAG_POS_WHEEL_UP> <FLAG_POS_WHEEL_DN>1</FLAG_POS_WHEEL_DN> </Case> </Switch> </False> </Condition> <Condition Valid="INVERT_DRAG_POSITIVE_CONDITION"> <True> <DRAG_IS_POSITIVE_CONDITION>&lt;=</DRAG_IS_POSITIVE_CONDITION> </True> <False> <DRAG_IS_POSITIVE_CONDITION>&gt;</DRAG_IS_POSITIVE_CONDITION> </False> </Condition> </Parameters> <Parameters Type="Override"> <Condition Valid="USE_TRAJECTORY_DRAG_MODE"> <True> <DRAG_CODE_VERTICAL> (M:DragPercent) #NUM_STATES# * flr sp0 l0 (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) &lt; if{ g1 } els{ l0 (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) &gt; if{ g2 } } </DRAG_CODE_VERTICAL> <DRAG_CODE_HORIZONTAL> (M:DragPercent) #NUM_STATES# * flr sp0 l0 (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) &lt; if{ g1 } els{ l0 (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) &gt; if{ g2 } } </DRAG_CODE_HORIZONTAL> </True> <False> <DRAG_CODE_VERTICAL> #CHECK_AND_RESET_DRAG_LOCK# #CHECK_IS_DRAG_LOCKED# if{ (M:RelativeY) (&gt;O:OldMouseY) } els{ (O:OldMouseY) (M:RelativeY) - abs #THRESHOLD# &gt; if{ #SET_DRAG_LOCK# (O:OldMouseY) sp0 (M:RelativeY) (&gt;O:OldMouseY) (M:RelativeY) l0 #DRAG_IS_POSITIVE_CONDITION# if{ g1 } els{ g2 } } } </DRAG_CODE_VERTICAL> <DRAG_CODE_HORIZONTAL> #CHECK_AND_RESET_DRAG_LOCK# #CHECK_IS_DRAG_LOCKED# if{ (M:RelativeX) (&gt;O:OldMouseX) } els{ (O:OldMouseX) (M:RelativeX) - abs #THRESHOLD# &gt; if{ #SET_DRAG_LOCK# (O:OldMouseX) sp0 (M:RelativeX) (&gt;O:OldMouseX) (M:RelativeX) l0 #DRAG_IS_POSITIVE_CONDITION# if{ g2 } els{ g1 } } } </DRAG_CODE_HORIZONTAL> </False> </Condition> </Parameters> <UseTemplate Name="ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_2"> <Condition Check="IS_LOOPING"> <True> <ANIMCURSOR_MIN>-1</ANIMCURSOR_MIN> <ANIMCURSOR_MAX>-1</ANIMCURSOR_MAX> <CODE_UP> #CODE_UP# els{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 0 == if{ #CODE_POS_MAX_VERIF# if{ #POS_MAX# (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CODE_POS_MAX# #ON_STATE_CHANGED_EXTERNAL_CODE# } } } </CODE_UP> <CODE_DOWN> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #POS_MAX# == if{ #CODE_POS_0_VERIF# if{ 0 (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CODE_POS_0# #ON_STATE_CHANGED_EXTERNAL_CODE# } } els{ #CODE_DOWN# } </CODE_DOWN> </True> </Condition> <Switch Param="SWITCH_DIRECTION"> <Case Value="Vertical"> <INPUT_CODE_IM_DEFAULT> (M:Event) 'WheelUp' scmi 0 == if{ 1 (&gt;O:GoToRelease) g1 } els{ (M:Event) 'WheelDown' scmi 0 == if{ 1 (&gt;O:GoToRelease) g2 } els{ (M:Event) 'LeftSingle' scmi 0 == if{ #CENTER_HANDLING_CODE_START# #LEFT_DOWN_CODE# #CENTER_HANDLING_CODE_END# (M:RelativeY) 0 &gt; if{ g1 } els{ g2 } } els{ (M:Event) 'LeftRelease' scmi 0 == if{ #LEFT_UP_CODE# g3 } } } } quit </INPUT_CODE_IM_DEFAULT> <INPUT_CODE_IM_DRAG> (M:Event) 'Lock' scmi 0 == if{ (M:RelativeY) (&gt;O:OldMouseY) #LEFT_DOWN_CODE# #UNSET_DRAG_LOCK# } els{ (M:Event) 'WheelUp' scmi 0 == if{ 1 sp1 g#FLAG_POS_WHEEL_UP# } els{ (M:Event) 'WheelDown' scmi 0 == if{ 1 sp1 g#FLAG_POS_WHEEL_DN# } els{ (M:Event) 'LeftDrag' scmi 0 == if{ #DRAG_CODE_VERTICAL# } els{ (M:Event) 'Unlock' scmi 0 == if{ #LEFT_UP_CODE# g3 } } } } } quit </INPUT_CODE_IM_DRAG> </Case> <Case Value="Horizontal"> <INPUT_CODE_IM_DEFAULT> (M:Event) 'WheelUp' scmi 0 == if{ 1 (&gt;O:GoToRelease) g2 } els{ (M:Event) 'WheelDown' scmi 0 == if{ 1 (&gt;O:GoToRelease) g1 } els{ (M:Event) 'LeftSingle' scmi 0 == if{ #CENTER_HANDLING_CODE_START# #LEFT_DOWN_CODE# #CENTER_HANDLING_CODE_END# (M:RelativeX) 0 &gt; if{ g2 } els{ g1 } } els{ (M:Event) 'LeftRelease' scmi 0 == if{ #LEFT_UP_CODE# g3 } } } } quit </INPUT_CODE_IM_DEFAULT> <INPUT_CODE_IM_DRAG> (M:Event) 'Lock' scmi 0 == if{ (M:RelativeX) (&gt;O:OldMouseX) #LEFT_DOWN_CODE# #UNSET_DRAG_LOCK# } els{ (M:Event) 'WheelUp' scmi 0 == if{ 1 sp1 g#FLAG_POS_WHEEL_UP# } els{ (M:Event) 'WheelDown' scmi 0 == if{ 1 sp1 g#FLAG_POS_WHEEL_DN# } els{ (M:Event) 'LeftDrag' scmi 0 == if{ #DRAG_CODE_HORIZONTAL# } els{ (M:Event) 'Unlock' scmi 0 == if{ #LEFT_UP_CODE# g3 } } } } } quit </INPUT_CODE_IM_DRAG> </Case> </Switch> </UseTemplate> </Template> <!-- DO NOT CALL THIS TEMPLATE - Use GT_Interaction_LeftSingle_MultiStates instead --> <Template Name = "ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_2"> <DefaultTemplateParameters> <HELPID/> <TOOLTIPID/> <SWITCH_POSITION_TYPE>O</SWITCH_POSITION_TYPE> <SWITCH_POSITION_VAR>SwitchState</SWITCH_POSITION_VAR> <CODE_POS_0/> <CODE_POS_1/> <!-- This code is run when the lever should move to the corresponding position Overriding this allows you to specify if some special condition should block the lever from going to that position i.e. : Crash Lever in TBM930 By default, this does not block anything. --> <CODE_POS_0_VERIF>1</CODE_POS_0_VERIF> <CODE_POS_1_VERIF>1</CODE_POS_1_VERIF> <!-- These vars should not be modified outside of generic templates --> <CODE_UP/> <CODE_UP_CLOSING/> <CODE_DOWN/> <CODE_DOWN_CLOSING/> <CODE_RELEASE/> <LEFTARROW/> <RIGHTARROW/> <UPARROW/> <DOWNARROW/> <INPUT_CODE> </INPUT_CODE> <CODE_REPEAT></CODE_REPEAT> <PERCENT_PER_SECONDS>2000</PERCENT_PER_SECONDS> </DefaultTemplateParameters> <OverrideTemplateParameters> <Condition Check="MOMENTARY_SWITCH"> <CODE_POS_REST_STATE Process="Param">CODE_POS_#REST_STATE#</CODE_POS_REST_STATE> </Condition> </OverrideTemplateParameters> <Condition Check="REPEAT_FREQUENCY"> <Update Frequency="#REPEAT_FREQUENCY#"> #CODE_REPEAT# </Update> </Condition> <Condition Check="MOMENTARY_SWITCH"> <Update Frequency = "5"> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 0 == (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #MOMENTARY_SWITCH_DOWN_INDEX# == or if{ (* On Pad disable IsDown when stick is at center *) (M:InputType) 1 == (M:X) abs #THRESHOLD_INPUT# &lt; (M:Y) abs #THRESHOLD_INPUT# &lt; and and if{ 0 (&gt;#SWITCH_POSITION_TYPE_ISDOWN#:#SWITCH_POSITION_VAR_ISDOWN#) } (#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) 0 &gt; if{ (#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) (E:SIMULATION TIME, seconds) &lt; (#SWITCH_POSITION_TYPE_ISDOWN#:#SWITCH_POSITION_VAR_ISDOWN#) ! and if{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 0 == if{ 1 (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CODE_POS_1# } els{ #REST_STATE# (&gt;#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #CODE_POS_REST_STATE# } 0 (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } } els{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 0 == if{ #STATE0_TIMER# 0 &gt; if{ (E:SIMULATION TIME, seconds) #STATE0_TIMER# + (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } } els{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #MOMENTARY_SWITCH_DOWN_INDEX# == if{ #STATE_MAX_TIMER# 0 &gt; if{ (E:SIMULATION TIME, seconds) #STATE_MAX_TIMER# + (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } } els{ 0 (&gt;#SWITCH_POSITION_TYPE_TIMER#:#SWITCH_POSITION_VAR_TIMER#) } } } } } </Update> <Condition Check="MOMENTARY_REPEAT_FREQUENCY"> <True> <Update Frequency="#MOMENTARY_REPEAT_FREQUENCY#" InteractionModel="All"> (O:XMLVAR_Repeat_StartTime) (E:SIMULATION TIME, seconds) &lt; if{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 0 == if{ #CODE_POS_0# } els{ (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) #POS_MAX# == if{ #CODE_POS_MAX# } } } </Update> </True> </Condition> </Condition> <UseTemplate Name="ASOBO_GT_MouseRect"> <MouseFlags>LeftAll+WheelUp+WheelDown+Lock+Unlock#ADDITIONAL_MOUSEFLAGS#</MouseFlags> <ANIMATION_CODE_SETTER>(#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) 100 *</ANIMATION_CODE_SETTER> <CALLBACKCODE_DEFAULT_IM> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) (&gt;O:PreviousPos) #INPUT_CODE_IM_DEFAULT# :1 #CODE_UP# #CODE_UP_CLOSING# (O:GoToRelease) if{ g3 } quit :2 #CODE_DOWN# #CODE_DOWN_CLOSING# (O:GoToRelease) if{ g3 } quit :3 0 (&gt;O:GoToRelease) #CODE_RELEASE# quit </CALLBACKCODE_DEFAULT_IM> <CALLBACKCODE_DRAG_IM> (#SWITCH_POSITION_TYPE#:#SWITCH_POSITION_VAR#) (&gt;O:PreviousPos) #IM_DRAG_ADDITIONAL_EVENT_HANDLING# #INPUT_CODE_IM_DRAG# :1 (#DRAG_ANIMATION_TARGET_VARIABLE_TYPE#:#DRAG_ANIMATION_TARGET_VARIABLE_NAME#) (#DRAG_ANIMATION_VARIABLE_TYPE#:#DRAG_ANIMATION_VARIABLE_NAME#) == if{ #CODE_UP# #CODE_UP_CLOSING# } quit :2 (#DRAG_ANIMATION_TARGET_VARIABLE_TYPE#:#DRAG_ANIMATION_TARGET_VARIABLE_NAME#) (#DRAG_ANIMATION_VARIABLE_TYPE#:#DRAG_ANIMATION_VARIABLE_NAME#) == if{ #CODE_DOWN# } quit :3 #CODE_RELEASE# quit </CALLBACKCODE_DRAG_IM> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_WheelAndContinuousLeft_Vertical"> <DefaultTemplateParameters> <Condition> <Test> <And> <Arg NotEmpty="CLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="CLOCKWISE_CODE_DRAG_IM"/> </And> </Test> <False> <Condition NotEmpty="CLOCKWISE_CODE"> <True> <CLOCKWISE_CODE_DEFAULT_IM>#CLOCKWISE_CODE#</CLOCKWISE_CODE_DEFAULT_IM> <CLOCKWISE_CODE_DRAG_IM>#CLOCKWISE_CODE#</CLOCKWISE_CODE_DRAG_IM> </True> <False> <CLOCKWISE_CODE_DEFAULT_IM/> <CLOCKWISE_CODE_DRAG_IM/> </False> </Condition> </False> </Condition> <Condition> <Test> <And> <Arg NotEmpty="ANTICLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="ANTICLOCKWISE_CODE_DRAG_IM"/> </And> </Test> <False> <Condition NotEmpty="ANTICLOCKWISE_CODE"> <True> <ANTICLOCKWISE_CODE_DEFAULT_IM>#ANTICLOCKWISE_CODE#</ANTICLOCKWISE_CODE_DEFAULT_IM> <ANTICLOCKWISE_CODE_DRAG_IM>#ANTICLOCKWISE_CODE#</ANTICLOCKWISE_CODE_DRAG_IM> </True> <False> <ANTICLOCKWISE_CODE_DEFAULT_IM/> <ANTICLOCKWISE_CODE_DRAG_IM/> </False> </Condition> </False> </Condition> </DefaultTemplateParameters> <UseTemplate Name="ASOBO_GT_Interaction_WheelAndContinuousLeft_Base"> <UPARROW>UpArrow</UPARROW> <DOWNARROW>DownArrow</DOWNARROW> <AXIS>Y</AXIS> <!-- Inverting Clockwise & anticlockwise for vertical only --> <CLOCKWISE_CODE_DEFAULT_IM>#ANTICLOCKWISE_CODE_DEFAULT_IM#</CLOCKWISE_CODE_DEFAULT_IM> <ANTICLOCKWISE_CODE_DEFAULT_IM>#CLOCKWISE_CODE_DEFAULT_IM#</ANTICLOCKWISE_CODE_DEFAULT_IM> <CLOCKWISE_CODE_DRAG_IM>#ANTICLOCKWISE_CODE_DRAG_IM#</CLOCKWISE_CODE_DRAG_IM> <ANTICLOCKWISE_CODE_DRAG_IM>#CLOCKWISE_CODE_DRAG_IM#</ANTICLOCKWISE_CODE_DRAG_IM> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_WheelAndContinuousLeft_Horizontal"> <UseTemplate Name="ASOBO_GT_Interaction_WheelAndContinuousLeft_Base"> <LEFTARROW>TurnLeft</LEFTARROW> <RIGHTARROW>TurnRight</RIGHTARROW> <AXIS>X</AXIS> </UseTemplate> </Template> <Template Name = "ASOBO_GT_Interaction_WheelAndContinuousLeft_Base"> <Parameters Type="Default"> <HELPID/> <TOOLTIPID/> <UPARROW/> <DOWNARROW/> <LEFTARROW/> <RIGHTARROW/> <CALLBACKCODE/> <UPDATE_FREQUENCY>10</UPDATE_FREQUENCY> <UPDATE_DELAY>0.4</UPDATE_DELAY> <DRAG_SCALAR>0.0001</DRAG_SCALAR> <THRESHOLD_INPUT>0.00025</THRESHOLD_INPUT> <THRESHOLD_MOUSE>0.001</THRESHOLD_MOUSE> <THRESHOLD_VR>0.008</THRESHOLD_VR> <Condition> <Test> <And> <Arg NotEmpty="CLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="CLOCKWISE_CODE_DRAG_IM"/> </And> </Test> <False> <Condition NotEmpty="CLOCKWISE_CODE"> <True> <CLOCKWISE_CODE_DEFAULT_IM>#CLOCKWISE_CODE#</CLOCKWISE_CODE_DEFAULT_IM> <CLOCKWISE_CODE_DRAG_IM>#CLOCKWISE_CODE#</CLOCKWISE_CODE_DRAG_IM> </True> <False> <CLOCKWISE_CODE_DEFAULT_IM/> <CLOCKWISE_CODE_DRAG_IM/> </False> </Condition> </False> </Condition> <Condition> <Test> <And> <Arg NotEmpty="ANTICLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="ANTICLOCKWISE_CODE_DRAG_IM"/> </And> </Test> <False> <Condition NotEmpty="ANTICLOCKWISE_CODE"> <True> <ANTICLOCKWISE_CODE_DEFAULT_IM>#ANTICLOCKWISE_CODE#</ANTICLOCKWISE_CODE_DEFAULT_IM> <ANTICLOCKWISE_CODE_DRAG_IM>#ANTICLOCKWISE_CODE#</ANTICLOCKWISE_CODE_DRAG_IM> </True> <False> <ANTICLOCKWISE_CODE_DEFAULT_IM/> <ANTICLOCKWISE_CODE_DRAG_IM/> </False> </Condition> </False> </Condition> <UPARROW_DRAG_IM/> <DOWNARROW_DRAG_IM/> <LEFTARROW_DRAG_IM/> <RIGHTARROW_DRAG_IM/> <CURSOR_CENTER_DRAG_IM/> <CURSOR_DRAG_IM>Grab</CURSOR_DRAG_IM> </Parameters> <Parameters Type="Override"> <THRESHOLD>#THRESHOLD_VR# #THRESHOLD_INPUT# #THRESHOLD_MOUSE# @Case_InputType</THRESHOLD> <Condition Valid="INVERT_CLOCKWISE_ANTICLOCKWISE"> <Condition> <Test> <And> <Arg NotEmpty="CLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="ANTICLOCKWISE_CODE_DEFAULT_IM"/> </And> </Test> <True> <CLOCKWISE_CODE_DEFAULT_IM>#ANTICLOCKWISE_CODE_DEFAULT_IM#</CLOCKWISE_CODE_DEFAULT_IM> <ANTICLOCKWISE_CODE_DEFAULT_IM>#CLOCKWISE_CODE_DEFAULT_IM#</ANTICLOCKWISE_CODE_DEFAULT_IM> </True> </Condition> <Condition> <Test> <And> <Arg NotEmpty="CLOCKWISE_CODE_DRAG_IM"/> <Arg NotEmpty="ANTICLOCKWISE_CODE_DRAG_IM"/> </And> </Test> <True> <CLOCKWISE_CODE_DRAG_IM>#ANTICLOCKWISE_CODE_DRAG_IM#</CLOCKWISE_CODE_DRAG_IM> <ANTICLOCKWISE_CODE_DRAG_IM>#CLOCKWISE_CODE_DRAG_IM#</ANTICLOCKWISE_CODE_DRAG_IM> </True> </Condition> </Condition> </Parameters> <!-- Call code if left click is held, depending on the X axis side --> <Condition> <Test> <And> <Arg NotEmpty="CLOCKWISE_CODE_DEFAULT_IM"/> <Arg NotEmpty="ANTICLOCKWISE_CODE_DEFAULT_IM"/> </And> </Test> <True> <Update Frequency = "#UPDATE_FREQUENCY#" InteractionModel="Default"> (O:XMLVAR_FirstUpdateTime) (E:SIMULATION TIME, seconds) &lt; if{ (O:_MouseDownRelativePos#AXIS#) 0 &gt; if{ #CLOCKWISE_CODE_DEFAULT_IM# } els{ (O:_MouseDownRelativePos#AXIS#) 0 &lt; if{ #ANTICLOCKWISE_CODE_DEFAULT_IM# } } } </Update> </True> </Condition> <UseTemplate Name="ASOBO_GT_MouseRect"> <MouseFlags>LeftAll+WheelUp+WheelDown+Lock+Unlock</MouseFlags> <CALLBACKCODE_DEFAULT_IM> (M:Event) 'WheelUp' scmi 0 == if{ #CLOCKWISE_CODE_DEFAULT_IM# } els{ (M:Event) 'WheelDown' scmi 0 == if{ #ANTICLOCKWISE_CODE_DEFAULT_IM# } els{ (M:Event) 'LeftSingle' scmi 0 == if{ (M:Relative#AXIS#) (&gt;O:_MouseDownRelativePos#AXIS#) (E:SIMULATION TIME, seconds) #UPDATE_DELAY# + (&gt;O:XMLVAR_FirstUpdateTime) (O:_MouseDownRelativePos#AXIS#) 0 &gt; if{ #CLOCKWISE_CODE_DEFAULT_IM# } els{ (O:_MouseDownRelativePos#AXIS#) 0 &lt; if{ #ANTICLOCKWISE_CODE_DEFAULT_IM# } } } els{ (M:Event) 'LeftRelease' scmi 0 == if{ 0 (&gt;O:_MouseDownRelativePos#AXIS#) } } } } </CALLBACKCODE_DEFAULT_IM> <CALLBACKCODE_DRAG_IM> (M:Event) 'WheelUp' scmi 0 == if{ #CLOCKWISE_CODE_DRAG_IM# } els{ (M:Event) 'WheelDown' scmi 0 == if{ #ANTICLOCKWISE_CODE_DRAG_IM# } els{ (M:Event) 'Lock' scmi 0 == if{ (M:Relative#AXIS#) (&gt;O:_Last#AXIS#) } els{ (M:Event) 'Unlock' scmi 0 == if{ 0 (&gt;O:_Last#AXIS#) } els{ (M:Event) 'LeftDrag' scmi 0 == if{ (M:Relative#AXIS#) (O:_Last#AXIS#) - sp0 #THRESHOLD# (&gt;O:_InputThreshold) l0 abs (O:_InputThreshold) &gt; if{ l0 (O:_InputThreshold) / abs flr sp1 l0 (O:_InputThreshold) % abs sp2 :1 (* for loop *) l1 0 &lt;= if{ g2 } l1 -- sp1 l0 0 &gt; if{ #CLOCKWISE_CODE_DRAG_IM# } els{ #ANTICLOCKWISE_CODE_DRAG_IM# } g1 :2 l0 0 &gt; if{ (M:Relative#AXIS#) l2 - (&gt;O:_Last#AXIS#) } els{ (M:Relative#AXIS#) l2 + (&gt;O:_Last#AXIS#) } } } } } } } quit </CALLBACKCODE_DRAG_IM> </UseTemplate> </Template> <Template Name="ASOBO_GT_Interaction_DraggingYAxis_SimGates_Base"> <DefaultTemplateParameters> <LIMITATIONS_OVERRIDE/> <INCREMENT>0.1</INCREMENT> <Condition Check="IGNORE_GATES"> <LIMITATIONS_OVERRIDE> #STEPS_NUMBER# (&gt;O:MaxDraggingPosition) 0 (&gt;O:MinDraggingPosition) </LIMITATIONS_OVERRIDE> </Condition> </DefaultTemplateParameters> <UseTemplate Name="ASOBO_GT_MouseRect"> <MOUSEFLAGS>LeftAll+WheelUp+WheelDown</MOUSEFLAGS> <CALLBACKCODE> (A:#SIMVAR#, #SIMVAR_UNITS#) #SIMVAR_CONVERSION# sp0 (M:Event) 'LeftSingle' scmp 0 == if{ (M:RelativeY) (&gt;O:PrevY, Number) l0 near l0 - abs #GATE_TOLERANCE# &lt; sp1 #GATE_DIRECTION# -1 != if{ l1 if{ l0 near 1 + #STEPS_NUMBER# min (&gt;O:MaxDraggingPosition) } els{ l0 ceil #STEPS_NUMBER# min (&gt;O:MaxDraggingPosition) } } els{ #STEPS_NUMBER# (&gt;O:MaxDraggingPosition) } #GATE_DIRECTION# 1 != if{ l1 if{ l0 near 1 - 0 max (&gt;O:MinDraggingPosition) } els{ l0 flr 0 max (&gt;O:MinDraggingPosition) } } els{ 0 (&gt;O:MinDraggingPosition) } } els{ (M:Event) 'LeftDrag' scmp 0 == if{ (O:PrevY) (M:RelativeY) - sp2 l2 #DRAG_SPEED# * sp3 #GATE_DIRECTION# -1 != if{ l0 #GATE_TOLERANCE# + flr 1 + (O:MaxDraggingPosition) min (&gt;O:MaxDraggingPosition) } #GATE_DIRECTION# 1 != if{ l0 #GATE_TOLERANCE# - ceil 1 - (O:MinDraggingPosition) max (&gt;O:MinDraggingPosition) } #LIMITATIONS_OVERRIDE# l0 l3 + (O:MaxDraggingPosition) min (O:MinDraggingPosition) max #EVENTID_CONVERSION# (&gt;K:#EVENTID_SET#) (M:RelativeY) (&gt;O:PrevY) } els{ (M:Event) 'WheelUp' scmp 0 == if{ l0 #INCREMENT# - #EVENTID_CONVERSION# (&gt;K:#EVENTID_SET#) } els{ (M:Event) 'WheelDown' scmp 0 == if{ l0 #INCREMENT# + #EVENTID_CONVERSION# (&gt;K:#EVENTID_SET#) } } } } </CALLBACKCODE> </UseTemplate> </Template> </ModelBehaviors>

 

 

Templates

Template list
  1. ASOBO_GT_Interaction_LeftSingle_Leave_Code_Subtemplate1
  2. ASOBO_GT_Interaction_LeftSingle_Leave_Code_Subtemplate2
  3. ASOBO_GT_Interaction_LeftSingle_ParamSetup
  4. ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_1
  5. ASOBO_GT_Interaction_LeftSingle_ParamSetup_Recursive_2
  6. ASOBO_GT_Interaction_LeftSingle_CodeSetup_Recursive
  7. ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_1
  8. ASOBO_GT_Interaction_LeftSingle_MultiStates_Base_2
  9. ASOBO_GT_Interaction_WheelAndContinuousLeft_Vertical
  10. ASOBO_GT_Interaction_WheelAndContinuousLeft_Horizontal
  11. ASOBO_GT_Interaction_WheelAndContinuousLeft_Base
  12. ASOBO_GT_Interaction_DraggingYAxis_SimGates_Base