Advertisement
BinaryImpactG

UnityTip - Control Overrides

Mar 17th, 2020
634
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.91 KB | None | 0 0
  1.         ///
  2.         /// The following should be in a class!
  3.         ///
  4.        
  5.         public InputActionAsset control;
  6.  
  7.         /// <summary>
  8.         /// Private wrapper class for json serialization of the overrides
  9.         /// </summary>
  10.         [System.Serializable]
  11.         class BindingWrapperClass {
  12.             public List<BindingSerializable> bindingList = new List<BindingSerializable> ();
  13.         }
  14.  
  15.         /// <summary>
  16.         /// internal struct to store an id overridepath pair for a list
  17.         /// </summary>
  18.         [System.Serializable]
  19.         private struct BindingSerializable {
  20.             public string id;
  21.             public string path;
  22.  
  23.             public BindingSerializable(string bindingId, string bindingPath ) {
  24.                 id = bindingId;
  25.                 path = bindingPath;
  26.             }
  27.         }
  28.  
  29.         /// <summary>
  30.         /// stores the active control overrides to player prefs
  31.         /// </summary>
  32.         public void StoreControlOverrides () {
  33.             //saving
  34.             BindingWrapperClass bindingList = new BindingWrapperClass ();
  35.             foreach ( var map in control.actionMaps ) {
  36.                 foreach ( var binding in map.bindings ) {
  37.                     if ( !string.IsNullOrEmpty ( binding.overridePath ) ) {
  38.                         bindingList.bindingList.Add ( new BindingSerializable ( binding.id.ToString (), binding.overridePath ) );
  39.                     }
  40.                 }
  41.             }
  42.  
  43.             PlayerPrefs.SetString( "ControlOverrides", JsonUtility.ToJson ( bindingList ) );
  44.             PlayerPrefs.Save ();
  45.         }
  46.  
  47.         /// <summary>
  48.         /// Loads control overrides from playerprefs
  49.         /// </summary>
  50.         public void LoadControlOverrides () {
  51.             if (PlayerPrefs.HasKey( "ControlOverrides") ) {
  52.                 BindingWrapperClass bindingList = JsonUtility.FromJson ( PlayerPrefs.GetString ( "ControlOverrides" ), typeof ( BindingWrapperClass ) ) as BindingWrapperClass;
  53.  
  54.                 //create a dictionary to easier check for existing overrides
  55.                 Dictionary<System.Guid, string> overrides = new Dictionary<System.Guid, string> ();
  56.                 foreach ( var item in bindingList.bindingList) {
  57.                     overrides.Add ( new System.Guid ( item.id ), item.path );
  58.                 }
  59.  
  60.                 //walk through action maps check dictionary for overrides
  61.                 foreach ( var map in control.actionMaps ) {
  62.                     var bindings = map.bindings;
  63.                     for ( var i = 0; i < bindings.Count; ++i ) {
  64.                         if ( overrides.TryGetValue ( bindings[i].id, out string overridePath ) ) {
  65.                             //if there is an override apply it
  66.                             map.ApplyBindingOverride ( i, new InputBinding { overridePath = overridePath } );
  67.                         }
  68.                     }
  69.                 }
  70.             }
  71.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement