local RoleConfig = ConfigManager.GetConfig(ConfigName.RoleConfig) local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) local SkillLogicConfig = ConfigManager.GetConfig(ConfigName.SkillLogicConfig) local healEffect = "c_xy_0012_skeff_tapsk_healeff" local rageEffect = "s_jieling_hs_3006_skeff_casting_buff_nuqi" require "Modules.Battle.View.Unit.BattleUnit" RoleView = BattleUnit.New() function RoleView.New(go, role, position, root) local o = BattleUnit.New(go, role, position, root) setmetatable(o, RoleView) RoleView.__index = RoleView o:ctor(go, role, position, root) return o end function RoleView:onCreate(go, role, position, root) self.RootPanel = root self.GameObject = go self.role = role self.camp = role.camp self.spLoader = SpriteLoader.New() role.Event:AddEvent(BattleEventName.BeHitMiss, self.OnBeHitMiss, self) role.Event:AddEvent(BattleEventName.RoleBeDamaged, self.OnDamaged, self) role.Event:AddEvent(BattleEventName.RoleBeTreated, self.OnTreated, self) role.Event:AddEvent(BattleEventName.RoleBeHealed, self.OnHealed, self) role.Event:AddEvent(BattleEventName.RoleDead, self.OnDead, self) role.Event:AddEvent(BattleEventName.RoleRealDead, self.OnRealDead, self) role.Event:AddEvent(BattleEventName.RoleRageChange, self.RoleRageChange, self) role.Event:AddEvent(BattleEventName.RoleRelive, self.onRoleRelive, self) role.Event:AddEvent(BattleEventName.AOE, self.OnAOE, self) role.Event:AddEvent(BattleEventName.BeSeckill, self.onBeSecKill, self) role.Event:AddEvent(BattleEventName.ShildTrigger, self.OnShieldTrigger, self) role.Event:AddEvent(BattleEventName.ShowHintText,self.OnShowHintText,self) self.Floater = FloatNode.New(self, self.RootPanel, self.GameObject) self.BuffCtrl = BuffCtrl.New(self, Util.GetGameObject(go, "buff")) self.hpCache = self.role:GetRoleData(RoleDataName.Hp) / self.role:GetRoleData(RoleDataName.MaxHp) self.hpSlider = Util.GetGameObject(go, "hpProgress/hp"):GetComponent("Image") self.hpPassSlider = Util.GetGameObject(go, "hpProgress/hpPass"):GetComponent("Image") self.hpSlider.fillAmount = self.hpCache self.hpPassSlider.fillAmount = self.hpCache self.readingName = "" if role.roleData.roleId > 10000 then self.livePath = GetResourcePath(HeroConfig[role.roleData.roleId].Live) self.play_liveScale = RoleConfig[role.roleData.roleId].play_liveScale self.enemy_liveScale = RoleConfig[role.roleData.roleId].enemy_liveScale self.offset = RoleConfig[role.roleData.roleId].offset self.outOffset = RoleConfig[role.roleData.roleId].enemy_offset self.spAtkTime = RoleConfig[role.roleData.roleId].CastingSkills/1000 self.atkSoundTime = RoleConfig[role.roleData.roleId].CastingAudio/1000 self.attackSound = RoleConfig[role.roleData.roleId].sond if role.roleData.monsterId then --非战斗数据,仅用于显示怪物名称 self.readingName = GetLanguageStrById(MonsterConfig[role.roleData.monsterId].ReadingName) else self.readingName = GetLanguageStrById(HeroConfig[role.roleData.roleId].ReadingName) end else self.livePath = GetResourcePath(MonsterViewConfig[role.roleData.roleId].Live) self.enemy_liveScale = MonsterViewConfig[role.roleData.roleId].enemy_liveScale self.offset = MonsterViewConfig[role.roleData.roleId].offset self.spAtkTime = MonsterViewConfig[role.roleData.roleId].CastingSkills/1000 self.atkSoundTime = MonsterViewConfig[role.roleData.roleId].CastingAudio/1000 self.attackSound = MonsterViewConfig[role.roleData.roleId].sond if role.roleData.monsterId then --非战斗数据,仅用于显示怪物名称 self.readingName = GetLanguageStrById(MonsterConfig[role.roleData.monsterId].ReadingName) else self.readingName = GetLanguageStrById(HeroConfig[role.roleData.roleId].ReadingName) end end Util.GetGameObject(go, "Name/Text"):GetComponent("Text").text = self.readingName Util.GetGameObject(go, "lv/Text"):GetComponent("Text").text = role:GetRoleData(RoleDataName.Level) Util.GetGameObject(go, "Pro/Image"):GetComponent("Image").sprite = self.spLoader:LoadSprite(GetProStrImageByProNum(role.roleData.element)) Util.GetGameObject(go, "GameObject/name"):GetComponent("Text").text = self.readingName Util.GetGameObject(go, "GameObject/pro"):GetComponent("Image").sprite = self.spLoader:LoadSprite(GetProStrImageByProNum(role.roleData.element)) -- 创建技能播放器 self.nameObj=Util.GetGameObject(go, "GameObject") local castingEfectNode = self.role.camp == 0 and self.RootPanel.mySkillCast or self.RootPanel.enemySkillCast local castingNameNode = Util.GetGameObject(castingEfectNode, self.role.camp == 0 and "TongYong_Casting_Xia/DongHua/MingZi2" or "TongYong_Casting_Shang/DongHua/MingZi2") self.SkillCaster = SkillCaster.New(self, self.spAtkTime, self.atkSoundTime, self.attackSound, castingEfectNode, castingNameNode) -- 卡牌立绘 if role.camp == 0 then Util.GetGameObject(go, "Bg1"):GetComponent("Image").sprite = self.spLoader:LoadSprite(GetBattleHeroCardStarBg[role.roleData.star]) Util.GetGameObject(go, "Bg2"):GetComponent("Image").sprite = self.spLoader:LoadSprite(GetHeroCardStarFg[role.roleData.star]) local starGrid = Util.GetGameObject(go, "StarGrid") SetCardStars(starGrid, role.roleData.star or 5) local zs = Util.GetGameObject(go, "zs") local zsName = GetHeroCardStarZs[role.roleData.star] if zsName == "" then zs:SetActive(false) else zs:SetActive(true) zs:GetComponent("Image").sprite = self.spLoader:LoadSprite(zsName) end self.liveRender = Util.GetGameObject(go, "Mask/icon"):GetComponent("RawImage") self.liveRender.texture, self.RoleLiveGO = CardRendererManager.GetSpineTexture(role.position, self.livePath, Vector3.one * self.play_liveScale, Vector3.New(self.offset[1], self.offset[2], 0), false) --self.spLoader:LoadSprite(heroData.painting) self.liveRender.material = resMgr:LoadAsset("UI_AlphaMask "..position) else self.RoleLiveGO = poolManager:LoadLive(self.livePath, go.transform.parent, Vector3.one, Vector3.zero) end self.RoleLiveGOGraphic = self.RoleLiveGO:GetComponent("SkeletonGraphic") self.RoleLiveGOTran = self.RoleLiveGO:GetComponent("RectTransform") self.RoleLiveGOGraphic.AnimationState:SetAnimation(0, "idle", true) self.RoleLiveGOTran.sizeDelta = Vector2.New(1000, 1000) -- casting技能立绘 self.RoleLiveGO2 = poolManager:LoadLive(self.livePath, go.transform.parent, Vector3.one, Vector3.zero) self.RoleLiveGOGraphic2 = self.RoleLiveGO2:GetComponent("SkeletonGraphic") self.RoleLiveGOTran2 = self.RoleLiveGO2:GetComponent("RectTransform") self.RoleLiveGOGraphic2.AnimationState:SetAnimation(0, "idle", true) self.RoleLiveGOTran2.sizeDelta = Vector2.New(1000, 1000) self.rageCache = nil if role.camp == 0 then self.liveRender.transform:SetParent(Util.GetGameObject(go, "Mask").transform) self.liveRender.transform.localScale = Vector3.one --* self.play_liveScale * 2 self.liveRender.transform.anchoredPosition = Vector3.zero--Vector2.New(self.offset[1], self.offset[2]) self.liveRender.gameObject:SetActive(true) self.liveRender.material:SetInt("_IsMask", 1) self.RoleLiveGO2.transform:SetParent(self.RootPanel.mySkillCastRoot.transform) self.RoleLiveGO2.transform.localScale = Vector3.one * self.enemy_liveScale -- * 0.75--* 1.5 self.RoleLiveGO2.transform.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2] - 300) self.RoleLiveGO2:SetActive(false) self.RoleIconGO = Util.GetGameObject(go, "func") -- self.icon = self.spLoader:LoadSprite(GetResourcePath(HeroConfig[role.roleData.roleId].Icon)) -- self.RoleIconImage = self.RoleIconGO:GetComponent("Image") -- self.RoleIconImage.sprite = self.icon -- self.RoleIconImage.color = Color.New(1,1,1,1) self.RoleIconTran = self.RoleIconGO:GetComponent("RectTransform") self.RoleIconTran.anchoredPosition = Vector2.zero Util.SetGray(self.RoleIconGO, false) self.RoleIconGO:SetActive(true) self.deadIconGO = Util.GetGameObject(self.RoleIconGO, "dead") self.effect = Util.GetGameObject(self.RoleIconGO, "effect") self.effect:SetActive(false) self.deadIconGO:SetActive(false) self.effect_dead = Util.GetGameObject(self.deadIconGO, "effect") else self.RoleLiveGO.transform:SetParent(Util.GetTransform(self.RootPanel.EnemyPanel, "live_"..position)) self.RoleLiveGO:GetComponent("RectTransform").anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2])-- * 0.5 self.RoleLiveGO.transform.localScale = Vector3.one * self.enemy_liveScale --* 0.75 self.RoleLiveGO:SetActive(true) self.RoleLiveGO2.transform:SetParent(self.RootPanel.enemySkillCastRoot.transform) self.RoleLiveGO2:GetComponent("RectTransform").anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2] + 400) self.RoleLiveGO2.transform.localScale = Vector3.one * self.enemy_liveScale --* 2 self.RoleLiveGO2:SetActive(false) self.shadow = Util.GetGameObject(self.RootPanel.EnemyPanel, "live_"..position.."/shadow") self.shadow:SetActive(true) self.effect_dead = Util.GetGameObject(go, "effect_Dead") self.deadIconGO = Util.GetGameObject(go, "buttom/dead") Util.GetGameObject(go, "buttom/pos"):GetComponent("Image").sprite = self.spLoader:LoadSprite("r_zhandou_difangweizhi_0"..role.position) self.effect_dead:SetActive(false) self.deadIconGO:SetActive(false) end -- self.RoleLiveGO.transform:SetAsFirstSibling() -- self.RoleLiveGO2.transform:SetAsFirstSibling() self.rageSlider = Util.GetGameObject(go, "rageProgress/rage"):GetComponent("Image") self.rageText = Util.GetGameObject(go, "rageProgress/Text"):GetComponent("Text") self.effect_rage = Util.GetGameObject(go, "rageProgress/effect") self.effect_rage:SetActive(self.role.Rage >= 4) self.rageSlider.fillAmount = self.role.Rage / 4 self.rageText.gameObject:SetActive(false) self.rageText.text = "" if IsOpenBattleDebug then local URoleProperty = go:GetComponent(typeof(RoleProperty)) if not URoleProperty then URoleProperty = go:AddComponent(typeof(RoleProperty)) end self.URoleProperty = URoleProperty self.URoleProperty.uid = role.uid role.data:Foreach(function (name, value) --self.URoleProperty:AddProperty(name, value) end) end self.LastBuffFloatingTime = Time.realtimeSinceStartup self.BuffFloatingCount = 0 if role.camp == 0 then local battleSorting = BattleManager.GetBattleSorting() self:ChangeCardSorting(battleSorting + position) -- local c = go:GetComponent("Canvas") -- c.sortingOrder = battleSorting + position end return self end -- function RoleView:OnSortingOrderChange(battleSorting) if self.camp == 0 then self:ChangeCardSorting(battleSorting + self.role.position) -- self.GameObject:GetComponent("Canvas").sortingOrder = battleSorting + self.role.position end end -- 改变卡牌层级 function RoleView:ChangeCardSorting(sortingOrder) if not self.oSortingOrder then self.oSortingOrder = BattleManager.GetBattleSorting() end self.GameObject:GetComponent("Canvas").sortingOrder = sortingOrder self.effect_rage:GetComponent("Canvas").sortingOrder = sortingOrder self.effect_dead:GetComponent("Canvas").sortingOrder = sortingOrder Util.AddParticleSortLayer(self.effect_rage, sortingOrder - self.oSortingOrder) Util.AddParticleSortLayer(self.effect_dead, sortingOrder - self.oSortingOrder) self.oSortingOrder = sortingOrder end function RoleView:Update() if self.role:IsRealDead() then return end local hp = self.role:GetRoleData(RoleDataName.Hp) / self.role:GetRoleData(RoleDataName.MaxHp) if self.hpCache ~= hp then local f1 = self.hpCache local f2 = hp if f1 > f2 then if self.hpTween then self.hpTween:Kill() end self.hpSlider.fillAmount = hp self.hpTween = DoTween.To(DG.Tweening.Core.DOGetter_float( function () return f1 end), DG.Tweening.Core.DOSetter_float(function (progress) self.hpPassSlider.fillAmount = progress end), f2, 0.5):SetEase(Ease.Linear) else if self.hpPassTween then self.hpPassTween:Kill() end self.hpPassSlider.fillAmount = hp self.hpPassTween = DoTween.To(DG.Tweening.Core.DOGetter_float( function () return f1 end), DG.Tweening.Core.DOSetter_float(function (progress) self.hpSlider.fillAmount = progress end), f2, 0.5):SetEase(Ease.Linear) end self.hpCache = hp end local rage = self.role.Rage / 4 if self.rageCache ~= rage then -- 判断是否播放满怒动画 if (not self.rageCache or self.rageCache < 1) and rage >= 1 then local go = BattleManager.LoadAsset(rageEffect) go.transform:SetParent(self.GameObject.transform) go.transform.localScale = Vector3.one go.transform.localPosition = Vector3.zero go:SetActive(true) BattleManager.AddDelayRecycleRes(rageEffect, go, 3) end self.effect_rage:SetActive(rage >= 1) self.rageCache = rage self.rageSlider.fillAmount = self.rageCache self.rageText.gameObject:SetActive(self.rageCache >= 1) self.rageText.text = self.role.Rage -- TODO: 战斗引导相关调整 if rage == 1 and self.camp == 0 then Game.GlobalEvent:DispatchEvent(GameEvent.Guide.GuideBattleCDDone, self) end end if self.BuffCtrl and self.BuffCtrl.Update then self.BuffCtrl:Update() end if IsOpenBattleDebug then self.role.data:Foreach(function (name, value) --self.URoleProperty:SetValue(name, value) end) end end -- 缩放 function RoleView:DoScale(scale, dur, func) if self.dsTween then self.dsTween:Kill() end self.dsTween = self.GameObject.transform.parent:DOScale(Vector3.one * scale, dur) :OnComplete(function () -- Log("DoScale = "..scale) if func then func() end end) if self.camp == 1 then if self.dsTween2 then self.dsTween2:Kill() end local liveScale = self.role.position <= 3 and 0.6 or 0.5 self.dsTween2 = self.RoleLiveGO.transform.parent:DOScale(Vector3.one * liveScale * scale, dur) end end -- 设置高亮 function RoleView:SetHighLight(isLight, eScale, dur, func) -- 设置变灰 if self.isDead then Util.SetGray(self.GameObject, true) Util.SetSpineGray(self.RoleLiveGOGraphic, true) Util.SetGray(self.deadIconGO, false) local color = Color.New(75, 75, 75, 255)/255 Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) Util.SetColor(self.deadIconGO, Color.New(1, 1, 1, 1)) self:DoScale(0.8, dur, func) return end self:DoScale(eScale, dur, func) -- 颜色变灰 local sc = isLight and 0.3 or 1 local ec = isLight and 1 or 0.3 if self.hlTween3 then self.hlTween3:Kill() end self.hlTween3 = DoTween.To(DG.Tweening.Core.DOGetter_float( function () return sc end), DG.Tweening.Core.DOSetter_float(function (progress) local color = Color.New(progress, progress, progress, 1) Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) end), ec, dur):SetEase(Ease.Linear) end -- 播放动画 function RoleView:PlaySpineAnim(gog, time, name, isLoop) if isLoop then gog.AnimationState:SetAnimation(time, name, isLoop) else local _complete = nil _complete = function(state) gog.AnimationState.Complete = gog.AnimationState.Complete - _complete gog.AnimationState:SetAnimation(0, "idle", true) end gog.AnimationState:ClearTracks() -- 清除上一个动画的影响(修复概率攻击动画播放错误的问题) gog.AnimationState:SetAnimation(time, name, isLoop) gog.AnimationState.Complete = gog.AnimationState.Complete + _complete end end function RoleView:OnSkillPlay() if self.camp == 0 then local battleSorting = BattleManager.GetBattleSorting() self:ChangeCardSorting(battleSorting + 20) -- 立绘上移动画 -- if self.rlgTween then self.rlgTween:Kill() end -- self.rlgTween = self.liveRender.transform:DOLocalMove(Vector3.New(0, 200, 0), 0.3, false):SetEase(Ease.OutSine) -- 立绘缩小 if self.rlgTween2 then self.rlgTween2:Kill() end self.rlgTween2 = self.RoleLiveGO.transform:DOScale(Vector3.one * self.play_liveScale * 0.7, 0.3):SetEase(Ease.OutSine) -- 立绘位置剧中 if self.rlgTween3 then self.rlgTween3:Kill() end self.rlgTween3 = self.RoleLiveGO.transform:DOLocalMove(Vector3.New(self.outOffset[1], self.outOffset[2] - 220, 0), 0.3, false):SetEase(Ease.OutSine) if self.liveRender then local mask2 = Util.GetGameObject(self.GameObject, "Mask2") if mask2 then self.liveRender.transform:SetParent(mask2.transform) end end local cardRenderMat = self.liveRender.material cardRenderMat:SetInt("_IsMask", 0) end self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "attack", false) end function RoleView:OnSkillEnd() if self.camp == 0 then -- body local battleSorting = BattleManager.GetBattleSorting() self:ChangeCardSorting(battleSorting + self.role.position) self.liveRender.transform:SetParent(Util.GetGameObject(self.GameObject, "Mask").transform) local cardRenderMat = self.liveRender.material cardRenderMat:SetInt("_IsMask", 1) self.RoleLiveGO.transform.localScale = Vector3.one * self.play_liveScale --Vector2.New(self.offset[1], self.offset[2]) self.RoleLiveGO.transform.localPosition = Vector3.New(self.offset[1], self.offset[2], 0) + Vector3(0, -120, 0) self.liveRender.transform.anchoredPosition = Vector2.zero--Vector2.New(self.offset[1], self.offset[2]) end end function RoleView:OnSkillCastingStart() -- 提前进入下一阶段 self.RoleLiveGO2:SetActive(true) self:PlaySpineAnim(self.RoleLiveGOGraphic2, 0, "touch", false) end function RoleView:OnSkillCastingEnd() self.RoleLiveGO2:SetActive(false) end -- 治疗 function RoleView:OnTreated(castRole, realTreat, treat) self.Floater:ArtFloating(ArtFloatingType.Treat, ArtFloatingColor.Green, treat) local sortingOrder = self.role.camp == 0 and self.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil local go = BattleManager.LoadAsset(healEffect, sortingOrder) go.transform:SetParent(self.GameObject.transform) go.transform.localScale = Vector3.one go.transform.localPosition = Vector3.zero--self.GameObject.transform.localPosition go:SetActive(true) BattleManager.AddDelayRecycleRes(healEffect, go, 3) end -- 盾效果触发 function RoleView:OnShieldTrigger(shield,isImmuneAllReduceShield) if shield.shieldType == ShieldTypeName.AllReduce then if atkRole and not isImmuneAllReduceShield then self.Floater:ImageBuffFloating("z_zhandou_wudizi_zh") end elseif shield.shieldType == ShieldTypeName.ThornsReduce then elseif shield.shieldType == ShieldTypeName.ImmuneReduce then -- body else self.Floater:ImageBuffFloating("z_zhandou_jianshang_zh") end end -- 哈哈,没打着 function RoleView:OnBeHitMiss(atkRole, skill) self.Floater:ImageBuffFloating("z_zhandou_weimingzhong_zh") end local DotTypeTip = { [0] = Language[10241], [1] = Language[10242], [2] = Language[10243], [3] = Language[10244], } -- function RoleView:OnDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) if skill and skill.continueTime > 0 and skill.attackCount > 1 then local space = skill.continueTime / skill.attackCount local count = skill.attackCount local d = math.floor(dmg/count) -- 如果平均伤害小于0 则 if d == 0 then d = dmg count = 1 end if count ~= 1 then -- 后续伤害延迟打出 self:LoopFunc(space, count - 1, function() self:OnceDamaged(atkRole, d, bCrit, finalDmg, damageType, dotType, skill) end) -- 立刻打出第一次伤害 local fd = dmg - d *(count - 1) self:OnceDamaged(atkRole, fd, bCrit, finalDmg, damageType, dotType, skill) else self:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) end else self:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) end end -- function RoleView:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) --王振兴注释,为了解决英雄死亡多段伤害显示不完整 2020/8/17 --if self.isDead then return end if dotType then if dotType == DotType.Poison then self.Floater:ArtFloating(ArtFloatingType.PoisonDamage, ArtFloatingColor.Poison, dmg,TextFloatingColor.DarkGreen) elseif dotType == DotType.Burn then self.Floater:ArtFloating(ArtFloatingType.FireDamage, ArtFloatingColor.Fire, dmg) else self.Floater:TextBuffFloating(2, DotTypeTip[dotType]..dmg) end else if bCrit then -- 暴击红色并显示暴击 self.Floater:ArtFloating(ArtFloatingType.CritDamage, ArtFloatingColor.Red, dmg) else if atkRole.isTeam then -- 异妖紫色 self.Floater:ArtFloating(ArtFloatingType.Damage, ArtFloatingColor.Purple, dmg) else if skill and skill.type == BattleSkillType.Special then -- 技能黄色 self.Floater:ArtFloating(ArtFloatingType.Damage, ArtFloatingColor.Yellow, dmg) else -- 普攻白色 self.Floater:ArtFloating(ArtFloatingType.Damage, ArtFloatingColor.White, dmg) end end end end if self.camp == 0 then -- 卡面变红 DoTween.To(DG.Tweening.Core.DOGetter_float( function () return 1 end), DG.Tweening.Core.DOSetter_float(function (progress) local color = Color.New(1, progress, progress, 1) Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) end), 0, 0.3):SetEase(Ease.Linear):OnComplete(function() DoTween.To(DG.Tweening.Core.DOGetter_float( function () return 0 end), DG.Tweening.Core.DOSetter_float(function (progress) local color = Color.New(1, progress, progress, 1) Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) end), 1, 0.1):SetEase(Ease.Linear) end) self.GameObject.transform.parent:DOShakeAnchorPos(0.3, Vector2.New(200, 100), 100, 50, false, true):OnComplete(function () self.GameObject.transform.parent.anchoredPosition = Vector2.New(self.role.position == 1 and -145 or 0, -221) end) else self.RoleLiveGOTran:DOShakeAnchorPos(0.3, Vector2.New(200, 100), 100, 50, false, true):OnComplete(function () self.RoleLiveGO.transform.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2] ) end) self.RoleLiveGOGraphic:DOColor(Color.New(1,0,0,1), 0.3):OnComplete(function () self.RoleLiveGOGraphic:DOColor(Color.New(1,1,1,1), 0.1) end) end -- 受击放大1.2倍 self:DoScale(1.2, 0.3, function() self:DoScale(1, 0.1) end) -- 播放受击动画 self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "hit", false) -- 播放受击特效 if skill then local combatId = BattleManager.GetCombatIdBySkin(skill.id, atkRole.roleData.skinId) local combat = BattleManager.GetSkillCombat(combatId) self.SkillCaster:CheckSkillHitEffect("hit", combat, skill) end end function RoleView:OnHealed(castRole) local sortingOrder = self.role.camp == 0 and self.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil local go = BattleManager.LoadAsset(healEffect, sortingOrder) go.transform:SetParent(self.GameObject.transform) go.transform.localScale = Vector3.one go.transform.localPosition = Vector3.zero--self.GameObject.transform.localPosition go:SetActive(true) BattleManager.AddDelayRecycleRes(healEffect, go, 3) end -- 怒气值改变 function RoleView:RoleRageChange(deltaRage) if deltaRage ~= 0 then if deltaRage > 0 then self.Floater:ImageBuffFloating("z_zhandou_nuqijia_zh", nil, deltaRage) else self.Floater:ImageBuffFloating("z_zhandou_nuqijian_zh", nil, deltaRage,0,1) end end end function RoleView:OnDead() if self.hpTween then self.hpTween:Kill() end if self.hpPassTween then self.hpPassTween:Kill() end self.hpSlider.fillAmount = 0 self.hpPassSlider.fillAmount = 0 self.rageSlider.fillAmount = 0 self.rageText.text = "" end -- 暴毙 function RoleView:onBeSecKill() self.Floater:ImageBuffFloating("z_zhandou_baobi_zh") end function RoleView:OnRealDead() if self.camp == 0 then Util.SetGray(self.RoleIconGO, true) self.effect_dead:SetActive(true) self.effect_rage:SetActive(false) else self.effect_rage:SetActive(false) self.effect_dead:SetActive(true) self.RoleLiveGO:SetActive(true) local order = BattleLogic.CurOrder BattleManager.PauseBattle() self.RoleLiveGOGraphic:DOFade(1, 0):OnComplete(function () self.RoleLiveGOGraphic:DOFade(0, 1):OnComplete(function () BattleManager.ResumeBattle() self.RoleLiveGOGraphic.color = Color.New(1,1,1,1) if order ~= BattleLogic.CurOrder then return end self.GameObject:SetActive(false) self.RoleLiveGO:SetActive(false) self.effect_dead:SetActive(false) if self.shadow then self.shadow:SetActive(false) end end) end) end self.deadIconGO:SetActive(true) -- Util.SetGray(self.GameObject, true) -- Util.SetSpineGray(self.RoleLiveGOGraphic, true) local color = Color.New(75, 75, 75, 255)/255 Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) Util.SetGray(self.deadIconGO, false) -- if self.hlTween then -- self.hlTween:Kill() -- end -- self.hlTween = self.GameObject.transform.parent:DOScale(Vector3.one * 0.8, 0.2) self.BuffCtrl:Dispose() self.RoleLiveGOGraphic.freeze = true self.RoleLiveGOGraphic2.freeze = true self.isDead = true end function RoleView:onRoleRelive() if self.camp == 0 then Util.SetGray(self.RoleIconGO, false) else self.effect_dead:SetActive(false) self.GameObject:SetActive(true) self.RoleLiveGO:SetActive(true) if self.shadow then self.shadow:SetActive(true) end end self.deadIconGO:SetActive(false) local color = Color.New(1, 1, 1, 1) Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) Util.SetGray(self.GameObject, false) Util.SetSpineGray(self.RoleLiveGOGraphic, false) self:DoScale(1, 0) self.RoleLiveGOGraphic.freeze = false self.RoleLiveGOGraphic2.freeze = false self.isDead = false self.hpSlider.fillAmount=self.role:GetRoleData(RoleDataName.Hp) / self.role:GetRoleData(RoleDataName.MaxHp) -- self.Floater:ImageBuffFloating("z_zhandou_fuhuo_zh") end function RoleView:onDispose() self.GameObject.transform.parent.localScale = Vector3.one self.spLoader:Destroy() self.Floater:Dispose() self.BuffCtrl:Dispose() -- Util.SetSpineGray(self.RoleLiveGOGraphic, false) Util.SetSpineGray(self.RoleLiveGOGraphic2, false) Util.SetColor(self.RoleLiveGOGraphic, Color.New(1, 1, 1, 1)) Util.SetColor(self.RoleLiveGOGraphic2, Color.New(1, 1, 1, 1)) self.RoleLiveGOGraphic.freeze = false self.RoleLiveGOGraphic2.freeze = false if self.camp == 1 then poolManager:UnLoadLive(self.livePath, self.RoleLiveGO) end poolManager:UnLoadLive(self.livePath, self.RoleLiveGO2) -- 回收本节点 BattlePool.RecycleItem(self.GameObject, self.camp == 0 and BATTLE_POOL_TYPE.MY_ROLE or BATTLE_POOL_TYPE.ENEMY_ROLE) end