Main/Common/EventName.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/Config/ConfigBase.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/Config/ConfigManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/ResModule/ResManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleHUDWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleHUDWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleObject/BattleObject.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/BattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/UIComp.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/UIComp/DamageContent.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/UIComp/DamageContent.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/UIComp/DamageLine.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Main/System/Battle/UIComp/DamageLine.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/Common/EventName.cs
@@ -2,6 +2,11 @@ public class EventName { public const string BATTLE_BUFF_MOUNTED = "BATTLE_BUFF_MOUNTED";//BUFF MOUNTED public const string BATTLE_BUFF_DISAPEAR = "BATTLE_BUFF_DISAPEAR";//BUFF DISAPEAR public const string BATTLE_DAMAGE_TAKEN = "BATTLE_DAMAGE_TAKEN";//造成伤害 } Main/Config/ConfigBase.cs
@@ -13,11 +13,7 @@ public static T Get(U id) { if (!isInit) { Debug.LogError("ConfigBase 没有初始化"); return null; // 或者抛出异常,视情况而定 } LazyInit(); if (dic.ContainsKey(id)) { @@ -34,11 +30,7 @@ public static List<U> GetKeys() { if (!isInit) { Debug.LogError(typeof(U).Name + " 没有初始化 GetKeys"); return null; // 或者抛出异常,视情况而定 } LazyInit(); List<U> result = new List<U>(); result.AddRange(dic.Keys); return result; @@ -47,11 +39,7 @@ public static List<T> GetValues() { if (!isInit) { Debug.LogError(typeof(T).Name + " 没有初始化 GetValues"); return null; // 或者抛出异常,视情况而定 } LazyInit(); List<T> result = new List<T>(); result.AddRange(dic.Values); return result; @@ -59,19 +47,24 @@ public static bool HasKey(U key) { if (!isInit) { Debug.LogError(typeof(T).Name + " 没有初始化 HasKey"); return false; // 或者抛出异常,视情况而定 } LazyInit(); return dic.ContainsKey(key); } public static void LazyInit() { if (!isInit) { // 实际上是同步的 ConfigManager.Instance.LoadConfigByType(typeof(T)); } } public static void Init(string[] lines) { dic.Clear(); for (int i = 3; i < lines.Length; i++) { string line = lines[i]; @@ -86,18 +79,18 @@ U key = config.LoadKey(strKey); config.LoadConfig(line); config.OnConfigParseCompleted(); #if UNITY_EDITOR #if UNITY_EDITOR try { #endif dic.Add(key, config); #if UNITY_EDITOR #endif dic.Add(key, config); #if UNITY_EDITOR } catch (ArgumentException exception) { Debug.LogError(typeof(T).Name + " 重复的key " + key + " " + exception.Message); Debug.LogError(typeof(T).Name + " 重复的key " + key + " " + exception.Message); } #endif #endif } foreach (var cfg in dic.Values) Main/Config/ConfigManager.cs
@@ -33,81 +33,52 @@ isLoadFinished = false; // 加载配置文件 int totalConfigs = 65; int totalConfigs = 17; Type[] configTypes = new Type[] { typeof(AppointItemConfig), typeof(AudioConfig), typeof(ChatBubbleBoxConfig), typeof(ChestsAwardConfig), typeof(ChestsConfig), typeof(CTGConfig), typeof(CTGSelectItemConfig), typeof(DailyLivenessRewardConfig), typeof(DailyQuestConfig), typeof(DailyQuestOpenTimeConfig), typeof(DienstgradConfig), typeof(DirtyNameConfig), typeof(DirtyWordConfig), typeof(EffectConfig), typeof(EmojiPackConfig), typeof(EquipGSParamConfig), typeof(EquipPlaceMapConfig), typeof(FamilyConfig), typeof(FamilyEmblemConfig), typeof(FirstGoldConfig), typeof(FrameAnimationConfig), typeof(FuncConfigConfig), typeof(FuncOpenLVConfig), typeof(FunctionTeamSetConfig), typeof(GetItemWaysConfig), typeof(GmCmdConfig), typeof(GuideConfig), typeof(HeroAwakeConfig), typeof(HeroBreakConfig), typeof(HeroConfig), typeof(HeroFetterConfig), typeof(HeroQualityAwakeConfig), typeof(HeroQualityBreakConfig), typeof(HeroQualityConfig), typeof(HeroSkinConfig), typeof(HeroTalentConfig), typeof(IconConfig), typeof(ItemConfig), typeof(KickOutReasonConfig), typeof(LanguageConfig), typeof(MailConfig), typeof(NPCConfig), typeof(NPCExConfig), typeof(OrderInfoConfig), typeof(PlayerFaceConfig), typeof(PlayerFacePicConfig), typeof(PlayerFacePicStarConfig), typeof(PlayerFaceStarConfig), typeof(PlayerLVConfig), typeof(PlayerPropertyConfig), typeof(priorbundleConfig), typeof(RealmConfig), typeof(RealmLVUPTaskConfig), typeof(RichTextMsgReplaceConfig), typeof(RuleConfig), typeof(SkillConfig), typeof(StoreConfig), typeof(SuccessConfig), typeof(SysInfoConfig), typeof(TaskConfig), typeof(TitleStarUpConfig), typeof(TreasureCntAwardConfig), typeof(TreasureItemLibConfig), typeof(TreasureSetConfig), typeof(XBGetItemConfig) }; #if UNITY_EDITOR List<string> fastName = new List<string>(); #endif // 逐个加载配置并更新进度 for (int i = 0; i < configTypes.Length; i++) { var sw = System.Diagnostics.Stopwatch.StartNew(); await LoadConfigByType(configTypes[i]); sw.Stop(); #if UNITY_EDITOR if (sw.ElapsedMilliseconds >= 100) { Debug.LogError($"加载配置 {configTypes[i].Name} 耗时较长: {sw.ElapsedMilliseconds} ms"); } else if (sw.ElapsedMilliseconds <= 5) { fastName.Add(configTypes[i].Name); } Debug.Log($"加载配置: {configTypes[i].Name} 用时: {sw.ElapsedMilliseconds} ms"); #endif loadingProgress = (float)(i + 1) / totalConfigs; } #if UNITY_EDITOR System.IO.File.WriteAllText(Application.dataPath + "/fastConfig.txt", string.Join("\n", fastName)); #endif // 加载完成后设置isLoadFinished为true loadingProgress = 1f; @@ -121,10 +92,10 @@ { configName = configName.Substring(0, configName.Length - 6); } TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName); if (textAsset != null) string[] texts = ResManager.Instance.LoadConfig(configName); if (texts != null) { string[] lines = textAsset.text.Split('\n'); string[] lines = texts; var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy); if (methodInfo != null) { @@ -152,10 +123,10 @@ { string configName = typeof(T).Name; TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName); if (textAsset != null) string[] texts = ResManager.Instance.LoadConfig(configName); if (texts != null) { string[] lines = textAsset.text.Split('\n'); string[] lines = texts; var methodInfo = typeof(T).GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); if (methodInfo != null) { @@ -196,130 +167,34 @@ public override void Release() { // 清空 AppointItemConfig 字典 ClearConfigDictionary<AppointItemConfig>(); // 清空 AudioConfig 字典 ClearConfigDictionary<AudioConfig>(); // 清空 ChatBubbleBoxConfig 字典 ClearConfigDictionary<ChatBubbleBoxConfig>(); // 清空 ChestsAwardConfig 字典 ClearConfigDictionary<ChestsAwardConfig>(); // 清空 ChestsConfig 字典 ClearConfigDictionary<ChestsConfig>(); // 清空 CTGConfig 字典 ClearConfigDictionary<CTGConfig>(); // 清空 CTGSelectItemConfig 字典 ClearConfigDictionary<CTGSelectItemConfig>(); // 清空 DailyLivenessRewardConfig 字典 ClearConfigDictionary<DailyLivenessRewardConfig>(); // 清空 DailyQuestConfig 字典 ClearConfigDictionary<DailyQuestConfig>(); // 清空 DailyQuestOpenTimeConfig 字典 ClearConfigDictionary<DailyQuestOpenTimeConfig>(); // 清空 DienstgradConfig 字典 ClearConfigDictionary<DienstgradConfig>(); // 清空 DirtyNameConfig 字典 ClearConfigDictionary<DirtyNameConfig>(); // 清空 DirtyWordConfig 字典 ClearConfigDictionary<DirtyWordConfig>(); // 清空 EffectConfig 字典 ClearConfigDictionary<EffectConfig>(); // 清空 EmojiPackConfig 字典 ClearConfigDictionary<EmojiPackConfig>(); // 清空 EquipGSParamConfig 字典 ClearConfigDictionary<EquipGSParamConfig>(); // 清空 EquipPlaceMapConfig 字典 ClearConfigDictionary<EquipPlaceMapConfig>(); // 清空 FamilyConfig 字典 ClearConfigDictionary<FamilyConfig>(); // 清空 FamilyEmblemConfig 字典 ClearConfigDictionary<FamilyEmblemConfig>(); // 清空 FirstGoldConfig 字典 ClearConfigDictionary<FirstGoldConfig>(); // 清空 FrameAnimationConfig 字典 ClearConfigDictionary<FrameAnimationConfig>(); // 清空 FuncConfigConfig 字典 ClearConfigDictionary<FuncConfigConfig>(); // 清空 FuncOpenLVConfig 字典 ClearConfigDictionary<FuncOpenLVConfig>(); // 清空 FunctionTeamSetConfig 字典 ClearConfigDictionary<FunctionTeamSetConfig>(); // 清空 GetItemWaysConfig 字典 ClearConfigDictionary<GetItemWaysConfig>(); // 清空 GmCmdConfig 字典 ClearConfigDictionary<GmCmdConfig>(); // 清空 GuideConfig 字典 ClearConfigDictionary<GuideConfig>(); // 清空 HeroAwakeConfig 字典 ClearConfigDictionary<HeroAwakeConfig>(); // 清空 HeroBreakConfig 字典 ClearConfigDictionary<HeroBreakConfig>(); // 清空 HeroConfig 字典 ClearConfigDictionary<HeroConfig>(); // 清空 HeroFetterConfig 字典 ClearConfigDictionary<HeroFetterConfig>(); // 清空 HeroQualityAwakeConfig 字典 ClearConfigDictionary<HeroQualityAwakeConfig>(); // 清空 HeroQualityBreakConfig 字典 ClearConfigDictionary<HeroQualityBreakConfig>(); // 清空 HeroQualityConfig 字典 ClearConfigDictionary<HeroQualityConfig>(); // 清空 HeroSkinConfig 字典 ClearConfigDictionary<HeroSkinConfig>(); // 清空 HeroTalentConfig 字典 ClearConfigDictionary<HeroTalentConfig>(); // 清空 IconConfig 字典 ClearConfigDictionary<IconConfig>(); // 清空 ItemConfig 字典 ClearConfigDictionary<ItemConfig>(); // 清空 KickOutReasonConfig 字典 ClearConfigDictionary<KickOutReasonConfig>(); // 清空 LanguageConfig 字典 ClearConfigDictionary<LanguageConfig>(); // 清空 MailConfig 字典 ClearConfigDictionary<MailConfig>(); // 清空 NPCConfig 字典 ClearConfigDictionary<NPCConfig>(); // 清空 NPCExConfig 字典 ClearConfigDictionary<NPCExConfig>(); // 清空 OrderInfoConfig 字典 ClearConfigDictionary<OrderInfoConfig>(); // 清空 PlayerFaceConfig 字典 ClearConfigDictionary<PlayerFaceConfig>(); // 清空 PlayerFacePicConfig 字典 ClearConfigDictionary<PlayerFacePicConfig>(); // 清空 PlayerFacePicStarConfig 字典 ClearConfigDictionary<PlayerFacePicStarConfig>(); // 清空 PlayerFaceStarConfig 字典 ClearConfigDictionary<PlayerFaceStarConfig>(); // 清空 PlayerLVConfig 字典 ClearConfigDictionary<PlayerLVConfig>(); // 清空 PlayerPropertyConfig 字典 ClearConfigDictionary<PlayerPropertyConfig>(); // 清空 priorbundleConfig 字典 ClearConfigDictionary<priorbundleConfig>(); // 清空 RealmConfig 字典 ClearConfigDictionary<RealmConfig>(); // 清空 RealmLVUPTaskConfig 字典 ClearConfigDictionary<RealmLVUPTaskConfig>(); // 清空 RichTextMsgReplaceConfig 字典 ClearConfigDictionary<RichTextMsgReplaceConfig>(); // 清空 RuleConfig 字典 ClearConfigDictionary<RuleConfig>(); // 清空 SkillConfig 字典 ClearConfigDictionary<SkillConfig>(); // 清空 StoreConfig 字典 ClearConfigDictionary<StoreConfig>(); // 清空 SuccessConfig 字典 ClearConfigDictionary<SuccessConfig>(); // 清空 SysInfoConfig 字典 ClearConfigDictionary<SysInfoConfig>(); // 清空 TaskConfig 字典 ClearConfigDictionary<TaskConfig>(); // 清空 TitleStarUpConfig 字典 ClearConfigDictionary<TitleStarUpConfig>(); // 清空 TreasureCntAwardConfig 字典 ClearConfigDictionary<TreasureCntAwardConfig>(); // 清空 TreasureItemLibConfig 字典 ClearConfigDictionary<TreasureItemLibConfig>(); // 清空 TreasureSetConfig 字典 Main/ResModule/ResManager.cs
@@ -164,6 +164,23 @@ return asset; } public string[] LoadConfig(string name) { string path = string.Empty; if (!AssetSource.isUseAssetBundle) { #if UNITY_EDITOR path = ResourcesPath.CONFIG_FODLER + "/" + name + ".txt"; #endif } else { path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt"); } return File.ReadAllLines(path); } private Sprite LoadSprite(string atlasName, string spriteName) { #if !UNITY_EDITOR Main/System/Battle/BattleHUDWin.cs
New file @@ -0,0 +1,119 @@ using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using DG.Tweening; using Cysharp.Threading.Tasks; // 这个界面是 persistent的界面 public class BattleHUDWin : UIBase { // 组件引用 // private List<HUDContent> damageList = new List<HUDContent>(); // private List<BuffContent> buffList = new List<BuffContent>(); private GameObjectPoolManager.GameObjectPool damagePrefabPool; private GameObjectPoolManager.GameObjectPool buffIconPrefabPool; private GameObjectPoolManager.GameObjectPool buffLabelPrefabPool; public Transform damageNode; public Transform buffIconNode; public Transform buffLabelNode; // 生命周期 protected override void InitComponent() { base.InitComponent(); // 初始化组件引用 绑定按钮等UI组件事件 } protected override void OnPreOpen() { base.OnPreOpen(); EventBroadcast.Instance.AddListener<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted); EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear); damagePrefabPool = GameObjectPoolManager.Instance.RequestPool(ResManager.Instance.LoadAsset<GameObject>("UIComp", "DamageContent")); // buffIconPrefabPool = GameObjectPoolManager.Instance.RequestPool(); // buffLabelPrefabPool = GameObjectPoolManager.Instance.RequestPool(ResManager.Instance.LoadAsset<GameObject>("UIComp", "BuffContent")); } protected override void OnPreClose() { base.OnPreClose(); EventBroadcast.Instance.RemoveListener<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted); EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear); } protected override void OnOpen() { base.OnOpen(); } protected override void OnClose() { base.OnClose(); } protected override void NextFrameAfterOpen() { base.NextFrameAfterOpen(); } protected override void CompleteClose() { base.CompleteClose(); } private void OnDamageTaken(BattleObject bo, List<int> damageList) { GameObject damageContent = damagePrefabPool.Request(); DamageContent content = damageContent.GetComponent<DamageContent>(); damageContent.transform.SetParent(damageNode, false); damageContent.transform.localPosition = new Vector3(damageContent.transform.localPosition.x, damageContent.transform.localPosition.y, 0); content.SetDamage(damageList, () => damagePrefabPool.Release(damageContent)); // heroGo 的 parent 作为参考节点 var heroGo = bo.heroGo; if (heroGo == null) return; var heroRect = heroGo.GetComponent<RectTransform>(); if (heroRect == null) return; // 计算 heroGo 在 content 父节点下的 anchoredPosition var contentRect = content.GetComponent<RectTransform>(); var contentParentRect = contentRect.parent as RectTransform; // 获取 heroGo 的世界坐标 Vector3 worldTargetPos = heroRect.TransformPoint(heroRect.anchoredPosition); // 转换到 content 父节点下的 anchoredPosition Vector2 anchoredPos; RectTransformUtility.ScreenPointToLocalPointInRectangle( contentParentRect, RectTransformUtility.WorldToScreenPoint(null, worldTargetPos), null, out anchoredPos); contentRect.anchoredPosition = anchoredPos; } private void OnBuffMounted(BattleObject bo, SkillConfig buffConfig) { } private void OnBuffDisapear(BattleObject bo, SkillConfig buffConfig) { } } Main/System/Battle/BattleHUDWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 16f4cd28fdf242645943d06ae9d87c97 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Battle/BattleObject/BattleObject.cs
@@ -40,7 +40,11 @@ protected MotionBase motionBase; protected GameObject heroGo; public GameObject heroGo { get; private set; } public BattleObject(BattleField _battleField) { @@ -175,7 +179,7 @@ return true; } public virtual void TakeDamage(List<int> damageValues) { if (IsDead()) @@ -192,6 +196,7 @@ totalDamage += damage; } // 扣血 teamHero.curHp -= totalDamage; @@ -200,6 +205,7 @@ // { // OnDeath(); // } } // 闪避开始 @@ -251,6 +257,8 @@ { Debug.Log($"Damage: {damage}"); } EventBroadcast.Instance.Broadcast<BattleObject, List<int>>(EventName.BATTLE_DAMAGE_TAKEN, this, damageValues); } public void PlaySkill(SkillConfig skillConfig, List<Dictionary<int, List<int>>> damageList, Action _onComplete) @@ -378,7 +386,15 @@ int totalDamage = teamHero.attack - obj.teamHero.defense; damageList.Add(totalDamage); int damage1 = (int)((float)totalDamage * 0.3f); int damage2 = (int)((float)totalDamage * 0.25f); int damage3 = totalDamage - damage1 - damage2; damageList.Add(damage1); damageList.Add(damage2); damageList.Add(damage3); return damageList; } Main/System/Battle/BattleWin.cs
@@ -24,11 +24,15 @@ base.OnPreOpen(); SetBattleField(BattleManager.Instance.storyBattleField); if (!UIManager.Instance.GetUI<BattleHUDWin>()) UIManager.Instance.OpenWindow<BattleHUDWin>(); } protected override void OnPreClose() { base.OnPreClose(); UIManager.Instance.CloseWindow<BattleHUDWin>(); } protected override void OnOpen() Main/System/Battle/UIComp.meta
New file @@ -0,0 +1,8 @@ fileFormatVersion: 2 guid: 2df384ebef02f254193d75f1dfecdb76 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: Main/System/Battle/UIComp/DamageContent.cs
New file @@ -0,0 +1,41 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using System; public class DamageContent : MonoBehaviour { public GameObject line; public RectTransform parent; protected List<DamageLine> damageLineList = new List<DamageLine>(); public PositionTween posTween; void Awake() { line.SetActive(false); } public void SetDamage(List<int> damages, Action _onComplete) { for (int i = 0; i < damages.Count; i++) { if (i >= damageLineList.Count) { GameObject newLine = GameObject.Instantiate(line, parent); damageLineList.Add(newLine.GetComponent<DamageLine>()); } damageLineList[i].SetActive(true); damageLineList[i].SetDamage(damages[i]); } for (int i = damages.Count; i < damageLineList.Count; i++) { damageLineList[i].SetActive(false); } posTween.Play(_onComplete); } } Main/System/Battle/UIComp/DamageContent.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 942dffc0f5354064485a6012dbb1db96 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Battle/UIComp/DamageLine.cs
New file @@ -0,0 +1,23 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public class DamageLine : MonoBehaviour { public TextEx damageTypeLabel; public TextEx damageValueLabel; public void SetDamage(DamageType damageType, int damage) { damageTypeLabel.SetActive(true); damageValueLabel.text = damage.ToString(); } public void SetDamage(int damage) { damageTypeLabel.SetActive(false); damageValueLabel.text = damage.ToString(); } } Main/System/Battle/UIComp/DamageLine.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 69c7e3c9c17e56542b39f18f4c17d43e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: