private void DrawScriptItem(Rect position, ScriptItem item, ref ScriptItem itemToDelete) { const float setLabelWidth = 32; const float deleteButtonWidth = 22; int originalIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; var x = position.x; var y = position.y; var rect = new Rect(x, y, setLabelWidth, EditorGUIUtility.singleLineHeight); EditorGUI.LabelField(rect, "Set"); x += rect.width + 2; rect = new Rect(x, y, 96, EditorGUIUtility.singleLineHeight); ScriptWizardResourceType newResourceType = (ScriptWizardResourceType)EditorGUI.EnumPopup(rect, item.resourceType); x += rect.width + 2; if (newResourceType != item.resourceType) { item.resourceType = newResourceType; item.scriptQuestEntryNames = new string[0]; } if (item.resourceType == ScriptWizardResourceType.Quest) { // Quest: var questNameWidth = Mathf.Max(1, position.width - x - 98 - 22); rect = new Rect(x, y, questNameWidth, rect.height); x += rect.width + 2; item.questNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, questNames); rect = new Rect(x, y, 22, rect.height); x += rect.width + 2; EditorGUI.LabelField(rect, "to"); rect = new Rect(x, y, 96, EditorGUIUtility.singleLineHeight); item.questState = QuestStateDrawer.RectQuestStatePopup(rect, item.questState); } else if (item.resourceType == ScriptWizardResourceType.QuestEntry) { // Quest Entry: var questNameWidth = Mathf.Max(1, position.width - x - 98 - 98 - 22); rect = new Rect(x, y, questNameWidth, EditorGUIUtility.singleLineHeight); x += rect.width + 2; int newQuestNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, complexQuestNames); if (newQuestNamesIndex != item.questNamesIndex) { item.questNamesIndex = newQuestNamesIndex; item.scriptQuestEntryNames = new string[0]; } if ((item.scriptQuestEntryNames.Length == 0) && (item.questNamesIndex < complexQuestNames.Length)) { item.scriptQuestEntryNames = GetQuestEntryNames(complexQuestNames[item.questNamesIndex]); } rect = new Rect(x, y, 96, EditorGUIUtility.singleLineHeight); x += rect.width + 2; item.questEntryIndex = EditorGUI.Popup(rect, item.questEntryIndex, item.scriptQuestEntryNames); rect = new Rect(x, y, 22, rect.height); x += rect.width + 2; EditorGUI.LabelField(rect, "to"); rect = new Rect(x, y, 96, EditorGUIUtility.singleLineHeight); item.questState = QuestStateDrawer.RectQuestStatePopup(rect, item.questState); } else if (item.resourceType == ScriptWizardResourceType.Variable) { // Variable: var availableWidth = position.width - rect.x - deleteButtonWidth - 2; var fieldWidth = availableWidth / 3; rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.variableNamesIndex = EditorGUI.Popup(rect, item.variableNamesIndex, variableNames); var variableType = GetWizardVariableType(item.variableNamesIndex); rect = new Rect(x, y, 40, rect.height); x += rect.width + 2; DrawValueSetMode(rect, item, variableType); rect = new Rect(x, y, fieldWidth - 1, rect.height); switch (variableType) { case FieldType.Boolean: item.booleanValue = (BooleanType)EditorGUI.EnumPopup(rect, item.booleanValue); break; case FieldType.Number: item.floatValue = EditorGUI.FloatField(rect, item.floatValue); break; default: item.stringValue = EditorGUI.TextField(rect, item.stringValue); break; } } else if (item.resourceType == ScriptWizardResourceType.Actor) { // Actor: var availableWidth = position.width - rect.x - deleteButtonWidth - 2; var fieldWidth = availableWidth / 4; rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.actorNamesIndex = EditorGUI.Popup(rect, item.actorNamesIndex, actorNames); rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.actorFieldIndex = EditorGUI.Popup(rect, item.actorFieldIndex, actorFieldNames); var actorFieldType = GetWizardActorFieldType(item.actorFieldIndex); rect = new Rect(x, y, 40, rect.height); x += rect.width + 2; DrawValueSetMode(rect, item, actorFieldType); rect = new Rect(position.x + position.width - deleteButtonWidth - 2 - fieldWidth - 2, y, fieldWidth - 1, rect.height); switch (actorFieldType) { case FieldType.Boolean: item.booleanValue = (BooleanType)EditorGUI.EnumPopup(rect, item.booleanValue); break; case FieldType.Number: item.floatValue = EditorGUI.FloatField(rect, item.floatValue); break; default: item.stringValue = EditorGUI.TextField(rect, item.stringValue); break; } } else if (item.resourceType == ScriptWizardResourceType.Item) { // Item: var availableWidth = position.width - rect.x - deleteButtonWidth - 2; var fieldWidth = availableWidth / 4; rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.itemNamesIndex = EditorGUI.Popup(rect, item.itemNamesIndex, itemNames); rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.itemFieldIndex = EditorGUI.Popup(rect, item.itemFieldIndex, itemFieldNames); var itemFieldType = GetWizardItemFieldType(item.itemFieldIndex); rect = new Rect(x, y, 40 - 1, rect.height); x += rect.width + 2; DrawValueSetMode(rect, item, itemFieldType); rect = new Rect(position.x + position.width - deleteButtonWidth - 2 - fieldWidth - 2, y, fieldWidth - 1, rect.height); switch (itemFieldType) { case FieldType.Boolean: item.booleanValue = (BooleanType)EditorGUI.EnumPopup(rect, item.booleanValue); break; case FieldType.Number: item.floatValue = EditorGUI.FloatField(rect, item.floatValue); break; default: item.stringValue = EditorGUI.TextField(rect, item.stringValue); break; } } else if (item.resourceType == ScriptWizardResourceType.Location) { // Location: var availableWidth = position.width - rect.x - deleteButtonWidth - 2; var fieldWidth = availableWidth / 4; rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.locationNamesIndex = EditorGUI.Popup(rect, item.locationNamesIndex, locationNames); rect = new Rect(x, y, fieldWidth - 1, rect.height); x += rect.width + 2; item.locationFieldIndex = EditorGUI.Popup(rect, item.locationFieldIndex, locationFieldNames); var locationFieldType = GetWizardLocationFieldType(item.locationFieldIndex); rect = new Rect(x, y, 40 - 1, rect.height); x += rect.width + 2; DrawValueSetMode(rect, item, locationFieldType); rect = new Rect(position.x + position.width - deleteButtonWidth - 2 - fieldWidth - 2, y, fieldWidth - 1, rect.height); switch (locationFieldType) { case FieldType.Boolean: item.booleanValue = (BooleanType)EditorGUI.EnumPopup(rect, item.booleanValue); break; case FieldType.Number: item.floatValue = EditorGUI.FloatField(rect, item.floatValue); break; default: item.stringValue = EditorGUI.TextField(rect, item.stringValue); break; } } else if (item.resourceType == ScriptWizardResourceType.SimStatus) { // SimStatus: rect = new Rect(x, y, 50, rect.height); x += rect.width + 2; item.simStatusID = EditorGUI.IntField(rect, item.simStatusID); rect = new Rect(x, y, position.width - x - 2, rect.height); item.simStatusType = (SimStatusType)EditorGUI.EnumPopup(rect, item.simStatusType); } else if (item.resourceType == ScriptWizardResourceType.ManualEnter) { // Custom: rect = new Rect(x, y, position.width - rect.width - 2, rect.height); item.stringValue = EditorGUI.TextField(rect, item.stringValue); } rect = new Rect(position.x + position.width - deleteButtonWidth, y, deleteButtonWidth, EditorGUIUtility.singleLineHeight); if (GUI.Button(rect, new GUIContent("-", "Delete this condition."), EditorStyles.miniButton)) { itemToDelete = item; } EditorGUI.indentLevel = originalIndentLevel; }
private void DrawConditionItem(Rect position, ConditionItem item, ref ConditionItem itemToDelete) { const float typeWidth = 96; const float equalityWidth = 64; const float questStateWidth = 96; const float deleteButtonWidth = 22; int originalIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; var x = position.x; var y = position.y; var rect = new Rect(x, y, 96, EditorGUIUtility.singleLineHeight); x += rect.width + 2; ConditionWizardResourceType newConditionType = (ConditionWizardResourceType)EditorGUI.EnumPopup(rect, GUIContent.none, item.conditionType); if (newConditionType != item.conditionType) { item.conditionType = newConditionType; item.conditionsQuestEntryNames = new string[0]; } if (item.conditionType == ConditionWizardResourceType.Quest) { // Quest: var questNameWidth = position.width - (typeWidth + equalityWidth + questStateWidth + deleteButtonWidth + 8); rect = new Rect(x, y, questNameWidth, EditorGUIUtility.singleLineHeight); x += rect.width + 2; item.questNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, questNames); rect = new Rect(x, y, equalityWidth, EditorGUIUtility.singleLineHeight); item.equalityType = (EqualityType)EditorGUI.EnumPopup(rect, item.equalityType); x += rect.width + 2; rect = new Rect(x, y, questStateWidth, EditorGUIUtility.singleLineHeight); item.questState = QuestStateDrawer.RectQuestStatePopup(rect, item.questState); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.QuestEntry) { // Quest Entry: var freeWidth = position.width - (typeWidth + equalityWidth + questStateWidth + deleteButtonWidth + 10); rect = new Rect(x, y, freeWidth / 2, EditorGUIUtility.singleLineHeight); int newQuestNamesIndex = EditorGUI.Popup(rect, item.questNamesIndex, complexQuestNames); if (newQuestNamesIndex != item.questNamesIndex) { item.questNamesIndex = newQuestNamesIndex; item.conditionsQuestEntryNames = new string[0]; } if ((item.conditionsQuestEntryNames.Length == 0) && (item.questNamesIndex < complexQuestNames.Length)) { item.conditionsQuestEntryNames = GetQuestEntryNames(complexQuestNames[item.questNamesIndex]); } x += rect.width + 2; rect = new Rect(x, y, freeWidth / 2, EditorGUIUtility.singleLineHeight); item.questEntryIndex = EditorGUI.Popup(rect, item.questEntryIndex, item.conditionsQuestEntryNames); x += rect.width + 2; rect = new Rect(x, y, equalityWidth, EditorGUIUtility.singleLineHeight); item.equalityType = (EqualityType)EditorGUI.EnumPopup(rect, item.equalityType); x += rect.width + 2; rect = new Rect(x, y, questStateWidth, EditorGUIUtility.singleLineHeight); item.questState = QuestStateDrawer.RectQuestStatePopup(rect, item.questState); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.Variable) { // Variable: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 8); rect = new Rect(x, y, freeWidth / 2, EditorGUIUtility.singleLineHeight); item.variableNamesIndex = EditorGUI.Popup(rect, item.variableNamesIndex, variableNames); x += rect.width + 2; rect = new Rect(x, y, equalityWidth + 2 + (freeWidth / 2), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardVariableType(item.variableNamesIndex)); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.Actor) { // Actor: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.actorNamesIndex = EditorGUI.Popup(rect, item.actorNamesIndex, actorNames); x += rect.width + 2; rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.actorFieldIndex = EditorGUI.Popup(rect, item.actorFieldIndex, actorFieldNames); x += rect.width + 2; rect = new Rect(x, y, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardActorFieldType(item.actorFieldIndex)); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.Item) { // Item: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.itemNamesIndex = EditorGUI.Popup(rect, item.itemNamesIndex, itemNames); x += rect.width + 2; rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.itemFieldIndex = EditorGUI.Popup(rect, item.itemFieldIndex, itemFieldNames); x += rect.width + 2; rect = new Rect(x, y, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardItemFieldType(item.itemFieldIndex)); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.Location) { // Location: var freeWidth = position.width - (typeWidth + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.locationNamesIndex = EditorGUI.Popup(rect, item.locationNamesIndex, locationNames); x += rect.width + 2; rect = new Rect(x, y, freeWidth / 3, EditorGUIUtility.singleLineHeight); item.locationFieldIndex = EditorGUI.Popup(rect, item.locationFieldIndex, locationFieldNames); x += rect.width + 2; rect = new Rect(x, y, equalityWidth + 2 + (freeWidth / 3), EditorGUIUtility.singleLineHeight); DrawRightHand(rect, item, GetWizardLocationFieldType(item.locationFieldIndex)); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.SimStatus) { // SimStatus: var freeWidth = position.width - (88 + 56 + equalityWidth + deleteButtonWidth + 10); rect = new Rect(x, y, 14, EditorGUIUtility.singleLineHeight); item.simStatusThisID = EditorGUI.Toggle(rect, GUIContent.none, item.simStatusThisID); rect = new Rect(x + 14, y, 38, EditorGUIUtility.singleLineHeight); if (item.simStatusThisID) { EditorGUI.LabelField(rect, "thisID"); } else { item.simStatusID = EditorGUI.IntField(rect, item.simStatusID); } x += rect.width + 14; rect = new Rect(x, y, 56, EditorGUIUtility.singleLineHeight); item.equalityType = (EqualityType)EditorGUI.EnumPopup(rect, item.equalityType); x += rect.width + 2; rect = new Rect(x, y, freeWidth, EditorGUIUtility.singleLineHeight); item.simStatusType = (SimStatusType)EditorGUI.EnumPopup(rect, item.simStatusType); x += rect.width + 2; } else if (item.conditionType == ConditionWizardResourceType.ManualEnter) { // Custom: rect = new Rect(x, y, position.width - (88 + deleteButtonWidth + 20), EditorGUIUtility.singleLineHeight); item.stringValue = EditorGUI.TextField(rect, item.stringValue); } // Delete button: rect = new Rect(position.x + position.width - deleteButtonWidth, y, deleteButtonWidth, EditorGUIUtility.singleLineHeight); if (GUI.Button(rect, new GUIContent("-", "Delete this condition."), EditorStyles.miniButton)) { itemToDelete = item; } EditorGUI.indentLevel = originalIndentLevel; }