diff --git a/Assets/Art/UIPrefab/UIModuleSelect.prefab b/Assets/Art/UIPrefab/UIModuleSelect.prefab index ee521fbc..330a3a09 100644 --- a/Assets/Art/UIPrefab/UIModuleSelect.prefab +++ b/Assets/Art/UIPrefab/UIModuleSelect.prefab @@ -1,5 +1,80 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &362378255116206407 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4007744310226606941} + - component: {fileID: 7455571532591409758} + - component: {fileID: 8685952999310058692} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4007744310226606941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362378255116206407} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1041589483741693935} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7455571532591409758 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362378255116206407} + m_CullTransparentMesh: 1 +--- !u!114 &8685952999310058692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362378255116206407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &369348797227731928 GameObject: m_ObjectHideFlags: 0 @@ -379,6 +454,7 @@ GameObject: - component: {fileID: 5800286210300119797} - component: {fileID: 7870331819941572208} - component: {fileID: 5640205172889648423} + - component: {fileID: 2499191464483522175} m_Layer: 5 m_Name: Label m_TagString: Untagged @@ -402,9 +478,9 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -30, y: -30} - m_Pivot: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 14.999985} + m_SizeDelta: {x: -30, y: -219} + m_Pivot: {x: 0.5, y: 0.000000029802322} --- !u!222 &7870331819941572208 CanvasRenderer: m_ObjectHideFlags: 0 @@ -467,8 +543,8 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 2 - m_VerticalAlignment: 512 + m_HorizontalAlignment: 32 + m_VerticalAlignment: 1024 m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 @@ -502,6 +578,20 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &2499191464483522175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2191389905807484100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 --- !u!1 &2417640497830947151 GameObject: m_ObjectHideFlags: 0 @@ -1265,6 +1355,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: + - {fileID: 4007744310226606941} - {fileID: 5800286210300119797} m_Father: {fileID: 5394197843809455320} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/QFramework/Toolkits/_CoreKit/ActionKit/Scripts/Internal/Action/ConditionGroup.cs b/Assets/QFramework/Toolkits/_CoreKit/ActionKit/Scripts/Internal/Action/ConditionGroup.cs index a308e050..e10af487 100644 --- a/Assets/QFramework/Toolkits/_CoreKit/ActionKit/Scripts/Internal/Action/ConditionGroup.cs +++ b/Assets/QFramework/Toolkits/_CoreKit/ActionKit/Scripts/Internal/Action/ConditionGroup.cs @@ -43,6 +43,11 @@ namespace QFramework public ActionStatus Status { get; set; } public void OnStart() { + foreach (var item in mCondition) + { + item.OnStart(); + } + } public void OnExecute(float dt) diff --git a/Assets/QFramework/Toolkits/_CoreKit/EventKit/EventSystem/StringEventSystem.cs b/Assets/QFramework/Toolkits/_CoreKit/EventKit/EventSystem/StringEventSystem.cs index e02c0cb5..2c180ec3 100644 --- a/Assets/QFramework/Toolkits/_CoreKit/EventKit/EventSystem/StringEventSystem.cs +++ b/Assets/QFramework/Toolkits/_CoreKit/EventKit/EventSystem/StringEventSystem.cs @@ -44,6 +44,7 @@ namespace QFramework public void Send(string key) { + if (mEvents.TryGetValue(key, out var e)) { var easyEvent = e.As(); @@ -67,6 +68,10 @@ namespace QFramework } } + public bool HasRegister(string key) + { + return mEvents.ContainsKey(key); + } public void UnRegister(string key, Action onEvent) { diff --git a/Assets/Scripts/Actions/ActionHelper.cs b/Assets/Scripts/Actions/ActionHelper.cs index 2aa3890f..aa954ba9 100644 --- a/Assets/Scripts/Actions/ActionHelper.cs +++ b/Assets/Scripts/Actions/ActionHelper.cs @@ -277,6 +277,11 @@ public class ActionHelper var dictAction = (XMLTool.DictionaryAction)act; return QFramework.OperationChangeAction.Allocate(dictAction.args); } + case "ShowScore": + { + var dictAction = (XMLTool.DictionaryAction)act; + return QFramework.ShowScoreAction.Allocate(dictAction.args); + } default: Debug.LogError($"没有找到此Action的类型{act.Type}"); break; diff --git a/Assets/Scripts/Actions/ShowScoreAction.cs b/Assets/Scripts/Actions/ShowScoreAction.cs new file mode 100644 index 00000000..e3edf2f1 --- /dev/null +++ b/Assets/Scripts/Actions/ShowScoreAction.cs @@ -0,0 +1,82 @@ +using QFramework.Example; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace QFramework +{ + internal class ShowScoreAction : IAction + { + + public System.Action OnFinished { get; set; } + + + private ShowScoreAction() + { + } + + private static readonly SimpleObjectPool mPool = + new SimpleObjectPool(() => new ShowScoreAction(), null, 10); + + Dictionary datas; + public static ShowScoreAction Allocate(Dictionary datas, System.Action OnFinished = null) + { + var retNode = mPool.Allocate(); + retNode.ActionID = ActionKit.ID_GENERATOR++; + retNode.Deinited = false; + retNode.Reset(); + retNode.datas = datas; + retNode.OnFinished = OnFinished; + return retNode; + } + + + public ulong ActionID { get; set; } + public ActionStatus Status { get; set; } + + public void OnStart() + { + UIScoreData data = new UIScoreData(); + if (datas.ContainsKey("onlyCurModule")) + { + if (bool.TryParse(datas["onlyCurModule"], out data.onlyCurModule) == false) + { + data.onlyCurModule = false; + } + } + UIKit.OpenPanelAsync(canvasLevel: UILevel.PopUI, uiData: data).ToAction().StartGlobal(() => this.Finish()); + } + + public void OnExecute(float dt) + { + //this.Finish(); + //OnFinished?.Invoke(); + } + + public void OnFinish() + { + } + + public void Reset() + { + Status = ActionStatus.NotStart; + Paused = false; + } + + public bool Paused { get; set; } + + public void Deinit() + { + if (!Deinited) + { + OnFinished = null; + Deinited = true; + mPool.Recycle(this); + } + } + + public bool Deinited { get; set; } + } + + +} \ No newline at end of file diff --git a/Assets/Scripts/Actions/ShowScoreAction.cs.meta b/Assets/Scripts/Actions/ShowScoreAction.cs.meta new file mode 100644 index 00000000..c2877c41 --- /dev/null +++ b/Assets/Scripts/Actions/ShowScoreAction.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0ba81906fe012d2468c5a69a833ed765 +timeCreated: 1647655796 \ No newline at end of file diff --git a/Assets/Scripts/Actions/UIToolsAction.cs b/Assets/Scripts/Actions/UIToolsAction.cs index b230c731..ef93ccef 100644 --- a/Assets/Scripts/Actions/UIToolsAction.cs +++ b/Assets/Scripts/Actions/UIToolsAction.cs @@ -29,6 +29,7 @@ public class UIToolsAction : IAction string random; string scrollSpeed; string position; + string wrongCount; public static UIToolsAction Allocate(Dictionary datas, System.Action onDelayFinish = null) { var retNode = mPool.Allocate(); @@ -50,6 +51,7 @@ public class UIToolsAction : IAction retNode.random = datas.ContainsKey("random") ? datas["random"] : ""; retNode.scrollSpeed = datas.ContainsKey("scrollSpeed") ? datas["scrollSpeed"] : ""; retNode.position = datas.ContainsKey("position") ? datas["position"] : ""; + retNode.wrongCount = datas.ContainsKey("wrongCount") ? datas["wrongCount"] : ""; return retNode; } @@ -100,6 +102,11 @@ public class UIToolsAction : IAction data.autoHideResult = -1; } data.position = position; + if (int.TryParse(wrongCount, out data.wrongCount) == false) + { + data.wrongCount = 0; + } + UIKit.OpenPanelAsync(uiData: data, canvasLevel: UILevel.PopUI).ToAction().StartGlobal(() => this.Finish()); } diff --git a/Assets/Scripts/Conditions/StrEventCondition.cs b/Assets/Scripts/Conditions/StrEventCondition.cs index 9caff2a3..46bba916 100644 --- a/Assets/Scripts/Conditions/StrEventCondition.cs +++ b/Assets/Scripts/Conditions/StrEventCondition.cs @@ -13,7 +13,7 @@ namespace QFramework private StrEventCondition() { } string key; - + bool isFinished = false; public static StrEventCondition Allocate(string key) { var conditionAction = mSimpleObjectPool.Allocate(); @@ -21,11 +21,12 @@ namespace QFramework conditionAction.Deinited = false; conditionAction.Reset(); conditionAction.key = key; + conditionAction.isFinished = false; return conditionAction; } public bool Check() { - return false; + return isFinished; } public bool Paused { get; set; } public bool Deinited { get; set; } @@ -39,6 +40,7 @@ namespace QFramework private void OnEventFnished() { StringEventSystem.Global.UnRegister(key, OnEventFnished); + isFinished = true; this.Finish(); } diff --git a/Assets/Scripts/Controller/ScoreController.cs b/Assets/Scripts/Controller/ScoreController.cs index c7616f4f..5a31979b 100644 --- a/Assets/Scripts/Controller/ScoreController.cs +++ b/Assets/Scripts/Controller/ScoreController.cs @@ -2,7 +2,9 @@ using QFramework; using System; using System.Collections; using System.Collections.Generic; +using TMPro; using UnityEngine; +using UnityEngine.SocialPlatforms.Impl; using XMLTool; public class ScoreController : MonoSingleton @@ -59,7 +61,7 @@ public class ScoreController : MonoSingleton } - public Dictionary GetCurScore() + public Dictionary GetCurScoreData() { var data = moduleDict[Global.Instance.curModule.ModuleName]; return data.scoreDict; @@ -100,6 +102,20 @@ public class ScoreController : MonoSingleton } } + /// + /// 获取当前所得总分 + /// + public float GetCurScore() + { + float score = 0; + var data = moduleDict[Global.Instance.curModule.ModuleName]; + foreach (var item in data.scoreDict) + { + score += item.Value.value; + } + return score; + } + private void OnQuit(OnModuleQuit quit) diff --git a/Assets/Scripts/Editor/LowercaseFileRenamer.cs b/Assets/Scripts/Editor/LowercaseFileRenamer.cs new file mode 100644 index 00000000..2333e5a6 --- /dev/null +++ b/Assets/Scripts/Editor/LowercaseFileRenamer.cs @@ -0,0 +1,145 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using System.IO; +using System; + +public class WindowsLowercaseRenamer : EditorWindow +{ + [MenuItem("Assets/Windows安全重命名")] + private static void SafeRenameAll() + { + string dataPath = Global.dataPath; + + // 新增:处理根目录名称 + ProcessRootDirectory(dataPath); + + // 处理子目录和文件 + ProcessDirectoriesRecursive(dataPath); + ProcessFilesRecursive(dataPath); + + AssetDatabase.Refresh(); + Debug.Log("安全重命名完成!"); + } + // 新增方法:处理根目录 + private static void ProcessRootDirectory(string originalPath) + { + try + { + DirectoryInfo rootInfo = new DirectoryInfo(originalPath); + string targetRootName = rootInfo.Name.ToLowerInvariant(); + + // 如果根目录名称不符合规范 + if (rootInfo.Name != targetRootName) + { + string parentPath = rootInfo.Parent.FullName; + string newRootPath = Path.Combine(parentPath, targetRootName); + + // 特殊处理:根目录重命名需要额外权限 + if (Directory.Exists(newRootPath)) + { + string tempPath = Path.Combine(parentPath, Guid.NewGuid().ToString()); + Directory.Move(originalPath, tempPath); + Directory.Move(tempPath, newRootPath); + } + else + { + Directory.Move(originalPath, newRootPath); + } + + Debug.Log($"根目录重命名成功: {originalPath} → {newRootPath}"); + + // 更新全局路径(如果需要) + Global.dataPath = newRootPath; // 根据实际Global类的实现可能需要调整 + } + } + catch (Exception ex) + { + Debug.LogError($"根目录重命名失败: {ex.Message}"); + } + } + private static void ProcessDirectoriesRecursive(string path) + { + foreach (var dirPath in Directory.GetDirectories(path)) + { + // 递归处理子目录 + ProcessDirectoriesRecursive(dirPath); + + DirectoryInfo dirInfo = new DirectoryInfo(dirPath); + string targetName = dirInfo.Name.ToLowerInvariant(); + + // 仅当实际目录名不符合规范时才重命名 + if (dirInfo.Name != targetName) + { + string parentPath = dirInfo.Parent.FullName; + string newPath = Path.Combine(parentPath, targetName); + + try + { + // 特殊处理:Windows需要先重命名到临时名称 + //if (Directory.Exists(newPath)) + //{ + // string tempPath = Path.Combine(parentPath, Guid.NewGuid().ToString()); + // Directory.Move(dirPath, tempPath); + // Directory.Move(tempPath, newPath); + //} + //else + //{ + Directory.Move(dirPath, newPath); + //} + + Debug.Log($"目录重命名成功: {dirPath} → {newPath}"); + } + catch (Exception ex) + { + Debug.LogError($"目录重命名失败: {dirPath}\n{ex.Message}"); + } + } + } + } + + private static void ProcessFilesRecursive(string path) + { + foreach (var filePath in Directory.GetFiles(path)) + { + FileInfo fileInfo = new FileInfo(filePath); + string targetName = Path.GetFileNameWithoutExtension(fileInfo.Name).ToLowerInvariant(); + string targetExt = fileInfo.Extension.ToLowerInvariant(); + string newFileName = $"{targetName}{targetExt}"; + + // 比较实际文件名 + if (fileInfo.Name != newFileName) + { + string newPath = Path.Combine(fileInfo.DirectoryName, newFileName); + + try + { + // Windows特殊处理:如果目标存在但大小写不同 + if (File.Exists(newPath)) + { + string tempPath = Path.Combine(fileInfo.DirectoryName, Guid.NewGuid().ToString() + fileInfo.Extension); + File.Move(filePath, tempPath); + File.Move(tempPath, newPath); + } + else + { + File.Move(filePath, newPath); + } + + Debug.Log($"文件重命名成功: {filePath} → {newPath}"); + } + catch (Exception ex) + { + Debug.LogError($"文件重命名失败: {filePath}\n{ex.Message}"); + } + } + } + + // 递归子目录 + foreach (var dirPath in Directory.GetDirectories(path)) + { + ProcessFilesRecursive(dirPath); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Scripts/Editor/LowercaseFileRenamer.cs.meta b/Assets/Scripts/Editor/LowercaseFileRenamer.cs.meta new file mode 100644 index 00000000..852097e7 --- /dev/null +++ b/Assets/Scripts/Editor/LowercaseFileRenamer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fc1a350612ff074eb9880438ed8d526 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/VirtualFPostProcess.cs b/Assets/Scripts/Editor/VirtualFPostProcess.cs index a89bdefc..41b0b061 100644 --- a/Assets/Scripts/Editor/VirtualFPostProcess.cs +++ b/Assets/Scripts/Editor/VirtualFPostProcess.cs @@ -7,60 +7,72 @@ using UnityEngine; public class VirtualFPostProcess : IPostprocessBuildWithReport { - // 定义回调优先级(越低越先执行) public int callbackOrder => 0; - // 在打包完成后执行 public void OnPostprocessBuild(BuildReport report) { - // 获取项目根目录路径 string projectPath = Application.dataPath; - - // 获取Data文件夹的路径 string dataFolderPath = Path.Combine(projectPath, "../Data"); + string buildOutputPath = GetValidBuildPath(report); - // 获取打包后的输出目录 - string buildOutputPath = report.summary.outputPath; - if (buildOutputPath.Contains(".exe")) - { - var paths = buildOutputPath.Split('/'); - buildOutputPath = buildOutputPath.Replace(paths[paths.Length - 1], ""); - } - // 检查Data文件夹是否存在 if (Directory.Exists(dataFolderPath)) { - // 将Data文件夹复制到打包后的目标目录 - string targetDataPath = Path.Combine(buildOutputPath, "Data"); - CopyDirectory(dataFolderPath, targetDataPath); - Debug.Log($"Data folder copied to build output directory: {targetDataPath}"); + // 目标目录强制小写 + string targetDataPath = Path.Combine(buildOutputPath, "data"); + CopyDirectoryWithLowerCaseNames(dataFolderPath, targetDataPath); + Debug.Log($"数据目录已复制到: {targetDataPath}"); } else { - Debug.LogWarning("Data folder not found at: " + dataFolderPath); + Debug.LogWarning("未找到数据目录: " + dataFolderPath); } } - // 递归复制文件夹的辅助方法,覆盖已有文件和文件夹 - private void CopyDirectory(string sourceDir, string destinationDir) + private string GetValidBuildPath(BuildReport report) { - // 确保目标目录存在 - if (!Directory.Exists(destinationDir)) + string path = report.summary.outputPath; + if (path.Contains(".exe")) { - Directory.CreateDirectory(destinationDir); + return Path.GetDirectoryName(path); + } + return path; + } + + private void CopyDirectoryWithLowerCaseNames(string sourceDir, string targetDir) + { + // 创建小写目标目录 + var lowerTargetDir = ConvertToLowerPath(targetDir); + Directory.CreateDirectory(lowerTargetDir); + + // 复制文件(带小写转换) + foreach (var file in Directory.GetFiles(sourceDir)) + { + string fileName = Path.GetFileName(file); + string lowerName = ConvertToLowerPath(fileName); + File.Copy(file, Path.Combine(lowerTargetDir, lowerName), true); } - // 遍历源目录中的文件 - foreach (string file in Directory.GetFiles(sourceDir)) + // 递归处理子目录(带小写转换) + foreach (var dir in Directory.GetDirectories(sourceDir)) { - string destFile = Path.Combine(destinationDir, Path.GetFileName(file)); - File.Copy(file, destFile, true); // 覆盖已有文件 - } - - // 遍历源目录中的子文件夹 - foreach (string subDir in Directory.GetDirectories(sourceDir)) - { - string destSubDir = Path.Combine(destinationDir, Path.GetFileName(subDir)); - CopyDirectory(subDir, destSubDir); // 递归复制子文件夹 + string dirName = Path.GetFileName(dir); + string lowerDirName = ConvertToLowerPath(dirName); + CopyDirectoryWithLowerCaseNames(dir, Path.Combine(lowerTargetDir, lowerDirName)); } } -} + + // 中英文混合路径转小写 + private string ConvertToLowerPath(string input) + { + char[] chars = input.ToCharArray(); + for (int i = 0; i < chars.Length; i++) + { + // 只处理ASCII字母字符(中文等Unicode字符保持不变) + if (chars[i] >= 'A' && chars[i] <= 'Z') + { + chars[i] = (char)(chars[i] | 0x20); // 快速转小写 + } + } + return new string(chars); + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/UIBackPack.cs b/Assets/Scripts/UI/UIBackPack.cs index cfbb880b..00b392b4 100644 --- a/Assets/Scripts/UI/UIBackPack.cs +++ b/Assets/Scripts/UI/UIBackPack.cs @@ -27,6 +27,7 @@ namespace QFramework.Example protected override void OnOpen(IUIData uiData = null) { + mData = uiData as UIBackPackData ?? new UIBackPackData(); Content.RemoveAllChildren(); foreach (var device in mData.devices) diff --git a/Assets/Scripts/UI/UIInput.cs b/Assets/Scripts/UI/UIInput.cs index c3c00e62..26e19459 100644 --- a/Assets/Scripts/UI/UIInput.cs +++ b/Assets/Scripts/UI/UIInput.cs @@ -3,6 +3,7 @@ using UnityEngine.UI; using QFramework; using System.Collections.Generic; using TMPro; +using System.Linq; namespace QFramework.Example { @@ -123,7 +124,8 @@ namespace QFramework.Example { foreach (var item in mData.inputs) { - if (VarController.Instance.Get(item.var).ToString() != item.answer) + var list = item.answer.Split('|').ToList(); + if (list.Contains(VarController.Instance.Get(item.var).ToString())==false) { return false; } diff --git a/Assets/Scripts/UI/UIModuleSelect.cs b/Assets/Scripts/UI/UIModuleSelect.cs index 39db96ce..db52b44c 100644 --- a/Assets/Scripts/UI/UIModuleSelect.cs +++ b/Assets/Scripts/UI/UIModuleSelect.cs @@ -12,7 +12,7 @@ namespace QFramework.Example } public partial class UIModuleSelect : UIPanel { - + ResLoader loader; protected override void OnInit(IUIData uiData = null) { mData = uiData as UIModuleSelectData ?? new UIModuleSelectData(); @@ -29,6 +29,7 @@ namespace QFramework.Example { Application.Quit(); }); + loader = ResLoader.Allocate(); } protected override void OnOpen(IUIData uiData = null) @@ -57,6 +58,23 @@ namespace QFramework.Example SceneManager.sceneLoaded += OnLoadFinished; }); }); + if (string.IsNullOrEmpty(item.Icon)==false) + { + var icon = obj.transform.Find("Icon").GetComponent(); + var localImageUrl = Global.imagePath + item.Icon; + loader.Add2Load(localImageUrl.ToNetImageResName(), + (bool success, IRes res) => + { + if (success) + { + icon.sprite = Utility.GetSprite(res.Asset as Texture2D); + } + }); + icon.gameObject.SetActive(true); + + } + + lastIndex = index; } } @@ -71,6 +89,14 @@ namespace QFramework.Example }); } + else + { + UIKit.OpenPanelAsync(canvasLevel: UILevel.PopUI).ToAction().StartGlobal(); + loader.LoadAsync(() => + { + TypeEventSystem.Global.Send(new OnLoadingHide()); + }); + } diff --git a/Assets/Scripts/UI/UIOperationList.cs b/Assets/Scripts/UI/UIOperationList.cs index 6c282f59..d294edc8 100644 --- a/Assets/Scripts/UI/UIOperationList.cs +++ b/Assets/Scripts/UI/UIOperationList.cs @@ -17,7 +17,6 @@ namespace QFramework.Example protected override void OnInit(IUIData uiData = null) { mData = uiData as UIOperationListData ?? new UIOperationListData(); - TypeEventSystem.Global.Register((arg) => Refresh()).UnRegisterWhenGameObjectDestroyed(gameObject); TypeEventSystem.Global.Register((arg) => Hide()).UnRegisterWhenGameObjectDestroyed(gameObject); } @@ -80,8 +79,9 @@ namespace QFramework.Example protected override void OnOpen(IUIData uiData = null) { + TypeEventSystem.Global.Register((arg) => Refresh()); TypeEventSystem.Global.Register(OnStepChanged).UnRegisterWhenDisabled(this); - Refresh(); + } public void Refresh() @@ -149,9 +149,17 @@ namespace QFramework.Example protected override void OnShow() { + Refresh(); } protected override void OnClose() { + TypeEventSystem.Global.UnRegister((arg) => Refresh()); + } + + public override void Hide() + { + base.Hide(); + TypeEventSystem.Global.UnRegister((arg) => Refresh()); } } } diff --git a/Assets/Scripts/UI/UIScore.cs b/Assets/Scripts/UI/UIScore.cs index 30dfd68d..bc346de6 100644 --- a/Assets/Scripts/UI/UIScore.cs +++ b/Assets/Scripts/UI/UIScore.cs @@ -6,6 +6,10 @@ namespace QFramework.Example { public class UIScoreData : UIPanelData { + /// + /// 只显示当前模块的评分 + /// + public bool onlyCurModule = false; } public partial class UIScore : UIPanel { @@ -63,14 +67,30 @@ namespace QFramework.Example protected override void OnOpen(IUIData uiData = null) { + mData = uiData as UIScoreData ?? new UIScoreData(); Content.RemoveAllChildren(); float sum = 0; float score = 0; - foreach (var moduleDict in ScoreController.Instance.moduleDict) + + bool onlyCur = false; + if (uiData == null) { - foreach (var item in moduleDict.Value.scoreDict) + if (bool.TryParse(Global.Instance.curModule.OnlyCurScore, out onlyCur) == false) + { + onlyCur = false; + } + } + else + { + onlyCur = mData.onlyCurModule; + } + + + if (onlyCur) + { + foreach (var item in ScoreController.Instance.GetCurScoreData()) { GameObject obj = GameObject.Instantiate(ItemPrefab.gameObject, Content); obj.transform.Find("Step").GetComponent().text = item.Value.step; @@ -81,6 +101,23 @@ namespace QFramework.Example score += item.Value.value; } } + else + { + foreach (var moduleDict in ScoreController.Instance.moduleDict) + { + foreach (var item in moduleDict.Value.scoreDict) + { + GameObject obj = GameObject.Instantiate(ItemPrefab.gameObject, Content); + obj.transform.Find("Step").GetComponent().text = item.Value.step; + obj.transform.Find("Name").GetComponent().text = item.Value.name; + obj.transform.Find("Sum").GetComponent().text = item.Value.sum; + obj.transform.Find("Score").GetComponent().text = item.Value.value.ToString(); + sum += float.Parse(item.Value.sum); + score += item.Value.value; + } + } + } + this.Score.text = score.ToString(); this.Sum.text = sum.ToString(); diff --git a/Assets/Scripts/UI/UITipWindow.cs b/Assets/Scripts/UI/UITipWindow.cs index 70cdc263..e87e9b9f 100644 --- a/Assets/Scripts/UI/UITipWindow.cs +++ b/Assets/Scripts/UI/UITipWindow.cs @@ -39,6 +39,10 @@ namespace QFramework.Example { mData = uiData as UITipWindowData ?? new UITipWindowData(); TypeEventSystem.Global.Register(OnStepChanged).UnRegisterWhenDisabled(gameObject); + if (mData.txt.Contains("{Score}")) + { + mData.txt = mData.txt.Replace("{Score}", ScoreController.Instance.GetCurScore().ToString()); + } Label.text = mData.txt; BtnContent.RemoveAllChildren(); if (mData != null) diff --git a/Assets/Scripts/UI/UITools.cs b/Assets/Scripts/UI/UITools.cs index 602d2f1a..72d43491 100644 --- a/Assets/Scripts/UI/UITools.cs +++ b/Assets/Scripts/UI/UITools.cs @@ -26,11 +26,13 @@ namespace QFramework.Example public bool random = false; public float scrollSpeed = 25; public string position; + public int wrongCount = 0; } public partial class UITools : UIPanel { ResLoader mResLoader; public List answers; + int curWrongCount = 0; protected override void OnInit(IUIData uiData = null) { mData = uiData as UIToolsData ?? new UIToolsData(); @@ -47,6 +49,7 @@ namespace QFramework.Example protected override void OnOpen(IUIData uiData = null) { mData = uiData as UIToolsData ?? new UIToolsData(); + curWrongCount = 0; TypeEventSystem.Global.Register(OnStepChanged).UnRegisterWhenDisabled(gameObject); if (mData.totalScore > 0) { @@ -90,6 +93,7 @@ namespace QFramework.Example Button btn = obj.GetComponent