using System.Collections.Generic; using UnityEngine; namespace GFGGame { public class ScoreSystemData : SingletonBase { public const int MISS_CLICK = 0; public const int GREAT_CLICK = 1; public const int PREFACT_CLICK = 2; private Dictionary> equipDicWithPartId = new Dictionary>(); /// /// 将穿戴部件分组 /// public void SetEquipDicWithType() { equipDicWithPartId.Clear(); int[] equipDatas = EquipDataCache.cacher.equipDatas; for (int i = 0; i < equipDatas.Length; i++) { FightScoreCfg[] typeCfgs = FightScoreCfgArray.Instance.dataArray; for (int j = 0; j < typeCfgs.Length; j++) { FightScoreCfg cfg = typeCfgs[j]; if (equipDicWithPartId.ContainsKey(cfg.id) == false) { equipDicWithPartId.Add(cfg.id, new List()); } bool isCheckFinish = false; for (int k = 0; k < cfg.subTypesArr.Length; k++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]); if (itemCfg.subType == cfg.subTypesArr[k]) { equipDicWithPartId[cfg.id].Add(equipDatas[i]); isCheckFinish = true; break; } } if (isCheckFinish) break; } } } /// /// 返回总主属性分 /// /// public double GetMainScore() { //(部件属性分数+标签分数+人物基础分+卡牌属性分数)*4 int[] equipDatas = EquipDataCache.cacher.equipDatas; int partScore = 0; double tagProportion = 0; StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(StoryDataManager.currentLevelID); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); for (int i = 0; i < equipDatas.Length; i++) { partScore += DressUpMenuItemDataManager.GetItemScore(equipDatas[i]); ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]); for (int j = 0; j < fightCfg.needTagsArr.Length; j++) { if (tagProportion >= ConstScoreSystem.MAX_TAG_COUNT) break; for (int k = 0; k < itemCfg.tagsArr.Length; k++) { if (fightCfg.needTagsArr[j] == itemCfg.tagsArr[k]) { tagProportion += ConstScoreSystem.TAG_SCORE; } } } } int roleScore = RoleLevelCfgArray.Instance.GetCfg(RoleDataManager.lvl).baseScore; int cardScore = DressUpMenuItemDataManager.GetItemScore(StoryDataManager.currentCardId); double tagScore = tagProportion * partScore; return (partScore + tagScore + roleScore + cardScore) * ConstScoreSystem.MAIN_SCORE; } /// /// 部件评分 /// /// 评分部位 /// public double GetPartBaseScore(int partId) { double partScore = 0; if (!equipDicWithPartId.ContainsKey(partId)) return partScore; for (int i = 0; i < equipDicWithPartId[partId].Count; i++) { partScore += DressUpMenuItemDataManager.GetItemScore(equipDicWithPartId[partId][i]); } return partScore; } /// /// 部件评分 /// /// 部件id /// 点击状态0:miss,1:优秀,2:完美 /// 总主属性 /// 评分部位 /// 是否展示卡牌效果 /// public double GetPartScore(int partId, int clickState, double mainScore, double skillScore) { //部件评分=部件基础分*部件系数 //点击评分=部件评分*点击系数 //卡牌评分=总属性*技能配表百分比 double partScore = GetPartItemScore(partId); double clickScore = ScoreSystemData.Instance.GetPartItemClickScore(mainScore, clickState); // GetCardItemScore(mainScore, partId, out cardScore, out showCard); return (partScore + clickScore + skillScore); } public double GetPartItemScore(int partId) { return GetPartBaseScore(partId) * ConstScoreSystem.PART_SCORE; } public double GetPartItemClickScore(double mainScore, int clickState) { //点击评分=部件评分*点击系数 double clickCoefficient = 0; switch (clickState) { case MISS_CLICK: clickCoefficient = ConstScoreSystem.MISS_SCORE; break; case GREAT_CLICK: clickCoefficient = ConstScoreSystem.GREAT_SCORE; break; case PREFACT_CLICK: clickCoefficient = ConstScoreSystem.PERFECT_SCORE; break; } double clickScore = mainScore * clickCoefficient; return clickScore; } public void GetPartItemCardScore(double mainScore, int partId, out double skillScore, out bool showCard) { skillScore = 0; showCard = false; PassivitySkillCfg[] cfgs = PassivitySkillCfgArray.Instance.GetCfgs(StoryDataManager.currentCardId); for (int i = 0; i < cfgs.Length; i++) { if (cfgs.Length == 0) break; PassivitySkillCfg cfg = cfgs[i]; if (partId == cfg.subTypes || cfg.subTypes == 0) { int isProbability = Random.Range(0, 100) < cfg.probability ? 1 : 0; if (showCard != true && cfg.mainSkill == 1 && isProbability == 1) { //卡牌中包含主技能且此技能被触发,在评分阶段才展示卡牌效果,一张卡牌只要有一个技能需要显示,那就直接显示 showCard = true; } Debug.Log(" i:" + i + " cardScore:" + skillScore); skillScore += mainScore * cfg.count / 100 * isProbability; } } } /// /// 登峰造极额外加分 /// /// /// public double GetAllCircleAddScore(double mainScore) { //主属性20%的加分 return mainScore * ConstScoreSystem.ALL_PERFECT_SCORE; } /// /// 根据卡牌Id获取选卡界面显示配置 /// /// /// public PassivitySkillCfg GetShowSkillCfg(int cardId) { PassivitySkillCfg[] cfgs = PassivitySkillCfgArray.Instance.GetCfgs(cardId); if (cfgs.Length == 0) { Debug.LogWarning(cardId + " 这张卡片没有配置技能"); return null; } for (int i = 0; i < cfgs.Length; i++) { if (cfgs[i].showSkill == 1) { return cfgs[i]; } } return null; } /// /// 根据卡牌Id获取评分主技能显示配置 /// /// /// public PassivitySkillCfg GetMainSkillCfg(int cardId) { PassivitySkillCfg[] cfgs = PassivitySkillCfgArray.Instance.GetCfgs(cardId); if (cfgs.Length == 0) { Debug.LogWarning(cardId + " 这张卡片没有配置技能"); return null; } for (int i = 0; i < cfgs.Length; i++) { if (cfgs[i].mainSkill == 1) { return cfgs[i]; } } return null; } } }