public override void OnInspectorGUI() { // Button to pop up window to edit the asset. if (GUILayout.Button("Edit asset")) { AssetInspectorWindow.OnOpenAsset(GetAsset().GetInstanceID(), 0); } EditorGUILayout.Space(); // Importer settings UI. var generateWapperCodeProperty = serializedObject.FindProperty("m_GenerateWrapperCode"); EditorGUILayout.PropertyField(generateWapperCodeProperty, m_GenerateWrapperCodeLabel); if (generateWapperCodeProperty.boolValue) { var wrapperCodePathProperty = serializedObject.FindProperty("m_WrapperCodePath"); var wrapperClassNameProperty = serializedObject.FindProperty("m_WrapperClassName"); var wrapperCodeNamespaceProperty = serializedObject.FindProperty("m_WrapperCodeNamespace"); var generateActionEventsProperty = serializedObject.FindProperty("m_GenerateActionEvents"); var generateInterfacesProperty = serializedObject.FindProperty("m_GenerateInterfaces"); ////TODO: tie a file selector to this EditorGUILayout.PropertyField(wrapperCodePathProperty, m_WrapperCodePathLabel); EditorGUILayout.PropertyField(wrapperClassNameProperty, m_WrapperClassNameLabel); if (!CSharpCodeHelpers.IsEmptyOrProperIdentifier(wrapperClassNameProperty.stringValue)) { EditorGUILayout.HelpBox("Must be a valid C# identifier", MessageType.Error); } EditorGUILayout.PropertyField(wrapperCodeNamespaceProperty, m_WrapperCodeNamespaceLabel); if (!CSharpCodeHelpers.IsEmptyOrProperNamespaceName(wrapperCodeNamespaceProperty.stringValue)) { EditorGUILayout.HelpBox("Must be a valid C# namespace name", MessageType.Error); } EditorGUILayout.PropertyField(generateActionEventsProperty, m_GenerateActionEventsLabel); EditorGUILayout.PropertyField(generateInterfacesProperty); } ApplyRevertGUI(); }
public void SetReferences(AssetInspectorWindow window, InputActionAssetManager assetManager) { m_AssetInspectorWindow = window; m_ActionAssetManager = assetManager; }
public ActionInspectorContextMenu(AssetInspectorWindow window, InputActionAssetManager assetManager) { SetReferences(window, assetManager); }
public void SetReferences(AssetInspectorWindow window, InputActionAssetManager assetManager, InputActionWindowToolbar toolbar) { m_AssetInspectorWindow = window; m_ActionAssetManager = assetManager; m_Toolbar = toolbar; }
public override void OnImportAsset(AssetImportContext ctx) { ////REVIEW: need to check with version control here? // Read file. string text; try { text = File.ReadAllText(ctx.assetPath); } catch (Exception exception) { ctx.LogImportError(string.Format("Could read file '{0}' ({1})", ctx.assetPath, exception)); return; } // Create asset. var asset = ScriptableObject.CreateInstance<InputActionAsset>(); // Parse JSON. try { ////TODO: make sure action names are unique asset.LoadFromJson(text); } catch (Exception exception) { ctx.LogImportError(string.Format("Could not parse input actions in JSON format from '{0}' ({1})", ctx.assetPath, exception)); DestroyImmediate(asset); return; } ctx.AddObjectToAsset("<root>", asset); ctx.SetMainObject(asset); // Make sure every map and every action has a stable ID assigned to it. var maps = asset.actionMaps; foreach (var map in maps) { if (map.idDontGenerate == Guid.Empty) { // Generate and remember GUID. var id = map.id; ArrayHelpers.Append(ref m_ActionMapGuids, new RememberedGuid { guid = id.ToString(), name = map.name, }); } else { // Retrieve remembered GUIDs. if (m_ActionMapGuids != null) { for (var i = 0; i < m_ActionMapGuids.Length; ++i) { if (string.Compare(m_ActionMapGuids[i].name, map.name, StringComparison.InvariantCultureIgnoreCase) == 0) { map.m_Guid = Guid.Empty; map.m_Id = m_ActionMapGuids[i].guid; break; } } } } foreach (var action in map.actions) { var actionName = string.Format("{0}/{1}", map.name, action.name); if (action.idDontGenerate == Guid.Empty) { // Generate and remember GUID. var id = action.id; ArrayHelpers.Append(ref m_ActionGuids, new RememberedGuid { guid = id.ToString(), name = actionName, }); } else { // Retrieve remembered GUIDs. if (m_ActionGuids != null) { for (var i = 0; i < m_ActionGuids.Length; ++i) { if (string.Compare(m_ActionGuids[i].name, actionName, StringComparison.InvariantCultureIgnoreCase) == 0) { action.m_Guid = Guid.Empty; action.m_Id = m_ActionGuids[i].guid; break; } } } } } } // Create subasset for each action. foreach (var map in maps) { var haveSetName = !string.IsNullOrEmpty(map.name); foreach (var action in map.actions) { var actionReference = ScriptableObject.CreateInstance<InputActionReference>(); actionReference.Set(action); var objectName = action.name; if (haveSetName) objectName = string.Format("{0}/{1}", map.name, action.name); actionReference.name = objectName; ctx.AddObjectToAsset(objectName, actionReference); } } // Generate wrapper code, if enabled. if (m_GenerateWrapperCode) { var wrapperFilePath = m_WrapperCodePath; if (string.IsNullOrEmpty(wrapperFilePath)) { var assetPath = ctx.assetPath; var directory = Path.GetDirectoryName(assetPath); var fileName = Path.GetFileNameWithoutExtension(assetPath); wrapperFilePath = Path.Combine(directory, fileName) + ".cs"; } var options = new InputActionCodeGenerator.Options { sourceAssetPath = ctx.assetPath, namespaceName = m_WrapperCodeNamespace, className = m_WrapperClassName, generateEvents = m_GenerateActionEvents, generateInterfaces = m_GenerateInterfaces, }; if (InputActionCodeGenerator.GenerateWrapperCode(wrapperFilePath, maps, asset.controlSchemes, options)) { // Inform database that we modified a source asset *during* import. AssetDatabase.ImportAsset(wrapperFilePath); } } // Refresh editors. AssetInspectorWindow.RefreshAllOnAssetReimport(); }
public override void OnInspectorGUI() { // Button to pop up window to edit the asset. if (GUILayout.Button("Edit asset")) { AssetInspectorWindow.OnOpenAsset(GetAsset().GetInstanceID(), 0); } EditorGUILayout.Space(); // Importer settings UI. var generateWapperCodeProperty = serializedObject.FindProperty("m_GenerateWrapperCode"); EditorGUILayout.PropertyField(generateWapperCodeProperty, m_GenerateWrapperCodeLabel); if (generateWapperCodeProperty.boolValue) { var wrapperCodePathProperty = serializedObject.FindProperty("m_WrapperCodePath"); var wrapperClassNameProperty = serializedObject.FindProperty("m_WrapperClassName"); var wrapperCodeNamespaceProperty = serializedObject.FindProperty("m_WrapperCodeNamespace"); var generateActionEventsProperty = serializedObject.FindProperty("m_GenerateActionEvents"); var generateInterfacesProperty = serializedObject.FindProperty("m_GenerateInterfaces"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(wrapperCodePathProperty, m_WrapperCodePathLabel); if (GUILayout.Button("...", EditorStyles.miniButton, GUILayout.MaxWidth(20))) { var assetPath = AssetDatabase.GetAssetPath(GetAsset()); var defaultFileName = Path.ChangeExtension(assetPath, ".cs"); var fileName = EditorUtility.SaveFilePanel("Location for generated C# file", Path.GetDirectoryName(defaultFileName), Path.GetFileName(defaultFileName), "cs"); if (!string.IsNullOrEmpty(fileName)) { if (fileName.StartsWith(Application.dataPath)) { fileName = "Assets/" + fileName.Substring(Application.dataPath.Length + 1); } wrapperCodePathProperty.stringValue = fileName; } } EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(wrapperClassNameProperty, m_WrapperClassNameLabel); if (!CSharpCodeHelpers.IsEmptyOrProperIdentifier(wrapperClassNameProperty.stringValue)) { EditorGUILayout.HelpBox("Must be a valid C# identifier", MessageType.Error); } EditorGUILayout.PropertyField(wrapperCodeNamespaceProperty, m_WrapperCodeNamespaceLabel); if (!CSharpCodeHelpers.IsEmptyOrProperNamespaceName(wrapperCodeNamespaceProperty.stringValue)) { EditorGUILayout.HelpBox("Must be a valid C# namespace name", MessageType.Error); } EditorGUILayout.PropertyField(generateActionEventsProperty, m_GenerateActionEventsLabel); EditorGUILayout.PropertyField(generateInterfacesProperty); } ApplyRevertGUI(); }