public void ShowGUI(bool isAssetFile, bool onlyEditValues = false, bool readOnly = false) { if (Application.isPlaying || readOnly) { EditorGUILayout.LabelField("Type:", parameterType.ToString()); EditorGUILayout.LabelField("Current value:", "'" + GetLabel() + "'"); CustomGUILayout.TokenLabel("[param:" + ID.ToString() + "]"); } else { if (onlyEditValues) { EditorGUILayout.LabelField("Type:", parameterType.ToString()); } else { parameterType = (ParameterType)EditorGUILayout.EnumPopup("Type:", parameterType); } switch (parameterType) { case ParameterType.Boolean: BoolValue boolValue = (intValue == 1) ? BoolValue.True : BoolValue.False; boolValue = (BoolValue)EditorGUILayout.EnumPopup("Default value:", boolValue); intValue = (boolValue == BoolValue.True) ? 1 : 0; break; case ParameterType.Integer: intValue = EditorGUILayout.IntField("Default value:", intValue); break; case ParameterType.Float: floatValue = EditorGUILayout.FloatField("Default value:", floatValue); break; case ParameterType.String: EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Default value:", GUILayout.Width(145f)); EditorStyles.textField.wordWrap = true; stringValue = EditorGUILayout.TextArea(stringValue, GUILayout.MaxWidth(400f)); EditorGUILayout.EndHorizontal(); break; case ParameterType.Vector3: vector3Value = EditorGUILayout.Vector3Field("Default value:", vector3Value); break; case ParameterType.UnityObject: objectValue = (Object)EditorGUILayout.ObjectField("Default value:", objectValue, typeof(Object), true); break; case ParameterType.Document: if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; intValue = ActionRunActionList.ShowDocumentSelectorGUI("Default value:", inventoryManager.documents, intValue); } else { EditorGUILayout.HelpBox("An Inventory Manager is required.", MessageType.Warning); } break; case ParameterType.InventoryItem: if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; intValue = ActionRunActionList.ShowInvItemSelectorGUI("Default value:", inventoryManager.items, intValue); } else { EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning); } break; case ParameterType.GlobalVariable: if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager) { VariablesManager variablesManager = AdvGame.GetReferences().variablesManager; intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", variablesManager.vars, intValue); } else { EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning); } break; case ParameterType.LocalVariable: if (isAssetFile) { intValue = 0; EditorGUILayout.HelpBox("Local Variable parameters cannot have default values in ActionList Assets.", MessageType.Info); } else { if (KickStarter.localVariables) { intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", KickStarter.localVariables.localVars, intValue); } else { EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning); } } break; case ParameterType.ComponentVariable: if (isAssetFile) { variables = null; intValue = 0; EditorGUILayout.HelpBox("Component Variable parameters cannot have default values in ActionList Assets.", MessageType.Info); } else { variables = (Variables)EditorGUILayout.ObjectField("Variables component:", variables, typeof(Variables), true); if (variables != null) { intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", variables.vars, intValue); } } break; case ParameterType.GameObject: if (isAssetFile) { gameObject = (GameObject)EditorGUILayout.ObjectField("Default value:", gameObject, typeof(GameObject), true); if (gameObject != null) { if (!UnityVersionHandler.IsPrefabFile(gameObject)) { intValue = Action.FieldToID(gameObject, intValue, false, isAssetFile); gameObject = Action.IDToField(gameObject, intValue, true, false, isAssetFile); } else { // A prefab, ask if we want to affect the prefab or the scene-based instance? gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", gameObjectParameterReferences); } } else { intValue = EditorGUILayout.IntField("Default value (ID #):", intValue); } } else { // Gameobject gameObject = (GameObject)EditorGUILayout.ObjectField("Default value:", gameObject, typeof(GameObject), true); intValue = 0; if (gameObject != null && gameObject.GetComponent <ConstantID> () == null) { UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (gameObject); } } break; default: break; } CustomGUILayout.TokenLabel("[param:" + ID.ToString() + "]"); } }
public static GUIData SetParametersGUI(List <ActionParameter> externalParameters, bool isAssetFile, GUIData guiData, List <ActionParameter> ownParameters = null) { guiData = SyncLists(externalParameters, guiData); EditorGUILayout.BeginVertical("Button"); for (int i = 0; i < externalParameters.Count; i++) { string label = externalParameters[i].label; int linkedID = (i < guiData.parameterIDs.Count) ? guiData.parameterIDs[i] : -1; //guiData.fromParameters[i].ID = externalParameters[i].ID; guiData.fromParameters[i].parameterType = externalParameters[i].parameterType; if (externalParameters[i].parameterType == ParameterType.GameObject) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GameObject); if (linkedID < 0) { if (isAssetFile) { guiData.fromParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].gameObject, typeof(GameObject), true); if (guiData.fromParameters[i].gameObject != null) { if (!UnityVersionHandler.IsPrefabFile(guiData.fromParameters[i].gameObject)) { guiData.fromParameters[i].intValue = Action.FieldToID(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, false, isAssetFile); guiData.fromParameters[i].gameObject = Action.IDToField(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, true, false, isAssetFile); } else { // A prefab, ask if we want to affect the prefab or the scene-based instance? guiData.fromParameters[i].gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", guiData.fromParameters[i].gameObjectParameterReferences); } } else { guiData.fromParameters[i].intValue = EditorGUILayout.IntField(label + " (ID #):", guiData.fromParameters[i].intValue); } } else { // Gameobject guiData.fromParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].gameObject, typeof(GameObject), true); guiData.fromParameters[i].intValue = 0; if (guiData.fromParameters[i].gameObject != null && guiData.fromParameters[i].gameObject.GetComponent <ConstantID>() == null) { UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (guiData.fromParameters[i].gameObject); } } } } else if (externalParameters[i].parameterType == ParameterType.UnityObject) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.UnityObject); if (linkedID < 0) { guiData.fromParameters[i].objectValue = (Object)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].objectValue, typeof(Object), true); } } else if (externalParameters[i].parameterType == ParameterType.GlobalVariable) { if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GlobalVariable); if (linkedID < 0) { VariablesManager variablesManager = AdvGame.GetReferences().variablesManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", variablesManager.vars, guiData.fromParameters[i].intValue); } } else { EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning); } } else if (externalParameters[i].parameterType == ParameterType.InventoryItem) { if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.InventoryItem); if (linkedID < 0) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowInvItemSelectorGUI(label + ":", inventoryManager.items, guiData.fromParameters[i].intValue); } } else { EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning); } } else if (externalParameters[i].parameterType == ParameterType.Document) { if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Document); if (linkedID < 0) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowDocumentSelectorGUI(label + ":", inventoryManager.documents, guiData.fromParameters[i].intValue); } } else { EditorGUILayout.HelpBox("An Inventory Manager is required to pass Documents.", MessageType.Warning); } } else if (externalParameters[i].parameterType == ParameterType.LocalVariable) { if (KickStarter.localVariables) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.LocalVariable); if (linkedID < 0) { guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, guiData.fromParameters[i].intValue); } } else { EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning); } } else if (externalParameters[i].parameterType == ParameterType.String) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.String); if (linkedID < 0) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(label + ":", GUILayout.Width(145f)); EditorStyles.textField.wordWrap = true; guiData.fromParameters[i].stringValue = EditorGUILayout.TextArea(guiData.fromParameters[i].stringValue, GUILayout.MaxWidth(400f)); EditorGUILayout.EndHorizontal(); } } else if (externalParameters[i].parameterType == ParameterType.Float) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Float); if (linkedID < 0) { guiData.fromParameters[i].floatValue = EditorGUILayout.FloatField(label + ":", guiData.fromParameters[i].floatValue); } } else if (externalParameters[i].parameterType == ParameterType.Integer) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Integer); if (linkedID < 0) { guiData.fromParameters[i].intValue = EditorGUILayout.IntField(label + ":", guiData.fromParameters[i].intValue); } } else if (externalParameters[i].parameterType == ParameterType.Vector3) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Vector3); if (linkedID < 0) { guiData.fromParameters[i].vector3Value = EditorGUILayout.Vector3Field(label + ":", guiData.fromParameters[i].vector3Value); } } else if (externalParameters[i].parameterType == ParameterType.Boolean) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Boolean); if (linkedID < 0) { BoolValue boolValue = BoolValue.False; if (guiData.fromParameters[i].intValue == 1) { boolValue = BoolValue.True; } boolValue = (BoolValue)EditorGUILayout.EnumPopup(label + ":", boolValue); if (boolValue == BoolValue.True) { guiData.fromParameters[i].intValue = 1; } else { guiData.fromParameters[i].intValue = 0; } } } else if (externalParameters[i].parameterType == ParameterType.ComponentVariable) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.ComponentVariable); if (linkedID < 0) { guiData.fromParameters[i].variables = (Variables)EditorGUILayout.ObjectField("'" + label + "' component:", guiData.fromParameters[i].variables, typeof(Variables), true); if (guiData.fromParameters[i].variables != null) { guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", guiData.fromParameters[i].variables.vars, guiData.fromParameters[i].intValue); } } } if (i < guiData.parameterIDs.Count) { guiData.parameterIDs[i] = linkedID; } if (i < externalParameters.Count - 1) { EditorGUILayout.Space(); } } EditorGUILayout.EndVertical(); return(guiData); }
public static GUIData SetParametersGUI(List <ActionParameter> externalParameters, bool isAssetFile, GUIData guiData, List <ActionParameter> ownParameters = null) { guiData = SyncLists(externalParameters, guiData); CustomGUILayout.BeginVertical(); for (int i = 0; i < externalParameters.Count; i++) { string label = externalParameters[i].label; string tooltip = externalParameters[i].description; int linkedID = (i < guiData.parameterIDs.Count) ? guiData.parameterIDs[i] : -1; guiData.fromParameters[i].parameterType = externalParameters[i].parameterType; switch (externalParameters[i].parameterType) { case ParameterType.GameObject: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GameObject); if (linkedID < 0) { if (isAssetFile) { guiData.fromParameters[i].gameObject = (GameObject)CustomGUILayout.ObjectField <GameObject> (label + ":", guiData.fromParameters[i].gameObject, true, string.Empty, tooltip); if (guiData.fromParameters[i].gameObject) { if (!UnityVersionHandler.IsPrefabFile(guiData.fromParameters[i].gameObject)) { guiData.fromParameters[i].intValue = Action.FieldToID(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, false, isAssetFile); guiData.fromParameters[i].gameObject = Action.IDToField(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, true, false, isAssetFile); } else { // A prefab, ask if we want to affect the prefab or the scene-based instance? guiData.fromParameters[i].gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", guiData.fromParameters[i].gameObjectParameterReferences); } } else { guiData.fromParameters[i].intValue = CustomGUILayout.IntField(label + " (ID #):", guiData.fromParameters[i].intValue, string.Empty, tooltip); } } else { // Gameobject guiData.fromParameters[i].gameObject = (GameObject)CustomGUILayout.ObjectField <GameObject> (label + ":", guiData.fromParameters[i].gameObject, true, string.Empty, tooltip); guiData.fromParameters[i].intValue = 0; if (guiData.fromParameters[i].gameObject && guiData.fromParameters[i].gameObject.GetComponent <ConstantID>() == null) { UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (guiData.fromParameters[i].gameObject); } } } } break; case ParameterType.UnityObject: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.UnityObject); if (linkedID < 0) { guiData.fromParameters[i].objectValue = (Object)CustomGUILayout.ObjectField <Object> (label + ":", guiData.fromParameters[i].objectValue, true, string.Empty, tooltip); } } break; case ParameterType.GlobalVariable: { if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GlobalVariable, -1, tooltip); if (linkedID < 0) { VariablesManager variablesManager = AdvGame.GetReferences().variablesManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", variablesManager.vars, guiData.fromParameters[i].intValue, tooltip); } } else { EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning); } } break; case ParameterType.InventoryItem: { if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.InventoryItem, -1, tooltip); if (linkedID < 0) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowInvItemSelectorGUI(label + ":", inventoryManager.items, guiData.fromParameters[i].intValue, tooltip); } } else { EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning); } } break; case ParameterType.Document: { if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Document, -1, tooltip); if (linkedID < 0) { InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager; guiData.fromParameters[i].intValue = ActionRunActionList.ShowDocumentSelectorGUI(label + ":", inventoryManager.documents, guiData.fromParameters[i].intValue, tooltip); } } else { EditorGUILayout.HelpBox("An Inventory Manager is required to pass Documents.", MessageType.Warning); } } break; case ParameterType.LocalVariable: { if (KickStarter.localVariables) { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.LocalVariable, -1, tooltip); if (linkedID < 0) { guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, guiData.fromParameters[i].intValue, tooltip); } } else { EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning); } } break; case ParameterType.String: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.String, -1, tooltip); if (linkedID < 0) { guiData.fromParameters[i].stringValue = CustomGUILayout.TextArea(label, guiData.fromParameters[i].stringValue, string.Empty, tooltip); } } break; case ParameterType.Float: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Float, -1, tooltip); if (linkedID < 0) { guiData.fromParameters[i].floatValue = CustomGUILayout.FloatField(label + ":", guiData.fromParameters[i].floatValue, string.Empty, tooltip); } } break; case ParameterType.Integer: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Integer, -1, tooltip); if (linkedID < 0) { guiData.fromParameters[i].intValue = CustomGUILayout.IntField(label + ":", guiData.fromParameters[i].intValue, string.Empty, tooltip); } } break; case ParameterType.Vector3: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Vector3, -1, tooltip); if (linkedID < 0) { guiData.fromParameters[i].vector3Value = CustomGUILayout.Vector3Field(label + ":", guiData.fromParameters[i].vector3Value, string.Empty, tooltip); } } break; case ParameterType.Boolean: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Boolean, -1, tooltip); if (linkedID < 0) { BoolValue boolValue = BoolValue.False; if (guiData.fromParameters[i].intValue == 1) { boolValue = BoolValue.True; } boolValue = (BoolValue)CustomGUILayout.EnumPopup(label + ":", boolValue, string.Empty, tooltip); if (boolValue == BoolValue.True) { guiData.fromParameters[i].intValue = 1; } else { guiData.fromParameters[i].intValue = 0; } } } break; case ParameterType.ComponentVariable: { linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.ComponentVariable); if (linkedID < 0) { guiData.fromParameters[i].variables = (Variables)EditorGUILayout.ObjectField("'" + label + "' component:", guiData.fromParameters[i].variables, typeof(Variables), true); if (guiData.fromParameters[i].variables != null) { guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", guiData.fromParameters[i].variables.vars, guiData.fromParameters[i].intValue); } } } break; default: break; } if (i < guiData.parameterIDs.Count) { guiData.parameterIDs[i] = linkedID; } if (i < externalParameters.Count - 1) { EditorGUILayout.Space(); } } CustomGUILayout.EndVertical(); return(guiData); }