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/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/Xml/XmlParser.cs b/Assets/Scripts/Xml/XmlParser.cs index 58602bab..580bf747 100644 --- a/Assets/Scripts/Xml/XmlParser.cs +++ b/Assets/Scripts/Xml/XmlParser.cs @@ -26,6 +26,7 @@ namespace XMLTool public string ModuleName { get; set; } public string Descript { get; set; } + public string OnlyCurScore { get; set; } public string Icon { get; set; } public List Operations { get; set; } @@ -269,6 +270,7 @@ namespace XMLTool module.type = moduleElement.Element("Type")?.Value; module.ModuleName = moduleElement.Element("Name")?.Value; module.Icon = moduleElement.Element("Icon")?.Value; + module.OnlyCurScore = moduleElement.Element("OnlyCurScore")?.Value; module.Descript = moduleElement.Element("Descript")?.Value.Trim(); module.Scene = moduleElement.Element("Scene")?.Value; @@ -1557,6 +1559,17 @@ namespace XMLTool newAction = act; } break; + case "ShowScore": + { + var act = new DictionaryAction(); + XAttribute onlyCurModule = action.Attribute("onlyCurModule"); + if (onlyCurModule != null) + { + act.args.Add("onlyCurModule", onlyCurModule.Value); + } + newAction = act; + } + break; default: newAction = new Action(); break; diff --git a/Doc/Xml閰嶇疆鏂囨。.xml b/Doc/Xml閰嶇疆鏂囨。.xml index 0d9a267b..2cc18340 100644 --- a/Doc/Xml閰嶇疆鏂囨。.xml +++ b/Doc/Xml閰嶇疆鏂囨。.xml @@ -18,6 +18,9 @@ + + + Study + + false