/// <summary> /// 战斗效果执行 /// </summary> public IEnumerator CombatEffectExecute() { for (int i = 0; i < characterMiniGameData.listCombatEffect.Count; i++) { MiniGameCombatEffectBean itemCombatEffect = characterMiniGameData.listCombatEffect[i]; CombatEffectExecute(itemCombatEffect, out bool isCharacterDead); //如果角色已经死了 则不进行一下操作 if (isCharacterDead) { break; } //检测是否需要延迟播放 if (itemCombatEffect.CheckIsDelay()) { yield return(new WaitForSeconds(0.5f)); } itemCombatEffect.durationForRound--; if (itemCombatEffect.durationForRound <= 0) { //移除图标 RemoveStatusIconByMarkId(itemCombatEffect.iconMarkId); //删除数据 characterMiniGameData.listCombatEffect.Remove(itemCombatEffect); i--; } } }
/// <summary> /// 增加效果 /// </summary> /// <param name="effectTypeData"></param> /// <param name="effectDetailsData"></param> public void AddCombatEffect(NpcAIMiniGameCombatCpt actionCharacter, string effectTypeData, string effectDetailsData, Sprite spIcon) { List <EffectTypeBean> listTypeData = EffectTypeEnumTools.GetListEffectData(effectTypeData); EffectDetailsEnumTools.GetEffectDetailsForCombat(effectDetailsData, out string effectPSName, out int durationForRound); MiniGameCombatEffectBean gameCombatEffectData = new MiniGameCombatEffectBean(); gameCombatEffectData.listEffectTypeData = listTypeData; gameCombatEffectData.durationForRound = durationForRound; gameCombatEffectData.effectPSName = effectPSName; gameCombatEffectData.iconMarkId = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N); gameCombatEffectData.actionCharacter = actionCharacter; gameCombatEffectData.targetCharacter = this; foreach (EffectTypeBean itemType in listTypeData) { //设置技能的备用图标 EffectTypeEnumTools.GetEffectDetails(itemType, spIcon); //如果是持续 则需要加上BUFF图标 if (durationForRound > 0) { Sprite spEffect; if (itemType.spIconRemark != null) { spEffect = itemType.spIconRemark; } else { spEffect = itemType.spIcon; } AddStatusIconForEffect(spEffect, Color.white, gameCombatEffectData.iconMarkId); } } //播放粒子特效 if (!CheckUtil.StringIsNull(effectPSName)) { MiniGameHandler.Instance.handlerForCombat.miniGameBuilder.CreateCombatEffect(effectPSName, transform.position + new Vector3(0, 0.5f)); } if (durationForRound > 0) { characterMiniGameData.listCombatEffect.Add(gameCombatEffectData); } else { //回合数小于0的立即执行 CombatEffectExecute(gameCombatEffectData, out bool isDead); } }
/// <summary> /// 战斗效果执行 /// </summary> /// <param name="itemCombatEffect"></param> public void CombatEffectExecute(MiniGameCombatEffectBean itemCombatEffect, out bool isDead) { //完成数据 itemCombatEffect.CompleteEffect(characterMiniGameData); //检测角色血量 MiniGameHandler.Instance.handlerForCombat.CheckCharacterLife(); if (characterMiniGameData.characterCurrentLife <= 0) { isDead = true; } else { isDead = false; } }
/// <summary> /// 设置状态 /// </summary> public void SetEffect(List <MiniGameCombatEffectBean> listEffect) { CptUtil.RemoveChildsByActive(objEffectContainer); //如果没有战斗信息 则隐藏展示栏 if (CheckUtil.ListIsNull(listEffect)) { objEffectContainer.SetActive(false); } else { objEffectContainer.SetActive(true); for (int i = 0; i < listEffect.Count; i++) { MiniGameCombatEffectBean itemEffectData = listEffect[i]; if (itemEffectData.listEffectTypeData != null) { for (int f = 0; f < itemEffectData.listEffectTypeData.Count; f++) { EffectTypeBean effectTypeData = itemEffectData.listEffectTypeData[f]; GameObject objEffectItem = Instantiate(objEffectContainer, objEffectModel); ItemBaseTextCpt itemEffect = objEffectItem.GetComponent <ItemBaseTextCpt>(); Sprite spEffect; if (effectTypeData.spIconRemark != null) { spEffect = effectTypeData.spIconRemark; } else { spEffect = effectTypeData.spIcon; } itemEffect.SetData(spEffect, effectTypeData.colorIcon, "", effectTypeData.effectDescribe); } } } } }