public static void RemoveChainWords(ICollection <string> words, object[] objects) { if (objects == null) { return; } var chains = new List <IProcessChain>(); foreach (var obj in objects) { var chain = TemplateUtility.ConvertProcessChianInstanceFromObject(obj); if (chain != null) { chains.Add(chain); } } foreach (var chain in chains) { foreach (var word in chain.GetReplaceWords()) { words.Remove(word); // ToArray = 遅延実行だとエラーになるため var regex = new Regex(string.Format(ProcessDictionary.ConvertWordPattern, word, @"\d+"), RegexOptions.IgnoreCase); foreach (var matchWord in words.Where(w => regex.IsMatch(w)).ToArray()) { words.Remove(matchWord); } } } }
public static void DrawChain(TemplateSettingStatus status) { EditorGUILayout.BeginVertical(EditorGUIHelper.GetScopeStyle()); { status.ChainReorderableList.DoLayoutList(); var selectIndex = status.ChainReorderableList.index; if (selectIndex >= 0) { var select = status.ChainReorderableList.serializedProperty.GetArrayElementAtIndex(selectIndex); var chain = TemplateUtility.ConvertProcessChianInstanceFromObject(select.objectReferenceValue); if (chain != null) { var builder = new StringBuilder(); builder.AppendLine("[Used Variables]"); foreach (var word in chain.GetReplaceWords()) { builder.AppendLine(ReplaceProcessor.GetReplaceText(word)); } // TODO : Cache var style = new GUIStyle(GUI.skin.label) { wordWrap = true, }; var label = builder.ToString(); var content = new GUIContent(label); var rect = GUILayoutUtility.GetRect(content, style); EditorGUI.SelectableLabel(rect, label, style); EditorGUILayout.LabelField("[Description]\n" + chain.GetDescription(), style); } } else { EditorGUILayout.HelpBox("When you select item, description will be displayed", MessageType.Info, true); } } EditorGUILayout.EndVertical(); }