miduo_client/Assets/ManagedResources/~Lua/Modules/Battle/View/Unit/PlayerView.lua

999 lines
42 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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/MingZi2")
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_caomaolufei"
else
self.livePath = "live2d_namei"
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.SingleHitEffectRoot=Util.GetGameObject(self.liveRoot, "SingleHitEffectRoot")
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)
self.startPos=self.RoleLiveGO.transform.position
LogError("self.roleId==========================="..self.roleId)
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,self.combat.CloseRangeHitScale==nil and Vector3.one or Vector3.New( self.combat.CloseRangeHitScale[1]/1000, self.combat.CloseRangeHitScale[2]/1000,1), 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 = self.combat.CloseRangeHitScale==nil and Vector3.one or Vector3.New( self.combat.CloseRangeHitScale[1]/1000, self.combat.CloseRangeHitScale[2]/1000,1)
self.RoleSkillLiveGoTran.sizeDelta = Vector2.New(1000, 1000)
self.RoleSkillLiveGoGraphic = self.RoleSkillLiveGo:GetComponent("SkeletonGraphic")
self.RoleSkillLiveGoGraphic.AnimationState:SetAnimation(0, "idle", true)
self.RoleSkillLiveGoGraphic.AnimationState.TimeScale=self.combat.SkillTimeScale/1000
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, self.combat2.CloseRangeHitScale==nil and Vector3.one or Vector3.New( self.combat2.CloseRangeHitScale[1]/1000, self.combat2.CloseRangeHitScale[2]/1000,1), 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
if self.combat2.CloseRangeHitOffset~=nil then
self.RoleSkillLiveGoTran2.localPosition = Vector2.New(self.combat2.CloseRangeHitOffset[1], self.combat2.CloseRangeHitOffset[2])-- * 0.5
else
self.RoleSkillLiveGoTran2.localPosition = Vector2.New(0, 0)-- * 0.5
end
self.RoleSkillLiveGoTran2.localScale = self.combat2.CloseRangeHitScale==nil and Vector3.one or Vector3.New( self.combat2.CloseRangeHitScale[1]/1000, self.combat2.CloseRangeHitScale[2]/1000,1)
self.RoleSkillLiveGoTran2.sizeDelta = Vector2.New(1000, 1000)
self.RoleSkillLiveGoGraphic2 = self.RoleSkillLiveGo2:GetComponent("SkeletonGraphic")
self.RoleSkillLiveGoGraphic2.AnimationState.TimeScale=self.combat2.SkillTimeScale/1000
-- 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
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 count = type(combat.SkillNumbetTime[1][1]) == "userdata" and 1 or #combat.SkillNumbetTime
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
-- 伤害文字延时,有些受击特效不是立刻播放文字
-- 伤害文字
-- if count ~= 1 and skill.SkillNumbetTime==nil and skill.SkillNumbetTime~=0 then
if count ~=1 then
if combat.SkillNumbetTime and combat.SkillNumbetTime[1] and (type(combat.SkillNumbetTime[1][1]) ~= "userdata" and combat.SkillNumbetTime[1][1]~=0) then
for i = 1, #combat.SkillNumbetTime do
self:DelayFunc(combat.SkillNumbetTime[i][2]/1000, function()
local fd = dmg - d *(count - 1)
self:OnceDamaged(atkRole, fd, bCrit, finalDmg, damageType, dotType, skill)
-- 被伤害卡牌表现
self:DOHitEffect(continue)
self:DOHitMoveMent(continue,combat)
end)
end
end
-- 多段伤害
-- 后续伤害延迟打出
-- 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:DelayFunc(delay/1000, function()
self:OnceDamaged(atkRole, dmg, bCrit, finalDmg, damageType, dotType, skill)
-- 被伤害卡牌表现
self:DOHitEffect()
self:DOHitMoveMent(nil,combat)
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:DOHitMoveMent(time,combat,isback)
-- 时间修正
if not combat.AttackMove then
return
end
if not time or time < 0.05 then
time = 0.2
end
local target=Vector3.New(self.camp==0 and self.startPos.x-combat.AttackMove[1]/1000 or self.startPos.x+combat.AttackMove[1]/1000,self.startPos.y+combat.AttackMove[2] ,100)
self.RoleLiveGO.transform:DOMove(target, time, false):OnComplete(function ()
self.RoleLiveGO.transform:DOMove(self.startPos, time, false)
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