public override void Init() { if (containingAtom.type != "SessionPluginManager") { SuperController.LogError("Keybindings plugin can only be installed as a session plugin."); CreateTextField(new JSONStorableString("Error", "Keybindings plugin can only be installed as a session plugin.")); enabledJSON.val = false; return; } _settings = new KeybindingsSettings(); _prefabManager = new PrefabManager(); _keyMapManager = new KeyMapManager(); _analogMapManager = new AnalogMapManager(); _selectionHistoryManager = new SelectionHistoryManager(); _remoteCommandsManager = new RemoteCommandsManager(this, _selectionHistoryManager); _globalCommands = new GlobalCommands(this, containingAtom, _selectionHistoryManager, _remoteCommandsManager); _storage = new KeybindingsStorage(this, _keyMapManager, _analogMapManager, _settings); _overlayReference = new KeybindingsOverlayReference(); _analogHandler = new AnalogHandler(_remoteCommandsManager, _analogMapManager, _settings); _normalModeHandler = new NormalModeHandler(this, _settings, _keyMapManager, _overlayReference, _remoteCommandsManager); _findModeHandler = new FindModeHandler(this, _remoteCommandsManager, _overlayReference); SuperController.singleton.StartCoroutine(_prefabManager.LoadUIAssets()); AcquireBuiltInCommands(); _globalCommands.Init(); AcquireAllAvailableBroadcastingPlugins(); _storage.ImportDefaults(); EnterNormalMode(); // TODO: Map multiple bindings to the same action? _valid = true; }