@@ -1476,43 +1476,37 @@ private void ProcessControlStateChange(int mapIndex, int controlIndex, int bindi
14761476                    // If the binding is part of a composite, check for interactions on the composite 
14771477                    // itself and give them a first shot at processing the value change. 
14781478                    var  haveInteractionsOnComposite  =  false ; 
1479-                     var  compositeAlreadyTriggered  =  false ; 
14801479                    if  ( bindingStatePtr ->isPartOfComposite ) 
14811480                    { 
14821481                        var  compositeBindingIndex  =  bindingStatePtr ->compositeOrCompositeBindingIndex ; 
14831482                        var  compositeBindingPtr  =  & bindingStates [ compositeBindingIndex ] ; 
14841483
1485-                         // If the composite has already been triggered from the very same event set a flag so it isn't triggered again . 
1484+                         // If the composite has already been triggered from the very same event, ignore it . 
14861485                        // Example: KeyboardState change that includes both A and W key state changes and we're looking 
14871486                        //          at a WASD composite binding. There's a state change monitor on both the A and the W 
14881487                        //          key and thus the manager will notify us individually of both changes. However, we 
14891488                        //          want to perform the action only once. 
1490-                         // NOTE: Do NOT ignore this Event, we still need finish processing the individual button states. 
1491-                         if  ( ! ShouldIgnoreInputOnCompositeBinding ( compositeBindingPtr ,  eventPtr ) ) 
1492-                         { 
1493-                             // Update magnitude for composite. 
1494-                             var  compositeIndex  =  bindingStates [ compositeBindingIndex ] . compositeOrCompositeBindingIndex ; 
1495-                             var  compositeContext  =  new  InputBindingCompositeContext 
1496-                             { 
1497-                                 m_State  =  this , 
1498-                                 m_BindingIndex  =  compositeBindingIndex 
1499-                             } ; 
1500-                             trigger . magnitude  =  composites [ compositeIndex ] . EvaluateMagnitude ( ref  compositeContext ) ; 
1501-                             memory . compositeMagnitudes [ compositeIndex ]  =  trigger . magnitude ; 
1489+                         if  ( ShouldIgnoreInputOnCompositeBinding ( compositeBindingPtr ,  eventPtr ) ) 
1490+                             return ; 
15021491
1503-                             // Run through interactions on composite. 
1504-                             var  interactionCountOnComposite  =  compositeBindingPtr ->interactionCount ; 
1505-                             if  ( interactionCountOnComposite  >  0 ) 
1506-                             { 
1507-                                 haveInteractionsOnComposite  =  true ; 
1508-                                 ProcessInteractions ( ref  trigger , 
1509-                                     compositeBindingPtr ->interactionStartIndex , 
1510-                                     interactionCountOnComposite ) ; 
1511-                             } 
1512-                         } 
1513-                         else 
1492+                         // Update magnitude for composite. 
1493+                         var  compositeIndex  =  bindingStates [ compositeBindingIndex ] . compositeOrCompositeBindingIndex ; 
1494+                         var  compositeContext  =  new  InputBindingCompositeContext 
1495+                         { 
1496+                             m_State  =  this , 
1497+                             m_BindingIndex  =  compositeBindingIndex 
1498+                         } ; 
1499+                         trigger . magnitude  =  composites [ compositeIndex ] . EvaluateMagnitude ( ref  compositeContext ) ; 
1500+                         memory . compositeMagnitudes [ compositeIndex ]  =  trigger . magnitude ; 
1501+ 
1502+                         // Run through interactions on composite. 
1503+                         var  interactionCountOnComposite  =  compositeBindingPtr ->interactionCount ; 
1504+                         if  ( interactionCountOnComposite  >  0 ) 
15141505                        { 
1515-                             compositeAlreadyTriggered  =  true ; 
1506+                             haveInteractionsOnComposite  =  true ; 
1507+                             ProcessInteractions ( ref  trigger , 
1508+                                 compositeBindingPtr ->interactionStartIndex , 
1509+                                 interactionCountOnComposite ) ; 
15161510                        } 
15171511                    } 
15181512
@@ -1521,31 +1515,21 @@ private void ProcessControlStateChange(int mapIndex, int controlIndex, int bindi
15211515                    // one of higher magnitude) or may even lead us to switch to processing a different binding 
15221516                    // (e.g. when an input of previously greater magnitude has now fallen below the level of another 
15231517                    // ongoing input with now higher magnitude). 
1524-                     // 
1525-                     // If Composite has already been triggered, skip this step; it's unnecessary and could also 
1526-                     // cause a processing issue if we switch to another binding. 
1527-                     var  isConflictingInput  =  false ; 
1528-                     if  ( ! compositeAlreadyTriggered ) 
1529-                     { 
1530-                         isConflictingInput  =  IsConflictingInput ( ref  trigger ,  actionIndex ) ; 
1531-                         bindingStatePtr  =  & bindingStates [ trigger . bindingIndex ] ;  // IsConflictingInput may switch us to a different binding. 
1532-                     } 
1518+                     var  isConflictingInput  =  IsConflictingInput ( ref  trigger ,  actionIndex ) ; 
1519+                     bindingStatePtr  =  & bindingStates [ trigger . bindingIndex ] ;  // IsConflictingInput may switch us to a different binding. 
15331520
15341521                    // Process button presses/releases. 
1535-                     // We MUST execute this processing even if Composite has already been triggered to ensure button states 
1536-                     // are properly updated (ISXB-746) 
15371522                    if  ( ! isConflictingInput ) 
15381523                        ProcessButtonState ( ref  trigger ,  actionIndex ,  bindingStatePtr ) ; 
15391524
15401525                    // If we have interactions, let them do all the processing. The presence of an interaction 
15411526                    // essentially bypasses the default phase progression logic of an action. 
1542-                     // Interactions are skipped if compositeAlreadyTriggered is set. 
15431527                    var  interactionCount  =  bindingStatePtr ->interactionCount ; 
15441528                    if  ( interactionCount  >  0  &&  ! bindingStatePtr ->isPartOfComposite ) 
15451529                    { 
15461530                        ProcessInteractions ( ref  trigger ,  bindingStatePtr ->interactionStartIndex ,  interactionCount ) ; 
15471531                    } 
1548-                     else  if  ( ! haveInteractionsOnComposite  &&  ! isConflictingInput   &&   ! compositeAlreadyTriggered ) 
1532+                     else  if  ( ! haveInteractionsOnComposite  &&  ! isConflictingInput ) 
15491533                    { 
15501534                        ProcessDefaultInteraction ( ref  trigger ,  actionIndex ) ; 
15511535                    } 
0 commit comments