@@ -1035,6 +1035,55 @@ private void EnableControls(InputAction action)
10351035 }
10361036 }
10371037
1038+ internal void OnActionPriorityChanged ( InputAction action )
1039+ {
1040+ Debug . Assert ( action != null , "Action must not be null" ) ;
1041+ Debug . Assert ( action . m_ActionMap != null , "Action must have action map" ) ;
1042+
1043+ if ( action == null || action . m_ActionMap == null )
1044+ return ;
1045+
1046+ var actionIndex = action . m_ActionIndexInState ;
1047+ if ( actionIndex < 0 || actionIndex >= totalActionCount )
1048+ return ;
1049+
1050+ var map = action . m_ActionMap ;
1051+ var mapIndex = map . m_MapIndexInState ;
1052+ if ( mapIndex < 0 || mapIndex >= totalMapCount )
1053+ return ;
1054+
1055+ var clampedPriority = ( ushort ) Math . Clamp ( action . Priority , 0 , ushort . MaxValue ) ;
1056+ var manager = InputSystem . manager ;
1057+ var bindingStartIndex = mapIndices [ mapIndex ] . bindingStartIndex ;
1058+ var bindingCount = mapIndices [ mapIndex ] . bindingCount ;
1059+ var bindingStatesPtr = memory . bindingStates ;
1060+
1061+ for ( var i = 0 ; i < bindingCount ; ++ i )
1062+ {
1063+ var bindingIndex = bindingStartIndex + i ;
1064+ var bindingState = & bindingStatesPtr [ bindingIndex ] ;
1065+ if ( bindingState ->actionIndex != actionIndex || bindingState ->isPartOfComposite )
1066+ continue ;
1067+
1068+ var controlCount = bindingState ->controlCount ;
1069+ if ( controlCount == 0 )
1070+ continue ;
1071+
1072+ for ( var n = 0 ; n < controlCount ; ++ n )
1073+ {
1074+ var controlIndex = bindingState ->controlStartIndex + n ;
1075+ controlGroupingAndPriority [ controlIndex * 2 + 1 ] = clampedPriority ;
1076+
1077+ if ( ! IsControlEnabled ( controlIndex ) )
1078+ continue ;
1079+
1080+ var mapControlAndBindingIndex = ToCombinedMapAndControlAndBindingIndex ( mapIndex , controlIndex , bindingIndex ) ;
1081+ manager . RemoveStateChangeMonitor ( controls [ controlIndex ] , this , mapControlAndBindingIndex ) ;
1082+ manager . AddStateChangeMonitor ( controls [ controlIndex ] , this , mapControlAndBindingIndex , controlGroupingAndPriority [ controlIndex * 2 ] ) ;
1083+ }
1084+ }
1085+ }
1086+
10381087 public void DisableAllActions ( InputActionMap map )
10391088 {
10401089 Debug . Assert ( map != null , "Map must not be null" ) ;
0 commit comments