提交模块化内容
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
# 📘 MarkdownDisplayToolkit Md转换模块
|
||||
|
||||
**核心功能**:
|
||||
|
||||
- 🌐 支持从网络下载 Markdown 文本数据
|
||||
- 🧱 自动按标题分割 Markdown 文本
|
||||
- 🔄 将 Markdown 转换为 FairyGUI 支持的 UBB 富文本格式
|
||||
- 🎨 支持标准富文本格式转换
|
||||
- 🪄 直接在指定 FairyGUI 节点下创建并展示富文本内容
|
||||
|
||||
------
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1️⃣ 引用说明
|
||||
|
||||
本模块依赖通用模块中的单例基类,使用前需引入通用模块。
|
||||
|
||||
### 2️⃣ 基础使用流程
|
||||
|
||||
```c#
|
||||
// 1. 加载 Markdown 内容(尽可能早的拉取)
|
||||
MarkdownKit.Instance.LoadText("privacy", "https://www.moggyfuzz.com/privacy.md");
|
||||
MarkdownKit.Instance.LoadText("user", "https://www.moggyfuzz.com/user.md");
|
||||
|
||||
|
||||
// 2. 在 FairyGUI 上展示内容
|
||||
var color = new Color(159 / 255f, 120 / 255f, 102 / 255f, 1f);
|
||||
MarkdownKit.Instance.ShowAsRichText(oneFGUIComponent, BisTerm ? "user" : "privacy", color, (success, state) => {
|
||||
if (success) {
|
||||
Debug.Log("✅ 内容加载成功!当前状态:" + state);
|
||||
}
|
||||
else {
|
||||
Debug.LogError("❌ 内容加载失败!当前状态:" + state);
|
||||
}
|
||||
}, 44);
|
||||
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
## 🛠️ 详细功能说明
|
||||
|
||||
### 📥 加载功能
|
||||
|
||||
- 使用 `LoadText(string key, string url, int textSize = 40)` 进行加载
|
||||
- 自动下载,状态可查询(见下方 API)
|
||||
|
||||
------
|
||||
|
||||
### 📤 内容展示
|
||||
|
||||
**参数说明**:
|
||||
|
||||
| 参数名 | 说明 |
|
||||
| ---------- | -------------------------------------------------- |
|
||||
| `parent` | 父节点容器(FairyGUI) |
|
||||
| `key` | 唯一键名,与 `LoadText` 保持一致 |
|
||||
| `color` | 文本颜色 |
|
||||
| `callback` | 状态回调 `(bool success, MarkdownTextState state)` |
|
||||
| `textSize` | (可选)自定义字体大小(默认 40) |
|
||||
|
||||
**回调状态说明**:
|
||||
|
||||
| 状态 | 说明 |
|
||||
| ------------- | -------------------------- |
|
||||
| `Complete` | ✅ 内容已加载并展示完成 |
|
||||
| `Downloading` | 🔄 正在下载中 |
|
||||
| `Exception` | ⚠️ 下载失败,将自动重试一次 |
|
||||
|
||||
------
|
||||
|
||||
## 📚 API 参考
|
||||
|
||||
### 📑 获取富文本内容
|
||||
|
||||
```csharp
|
||||
List<string> GetText(string key, Action<bool, List<string>> onComplete, int textSize = 40)
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
### 🧐 查询当前状态
|
||||
|
||||
```csharp
|
||||
MarkdownTextState GetState(string key)
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
### 📦 获取完整数据
|
||||
|
||||
```csharp
|
||||
MarkdownData GetData(string key)
|
||||
```
|
||||
|
||||
**返回字段说明**:
|
||||
|
||||
- 📎 URL 地址
|
||||
- 🔁 当前状态
|
||||
- 📄 原始 Markdown 文本
|
||||
- ✂️ 分割后的段落列表
|
||||
- 🎨 转换后的富文本列表
|
||||
- 🖋️ 文字大小等配置信息
|
||||
|
||||
------
|
||||
|
||||
## 💡 最佳实践
|
||||
|
||||
### ✅ 1. 容器选择
|
||||
|
||||
- 推荐使用可滚动的 FairyGUI 容器
|
||||
- 确保容器有足够的展示空间
|
||||
|
||||
------
|
||||
|
||||
### ⚠️ 2. 错误处理建议
|
||||
|
||||
```csharp
|
||||
MarkdownKit.Instance.ShowAsRichText(
|
||||
parent,
|
||||
"tutorial",
|
||||
Color.black,
|
||||
(success, state) => {
|
||||
if (!success && state == MarkdownTextState.Exception) {
|
||||
// 显示重试按钮或错误提示
|
||||
}
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
### 🧑🎨 3. 样式定制
|
||||
|
||||
```csharp
|
||||
MarkdownKit.Instance.ShowAsRichText(
|
||||
scrollPane,
|
||||
"tutorial",
|
||||
new Color(0.1f, 0.1f, 0.1f), // 深灰色文字
|
||||
null,
|
||||
36 // 更小的文字
|
||||
);
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
## 📌 注意事项
|
||||
|
||||
- ⏱ 网络错误会自动重试一次
|
||||
- 🧹 所有 FairyGUI 元素会正确释放
|
||||
- 🧠 内部管理已加载内容的内存占用
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5ac0c3ec5384654458c45a41b840d4b2
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6c3e7d7920b316840a92d866eaa9969e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23df540381cb5ee4c978714ae3117b82
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SGModule.MarkdownKit {
|
||||
public class MarkdownData {
|
||||
public int BaseSize;
|
||||
public List<string> MarkdownTextList;
|
||||
public Action<bool, List<string>> OnComplete;
|
||||
public List<string> RichTextList;
|
||||
public MarkdownTextState State;
|
||||
public string Text;
|
||||
public string Url;
|
||||
}
|
||||
|
||||
public enum MarkdownTextState {
|
||||
None,
|
||||
Downloading,
|
||||
Complete,
|
||||
Exception
|
||||
}
|
||||
|
||||
public static class MarkdownDataMgr {
|
||||
private static readonly Dictionary<string, MarkdownData> _markdownData = new();
|
||||
|
||||
/// <summary>
|
||||
/// 获取完整数据
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public static MarkdownData GetData(string key) {
|
||||
return _markdownData.GetValueOrDefault(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前状态
|
||||
/// </summary>
|
||||
/// <param name="key">自定义的键名</param>
|
||||
/// <returns></returns>
|
||||
public static MarkdownTextState GetState(string key) {
|
||||
var data = GetData(key);
|
||||
if (data != null) {
|
||||
return data.State;
|
||||
}
|
||||
|
||||
return MarkdownTextState.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前状态
|
||||
/// </summary>
|
||||
/// <param name="key">自定义的键名</param>
|
||||
/// <param name="data">数据</param>
|
||||
/// <returns></returns>
|
||||
public static bool TryAdd(string key, MarkdownData data) {
|
||||
return _markdownData.TryAdd(key, data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前状态
|
||||
/// </summary>
|
||||
/// <param name="key">自定义的键名</param>
|
||||
/// <param name="data">数据</param>
|
||||
/// <returns></returns>
|
||||
public static bool TryGetValue(string key, out MarkdownData data) {
|
||||
return _markdownData.TryGetValue(key, out data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bac5b35d952c6aa40bb88c625ad5651f
|
||||
timeCreated: 1750064740
|
||||
@@ -0,0 +1,124 @@
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SGModule.MarkdownKit {
|
||||
public static class MarkdownConvert {
|
||||
/// <summary>
|
||||
/// 将md转换为富文本标签
|
||||
/// </summary>
|
||||
/// <param name="markdown"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToRichText(string markdown) {
|
||||
// 移除每一行行尾的多余空格和制表符
|
||||
markdown = Regex.Replace(markdown, @"[ \t]+$", "");
|
||||
|
||||
// 标题替换 (支持 "#### " 等不同级别的标题)
|
||||
markdown = Regex.Replace(markdown, @"^(#{1,6})\s*(.+)$", match => {
|
||||
var level = match.Groups[1].Value.Length; // 获取标题级别
|
||||
var content = match.Groups[2].Value.Trim(); // 去除标题内容的多余空格
|
||||
|
||||
|
||||
// 标题大小规则:越小的标题级别,字体越大
|
||||
var baseSize = 40; // 默认正文字体大小
|
||||
var size = baseSize + (6 - level) * 5; // 一级标题最大,六级标题最小
|
||||
var str = $"<b><size={size}>{content}</size></b>\n";
|
||||
if (level <= 2) {
|
||||
str = $"<u>{str}</u>";
|
||||
}
|
||||
|
||||
return str; // 设置标题大小
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 粗体替换 ( **加粗** )
|
||||
markdown = Regex.Replace(markdown, @"\*\*(.+?)\*\*", "<b>$1</b>");
|
||||
|
||||
// 斜体替换 ( *斜体* )
|
||||
markdown = Regex.Replace(markdown, @"\*(.+?)\*", "<i>$1</i>");
|
||||
|
||||
// 下划线替换 ( __下划线__ )
|
||||
markdown = Regex.Replace(markdown, @"__(.+?)__", "<u>$1</u>");
|
||||
|
||||
// 删除线替换 ( ~~删除线~~ )
|
||||
markdown = Regex.Replace(markdown, @"~~(.+?)~~", "<s>$1</s>");
|
||||
|
||||
// 超链接替换 ( [文字](链接) )
|
||||
markdown = Regex.Replace(markdown, @"\[(.+?)\]\((.+?)\)", "<a href='$2'>$1</a>");
|
||||
|
||||
// 无序列表替换 ( - 或 * 开头)
|
||||
markdown = Regex.Replace(markdown, @"^\s*[-*]\s+(.+)$", match => {
|
||||
var content = match.Groups[1].Value.Trim();
|
||||
return $"• {content}"; // 使用 • 作为无序列表的符号
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 有序列表替换 ( 1. 或 2. 开头)
|
||||
markdown = Regex.Replace(markdown, @"^\s*\d+\.\s+(.+)$", match => {
|
||||
var content = match.Groups[1].Value.Trim();
|
||||
return $"<b>{content}</b>"; // 有序列表使用加粗标记
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 移除多余的连续空行 (将多个空行压缩为一个空行)
|
||||
markdown = Regex.Replace(markdown, @"(\r?\n){2,}", "\n");
|
||||
|
||||
return markdown;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将md文本转换为UBB语法的富文本
|
||||
/// </summary>
|
||||
/// <param name="markdown"></param>
|
||||
/// <param name="textBaseSize"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToUBB(string markdown, int textBaseSize) {
|
||||
// 移除每一行行尾的多余空格和制表符
|
||||
markdown = Regex.Replace(markdown, @"[ \t]+$", "");
|
||||
|
||||
// 标题替换 (支持 "#### " 等不同级别的标题)
|
||||
markdown = Regex.Replace(markdown, @"^(#{1,6})\s*(.+)$", match => {
|
||||
var level = match.Groups[1].Value.Length; // 获取标题级别
|
||||
var content = match.Groups[2].Value.Trim(); // 去除标题内容的多余空格
|
||||
|
||||
// 标题大小规则:越小的标题级别,字体越大
|
||||
var baseSize = textBaseSize; // 默认正文字体大小
|
||||
var size = baseSize + (6 - level) * 3; // 一级标题最大,六级标题最小
|
||||
|
||||
var str = $"[b][size={size}]{content}[/size][/b]\n";
|
||||
if (level <= 2) {
|
||||
str = $"[u]{str}[/u]";
|
||||
}
|
||||
|
||||
return str; // 设置标题大小
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 粗体替换 ( **加粗** -> [b]加粗[/b])
|
||||
markdown = Regex.Replace(markdown, @"\*\*(.+?)\*\*", "[b]$1[/b]");
|
||||
|
||||
// 斜体替换 ( *斜体* -> [i]斜体[/i])
|
||||
markdown = Regex.Replace(markdown, @"\*(.+?)\*", "[i]$1[/i]");
|
||||
|
||||
// 下划线替换 ( __下划线__ -> [u]下划线[/u])
|
||||
markdown = Regex.Replace(markdown, @"__(.+?)__", "[u]$1[/u]");
|
||||
|
||||
// 删除线替换 ( ~~删除线~~ -> [s]删除线[/s])
|
||||
markdown = Regex.Replace(markdown, @"~~(.+?)~~", "[s]$1[/s]");
|
||||
|
||||
// 超链接替换 ( [文字](链接) -> [url=链接]文字[/url])
|
||||
markdown = Regex.Replace(markdown, @"\[(.+?)\]\((.+?)\)", "[url=$2]$1[/url]");
|
||||
|
||||
// 无序列表替换 ( - 或 * 开头 -> • 项目内容)
|
||||
markdown = Regex.Replace(markdown, @"^\s*[-*]\s+(.+)$", match => {
|
||||
var content = match.Groups[1].Value.Trim();
|
||||
return $"• {content}"; // 使用 • 作为无序列表的符号
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 有序列表替换 ( 1. 或 2. 开头 -> 加粗项目内容)
|
||||
markdown = Regex.Replace(markdown, @"^\s*\d+\.\s+(.+)$", match => {
|
||||
var content = match.Groups[1].Value.Trim();
|
||||
return $"[b]{content}[/b]"; // 有序列表使用加粗标记
|
||||
}, RegexOptions.Multiline);
|
||||
|
||||
// 移除多余的连续空行 (将多个空行压缩为一个空行)
|
||||
markdown = Regex.Replace(markdown, @"(\r?\n){2,}", "\n");
|
||||
|
||||
return markdown;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47ec1e22bc98a8e4a9404d009c4e2b90
|
||||
timeCreated: 1750065981
|
||||
@@ -0,0 +1,227 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using FairyGUI;
|
||||
using SGModule.Common.Base;
|
||||
using SGModule.Common.Helper;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace SGModule.MarkdownKit {
|
||||
public class MarkdownKit : SingletonMonoBehaviour<MarkdownKit> {
|
||||
/// <summary>
|
||||
/// 加载文本,直接去网络下载
|
||||
/// </summary>
|
||||
/// <param name="key">自己为Md相关数据起的名字,后续都是通过这个来操作</param>
|
||||
/// <param name="textSize">文字默认大小</param>
|
||||
/// <param name="url">md下载地址</param>
|
||||
public void LoadText(string key, string url, int textSize = 40) {
|
||||
var data = new MarkdownData { Url = url, BaseSize = textSize };
|
||||
if (!MarkdownDataMgr.TryAdd(key, data)) {
|
||||
Log.MarkdownKit.Warning($"{key} 已加载,请勿重复加载!!!");
|
||||
return;
|
||||
}
|
||||
|
||||
StartCoroutine(Download(data));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取指定的文本数据
|
||||
/// </summary>
|
||||
/// <param name="key">自定义键名</param>
|
||||
/// <param name="onComplete">获取回调</param>
|
||||
/// <param name="textSize">文本大小</param>
|
||||
public void GetText(string key, Action<bool, List<string>> onComplete, int textSize = 40) {
|
||||
if (!MarkdownDataMgr.TryGetValue(key, out var data)) {
|
||||
Log.MarkdownKit.Warning($"{key} 未初始化,请加载后重试");
|
||||
return;
|
||||
}
|
||||
|
||||
SetMarkdownTextSize(data, textSize);
|
||||
|
||||
switch (data.State) {
|
||||
case MarkdownTextState.Complete:
|
||||
onComplete?.Invoke(true, data.RichTextList);
|
||||
return;
|
||||
case MarkdownTextState.Downloading:
|
||||
data.OnComplete += onComplete;
|
||||
return;
|
||||
case MarkdownTextState.Exception:
|
||||
data.OnComplete += onComplete;
|
||||
StartCoroutine(Download(data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下载md
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
private IEnumerator Download(MarkdownData data) {
|
||||
data.State = MarkdownTextState.Downloading;
|
||||
|
||||
var unityWebRequest = new UnityWebRequest(data.Url) {
|
||||
downloadHandler = new DownloadHandlerBuffer()
|
||||
};
|
||||
|
||||
unityWebRequest.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
|
||||
|
||||
yield return unityWebRequest.SendWebRequest(); //发送请求
|
||||
|
||||
if (unityWebRequest.result is not UnityWebRequest.Result.Success) {
|
||||
data.State = MarkdownTextState.Exception;
|
||||
data.OnComplete?.Invoke(false, null);
|
||||
Log.MarkdownKit.Error($"失败 {unityWebRequest.result} {unityWebRequest.error}");
|
||||
}
|
||||
else {
|
||||
var receiveContent = unityWebRequest.downloadHandler.text;
|
||||
|
||||
data.Text = receiveContent;
|
||||
data.MarkdownTextList = SplitMarkdownByHeaders(receiveContent);
|
||||
UpdateMarkdownTextList(data);
|
||||
data.State = MarkdownTextState.Complete;
|
||||
|
||||
data.OnComplete?.Invoke(true, data.RichTextList);
|
||||
}
|
||||
|
||||
data.OnComplete = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据md标题切割md文本
|
||||
/// </summary>
|
||||
/// <param name="markdownText"></param>
|
||||
/// <returns></returns>
|
||||
private List<string> SplitMarkdownByHeaders(string markdownText) {
|
||||
var sections = new List<string>();
|
||||
var currentSection = new StringBuilder();
|
||||
|
||||
using (var reader = new StringReader(markdownText)) {
|
||||
string line;
|
||||
while ((line = reader.ReadLine()) != null) {
|
||||
if (line.StartsWith("#")) // 如果是标题行
|
||||
{
|
||||
if (currentSection.Length > 0) {
|
||||
sections.Add(currentSection.ToString());
|
||||
currentSection.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
currentSection.AppendLine(line);
|
||||
}
|
||||
|
||||
if (currentSection.Length > 0) // 添加最后一段
|
||||
{
|
||||
sections.Add(currentSection.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
return sections;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置富文本默认文字大小
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="textSize"></param>
|
||||
private void SetMarkdownTextSize(MarkdownData data, int textSize) {
|
||||
if (textSize > 0 && data.BaseSize != textSize) {
|
||||
data.BaseSize = textSize;
|
||||
|
||||
UpdateMarkdownTextList(data);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新富文本数据
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
private void UpdateMarkdownTextList(MarkdownData data) {
|
||||
if (data.MarkdownTextList == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var richTextList = new List<string>();
|
||||
foreach (var section in data.MarkdownTextList) {
|
||||
var richText = MarkdownConvert.ToUBB(section, data.BaseSize);
|
||||
|
||||
richTextList.Add(richText);
|
||||
}
|
||||
|
||||
data.RichTextList = richTextList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加富文本到指定节点下
|
||||
/// </summary>
|
||||
/// <param name="parent">指定节点</param>
|
||||
/// <param name="key">数据键名</param>
|
||||
/// <param name="color">颜色</param>
|
||||
/// <param name="callback">回调,参数分是代表了结果与当前状态</param>
|
||||
/// <param name="textSize">字体大小,如果与当前不一致将更新富文本数据</param>
|
||||
public void ShowAsRichText(GComponent parent, string key, Color color, Action<bool, MarkdownTextState> callback, int textSize = -1) {
|
||||
//处理对象为空或者相关对象已经被销毁的情况,如界面在等待过程中已经被关闭
|
||||
if (parent == null || parent.isDisposed) {
|
||||
Log.MarkdownKit.Warning("parent 是无效的");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!MarkdownDataMgr.TryGetValue(key, out var data)) {
|
||||
Log.MarkdownKit.Error($"未加载 {key}的数据");
|
||||
callback?.Invoke(false, MarkdownTextState.None);
|
||||
return;
|
||||
}
|
||||
|
||||
Action<List<string>> show = list => {
|
||||
//处理对象为空或者相关对象已经被销毁的情况,如界面在等待过程中已经被关闭
|
||||
if (parent == null || parent.isDisposed) {
|
||||
Log.MarkdownKit.Warning("parent 是无效的");
|
||||
return;
|
||||
}
|
||||
|
||||
SetMarkdownTextSize(data, textSize);
|
||||
foreach (var richText in list) {
|
||||
// 创建 GRichTextField
|
||||
var aRichTextField = new GRichTextField();
|
||||
|
||||
aRichTextField.UBBEnabled = true;
|
||||
aRichTextField.SetSize(parent.size.x, 0);
|
||||
aRichTextField.color = color;
|
||||
aRichTextField.textFormat.size = data.BaseSize;
|
||||
aRichTextField.autoSize = AutoSizeType.Height;
|
||||
aRichTextField.AddRelation(GRoot.inst, RelationType.Width);
|
||||
aRichTextField.text = richText;
|
||||
parent.AddChild(aRichTextField);
|
||||
}
|
||||
};
|
||||
|
||||
Action<bool, List<string>> downloadingCallback = (result, list) => {
|
||||
callback?.Invoke(result, data.State);
|
||||
if (result) {
|
||||
show.Invoke(list);
|
||||
}
|
||||
};
|
||||
|
||||
switch (data.State) {
|
||||
case MarkdownTextState.Downloading:
|
||||
callback?.Invoke(true, data.State);
|
||||
data.OnComplete += downloadingCallback;
|
||||
break;
|
||||
case MarkdownTextState.Complete:
|
||||
callback?.Invoke(true, data.State);
|
||||
show.Invoke(data.RichTextList);
|
||||
break;
|
||||
case MarkdownTextState.Exception:
|
||||
callback?.Invoke(true, data.State);
|
||||
data.OnComplete += downloadingCallback;
|
||||
StartCoroutine(Download(data));
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b1caa4712eda60b45bff71a47741756c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user