diff --git a/Assets/Scripts/Actions/UIToolsAction.cs b/Assets/Scripts/Actions/UIToolsAction.cs index b5ef95dc..df5ebfab 100644 --- a/Assets/Scripts/Actions/UIToolsAction.cs +++ b/Assets/Scripts/Actions/UIToolsAction.cs @@ -23,6 +23,7 @@ public class UIToolsAction : IAction string wrongEvent; string rightScore; string wrongScore; + string totalScore; string scoreStepName; string autoHide; public static UIToolsAction Allocate(Dictionary datas, System.Action onDelayFinish = null) @@ -40,6 +41,7 @@ public class UIToolsAction : IAction retNode.wrongEvent = datas.ContainsKey("wrongEvent") ? datas["wrongEvent"] : ""; retNode.rightScore = datas.ContainsKey("rightScore") ? datas["rightScore"] : ""; retNode.wrongScore = datas.ContainsKey("wrongScore") ? datas["wrongScore"] : ""; + retNode.totalScore = datas.ContainsKey("totalScore") ? datas["totalScore"] : ""; retNode.scoreStepName = datas.ContainsKey("scoreStepName") ? datas["scoreStepName"] : ""; retNode.autoHide = datas.ContainsKey("autoHide") ? datas["autoHide"] : ""; return retNode; @@ -75,6 +77,7 @@ public class UIToolsAction : IAction data.wrongEvent = wrongEvent; float.TryParse(rightScore, out data.rightScore); float.TryParse(wrongScore, out data.wrongScore); + float.TryParse(totalScore, out data.totalScore); data.scoreStepName = scoreStepName; bool.TryParse(setActive, out data.SetActive); if (float.TryParse(autoHide, out data.autoHideResult) == false) diff --git a/Assets/Scripts/Controller/ScoreController.cs b/Assets/Scripts/Controller/ScoreController.cs index 2d8834bb..a52be7ae 100644 --- a/Assets/Scripts/Controller/ScoreController.cs +++ b/Assets/Scripts/Controller/ScoreController.cs @@ -7,24 +7,58 @@ using XMLTool; public class ScoreController : MonoSingleton { - public Dictionary scoreDict; + public class Data + { + public Dictionary scoreDict; + } + + public Dictionary moduleDict; public override void OnSingletonInit() { base.OnSingletonInit(); - scoreDict = new Dictionary(); + InitData(); TypeEventSystem.Global.Register(OnStart).UnRegisterWhenGameObjectDestroyed(gameObject); TypeEventSystem.Global.Register(OnQuit).UnRegisterWhenGameObjectDestroyed(gameObject); } + + public void InitData() + { + moduleDict = new Dictionary(); + foreach (var item in Global.Instance.appData.Modules) + { + if (item.type == "Exam" || item.type == "All") + { + Data data = new Data() { scoreDict = new Dictionary() }; + moduleDict.Add(item.ModuleName, data); + } + } + } + + + private void OnStart(OnModuleStart start) { + var data = moduleDict[Global.Instance.curModule.ModuleName]; + data.scoreDict.Clear(); foreach (var item in Global.Instance.curModule.score.scores) { item.value = 0; - scoreDict.Add(item.step + item.name, item); + data.scoreDict.Add(item.step + item.name, item); } + } + + public Dictionary GetCurScore() + { + var data = moduleDict[Global.Instance.curModule.ModuleName]; + return data.scoreDict; + } + + public void Add(string key, float value) { + var data = moduleDict[Global.Instance.curModule.ModuleName]; + var scoreDict = data.scoreDict; if (scoreDict.ContainsKey(key)) { scoreDict[key].value += value; @@ -43,6 +77,8 @@ public class ScoreController : MonoSingleton public void Set(string key, float value) { + var data = moduleDict[Global.Instance.curModule.ModuleName]; + var scoreDict = data.scoreDict; if (scoreDict.ContainsKey(key)) { scoreDict[key].value = value; @@ -53,6 +89,8 @@ public class ScoreController : MonoSingleton private void OnQuit(OnModuleQuit quit) { + var data = moduleDict[Global.Instance.curModule.ModuleName]; + var scoreDict = data.scoreDict; scoreDict.Clear(); } diff --git a/Assets/Scripts/UI/UIScore.cs b/Assets/Scripts/UI/UIScore.cs index a4636f5e..0805b625 100644 --- a/Assets/Scripts/UI/UIScore.cs +++ b/Assets/Scripts/UI/UIScore.cs @@ -49,20 +49,26 @@ namespace QFramework.Example { Content.RemoveAllChildren(); + float sum = 0; float score = 0; - foreach (var item in ScoreController.Instance.scoreDict) + foreach (var moduleDict in ScoreController.Instance.moduleDict) { - 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; + 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(); + } protected override void OnShow() diff --git a/Assets/Scripts/UI/UITools.cs b/Assets/Scripts/UI/UITools.cs index 2cdba748..7ecc4a26 100644 --- a/Assets/Scripts/UI/UITools.cs +++ b/Assets/Scripts/UI/UITools.cs @@ -20,6 +20,7 @@ namespace QFramework.Example public string wrongEvent; public float rightScore; public float wrongScore; + public float totalScore; public string scoreStepName; public float autoHideResult = -1; } @@ -42,6 +43,10 @@ namespace QFramework.Example protected override void OnOpen(IUIData uiData = null) { TypeEventSystem.Global.Register(OnStepChanged).UnRegisterWhenDisabled(gameObject); + if (mData.totalScore > 0) + { + ScoreController.Instance.Add(mData.scoreStepName, mData.totalScore); + } mResLoader = ResLoader.Allocate(); mData = uiData as UIToolsData ?? new UIToolsData(); if (string.IsNullOrEmpty(mData.answer) == false) diff --git a/Assets/Scripts/Xml/XmlParser.cs b/Assets/Scripts/Xml/XmlParser.cs index ab03bd78..ab62047c 100644 --- a/Assets/Scripts/Xml/XmlParser.cs +++ b/Assets/Scripts/Xml/XmlParser.cs @@ -46,6 +46,9 @@ namespace XMLTool } + + + public class Score { public List scores; @@ -440,6 +443,11 @@ namespace XMLTool { act.args.Add("wrongScore", wrongScore.Value); } + var totalScore = action.Attribute("totalScore"); + if (totalScore != null) + { + act.args.Add("totalScore", totalScore.Value); + } var scoreStepName = action.Attribute("scoreStepName"); if (scoreStepName != null) { diff --git a/Doc/Xml配置文档.xml b/Doc/Xml配置文档.xml index 06b6f190..74fe120d 100644 --- a/Doc/Xml配置文档.xml +++ b/Doc/Xml配置文档.xml @@ -23,7 +23,8 @@ + autoHide =-1 则点击结束 否则 等待对应时间后自动结束 + totalScore 是配合wrongScore的用于初始化一个分数 然后选择扣分-->