local RoleConfig = ConfigManager.GetConfig(ConfigName.RoleConfig) local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig) local shenbingSkill=ConfigManager.GetConfig(ConfigName.ShenBingSkill) local SkillLogicConfig = ConfigManager.GetConfig(ConfigName.SkillLogicConfig) local BattlePanel = require("Modules/Battle/View/GuideBattleLogic") local healEffect = "c_xy_0012_skeff_tapsk_healeff" local rageEffect = "s_jieling_hs_3006_skeff_casting_buff_nuqi" local reliveEffect1 = "fx_chongsheng_lianhua" local reliveEffect2 = "fx_chongsheng_lizhi" PlayerView = BattleUnit.New() function PlayerView.New(go, role, position, root) local o = BattleUnit.New(go, role, position, root) setmetatable(o, PlayerView) PlayerView.__index = PlayerView o:ctor(go, role, position, root) return o end function PlayerView:onCreate(go, role, position, root) self.RootPanel = root self.GameObject = go self.role = role self.camp = role.camp self.spLoader = SpriteLoader.New() self.castingEfectNode = self.RootPanel.mySkillCast self.castingNameNode = Util.GetGameObject(self.castingEfectNode, "TongYong_Casting_Xia/DongHua/MingZi") self.hpSlider = Util.GetGameObject(go, "lvObj/hpProgress/hp"):GetComponent("Image") self.hpPassSlider = Util.GetGameObject(go, "lvObj/hpProgress/hpPass"):GetComponent("Image") self.yujiaSlider=Util.GetGameObject(go, "lvObj/hpProgress/yujia"):GetComponent("Image") self.nameParent = Util.GetGameObject(go, "Name") self.proPar=Util.GetGameObject(go, "Pro") self.nameText = Util.GetGameObject(go, "Text"):GetComponent("Text") self.level = Util.GetGameObject(go, "lvObj/lv/Text"):GetComponent("Text") self.elementImg = Util.GetGameObject(go, "Pro/Image"):GetComponent("Image") self.bg1 = Util.GetGameObject(go, "Bg1"):GetComponent("Image") self.bg2 = Util.GetGameObject(go, "Bg2"):GetComponent("Image") self.hpCache = self.role:GetRoleData(RoleDataName.Hp) / self.role:GetRoleData(RoleDataName.MaxHp) self.hpSlider.fillAmount = self.hpCache self.hpPassSlider.fillAmount = self.hpCache self.yujiaSlider.fillAmount = 0 local roleId=role.roleData.roleId self.roleId=role.roleData.roleId self.weaponObj=Util.GetGameObject(go, "weapon") self.weaponImg=Util.GetGameObject(go, "weapon/Image"):GetComponent("Image") self.weaponObj:SetActive(false) -- 身外化身引导立绘展示处理 if self.roleId == 21061 then self.skinId = 0 if NameManager.roleSex == ROLE_SEX.BOY then self.livePath = "live2d_npc_boy" else self.livePath = "live2d_npc_girl" end else local live=HeroConfig[role.roleData.roleId].Live -- 判断是否有皮肤 if not role.roleData.skinId or role.roleData.skinId == 0 then self.skinId = 0 else self.skinId = role.roleData.skinId self.roleId=self.skinId end --如果英雄装备皮肤 if self.skinId and self.skinId > 0 then roleId = self.skinId local skin = ConfigManager.GetConfigDataByKey(ConfigName.HeroSkin,"Type",roleId) if skin then live = skin.Live end end self.livePath = GetResourcePath(live) self.livePath2=GetResourcePath(HeroConfig[role.roleData.roleId].Painting) -- if role.roleData.roleId==10016 or role.roleData.roleId== 21063 then -- self.livePath2=GetResourcePath(HeroConfig[role.roleData.roleId].Painting) -- end end self.play_liveScale = RoleConfig[roleId].play_liveScale self.enemy_liveScale = RoleConfig[roleId].enemy_liveScale self.offset = RoleConfig[roleId].offset self.outOffset = RoleConfig[roleId].enemy_offset self.spAtkTime = RoleConfig[roleId].CastingSkills/1000 self.atkSoundTime = RoleConfig[roleId].CastingAudio/1000 self.attackSound = RoleConfig[roleId].sond self.readingName = GetLanguageStrById(HeroConfig[role.roleData.roleId].ReadingName) self.nameText.text = self.readingName SetTextVerTial(self.nameText,Vector3.New(33.6,-7.4,0),"MiddleLeft",nil,6) self.level.text = role:GetRoleData(RoleDataName.Level) self.elementImg.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") self.nameObj:SetActive(false) -- if BattlePanel and BattlePanel.guideType then -- LogError("11111111111111==="..BattlePanel.guideType) -- if BattlePanel.guideType==3 then -- LogError("222222222") -- self.nameParent:SetActive(true) -- self.proPar:SetActive(true) -- else -- self.nameParent:SetActive(false) -- self.proPar:SetActive(false) -- end -- else -- self.nameParent:SetActive(false) self.proPar:SetActive(false) -- end self.nameParent.transform.parent.gameObject:SetActive(false) --self.proPar:SetActive(true) self.bg1.sprite = self.spLoader:LoadSprite(GetBattleHeroCardStarBg[role.roleData.star]) self.bg2.sprite = self.spLoader:LoadSprite(GetHeroCardStarFg[role.roleData.star]) self.starGrid = Util.GetGameObject(go, "StarGrid") local star = role.roleData.star or 5 local starType = 1 if role.roleData.godSoulLv and role.roleData.godSoulLv > 0 then star = role.roleData.godSoulLv starType = 3 self.bg2.sprite = self.spLoader:LoadSprite("t_zhandoukuang_zhuangshi006") -- self.starGrid:GetComponent("Image").enabled = false end --SetCardStars(self.starGrid, star, starType) 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.liveRoot = Util.GetGameObject(self.RootPanel.PlayerPanel, "live_"..position) self.liveRoot:GetComponent("Canvas").overrideSorting = true self.shadow = Util.GetGameObject(self.liveRoot, "shadow") self.shadow:SetActive(true) self.RoleLiveGO = poolManager:LoadLive(self.livePath, go.transform.parent, Vector3.one, Vector3.zero) self.RoleLiveGOTran = self.RoleLiveGO:GetComponent("RectTransform") self.RoleLiveGOTran:SetParent(self.liveRoot.transform) self.RoleLiveGOTran.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2])-- * 0.5 self.RoleLiveGOTran.localScale = Vector3.one * self.enemy_liveScale self.RoleLiveGOTran.sizeDelta = Vector2.New(1000, 1000) self.RoleLiveGOGraphic = self.RoleLiveGO:GetComponent("SkeletonGraphic") -- local t= self.RoleLiveGOGraphic.SkeletonData.animations self.RoleLiveGOGraphic.AnimationState:SetAnimation(0, "idle", true) self.RoleLiveGO:SetActive(true) local combatId = BattleManager.GetCombatIdBySkin(self.role.skill[1],self.skinId) self.combat = BattleManager.GetSkillCombat(combatId) self.SkillAttackDisplaceoffset=self.combat.AttackDisplaceoffset if self.combat.CloseRangeHit~=nil and self.combat.CloseRangeHit~="" then self.RoleSkillLiveGo=poolManager:LoadLive(self.combat.CloseRangeHit, go.transform.parent, Vector3.one, Vector3.zero) self.RoleSkillLiveGoTran = self.RoleSkillLiveGo:GetComponent("RectTransform") self.RoleSkillLiveGoTran:SetParent(self.RoleLiveGO.transform) self.RoleSkillLiveGoTran.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2])-- * 0.5 self.RoleSkillLiveGoTran.localScale = Vector3.one self.RoleSkillLiveGoTran.sizeDelta = Vector2.New(1000, 1000) self.RoleSkillLiveGoGraphic = self.RoleSkillLiveGo:GetComponent("SkeletonGraphic") self.RoleSkillLiveGoGraphic.AnimationState:SetAnimation(0, "idle", true) end local combatId2 = BattleManager.GetCombatIdBySkin(self.role.superSkill[1],self.skinId) self.combat2 = BattleManager.GetSkillCombat(combatId2) if self.combat2.CloseRangeHit~=nil and self.combat2.CloseRangeHit~="" then self.superSkillAttackDisplaceoffset=self.combat2.AttackDisplaceoffset self.RoleSkillLiveGo2=poolManager:LoadLive(self.combat2.CloseRangeHit, go.transform.parent, Vector3.one, Vector3.zero) self.RoleSkillLiveGoTran2 = self.RoleSkillLiveGo2:GetComponent("RectTransform") self.RoleSkillLiveGoTran2:SetParent(self.RoleLiveGO.transform) -- self.RoleSkillLiveGoTran2.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2])-- * 0.5 self.RoleSkillLiveGoTran2.localPosition = Vector2.New(self.combat2.CloseRangeHitOffset[1], self.combat2.CloseRangeHitOffset[2])-- * 0.5 self.RoleSkillLiveGoTran2.localScale = Vector3.one self.RoleSkillLiveGoTran2.sizeDelta = Vector2.New(1000, 1000) self.RoleSkillLiveGoGraphic2 = self.RoleSkillLiveGo2:GetComponent("SkeletonGraphic") -- local t= self.RoleLiveGOGraphic.SkeletonData.animations self.RoleSkillLiveGoGraphic2.AnimationState:SetAnimation(0, "idle", true) self.RoleSkillLiveGo2:SetActive(true) end -- 卡牌立绘显示 --self.liveRender = Util.GetGameObject(go, "Mask/icon"):GetComponent("RawImage") --self.liveRender.texture, self.aaa , _, self.RoleLiveParnet = 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.gameObject:SetActive(false) -- self.liveRender.material = resMgr:LoadAsset("UI_AlphaMask "..position) -- 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) -- casting技能立绘 LogRed("painting=="..self.livePath2) self.RoleLiveGO2 = poolManager:LoadLive(self.livePath2, go.transform.parent, Vector3.one, Vector3.zero) 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.RoleLiveGOGraphic2 = self.RoleLiveGO2:GetComponent("SkeletonGraphic") self.RoleLiveGOTran2 = self.RoleLiveGO2:GetComponent("RectTransform") -- if role.roleData.roleId==10016 or role.roleData.roleId== 21063 then -- self.RoleLiveGOGraphic2.AnimationState:SetAnimation(0, "idle", true) -- else -- self.RoleLiveGOGraphic2.AnimationState:SetAnimation(0, "idle", true) -- end self.RoleLiveGOTran2.sizeDelta = Vector2.New(1000, 1000) local toward=0 if self.skinId~=0 then toward=RoleConfig[roleId].Toward else toward=HeroConfig[role.roleData.roleId].Toward end if toward==1 then local mirrOffset=RoleConfig[roleId].mirrorimage_offset if mirrOffset and mirrOffset[1]~=0 and mirrOffset[2]~=0 then self.RoleLiveGO:GetComponent("RectTransform").anchoredPosition = Vector2.New(mirrOffset[1],mirrOffset[2]) self.RoleLiveGO2:GetComponent("RectTransform").anchoredPosition = Vector2.New(mirrOffset[1],mirrOffset[2]-300) self.outOffset = RoleConfig[roleId].mirrorimage_offset end self.RoleLiveGO:GetComponent("RectTransform").rotation = Quaternion.Euler(Vector3.New(0,180, 0)) self.RoleLiveGO2:GetComponent("RectTransform").rotation = Quaternion.Euler(Vector3.New(0,180, 0)) end -- self.RoleIconGO = Util.GetGameObject(go, "func") self.RoleIconGO:SetActive(true) Util.SetGray(self.RoleIconGO, false) self.RoleIconTran = self.RoleIconGO:GetComponent("RectTransform") self.RoleIconTran.anchoredPosition = Vector2.zero -- 死亡动画 self.deadIconGO = Util.GetGameObject(self.RoleIconGO, "dead") self.deadIconGO:SetActive(false) self.effect_dead = Util.GetGameObject(self.deadIconGO, "effect") -- 怒气显示 self.rageCache = nil self.rageSlider = Util.GetGameObject(go, "lvObj/rageProgress/rage"):GetComponent("Image") self.rageText = Util.GetGameObject(go, "lvObj/rageProgress/Text"):GetComponent("Text") self.effect_rage = Util.GetGameObject(go, "lvObj/rageProgress/effect") self.effect_rage:SetActive(self.role.Rage >= 4) self.rageSlider.fillAmount = self.role.Rage / 4 self.effect_fly = Util.GetGameObject(go, "c_long_zhandou_lizi") self.effect_fly:SetActive(self.role.star>=14) self.rageText.gameObject:SetActive(false) self.rageText.text = "" self.lvHpObj=Util.GetGameObject(go, "lvObj") self.buffRoot=Util.GetGameObject(go, "buff") -- if position<=3 then -- self.buffRoot:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,389,0) -- self.lvHpObj:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,469,0) -- self.nameParent:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,172,0) -- self.proPar:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,238,0) -- else -- self.buffRoot:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,-80,0) -- self.lvHpObj:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,0,0) -- self.nameParent:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,-60,0) -- self.proPar:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,6,0) -- end self.buffRoot:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,389,0) self.lvHpObj:GetComponent("RectTransform").anchoredPosition=Vector3.New(0,469,0) self.nameParent:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,172,0) self.proPar:GetComponent("RectTransform").anchoredPosition=Vector3.New(-86,238,0) self.currAniName="" -- 伤害文字显示 self.LastBuffFloatingTime = Time.realtimeSinceStartup self.BuffFloatingCount = 0 -- 层级设置 local battleSorting = BattleManager.GetBattleSorting() self:ChangeCardSorting(battleSorting) -- 飘字管理 self.Floater = FloatNode.New(self, self.RootPanel, self.GameObject) -- buff管理 self.BuffCtrl = BuffCtrl.New(self, self.buffRoot) -- 创建技能播放器 self.SkillCaster = SkillCaster.New(self, self.spAtkTime, self.atkSoundTime, self.attackSound, self.castingEfectNode, self.castingNameNode) -- 事件监听 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) role.Event:AddEvent(BattleEventName.RoleBeExile,self.OnRoleExile,self) role.Event:AddEvent(BattleEventName.RoleExileEnd,self.OnRoleExileEnd,self) role.Event:AddEvent(BattleEventName.BloodValueChange,self.OnBloodValueChange,self) role.Event:AddEvent(BattleEventName.WeaponSkillCast,self.OnWeaponSkillCast,self) 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 -- local bbb={} -- bbb=self.URoleProperty:GetNames() -- --LogError("# aaa len=="..#bbb) -- for key, value in pairs(bbb) do -- LogError("# aaa i=="..value) -- end role.data:Foreach(function (name, value) --self.URoleProperty:AddProperty(name, value) end) end end -- function PlayerView:OnSortingOrderChange(battleSorting) self:ChangeCardSorting(battleSorting) end -- type==1 增加 function PlayerView:OnBloodValueChange(value,type,num) self.yujiaSlider.fillAmount = value if type and num then if type==1 then self.Floater:ArtFloating(ArtFloatingType.yujiaAdd, ArtFloatingColor.Green,num,TextFloatingColor.Green) end end end function PlayerView:OnWeaponSkillCast(value,type,num) self.weaponObj:SetActive(true) BattleLogic.WaitForTrigger(1.5,function() self.weaponObj:SetActive(false) end) end function PlayerView:GetWeaponObj() return self.weaponObj end -- 改变卡牌层级 function PlayerView:ChangeCardSorting(sortingOrder) -- 重计算层级 local pos = self.role.position local sort = sortingOrder + (pos>3 and(6-pos+1) or pos) self.liveRoot:GetComponent("Canvas").sortingOrder = sort self.GameObject:GetComponent("Canvas").sortingOrder = sort + 2 --血条层级加一 self.effect_rage:GetComponent("Canvas").sortingOrder = sort + 3 self.effect_dead:GetComponent("Canvas").sortingOrder = sort + 3 Util.SetParticleSortLayer(self.effect_rage, sort + 3) Util.SetParticleSortLayer(self.effect_dead, sort + 3) SetParticleSortLayer(self.effect_fly,sort+3) end function PlayerView: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 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 PlayerView:DoScale(scale, dur, func) if self.dsTween then self.dsTween:Kill() end if self.GameObject==nil then return 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.dsTween2 then self.dsTween2:Kill() end --local liveScale = self.role.position <= 3 and 0.6 or 0.5 local liveScale = 0.6 -- self.dsTween2 = self.RoleLiveGO.transform.parent:DOScale(Vector3.one * liveScale * scale, dur) end --角色被放逐 function PlayerView:OnRoleExile(role) local color1 = Color.New(1, 1, 1, 0.4) --Util.SetColor(self.liveRender, color) Util.SetColor(self.RoleLiveGOGraphic, color1) end --角色放逐结束 function PlayerView:OnRoleExileEnd(role) local color2 = Color.New(1, 1, 1, 1) --Util.SetColor(self.liveRender, color) Util.SetColor(self.RoleLiveGOGraphic, color2) end -- 设置高亮 function PlayerView: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(1, 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 aaa=1 if self.role.isExile then aaa=0.4 end local color = Color.New(progress, progress, progress,aaa) Util.SetColor(self.GameObject, color) Util.SetColor(self.RoleLiveGOGraphic, color) end), ec, dur):SetEase(Ease.Linear) end -- 播放动画 function PlayerView:PlaySpineAnim(gog, time, name, isLoop) if startWith(gog.gameObject.name, "live2d_npc") then return end if isLoop then self.currAniName=name gog.AnimationState:SetAnimation(time, name, isLoop) else local _complete = nil _complete = function(state) gog.AnimationState.Complete = gog.AnimationState.Complete - _complete self.currAniName="idle" gog.AnimationState:SetAnimation(0, "idle", true) end gog.AnimationState:ClearTracks() -- 清除上一个动画的影响(修复概率攻击动画播放错误的问题) self.currAniName=name gog.AnimationState:SetAnimation(time, name, isLoop) gog.AnimationState.Complete = gog.AnimationState.Complete + _complete end end --单纯显示提示文字 function PlayerView:OnShowHintText(_ArtFontType) local config = BattleManager.GetArtFontConfig(_ArtFontType) if config then self.Floater:ImageBuffFloating(config) end end function PlayerView:OnSkillPlay(type,combat) if not self.GameObject then return end self.lvHpObj:SetActive(false) --local battleSorting = BattleManager.GetBattleSorting() -- self:ChangeCardSorting(battleSorting + 20) -- 立绘缩小 -- if self.rlgTween2 then self.rlgTween2:Kill() end -- self.rlgTween2 = self.RoleLiveParnet.transform:DOScale(Vector3.one * 0.85, 0.3):SetEase(Ease.OutSine) -- -- 立绘位置剧中 -- if self.rlgTween3 then self.rlgTween3:Kill() end -- self.rlgTween3 = self.RoleLiveParnet.transform:DOLocalMove(Vector3.New(0, 100, 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) -- if self.role.roleData.roleId==10016 then -- type=1 -- end local humanname="attack" local name="attack" if type ~=0 then humanname="skill" end LogError("skill触发") self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, humanname, false) if type==0 and self.RoleSkillLiveGoGraphic ~= nil then self:PlaySpineAnim(self.RoleSkillLiveGoGraphic, 0, name, false) elseif self.RoleSkillLiveGoGraphic2~=nil and self.combat2.EffectType==8 then -- name="skill" -- local offset=Vector3.New(self.combat2.Offset[1],self.combat2.Offset[2],0) -- self.RoleSkillLiveGoGraphic2.gameObject.transform.localPosition=Vector3.New(self.combat2.Offset[1],self.combat2.Offset[2],0) self:PlaySpineAnim(self.RoleSkillLiveGoGraphic2, 0, name, false) end end function PlayerView:OnSkillEnd() if not self.GameObject then return end -- local battleSorting = BattleManager.GetBattleSorting() -- self:ChangeCardSorting(battleSorting) -- self.liveRender.transform:SetParent(Util.GetGameObject(self.GameObject, "Mask").transform) --local cardRenderMat = self.liveRender.material --cardRenderMat:SetInt("_IsMask", 1) -- 动画播放就停止 --if self.rlgTween2 then self.rlgTween2:Kill() end --if self.rlgTween3 then self.rlgTween3:Kill() end --self.RoleLiveParnet.transform.localScale = Vector3.one --Vector2.New(self.offset[1], self.offset[2]) --self.RoleLiveParnet.transform.localPosition = Vector3(0, 0, 0) --self.liveRender.transform.anchoredPosition = Vector2.zero--Vector2.New(self.offset[1], self.offset[2]) self.lvHpObj:SetActive(true) end function PlayerView:OnSkillCastingStart(type) -- 提前进入下一阶段 self.RoleLiveGO2:SetActive(true) self.lvHpObj:SetActive(false) local name="idle" type=0 -- if (self.role.roleData.roleId==10016 or self.role.roleData.roleId== 21063 or self.role.roleData.roleId== 21064) then -- type=0 -- name="animation" -- coroutine.start(function() -- coroutine.wait(1.1) -- end) -- end -- if type and type~=0 then -- name="skill" -- end -- coroutine.start(function() -- coroutine.wait(1.1) -- end) self:PlaySpineAnim(self.RoleLiveGOGraphic2, 0,name, false) end function PlayerView:OnSkillCastingEnd() self.RoleLiveGO2:SetActive(false) end -- 治疗 function PlayerView:OnTreated(castRole, realTreat, treat) self.Floater:ArtFloating(ArtFloatingType.Treat, ArtFloatingColor.Green, treat) local sortingOrder = self.GameObject:GetComponent("Canvas").sortingOrder + 21 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 PlayerView: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 PlayerView: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 PlayerView:OnDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill,isImmune) if isImmune and isImmune==true then return end if skill then -- 技能配置 local combatId = BattleManager.GetCombatIdBySkin(skill.id, atkRole.roleData.skinId) local combat = BattleManager.GetSkillCombat(combatId) -- local delay = combat.DamageDelay or 0 local continue = skill.continueTime or 0 local count = skill.attackCount or 1 local space = continue / count local d = math.floor(dmg / count) -- 如果平均伤害小于0 则 if d == 0 then d = dmg count = 1 end if BattleManager.IsBattleTestPanel() then LogYellow(string.format("目标阵营:%s, 位置:%s, 总伤害:%s, 伤害段数:%s,每段伤害:%s", self.camp, self.role.position, dmg, count, d)) end -- 伤害文字延时,有些受击特效不是立刻播放文字 self:DelayFunc(delay/1000, function() -- 伤害文字 -- if count ~= 1 and skill.skillnumberTime==nil and skill.skillnumberTime~=0 then if count ~= 1 and skill.skillnumberTime==nil 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) -- 被伤害卡牌表现 self:DOHitEffect(continue) else self:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) -- 被伤害卡牌表现 self:DOHitEffect() end end) -- 播放特效 self.SkillCaster:CheckSkillHitEffect("hit", combat, skill) else if BattleManager.IsBattleTestPanel() then LogYellow(string.format("目标阵营:%s, 位置:%s, 总伤害:%s", self.camp, self.role.position, dmg)) end -- 伤害文字 self:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill) -- 被伤害卡牌表现 self:DOHitEffect() end end -- function PlayerView: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) elseif dotType == DotType.Blooding then self.Floater:ArtFloating(ArtFloatingType.BleedDamage, 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 -- 播放受击动画 self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "hit", false) end -- 播放卡牌受击效果 function PlayerView:DOHitEffect(time, func) -- 时间修正 if not time or time < 0.3 then time = 0.3 end if self.currAniName=="hit" then -- 受击放大1.2倍 self:DoScale(1.2, 0.2) -- 卡面变红 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.3):SetEase(Ease.Linear):SetDelay(time) end) -- 震动 self.RoleLiveGOTran:DOShakeAnchorPos(time, Vector2.New(200, 100), 100, 50, false, true):OnComplete(function () self.RoleLiveGOTran.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2] ) -- if self.GameObject then -- self.GameObject.transform.parent.anchoredPosition = Vector2.New(self.role.position == 1 and -145 or 0, -221) -- end -- 恢复大小 self:DoScale(1, 0.1) -- 回调 if func then func() end end) else if func then func() end end end function PlayerView:OnHealed(castRole) local sortingOrder = self.GameObject:GetComponent("Canvas").sortingOrder + 21 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 PlayerView:RoleRageChange(deltaRage) if self.role:IsRealDead() then return end 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 PlayerView: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.yujiaSlider.fillAmount = 0 --self.RoleLiveGO.gameObject:SetActive(false) self.lvHpObj:SetActive(false) self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "death", false) --死亡后不把怒气条显示清空,处理触发不灭怒气不足四点 怒气条清空 2021/09/01 --self.rageSlider.fillAmount = 0 self.rageText.text = "" end -- 暴毙 function PlayerView:onBeSecKill() self.Floater:ImageBuffFloating("z_zhandou_baobi_zh") end function PlayerView:OnRealDead() Util.SetGray(self.RoleIconGO, true) self.effect_dead:SetActive(true) self.effect_rage:SetActive(false) 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) self.deadIconGO:SetActive(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) self.BuffCtrl:Dispose() self.RoleLiveGOGraphic.freeze = true self.RoleLiveGOGraphic2.freeze = true self.isDead = true end function PlayerView:onRoleRelive() self.GameObject:SetActive(true) Util.SetGray(self.RoleIconGO, false) 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.yujiaSlider.fillAmount = 0 self.hpSlider.fillAmount=self.role:GetRoleData(RoleDataName.Hp) / self.role:GetRoleData(RoleDataName.MaxHp) local sortingOrder = self.GameObject:GetComponent("Canvas").sortingOrder + 21 local go = BattleManager.LoadAsset(reliveEffect1,sortingOrder) go.transform:SetParent(self.GameObject.transform) go.transform.localScale = Vector3.one go.transform.localPosition = Vector3.New(0,-180,0) go:SetActive(true) local go2 = BattleManager.LoadAsset(reliveEffect2,sortingOrder) go2.transform:SetParent(self.GameObject.transform) go2.transform.localScale = Vector3.one go2.transform.localPosition = Vector3.New(0,-180,0) go2:SetActive(true) BattleManager.AddDelayRecycleRes(reliveEffect1, go, 3) BattleManager.AddDelayRecycleRes(reliveEffect2, go, 3) self.Floater:ImageBuffFloating("z_zhandou_fuhuo_zh") self.RoleLiveGO.gameObject:SetActive(true) self.lvHpObj:SetActive(true) end function PlayerView:onDispose() self.GameObject.transform.parent.localScale = Vector3.one self.role.Event:RemoveEvent(BattleEventName.BloodValueChange,self.OnBloodValueChange,self) 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 self.RoleLiveGO:GetComponent("RectTransform").rotation = Quaternion.Euler(Vector3.New(0,0, 0)) self.RoleLiveGO2:GetComponent("RectTransform").rotation = Quaternion.Euler(Vector3.New(0,0, 0)) poolManager:UnLoadLive(self.livePath2, self.RoleLiveGO2) poolManager:UnLoadLive(self.livePath, self.RoleLiveGO) poolManager:UnLoadLive(self.combat2.CloseRangeHit, self.RoleSkillLiveGo2) poolManager:UnLoadLive(self.combat.CloseRangeHit, self.RoleSkillLiveGo) -- -- 回收本节点 BattlePool.RecycleItem(self.GameObject, BATTLE_POOL_TYPE.MY_ROLE) self.GameObject = nil end return PlayerView