Beispiel #1
0
        /// <summary>
        /// 文字列の定数の一覧を返す関数の中身のコードを生成して返します
        /// </summary>
        private static string GetGetValuesContents(ConstStringCodeGeneratorOptions options)
        {
            var builder = new StringBuilder();

            foreach (var element in options.Elements)
            {
                var name = element.Name;

                builder.Append("\t\t\t").AppendFormat(@"yield return {0};", name).AppendLine();
            }

            return(builder.ToString().TrimEnd());
        }
        /// <summary>
        /// コードを生成します
        /// </summary>
        public static void Create(string codeTemplate, string outputAssetPath)
        {
            var labels = AddressableAssetSettingsDefaultObject.Settings.GetLabels();

            var values = labels
                         .Where(x => !string.IsNullOrWhiteSpace(x))
                         .Select
                         (
                x => new ConstStringCodeGeneratorOptions.Element
            {
                Name    = x.ToUpper(),
                Comment = x,
                Value   = x,
            }
                         )
                         .ToArray()
            ;

            var options = new ConstStringCodeGeneratorOptions
            {
                Template = codeTemplate,
                Elements = values,
            };

            var code = ConstStringCodeGenerator
                       .Generate(options)
                       .Replace("\t", "    ")
                       .Replace("\r\n", "#NEW_LINE#")
                       .Replace("\r", "#NEW_LINE#")
                       .Replace("\n", "#NEW_LINE#")
                       .Replace("#NEW_LINE#", "\r\n")
            ;

            ConstStringCodeGenerator.Write(outputAssetPath, code);
            AssetDatabase.Refresh();

            var filename = Path.GetFileName(outputAssetPath);
            var asset    = AssetDatabase.LoadAssetAtPath <TextAsset>(outputAssetPath);

            EditorUtility.DisplayDialog
            (
                AddressablesLabelConstCreatorSettings.PACKAGE_NAME,
                $"{filename} の作成が完了しました。",
                "OK"
            );

            EditorGUIUtility.PingObject(asset);
        }
Beispiel #3
0
        /// <summary>
        /// 文字列の定数のコードを表現する文字列を生成して返します
        /// </summary>
        public static string Generate(ConstStringCodeGeneratorOptions options)
        {
            var template          = options.Template;
            var namespaceName     = options.NamespaceName;
            var className         = options.ClassName;
            var classComment      = options.ClassComment;
            var length            = options.Elements.Length;
            var values            = GetValuesText(options);
            var getValuesContents = GetGetValuesContents(options);
            var output            = template;

            output = output.Replace(TAG_NAMESPACE_NAME, namespaceName);
            output = output.Replace(TAG_CLASS_NAME, className);
            output = output.Replace(TAG_CLASS_COMMENT, classComment);
            output = output.Replace(TAG_VALUES, values);
            output = output.Replace(TAG_LENGTH, length.ToString());
            output = output.Replace(TAG_GET_VALUES_CONTENTS, getValuesContents);

            return(output);
        }
Beispiel #4
0
        /// <summary>
        /// 文字列の定数の要素を定義するコードを生成して返します
        /// </summary>
        private static string GetValuesText(ConstStringCodeGeneratorOptions options)
        {
            var builder = new StringBuilder();

            foreach (var element in options.Elements)
            {
                var comment = element.Comment;
                var name    = element.Name;
                var value   = element.Value;

                // コメントが複数行の場合も考慮
                builder.Append("\t\t").AppendLine("///<summary>");
                foreach (var n in comment.Split('\n'))
                {
                    builder.Append("\t\t").AppendFormat("///<para>{0}</para>", n).AppendLine();
                }

                builder.Append("\t\t").AppendLine("///</summary>");
                builder.Append("\t\t").AppendFormat(@"public const string {0} = ""{1}"";", name, value).AppendLine();
            }

            return(builder.ToString().TrimEnd());
        }
Beispiel #5
0
        //================================================================================
        // 関数(static)
        //================================================================================
        /// <summary>
        /// 指定されたパスに文字列の定数のコードを書き込みます
        /// </summary>
        public static void Write(string path, ConstStringCodeGeneratorOptions options)
        {
            var code = Generate(options);

            Write(path, code);
        }