miduo_client/Assets/ManagedResources/~Lua/Modules/Battle/View/RoleView.lua

1943 lines
72 KiB
Lua
Raw Normal View History

2020-08-25 15:46:38 +08:00
require("Modules.Battle.Logic.Misc.BattleDefine")
2020-05-09 13:31:21 +08:00
local FEAConfig = require("Modules/Battle/Config/FightEffectAudioConfig")
RoleView = {}
RoleView.__index = RoleView
local MonsterViewConfig = ConfigManager.GetConfig(ConfigName.MonsterViewConfig)
local MonsterConfig = ConfigManager.GetConfig(ConfigName.MonsterConfig)
local RoleConfig = ConfigManager.GetConfig(ConfigName.RoleConfig)
local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
local SkillLogicConfig = ConfigManager.GetConfig(ConfigName.SkillLogicConfig)
local BuffEffectConfig = ConfigManager.GetConfig(ConfigName.BuffEffectConfig)
local Bezier = require("Base.Bezier")
local healEffect = "c_xy_0012_skeff_tapsk_healeff"
local rageEffect = "s_jieling_hs_3006_skeff_casting_buff_nuqi"
local cdChangedEffect = "c_jz_0002_skeff_slidesk_buff"
local floatingEffect = "FloatingText"
local buffFloatingEffect = "BuffFloatingText"
local loadAsset = function(path, battleSorting)
--- 播放音效
local audioData = FEAConfig.GetAudioData(path)
if audioData then
SoundManager.PlaySound(audioData.name)
end
2020-07-29 18:11:25 +08:00
--
local go = poolManager:LoadAsset(path, PoolManager.AssetType.GameObject)
local layer = tonumber(go.name) or 0
battleSorting = battleSorting or BattleManager.GetBattleSorting()
Util.AddParticleSortLayer(go, battleSorting - layer)
go.name = tostring(battleSorting)
2020-05-09 13:31:21 +08:00
return go
end
function RoleView.New(go, role, position, root)
local instance = {}
setmetatable(instance, RoleView)
instance.RootPanel = root
instance.GameObject = go
instance.role = role
instance.camp = role.camp
instance.buffRoot = Util.GetGameObject(go, "buff")
instance.BuffIconList = {}
instance.BuffEffectList = {}
instance.delayRecycleList = {}
role.Event:AddEvent(BattleEventName.SkillCast, instance.OnSkillCast, instance)
BattleLogic.Event:AddEvent(BattleEventName.BattleEnd, instance.OnEnd, instance)
BattleLogic.Event:AddEvent(BattleEventName.BattleOrderChange, instance.OnEnd, instance)
2020-07-03 18:55:45 +08:00
role.Event:AddEvent(BattleEventName.BeHitMiss, instance.OnBeHitMiss, instance)
2020-05-09 13:31:21 +08:00
role.Event:AddEvent(BattleEventName.RoleBeDamaged, instance.OnDamaged, instance)
role.Event:AddEvent(BattleEventName.RoleBeTreated, instance.OnTreated, instance)
role.Event:AddEvent(BattleEventName.RoleBeHealed, instance.OnHealed, instance)
role.Event:AddEvent(BattleEventName.RoleDead, instance.OnDead, instance)
role.Event:AddEvent(BattleEventName.RoleRealDead, instance.OnRealDead, instance)
role.Event:AddEvent(BattleEventName.RoleCDChanged, instance.OnRoleCDChanged, instance)
2020-07-08 18:23:12 +08:00
-- role.Event:AddEvent(BattleEventName.RoleViewBullet, instance.RoleViewBullet, instance)
2020-05-09 13:31:21 +08:00
role.Event:AddEvent(BattleEventName.RoleRageChange, instance.RoleRageChange, instance)
role.Event:AddEvent(BattleEventName.RoleRelive, instance.onRoleRelive, instance)
role.Event:AddEvent(BattleEventName.AOE, instance.OnAOE, instance)
role.Event:AddEvent(BattleEventName.BeSeckill, instance.onBeSecKill, instance)
role.Event:AddEvent(BattleEventName.BuffStart, instance.OnBuffStart, instance)
role.Event:AddEvent(BattleEventName.BuffCover, instance.OnBuffCover, instance)
role.Event:AddEvent(BattleEventName.BuffTrigger, instance.OnBuffTrigger, instance)
role.Event:AddEvent(BattleEventName.BuffEnd, instance.OnBuffEnd, instance)
role.Event:AddEvent(BattleEventName.BuffDodge, instance.OnBuffDodge, instance)
role.Event:AddEvent(BattleEventName.BuffRoundChange, instance.OnBuffRoundChange, instance)
role.Event:AddEvent(BattleEventName.BuffDurationChange, instance.OnBuffRoundChange, instance)
2020-05-25 19:16:23 +08:00
role.Event:AddEvent(BattleEventName.ShildTrigger, instance.OnShieldTrigger, instance)
2020-09-25 12:22:12 +08:00
role.Event:AddEvent(BattleEventName.ShowHintText,instance.OnShowHintText,instance)
2020-05-09 13:31:21 +08:00
instance.hpCache = instance.role:GetRoleData(RoleDataName.Hp) / instance.role:GetRoleData(RoleDataName.MaxHp)
instance.hpSlider = Util.GetGameObject(go, "hpProgress/hp"):GetComponent("Image")
instance.hpPassSlider = Util.GetGameObject(go, "hpProgress/hpPass"):GetComponent("Image")
2020-06-03 19:09:01 +08:00
instance.hpSlider.fillAmount = instance.hpCache
instance.hpPassSlider.fillAmount = instance.hpCache
2020-05-09 13:31:21 +08:00
instance.readingName = ""
if role.roleData.roleId > 10000 then
instance.livePath = GetResourcePath(HeroConfig[role.roleData.roleId].Live)
instance.play_liveScale = RoleConfig[role.roleData.roleId].play_liveScale
instance.enemy_liveScale = RoleConfig[role.roleData.roleId].enemy_liveScale
instance.offset = RoleConfig[role.roleData.roleId].offset
2020-06-18 20:39:29 +08:00
instance.outOffset = RoleConfig[role.roleData.roleId].enemy_offset
2020-05-09 13:31:21 +08:00
instance.spAtkTime = RoleConfig[role.roleData.roleId].CastingSkills/1000
2020-05-25 19:16:23 +08:00
instance.atkSoundTime = RoleConfig[role.roleData.roleId].CastingAudio/1000
2020-05-09 13:31:21 +08:00
instance.attackSound = RoleConfig[role.roleData.roleId].sond
if role.roleData.monsterId then --非战斗数据,仅用于显示怪物名称
instance.readingName = MonsterConfig[role.roleData.monsterId].ReadingName
else
instance.readingName = HeroConfig[role.roleData.roleId].ReadingName
end
else
instance.livePath = GetResourcePath(MonsterViewConfig[role.roleData.roleId].Live)
instance.enemy_liveScale = MonsterViewConfig[role.roleData.roleId].enemy_liveScale
instance.offset = MonsterViewConfig[role.roleData.roleId].offset
instance.spAtkTime = MonsterViewConfig[role.roleData.roleId].CastingSkills/1000
2020-05-25 19:16:23 +08:00
instance.atkSoundTime = MonsterViewConfig[role.roleData.roleId].CastingAudio/1000
2020-05-09 13:31:21 +08:00
instance.attackSound = MonsterViewConfig[role.roleData.roleId].sond
if role.roleData.monsterId then --非战斗数据,仅用于显示怪物名称
instance.readingName = MonsterConfig[role.roleData.monsterId].ReadingName
else
instance.readingName = HeroConfig[role.roleData.roleId].ReadingName
end
end
2020-06-03 19:09:01 +08:00
Util.GetGameObject(go, "Name/Text"):GetComponent("Text").text = instance.readingName
Util.GetGameObject(go, "lv/Text"):GetComponent("Text").text = role:GetRoleData(RoleDataName.Level)
Util.GetGameObject(go, "Pro/Image"):GetComponent("Image").sprite = Util.LoadSprite(GetProStrImageByProNum(role.roleData.element))
2020-05-09 13:31:21 +08:00
-- 卡牌立绘
2020-06-03 19:09:01 +08:00
if role.camp == 0 then
Util.GetGameObject(go, "Bg1"):GetComponent("Image").sprite = Util.LoadSprite(GetBattleHeroCardStarBg[role.roleData.star])
Util.GetGameObject(go, "Bg2"):GetComponent("Image").sprite = Util.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 = Util.LoadSprite(zsName)
end
instance.liveRender = Util.GetGameObject(go, "Mask/icon"):GetComponent("RawImage")
2020-07-08 21:21:49 +08:00
instance.liveRender.texture, instance.RoleLiveGO = CardRendererManager.GetSpineTexture(role.position, instance.livePath, Vector3.one * instance.play_liveScale, Vector3.New(instance.offset[1], instance.offset[2], 0), false) --Util.LoadSprite(heroData.painting)
2020-06-13 11:47:13 +08:00
instance.liveRender.material = resMgr:LoadAsset("UI_AlphaMask "..position)
2020-06-03 19:09:01 +08:00
else
instance.RoleLiveGO = poolManager:LoadLive(instance.livePath, go.transform.parent, Vector3.one, Vector3.zero)
end
2020-05-09 13:31:21 +08:00
instance.RoleLiveGOGraphic = instance.RoleLiveGO:GetComponent("SkeletonGraphic")
instance.RoleLiveGOTran = instance.RoleLiveGO:GetComponent("RectTransform")
instance.RoleLiveGOGraphic.AnimationState:SetAnimation(0, "idle", true)
instance.RoleLiveGOTran.sizeDelta = Vector2.New(1000, 1000)
2020-06-03 19:09:01 +08:00
2020-05-09 13:31:21 +08:00
-- casting技能立绘
instance.RoleLiveGO2 = poolManager:LoadLive(instance.livePath, go.transform.parent, Vector3.one, Vector3.zero)
instance.RoleLiveGOGraphic2 = instance.RoleLiveGO2:GetComponent("SkeletonGraphic")
instance.RoleLiveGOTran2 = instance.RoleLiveGO2:GetComponent("RectTransform")
instance.RoleLiveGOGraphic2.AnimationState:SetAnimation(0, "idle", true)
instance.RoleLiveGOTran2.sizeDelta = Vector2.New(1000, 1000)
instance.rageCache = nil
if role.camp == 0 then
2020-06-03 19:09:01 +08:00
instance.liveRender.transform:SetParent(Util.GetGameObject(go, "Mask").transform)
instance.liveRender.transform.localScale = Vector3.one --* instance.play_liveScale * 2
2020-06-13 11:47:13 +08:00
instance.liveRender.transform.anchoredPosition = Vector3.zero--Vector2.New(instance.offset[1], instance.offset[2])
2020-06-03 19:09:01 +08:00
instance.liveRender.gameObject:SetActive(true)
2020-05-09 13:31:21 +08:00
instance.RoleLiveGO2.transform:SetParent(instance.RootPanel.mySkillCastRoot.transform)
2020-06-18 20:39:29 +08:00
instance.RoleLiveGO2.transform.localScale = Vector3.one * instance.enemy_liveScale -- * 0.75--* 1.5
instance.RoleLiveGO2.transform.anchoredPosition = Vector2.New(instance.outOffset[1], instance.outOffset[2] - 300)
2020-05-09 13:31:21 +08:00
instance.RoleLiveGO2:SetActive(false)
2020-06-03 19:09:01 +08:00
instance.RoleIconGO = Util.GetGameObject(go, "func")
2020-05-09 13:31:21 +08:00
-- instance.icon = Util.LoadSprite(GetResourcePath(HeroConfig[role.roleData.roleId].Icon))
-- instance.RoleIconImage = instance.RoleIconGO:GetComponent("Image")
-- instance.RoleIconImage.sprite = instance.icon
-- instance.RoleIconImage.color = Color.New(1,1,1,1)
instance.RoleIconTran = instance.RoleIconGO:GetComponent("RectTransform")
instance.RoleIconTran.anchoredPosition = Vector2.zero
Util.SetGray(instance.RoleIconGO, false)
instance.RoleIconGO:SetActive(true)
instance.deadIconGO = Util.GetGameObject(instance.RoleIconGO, "dead")
instance.effect = Util.GetGameObject(instance.RoleIconGO, "effect")
instance.effect:SetActive(false)
instance.deadIconGO:SetActive(false)
2020-06-08 13:57:30 +08:00
instance.effect_dead = Util.GetGameObject(instance.deadIconGO, "effect")
2020-05-09 13:31:21 +08:00
else
instance.RoleLiveGO.transform:SetParent(Util.GetTransform(instance.RootPanel.EnemyPanel, "live_"..position))
2020-06-18 20:39:29 +08:00
instance.RoleLiveGO:GetComponent("RectTransform").anchoredPosition = Vector2.New(instance.outOffset[1], instance.outOffset[2])-- * 0.5
instance.RoleLiveGO.transform.localScale = Vector3.one * instance.enemy_liveScale --* 0.75
2020-05-09 13:31:21 +08:00
instance.RoleLiveGO:SetActive(true)
instance.RoleLiveGO2.transform:SetParent(instance.RootPanel.enemySkillCastRoot.transform)
2020-06-18 20:39:29 +08:00
instance.RoleLiveGO2:GetComponent("RectTransform").anchoredPosition = Vector2.New(instance.outOffset[1], instance.outOffset[2] + 400)
2020-06-13 11:47:13 +08:00
instance.RoleLiveGO2.transform.localScale = Vector3.one * instance.enemy_liveScale --* 2
2020-05-09 13:31:21 +08:00
instance.RoleLiveGO2:SetActive(false)
instance.shadow = Util.GetGameObject(instance.RootPanel.EnemyPanel, "live_"..position.."/shadow")
instance.shadow:SetActive(true)
instance.effect_dead = Util.GetGameObject(go, "effect_Dead")
instance.deadIconGO = Util.GetGameObject(go, "buttom/dead")
Util.GetGameObject(go, "buttom/pos"):GetComponent("Image").sprite = Util.LoadSprite("r_zhandou_difangweizhi_0"..role.position)
instance.effect_dead:SetActive(false)
instance.deadIconGO:SetActive(false)
end
-- instance.RoleLiveGO.transform:SetAsFirstSibling()
-- instance.RoleLiveGO2.transform:SetAsFirstSibling()
instance.rageSlider = Util.GetGameObject(go, "rageProgress/rage"):GetComponent("Image")
instance.rageText = Util.GetGameObject(go, "rageProgress/Text"):GetComponent("Text")
2020-06-08 13:57:30 +08:00
instance.effect_rage = Util.GetGameObject(go, "rageProgress/effect")
instance.effect_rage:SetActive(instance.role.Rage >= 4)
2020-05-09 13:31:21 +08:00
instance.rageSlider.fillAmount = instance.role.Rage / 4
instance.rageText.gameObject:SetActive(false)
instance.rageText.text = ""
if IsOpenBattleDebug then
local URoleProperty = go:GetComponent(typeof(RoleProperty))
if not URoleProperty then
URoleProperty = go:AddComponent(typeof(RoleProperty))
end
instance.URoleProperty = URoleProperty
instance.URoleProperty.uid = role.uid
role.data:Foreach(function (name, value)
instance.URoleProperty:AddProperty(name, value)
end)
end
instance.LastBuffFloatingTime = Time.realtimeSinceStartup
instance.BuffFloatingCount = 0
instance.LastBuffTextTime = Time.realtimeSinceStartup
instance.BuffTextCount = 0
instance.LastFloatingTime = Time.realtimeSinceStartup
instance.FloatingCount = 0
2020-06-08 13:57:30 +08:00
if role.camp == 0 then
local battleSorting = BattleManager.GetBattleSorting()
instance:ChangeCardSorting(battleSorting + position)
-- local c = go:GetComponent("Canvas")
-- c.sortingOrder = battleSorting + position
end
2020-05-09 13:31:21 +08:00
return instance
end
--所有需要延迟回收的资源走该接口,当回调执行前界面已被销毁时,不会报错
function RoleView:AddDelayRecycleRes(path, go, delayTime, delayFunc)
if not self.delayRecycleList[path] then
self.delayRecycleList[path] = {}
end
table.insert(self.delayRecycleList[path], go)
Timer.New(function ()
if not self.delayRecycleList[path] then return end
for i=1, #self.delayRecycleList[path] do
if self.delayRecycleList[path][i] == go then
Util.SetGray(go, false)
poolManager:UnLoadAsset(path, go, PoolManager.AssetType.GameObject)
table.remove(self.delayRecycleList[path], i)
break
end
end
if delayFunc then
delayFunc()
end
end, delayTime):Start()
end
function RoleView:DelayFunc(time, func)
if not self._DelayFuncList then
self._DelayFuncList = {}
end
local timer
timer = Timer.New(function ()
2020-07-23 20:39:21 +08:00
if func then func() func = nil end
2020-05-09 13:31:21 +08:00
self:ClearDelayFunc(timer)
end, time)
timer:Start()
table.insert(self._DelayFuncList, timer)
end
function RoleView:ClearDelayFunc(t)
if not self._DelayFuncList then return end
if t then
local rIndex
for index, timer in ipairs(self._DelayFuncList) do
if timer == t then
rIndex = index
break
end
end
if rIndex then
self._DelayFuncList[rIndex]:Stop()
table.remove(self._DelayFuncList, rIndex)
end
else
for _, timer in ipairs(self._DelayFuncList) do
timer:Stop()
end
self._DelayFuncList = {}
end
end
2020-05-09 13:31:21 +08:00
--
function RoleView:LoopFunc(time, count, func)
if count <= 0 then
2020-07-10 19:13:29 +08:00
LogError(Language[12217])
return
end
if not self._LoopFuncList then
self._LoopFuncList = {}
end
2020-08-17 16:12:34 +08:00
local timer = nil
local ctr = 0
timer = Timer.New(function ()
if func then func() end
ctr = ctr + 1
if ctr >= count then
self:ClearDelayFunc(timer)
end
end, time, count)
timer:Start()
table.insert(self._LoopFuncList, timer)
end
function RoleView:ClearLoopFunc(t)
if not self._LoopFuncList then return end
if t then
local rIndex
for index, timer in ipairs(self._LoopFuncList) do
if timer == t then
rIndex = index
break
end
end
if rIndex then
self._LoopFuncList[rIndex]:Stop()
table.remove(self._LoopFuncList, rIndex)
end
else
for _, timer in ipairs(self._LoopFuncList) do
timer:Stop()
end
self._LoopFuncList = {}
end
2020-05-09 13:31:21 +08:00
end
2020-05-09 13:31:21 +08:00
local TextFloatingColor = {
Blue = 1,
Red = 2,
Purple = 3,
Green = 4,
}
2020-09-25 12:22:12 +08:00
--单纯显示提示文字
function RoleView:OnShowHintText(type,LanguageIndex)
self:TextBuffFloating(type,Language[LanguageIndex])
end
2020-05-09 13:31:21 +08:00
function RoleView:TextBuffFloating(type, text)
local color
if type == 1 then --蓝色 增益 效果抵抗
color = Color.New(31, 237, 255, 255) / 255
elseif type == 2 then --红色 减益
color = Color.New(236, 4, 4, 255) / 255
elseif type == 3 then --紫色 dot
color = Color.New(235, 17, 255, 255) / 255
elseif type == 4 then --绿色 hot
color = Color.New(17, 255, 17, 255) / 255
end
local go = loadAsset(buffFloatingEffect)
local baseY = 0
-- if self.camp == 0 then
go.transform:SetParent(self.RootPanel.transform)
-- baseY = 60
-- else
-- go.transform:SetParent(self.GameObject.transform)
-- baseY = 200
-- end
go.transform.localScale = Vector3.one
go.transform.position = self.GameObject.transform.position
go:SetActive(true)
if Time.realtimeSinceStartup - self.LastBuffTextTime < BattleLogic.GameDeltaTime then
self.BuffTextCount = self.BuffTextCount + 1
else
self.BuffTextCount = 0
end
self.LastBuffTextTime = Time.realtimeSinceStartup
local v2 = go:GetComponent("RectTransform").anchoredPosition
go:GetComponent("RectTransform").anchoredPosition = v2 + Vector2.New(0,baseY + self.BuffTextCount * 60)
local battleSorting = BattleManager.GetBattleSorting()
Util.GetGameObject(go, "anim"):GetComponent("Canvas").sortingOrder = battleSorting + 200
Util.GetGameObject(go, "anim/text"):SetActive(true)
Util.GetGameObject(go, "anim/text"):GetComponent("Text").text = text
Util.GetGameObject(go, "anim/text"):GetComponent("Text").color = color
Util.GetGameObject(go, "anim/grid"):SetActive(false)
self:AddDelayRecycleRes(buffFloatingEffect, go, 1.3)
end
--
2020-08-27 17:26:55 +08:00
function RoleView:ImageBuffFloating(textImg, numImg, numTxt)
2020-05-09 13:31:21 +08:00
local go = loadAsset(buffFloatingEffect)
local baseY = 0
-- if self.camp == 0 then
go.transform:SetParent(self.RootPanel.transform)
-- baseY = 60
-- else
-- go.transform:SetParent(self.GameObject.transform)
-- -- baseY = 200
-- end
go.transform.localScale = Vector3.one
go.transform.position = self.GameObject.transform.position
go:SetActive(true)
if Time.realtimeSinceStartup - self.LastBuffTextTime < BattleLogic.GameDeltaTime then
self.BuffTextCount = self.BuffTextCount + 1
else
self.BuffTextCount = 0
end
self.LastBuffTextTime = Time.realtimeSinceStartup
local v2 = go:GetComponent("RectTransform").anchoredPosition
go:GetComponent("RectTransform").anchoredPosition = v2 + Vector2.New(0,baseY + self.BuffTextCount * 60)
local battleSorting = BattleManager.GetBattleSorting()
Util.GetGameObject(go, "anim"):GetComponent("Canvas").sortingOrder = battleSorting + 200
Util.GetGameObject(go, "anim/text"):SetActive(false)
Util.GetGameObject(go, "anim/grid"):SetActive(true)
local img1 = Util.GetGameObject(go, "anim/grid/Image1"):GetComponent("Image")
local img2 = Util.GetGameObject(go, "anim/grid/Image2"):GetComponent("Image")
2020-08-27 17:26:55 +08:00
local txt3 = Util.GetGameObject(go, "anim/grid/Text"):GetComponent("Text")
2020-05-09 13:31:21 +08:00
if textImg then
img1.gameObject:SetActive(true)
img1.sprite = Util.LoadSprite(textImg)
img1:SetNativeSize()
else
img1.gameObject:SetActive(false)
end
if numImg then
img2.gameObject:SetActive(true)
img2.sprite = Util.LoadSprite(numImg)
img2:SetNativeSize()
else
img2.gameObject:SetActive(false)
end
2020-08-27 17:26:55 +08:00
if numTxt then
txt3.gameObject:SetActive(true)
txt3.text = numTxt
else
txt3.gameObject:SetActive(false)
end
2020-05-09 13:31:21 +08:00
self:AddDelayRecycleRes(buffFloatingEffect, go, 1.3)
end
--
local ArtFloatingType = {
CritDamage = 1, -- 暴击
Damage = 2,
Treat = 3,
FireDamage = 4,
PoisonDamage = 5,
}
2020-05-25 19:16:23 +08:00
local ArtFloatingAnim = {
[1] = "Crit_Attack_Float",
[2] = "Normal_Attack_Float",
[3] = "floatingTextAnim",
[4] = "floatingTextAnim",
[5] = "floatingTextAnim",
}
2020-05-09 13:31:21 +08:00
--角色受到的暴击伤害(无论什么类型) - 红色字体 (字符顺序40-49 ,0-9)(110, -)(111, +)(33, 暴击)(35, 灼烧)
--角色造成的点击技伤害 - 白色字体 (字符顺序50-59 ,0-9)(112, -)(113, +)
--角色造成的滑动技伤害 - 黄色字体 (字符顺序60-69 ,0-9)(114, -)(115, +)
--角色恢复量 - 绿色字体 (字符顺序70-79 ,0-9)(116, -)(117, +)
--角色造成的异妖技伤害 - 紫色字体 (字符顺序80-89 ,0-9)(118, -)(119, +)(34, 中毒)
local ArtFloatingColor = {
Red = 0,
White = 1,
Yellow = 2,
Green = 3,
Purple = 4,
Poison = 5,
Fire = 6,
}
function RoleView:GetArtText(type, color, value)
local text = ""
if type == ArtFloatingType.CritDamage then
text = text .. string.char(33) -- 暴击文字
text = text .. string.char((color*2)+110) -- 减号
elseif type == ArtFloatingType.Damage then
text = text .. string.char((color*2)+110) -- 减号
elseif type == ArtFloatingType.Treat then
text = text..string.char((color*2)+111) -- 加号
elseif type == ArtFloatingType.FireDamage then
text = text .. string.char(35) -- 灼烧文字
text = text .. string.char((color*2)+110) -- 减号
elseif type == ArtFloatingType.PoisonDamage then
text = text .. string.char(34) -- 中毒文字
text = text .. string.char((color*2)+110) -- 减号
end
-- 数字
local str = tostring(value)
for i=1,#str do
text = text..string.char((string.byte(str,i) - 48) + color*10 + 40)
end
return text
end
function RoleView:ArtFloating(type, color, value)
local go = loadAsset(floatingEffect)
2020-05-25 19:16:23 +08:00
-- if self.camp == 0 then
2020-05-09 13:31:21 +08:00
go.transform:SetParent(self.RootPanel.transform)
2020-05-25 19:16:23 +08:00
-- else
-- go.transform:SetParent(self.GameObject.transform)
-- end
2020-05-09 13:31:21 +08:00
go.transform.localScale = Vector3.one * 0.7
go.transform.position = self.GameObject.transform.position
go:SetActive(true)
if Time.realtimeSinceStartup - self.LastFloatingTime < BattleLogic.GameDeltaTime then
self.FloatingCount = self.FloatingCount + 1
else
self.FloatingCount = 0
end
self.LastFloatingTime = Time.realtimeSinceStartup
local v2 = go:GetComponent("RectTransform").anchoredPosition
2020-05-25 19:16:23 +08:00
v2 = v2 + Vector2.New(0, self.role.camp * 100 + 100)
go:GetComponent("RectTransform").anchoredPosition = v2 + Vector2.New(0, 50) * (self.FloatingCount+1)
2020-05-09 13:31:21 +08:00
local text = self:GetArtText(type, color, value)
2020-05-25 19:16:23 +08:00
local anim = Util.GetGameObject(go, "anim")
anim:GetComponent("Text").text = text
anim:GetComponent("Canvas").sortingOrder = BattleManager.GetBattleSorting() + 100
anim:GetComponent("Animator"):Play(ArtFloatingAnim[type])
2020-05-09 13:31:21 +08:00
self:AddDelayRecycleRes(floatingEffect, go, 2)
end
function RoleView:OnPointerClick(data)
if self.role.IsDebug and self.role.skill then
self.role.skill:Cast()
end
data:Use()
end
function RoleView:OnEndDrag(data)
if self.role.IsDebug and self.role.superSkill then
self.role.superSkill:Cast()
end
data:Use()
end
2020-05-15 16:52:35 +08:00
--
function RoleView:OnSortingOrderChange(battleSorting)
if self.camp == 0 then
2020-06-08 13:57:30 +08:00
self:ChangeCardSorting(battleSorting + self.role.position)
-- self.GameObject:GetComponent("Canvas").sortingOrder = battleSorting + self.role.position
2020-05-15 16:52:35 +08:00
end
end
2020-06-08 13:57:30 +08:00
-- 改变卡牌层级
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
2020-05-09 13:31:21 +08:00
function RoleView:Update()
2020-05-25 19:16:23 +08:00
-- if not self.isPlay then
-- return
-- end
2020-05-09 13:31:21 +08:00
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 = loadAsset(rageEffect)
go.transform:SetParent(self.GameObject.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
go:SetActive(true)
self:AddDelayRecycleRes(rageEffect, go, 3)
end
2020-06-08 13:57:30 +08:00
self.effect_rage:SetActive(rage >= 1)
2020-05-09 13:31:21 +08:00
self.rageCache = rage
self.rageSlider.fillAmount = self.rageCache
2020-06-08 13:57:30 +08:00
self.rageText.gameObject:SetActive(self.rageCache >= 1)
2020-05-09 13:31:21 +08:00
self.rageText.text = self.role.Rage
-- TODO: 战斗引导相关调整
if rage == 1 and self.camp == 0 then
Game.GlobalEvent:DispatchEvent(GameEvent.Guide.GuideBattleCDDone, self)
end
end
for k, v in pairs(self.BuffIconList) do
v: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 ()
2020-07-29 00:02:19 +08:00
-- Log("DoScale = "..scale)
2020-05-09 13:31:21 +08:00
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)
-- 设置变灰
2020-07-29 00:02:19 +08:00
-- LogGreen(self.role.camp .."|||"..self.role.position.."|||"..tostring(isLight))
2020-05-09 13:31:21 +08:00
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
--
-- Util.SetGray(self.GameObject, not isLight)
-- Util.SetSpineGray(self.RoleLiveGOGraphic, not isLight)
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)
-- if self.camp == 1 then
Util.SetColor(self.RoleLiveGOGraphic, color)
-- end
end), ec, dur):SetEase(Ease.Linear)
-- :OnComplete(function()
-- if func then
-- func()
-- end
-- end)
-- local sScale = isLight and 1 or 1.2
-- local bScaleV3 = self.GameObject.transform.localScale
-- local eScale = isLight and 1.2 or 1
-- 颜色变灰
-- local sc = isLight and 0.5 or 1
-- local ec = isLight and 1 or 0.5
-- 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)
-- -- if self.camp == 1 then
-- Util.SetColor(self.RoleLiveGOGraphic, color)
-- -- end
-- end), ec, dur):SetEase(Ease.Linear):OnComplete(function()
-- if func then
-- func()
-- end
-- end)
-- 直接变灰
-- local color = isLight and UIColor.WRITE or UIColor.GRAY
-- Util.SetColor(self.GameObject, color)
-- if self.camp == 1 then
-- Util.SetColor(self.RoleLiveGOGraphic, color)
-- end
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
-- gog.AnimationState.Start -- 开始
-- gog.AnimationState.Interrupt -- 打断
-- gog.AnimationState.End -- 结束
end
end
function RoleView:OnSkillCast(skill)
if not skill then return end
local combat = BattleManager.GetSkillCombat(SkillLogicConfig[skill.id].SkillDisplay)
if not combat then return end
if skill.isAdd then
self:ImageBuffFloating("z_zhandou_zhuiji")
end
2020-06-13 11:47:13 +08:00
2020-05-09 13:31:21 +08:00
local battleSorting = BattleManager.GetBattleSorting()
if self.camp == 0 then
2020-06-08 13:57:30 +08:00
self:ChangeCardSorting(battleSorting + 20)
2020-05-09 13:31:21 +08:00
end
2020-07-29 00:02:19 +08:00
-- LogRed("Cast skill"..self.role.camp..self.role.position)
2020-05-09 13:31:21 +08:00
-- 高亮
BattleManager.PauseBattle()
self.RootPanel.SetRoleHighLight(self, skill:GetDirectTargets(), function()
BattleManager.ResumeBattle()
local duration = combat.KeyFrame/1000
if duration == 0 then
self.RootPanel.SetRoleHighLight()
if self.camp == 0 then
2020-06-08 13:57:30 +08:00
self:ChangeCardSorting(battleSorting + self.role.position)
2020-05-09 13:31:21 +08:00
end
return
end
if self.camp == 0 then
2020-06-13 11:47:13 +08:00
BattleManager.PauseBattle()
local function _PlaySkill()
2020-06-18 20:39:29 +08:00
-- 立绘上移动画
-- 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)
2020-08-03 15:51:48 +08:00
if self.liveRender then
local mask2 = Util.GetGameObject(self.GameObject, "Mask2")
if mask2 then
self.liveRender.transform:SetParent(mask2.transform)
end
2020-07-23 20:39:21 +08:00
end
2020-06-13 11:47:13 +08:00
local cardRenderMat = self.liveRender.material
cardRenderMat:SetInt("_IsMask", 0)
2020-05-09 13:31:21 +08:00
self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "attack", false)
2020-06-13 11:47:13 +08:00
-- 这里相当于技能前摇,等待立绘播放到需要释放关键帧的时间时继续释放技能
self:CheckSkillForoleEffect(combat, skill)
2020-05-09 13:31:21 +08:00
self:DelayFunc(self.spAtkTime, function()
BattleManager.ResumeBattle()
self:CheckFullSceenSkill(combat, skill)
-- 取消高亮
2020-07-29 00:02:19 +08:00
self:DelayFunc((combat.KeyFrame + combat.SkillDuration)/1000, function()
-- LogRed("Cast done"..self.role.camp..self.role.position)
2020-05-09 13:31:21 +08:00
self.RootPanel.SetRoleHighLight()
2020-06-08 13:57:30 +08:00
self:ChangeCardSorting(battleSorting + self.role.position)
2020-06-13 11:47:13 +08:00
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])
2020-06-18 20:39:29 +08:00
self.RoleLiveGO.transform.localPosition = Vector3.New(self.offset[1], self.offset[2], 0) + Vector3(0, -120, 0)
2020-06-13 11:47:13 +08:00
self.liveRender.transform.anchoredPosition = Vector2.zero--Vector2.New(self.offset[1], self.offset[2])
2020-05-09 13:31:21 +08:00
end)
end)
2020-06-13 11:47:13 +08:00
2020-05-25 19:16:23 +08:00
-- 攻击音效
if self.attackSound then
2020-07-25 15:30:33 +08:00
self:DelayFunc(self.atkSoundTime - 0.3, function()
2020-05-25 19:16:23 +08:00
SoundManager.PlaySound(self.attackSound)
end)
end
2020-06-13 11:47:13 +08:00
end
--
if combat.VerticalDrawing == 1 then
_PlaySkill()
elseif combat.VerticalDrawing == 2 then
self:PlaySkillCastingEffect(combat, function()
_PlaySkill()
end)
2020-05-09 13:31:21 +08:00
end
else
--
BattleManager.PauseBattle()
local function _PlaySkill()
self:PlaySpineAnim(self.RoleLiveGOGraphic, 0, "attack", false)
-- 这里相当于技能前摇,等待立绘播放需要释放关键帧的时间时继续释放技能
self:CheckSkillForoleEffect(combat, skill)
2020-05-09 13:31:21 +08:00
self:DelayFunc(self.spAtkTime, function()
BattleManager.ResumeBattle()
self:CheckFullSceenSkill(combat, skill)
-- 取消高亮
2020-07-29 00:02:19 +08:00
self:DelayFunc((combat.KeyFrame + combat.SkillDuration)/1000, function()
2020-05-09 13:31:21 +08:00
self.RootPanel.SetRoleHighLight()
2020-07-29 00:02:19 +08:00
-- LogRed("Cast done"..self.role.camp..self.role.position)
2020-05-09 13:31:21 +08:00
end)
end)
2020-05-25 19:16:23 +08:00
-- 攻击音效
if self.attackSound then
2020-07-25 15:30:33 +08:00
self:DelayFunc(self.atkSoundTime - 0.3, function()
2020-05-25 19:16:23 +08:00
SoundManager.PlaySound(self.attackSound)
end)
end
2020-05-09 13:31:21 +08:00
end
--
if combat.VerticalDrawing == 1 then
_PlaySkill()
elseif combat.VerticalDrawing == 2 then
2020-06-13 11:47:13 +08:00
self:PlaySkillCastingEffect(combat, function()
2020-05-09 13:31:21 +08:00
_PlaySkill()
2020-06-13 11:47:13 +08:00
end)
2020-05-09 13:31:21 +08:00
end
end
2020-06-13 11:47:13 +08:00
end)
end
2020-05-09 13:31:21 +08:00
2020-06-13 11:47:13 +08:00
function RoleView:PlaySkillCastingEffect(combat, func)
if self.camp == 0 then
-- 播放casting
self.RootPanel.mySkillCast:SetActive(false)
self.RootPanel.mySkillCast:SetActive(true)
2020-07-16 16:52:43 +08:00
-- 播放casting声音
SoundManager.PlaySound(SoundConfig.Sound_RoleCasting)
2020-06-13 11:47:13 +08:00
-- 技能名
-- local nameBg = Util.GetGameObject(self.RootPanel.mySkillCast, "Canvas/skill")
local name = Util.GetGameObject(self.RootPanel.mySkillCast, "TongYong_Casting_Xia/DongHua/MingZi")
if combat.skillname and combat.skillname ~= "" then
-- nameBg:SetActive(true)
name:SetActive(true)
name:GetComponent("Image").sprite = Util.LoadSprite(combat.skillname)
name:GetComponent("Image"):SetNativeSize()
else
-- nameBg:SetActive(false)
name:SetActive(false)
end
else
-- 播放casting
self.RootPanel.enemySkillCast:SetActive(false)
self.RootPanel.enemySkillCast:SetActive(true)
2020-07-16 16:52:43 +08:00
-- 播放casting声音
SoundManager.PlaySound(SoundConfig.Sound_MonsterCasting)
2020-06-13 11:47:13 +08:00
-- 技能名
local name = Util.GetGameObject(self.RootPanel.enemySkillCast, "TongYong_Casting_Shang/DongHua/MingZi")
if combat.skillname and combat.skillname ~= "" then
name:SetActive(true)
name:GetComponent("Image").sprite = Util.LoadSprite(combat.skillname)
name:GetComponent("Image"):SetNativeSize()
else
name:SetActive(false)
end
end
2020-07-11 15:42:56 +08:00
-- 技能名音效
if combat.SkillNameVoice then
SoundManager.PlaySound(combat.SkillNameVoice)
end
2020-06-13 11:47:13 +08:00
-- 提前进入下一阶段
self.RoleLiveGO2:SetActive(true)
self:PlaySpineAnim(self.RoleLiveGOGraphic2, 0, "touch", false)
self:DelayFunc(1, function()
self.RoleLiveGO2:SetActive(false)
if self.camp == 0 then
self.RootPanel.mySkillCast:SetActive(false)
else
self.RootPanel.enemySkillCast:SetActive(false)
end
2020-07-23 20:39:21 +08:00
if func then func() func = nil end
2020-05-09 13:31:21 +08:00
end)
end
2020-06-13 11:47:13 +08:00
2020-05-09 13:31:21 +08:00
local FullEffectPosition = {
My_All = Vector3.New(0, -566, 0),
My_Front = Vector3.New(-120, -410, 0),
My_Behind = Vector3.New(20, -760, 0),
My_COL_1 = Vector3.New(-300, -566, 0),
My_COL_2 = Vector3.New(0, -566, 0),
My_COL_3 = Vector3.New(300, -566, 0),
2020-05-09 13:31:21 +08:00
Enemy_All = Vector3.New(0, 430, 0),
Enemy_Front = Vector3.New(-100, 340, 0),
Enemy_Behind = Vector3.New(50, 540, 0),
Enemy_COL_1 = Vector3.New(-300, 430, 0),
Enemy_COL_2 = Vector3.New(0, 430, 0),
Enemy_COL_3 = Vector3.New(300, 430, 0),
2020-05-09 13:31:21 +08:00
}
function RoleView:GetEffectSPostion(skill)
local chooseId = skill.effectList.buffer[1].chooseId
local chooseLimit = math.floor(chooseId / 10000) % 10
local targets = skill:GetDirectTargets()
local targetPos = targets[1].position
if chooseLimit == 3 then
2020-07-08 18:23:12 +08:00
local col = (targetPos-1) % 3 + 1
return self.camp == 0 and FullEffectPosition["My_COL_"..col] or FullEffectPosition["Enemy_COL_"..col]
else
return self.camp == 0 and FullEffectPosition.My_All or FullEffectPosition.Enemy_All
end
end
2020-05-09 13:31:21 +08:00
function RoleView:GetEffectPosition(skill)
local chooseId = skill.effectList.buffer[1].chooseId
local chooseLimit = math.floor(chooseId / 10000) % 10
local targets = skill:GetDirectTargets()
local targetCamp = targets[1].camp
local targetPos = targets[1].position
2020-05-09 13:31:21 +08:00
if chooseLimit == 0 then
return targetCamp == 0 and FullEffectPosition.My_All or FullEffectPosition.Enemy_All
elseif chooseLimit == 1 or chooseLimit == 2 then
if targetCamp == 0 then
return targetPos <= 3 and FullEffectPosition.My_Front or FullEffectPosition.My_Behind
else
return targetPos <= 3 and FullEffectPosition.Enemy_Front or FullEffectPosition.Enemy_Behind
end
elseif chooseLimit == 3 then
2020-07-08 18:23:12 +08:00
local col = (targetPos-1) % 3 + 1
return targetCamp == 0 and FullEffectPosition["My_COL_"..col] or FullEffectPosition["Enemy_COL_"..col]
2020-05-09 13:31:21 +08:00
end
end
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
function RoleView:CheckRotate(go, orientation)
-- 判断是否旋转
if orientation==nil then
-- body
return false
end
2020-07-23 13:44:03 +08:00
local isR = orientation[1] and orientation[1][1] or 0
local rt = orientation[2]
rt = rt and Vector3.New(rt[1], rt[2], rt[3]) or Vector3.zero
if (self.camp == 0 and isR == 1)
or (self.camp == 1 and isR == 2) then
go.transform.localRotation = rt
return true
end
go.transform.localRotation = Vector3.zero
end
2020-05-09 13:31:21 +08:00
-- 检测是否需要释放全屏技能
function RoleView:CheckFullSceenSkill(combat, skill)
if not skill then
return
end
2020-07-08 18:23:12 +08:00
-- 指定目标弹道特效
if combat.EffectType == 1 then
local targets = skill:GetDirectTargets()
for _, target in ipairs(targets) do
self:RoleViewBullet(combat, target)
end
-- 全屏特效
elseif combat.EffectType == 2 then
2020-05-09 13:31:21 +08:00
local path = combat.Bullet
if path then
local pos = self:GetEffectPosition(skill)
if not pos then
return
end
-- 特效的偏移量
local offset = combat.Offset and Vector3.New(combat.Offset[1], combat.Offset[2], 0) or Vector3.zero
2020-07-08 18:23:12 +08:00
--
2020-05-09 13:31:21 +08:00
local go = loadAsset(path, self.RootPanel.skillEffectRoot:GetComponent("Canvas").sortingOrder)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go, combat.Orientation) then
offset = -offset
end
2020-05-09 13:31:21 +08:00
go.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = pos + offset
go:SetActive(true)
2020-07-08 18:23:12 +08:00
self:AddDelayRecycleRes(path, go, 4)
end
-- 全屏弹道特效
2020-07-02 19:23:42 +08:00
elseif combat.EffectType == 3 then
local path = combat.Bullet
if path then
local spos = self:GetEffectSPostion(skill)
2020-07-02 19:23:42 +08:00
local tpos = self:GetEffectPosition(skill)
if not spos or not tpos then
2020-07-02 19:23:42 +08:00
return
end
-- 时间
local duration = combat.BulletTime/1000
-- 特效的偏移量
local offset = combat.Offset and Vector3.New(combat.Offset[1], combat.Offset[2], 0) or Vector3.zero
local go = loadAsset(path, self.RootPanel.skillEffectRoot:GetComponent("Canvas").sortingOrder)
go.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go, combat.Orientation) then
2020-07-02 19:23:42 +08:00
offset = -offset
end
go.transform.localPosition = spos + offset
2020-07-23 13:44:03 +08:00
go.transform.localScale = Vector3.one
2020-07-02 19:23:42 +08:00
go:SetActive(true)
self:AddDelayRecycleRes(path, go, duration)
if self.fullBulletTween then self.fullBulletTween:Kill() end
self.fullBulletTween = go.transform:DOLocalMove(tpos + offset, duration):SetEase(Ease.OutSine)
-- :OnComplete(function()
-- go:SetActive(false)
-- end)
end
2020-07-08 18:23:12 +08:00
-- 指定目标特效
elseif combat.EffectType == 4 then
local targets = skill:GetDirectTargets()
for _, target in ipairs(targets) do
local tv = self.RootPanel.GetRoleView(target)
if tv then
local offset = combat.Offset and Vector3.New(combat.Offset[1], combat.Offset[2], 0) or Vector3.zero
local sortingOrder = tv.role.camp == 0 and tv.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil
local go2 = loadAsset(combat.Bullet, sortingOrder)
go2.transform:SetParent(tv.GameObject.transform.parent)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go2, combat.Orientation) then
offset = -offset
end
2020-07-08 18:23:12 +08:00
go2.transform.localScale = Vector3.one
go2.transform.localPosition = Vector3.zero
go2.transform.anchoredPosition = offset
go2.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
go2:SetActive(true)
self:AddDelayRecycleRes(combat.Bullet, go2, 4)
end
end
-- 全屏特效屏幕中心
elseif combat.EffectType == 5 then
local offset = combat.Offset and Vector3.New(combat.Offset[1], combat.Offset[2], 0) or Vector3.zero
local sortingOrder = self.RootPanel.skillEffectRoot:GetComponent("Canvas").sortingOrder
local go2 = loadAsset(combat.Bullet, sortingOrder)
go2.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go2, combat.Orientation) then
offset = -offset
end
go2.transform.localScale = Vector3.one
go2.transform.localPosition = Vector3.zero
go2.transform.anchoredPosition = offset
go2:SetActive(true)
self:AddDelayRecycleRes(combat.Bullet, go2, 4)
2020-07-08 18:23:12 +08:00
end
-- 取消高亮
self:DelayFunc(combat.KeyFrame/1000, function()
self:CheckSkillHitEffect("skill", combat, skill)
self:checkShake(combat)
end)
2020-05-09 13:31:21 +08:00
end
-- 检测前摇技能释放
function RoleView:CheckSkillForoleEffect(combat, skill)
if not skill then
return
end
2020-07-21 21:34:47 +08:00
if not combat.BeforeBullet or combat.BeforeBullet == "" then
return
end
local go
local path = combat.BeforeBullet
local offset = combat.BeforeOffset and Vector3.New(combat.BeforeOffset[1], combat.BeforeOffset[2], 0) or Vector3.zero
2020-07-22 14:49:32 +08:00
2020-07-21 21:34:47 +08:00
-- 挂在人身上,以人物中心为原点
if combat.BeforeEffectType == 1 then
local sortingOrder
if self.camp == 0 then
sortingOrder = self.GameObject:GetComponent("Canvas").sortingOrder
end
2020-07-21 21:34:47 +08:00
go = loadAsset(path, sortingOrder)
go.transform:SetParent(self.GameObject.transform)
2020-07-21 21:34:47 +08:00
-- 屏幕中心
elseif combat.BeforeEffectType == 2 then
local sortingOrder = self.RootPanel.skillEffectRoot:GetComponent("Canvas").sortingOrder
go = loadAsset(path, sortingOrder)
go.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
end
2020-07-21 21:34:47 +08:00
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go, combat.BeforeOrientation) then
2020-07-22 14:49:32 +08:00
offset = -offset
end
2020-07-22 14:49:32 +08:00
2020-07-21 21:34:47 +08:00
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero
go.transform.anchoredPosition = offset
go:SetActive(true)
self:AddDelayRecycleRes(path, go, 4)
end
2020-07-08 18:23:12 +08:00
-- 检测技能命中特效显示
function RoleView:CheckSkillHitEffect(checkType, combat, skill)
if not combat then return end
if checkType == "skill" then
-- 释放技能时检测,如果是范围命中效果
if combat.HitEffectType == 2 and combat.Hit then
local targets = skill:GetDirectTargets()
if not targets or not targets[1] or targets[1]:IsDead() then return end
local tv = self.RootPanel.GetRoleView(targets[1])
if not tv then return end
local tpos = self:GetEffectPosition(skill)
if not tpos then
return
end
-- 特效的偏移量
local offset = combat.HitOffset and Vector3.New(combat.HitOffset[1], combat.HitOffset[2], 0) or Vector3.zero
local sortingOrder = tv.role.camp == 0 and tv.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil
local go = loadAsset(combat.Hit, sortingOrder)
go.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go, combat.HitOrientation) then
offset = -offset
end
2020-07-08 18:23:12 +08:00
go.transform.localScale = Vector3.one
go.transform.localPosition = tpos + offset
go:SetActive(true)
2020-07-22 14:49:32 +08:00
self:AddDelayRecycleRes(combat.Hit, go, 5)
2020-07-08 18:23:12 +08:00
end
elseif checkType == "hit" then
-- 被击中时检测,如果是目标命中
if combat.HitEffectType == 1 and combat.Hit then
local offset = combat.HitOffset and Vector3.New(combat.HitOffset[1], combat.HitOffset[2], 0) or Vector3.zero
local sortingOrder = self.role.camp == 0 and self.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil
local go2 = loadAsset(combat.Hit, sortingOrder)
go2.transform:SetParent(self.GameObject.transform.parent)
2020-07-23 13:44:03 +08:00
-- 检测特效旋转
if self:CheckRotate(go2, combat.HitOrientation) then
offset = -offset
end
2020-07-08 18:23:12 +08:00
go2.transform.localScale = Vector3.one
go2.transform.localPosition = Vector3.zero--self.GameObject.transform.localPosition + Vector3.New(0, self.BuffFloatingCount * 180, 0)
go2.transform.anchoredPosition = offset--Vector2.zero
go2.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
go2:SetActive(true)
2020-07-22 14:49:32 +08:00
self:AddDelayRecycleRes(combat.Hit, go2, 5)
2020-07-08 18:23:12 +08:00
end
end
end
2020-05-09 13:31:21 +08:00
-- 检测是否需要震动屏幕
function RoleView:checkShake(combat)
if combat.ShockScreen == 1 then
2020-07-08 18:23:12 +08:00
self.RootPanel:SetShake()
2020-05-09 13:31:21 +08:00
end
end
--弹道轨迹
local plist = {
[1] = {
Vector2.New(0.2, 0.9),
},
[2] = {
Vector2.New(1.12, 0.33),
Vector2.New(-0.15, 0.67),
},
[3] = {
Vector2.New(0.9, 0.2),
},
}
-- 播放弹道特效
2020-07-08 18:23:12 +08:00
function RoleView:RoleViewBullet(combat, target)
2020-05-09 13:31:21 +08:00
2020-07-08 18:23:12 +08:00
if not self.RootPanel.GetRoleView(target) then return end
2020-05-09 13:31:21 +08:00
if not combat then return end
local duration = combat.BulletTime/1000
local bulletEffect = combat.Bullet
if not bulletEffect or bulletEffect == "" or duration == 0 then return end
2020-05-25 19:16:23 +08:00
local go = loadAsset(bulletEffect, self.RootPanel.skillEffectRoot:GetComponent("Canvas").sortingOrder)
2020-05-09 13:31:21 +08:00
go.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
go.transform.localScale = Vector3.one
go.transform.position = self.GameObject.transform.position
Util.ClearTrailRender(go)
go:SetActive(true)
local startV3 = go.transform.position
local endV3 = self.RootPanel.GetRoleView(target).GameObject.transform.position
local startV2 = Vector2.New(0, 0)
local endV2 = Vector2.New(1, 1)
local pL = plist[math.random(1, #plist)]
--飞行子弹轨迹
DoTween.To(
DG.Tweening.Core.DOGetter_float( function () return 0 end),
DG.Tweening.Core.DOSetter_float(function (progress)
local v2 = Bezier.CalPos(progress, startV2, endV2, pL)
go.transform.position = Vector3.New(startV3.x * (1-v2.x) + endV3.x * v2.x,
startV3.y * (1-v2.y) + endV3.y * v2.y, startV3.z)
end), 1, duration)
:SetEase(Ease.InQuad)
:OnComplete(function ()
poolManager:UnLoadAsset(bulletEffect, go, PoolManager.AssetType.GameObject)
end)
end
-- aoe
function RoleView:OnAOE(camp)
local path
if self.role.roleData.roleId > 10000 then
if camp == self.camp then
path = RoleConfig[self.role.roleData.roleId].aoe1
else
path = RoleConfig[self.role.roleData.roleId].aoe2
end
else
if camp == self.camp then
path = MonsterViewConfig[self.role.roleData.roleId].aoe1
else
path = MonsterViewConfig[self.role.roleData.roleId].aoe2
end
end
local go = loadAsset(path)
go.transform:SetParent(self.RootPanel.transform)
go.transform.localScale = Vector3.one
if camp == 0 then
go.transform.localPosition = Vector3.New(0,-674,0)
else
go.transform.localPosition = Vector3.New(0,100,0)
end
go:SetActive(true)
self:AddDelayRecycleRes(path, go, 3)
end
-- 治疗
function RoleView:OnTreated(castRole, realTreat, treat)
self:ArtFloating(ArtFloatingType.Treat, ArtFloatingColor.Green, treat)
2020-05-25 19:16:23 +08:00
local sortingOrder = self.role.camp == 0 and self.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil
local go = 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)
self:AddDelayRecycleRes(healEffect, go, 3)
end
-- 盾效果触发
function RoleView:OnShieldTrigger(shield)
if shield.shieldType == ShieldTypeName.AllReduce then
self:ImageBuffFloating("z_zhandou_wudizi")
else
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(TextFloatingColor.Blue, Language[10275])
2020-05-25 19:16:23 +08:00
end
2020-05-09 13:31:21 +08:00
end
2020-07-03 18:55:45 +08:00
-- 哈哈,没打着
function RoleView:OnBeHitMiss(atkRole, skill)
2020-07-10 19:13:29 +08:00
self:TextBuffFloating(TextFloatingColor.Blue, Language[12218])
2020-07-03 18:55:45 +08:00
end
2020-05-09 13:31:21 +08:00
local DotTypeTip = {
2020-06-23 18:36:24 +08:00
[0] = Language[10276],
[1] = Language[10277],
[2] = Language[10278],
[3] = Language[10279],
2020-05-09 13:31:21 +08:00
}
--
2020-05-09 13:31:21 +08:00
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-08-17 16:12:34 +08:00
--王振兴注释,为了解决英雄死亡多段伤害显示不完整 2020/8/17
--if self.isDead then return end
2020-05-25 19:16:23 +08:00
if dotType then
2020-05-09 13:31:21 +08:00
if dotType == DotType.Poison then
self:ArtFloating(ArtFloatingType.PoisonDamage, ArtFloatingColor.Poison, dmg)
elseif dotType == DotType.Burn then
self:ArtFloating(ArtFloatingType.FireDamage, ArtFloatingColor.Fire, dmg)
else
self:TextBuffFloating(2, DotTypeTip[dotType]..dmg)
end
else
if bCrit then -- 暴击红色并显示暴击
self:ArtFloating(ArtFloatingType.CritDamage, ArtFloatingColor.Red, dmg)
else
if atkRole.isTeam then -- 异妖紫色
self:ArtFloating(ArtFloatingType.Damage, ArtFloatingColor.Purple, dmg)
else
if skill and skill.type == BattleSkillType.Special then -- 技能黄色
self:ArtFloating(ArtFloatingType.Damage, ArtFloatingColor.Yellow, dmg)
else -- 普攻白色
self: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)
2020-05-15 16:52:35 +08:00
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)
2020-05-09 13:31:21 +08:00
end)
else
self.RoleLiveGOTran:DOShakeAnchorPos(0.3, Vector2.New(200, 100), 100, 50, false, true):OnComplete(function ()
2020-06-18 20:39:29 +08:00
self.RoleLiveGO.transform.anchoredPosition = Vector2.New(self.outOffset[1], self.outOffset[2] )
2020-05-09 13:31:21 +08:00
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 atkRole.isTeam then
local teamSkillHitEffect = PokemonEffectConfig[atkRole.curSkill.teamSkillType].hit1
if teamSkillHitEffect then
if Time.realtimeSinceStartup - self.LastBuffFloatingTime < 0.5 then
self.BuffFloatingCount = self.BuffFloatingCount + 1
else
self.BuffFloatingCount = 0
end
self.LastBuffFloatingTime = Time.realtimeSinceStartup
local go2 = loadAsset(teamSkillHitEffect)
go2.transform:SetParent(self.GameObject.transform)
go2.transform.localScale = Vector3.one
go2.transform.localPosition = self.GameObject.transform.localPosition + Vector3.New(0, self.BuffFloatingCount * 180, 0)
go2.transform:SetParent(self.RootPanel.skillEffectRoot.transform)
go2:SetActive(true)
self:AddDelayRecycleRes(teamSkillHitEffect, go2, 3)
end
elseif skill then
2020-07-08 18:23:12 +08:00
local combat = BattleManager.GetSkillCombat(SkillLogicConfig[skill.id].SkillDisplay)
self:CheckSkillHitEffect("hit", combat, skill)
2020-05-09 13:31:21 +08:00
end
end
function RoleView:OnHealed(castRole)
2020-05-25 19:16:23 +08:00
local sortingOrder = self.role.camp == 0 and self.GameObject:GetComponent("Canvas").sortingOrder + 21 or nil
local go = loadAsset(healEffect, sortingOrder)
2020-05-09 13:31:21 +08:00
go.transform:SetParent(self.GameObject.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = Vector3.zero--self.GameObject.transform.localPosition
go:SetActive(true)
self:AddDelayRecycleRes(healEffect, go, 3)
end
function RoleView:OnRoleCDChanged()
local go = loadAsset(cdChangedEffect)
go.transform:SetParent(self.GameObject.transform)
go.transform.localScale = Vector3.one
go.transform.localPosition = self.GameObject.transform.localPosition
go:SetActive(true)
self:AddDelayRecycleRes(cdChangedEffect, go, 3)
end
local BuffTypeToConfigType = {
[BuffName.PropertyChange] = 1,
[BuffName.Control] = 2,
[BuffName.DOT] = 3,
[BuffName.HOT] = 4,
[BuffName.Shield] = 5,
[BuffName.Immune] = 6,
[BuffName.Curse] = 7,
}
function RoleView:GetPropChangeBuffCType(pName)
for cType, pn in ipairs(BattlePropList) do
if pn == pName then
return cType
end
end
end
function RoleView:GetBuffEffectConfig(buff)
local bType = buff.type
local cType = 1
if bType == BuffName.PropertyChange then
cType = self:GetPropChangeBuffCType(buff.propertyName)
elseif bType == BuffName.HOT then
cType = 1
elseif bType == BuffName.DOT then
cType = buff.damageType
elseif bType == BuffName.Brand then
cType = buff.flag
elseif bType == BuffName.Control then
cType = buff.ctrlType
elseif bType == BuffName.Shield then
cType = buff.shieldType
2020-08-25 16:33:04 +08:00
-- 无敌吸血盾特殊判断
if cType == ShieldTypeName.AllReduce and buff.shieldValue ~= 0 then
cType = 4
end
2020-05-09 13:31:21 +08:00
elseif bType == BuffName.Immune then
cType = buff.immuneType
elseif bType == BuffName.Curse then
cType = buff.curseType
end
local type = BuffTypeToConfigType[bType]
local config = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.BuffEffectConfig, "Type", type, "CType", cType)
return config
end
-- 加载并播放动画
2020-06-08 13:57:30 +08:00
function RoleView:AddBuffEffect(buffName, isTrigger, offset)
2020-05-09 13:31:21 +08:00
if not buffName or buffName == "" then
return
end
if not self.BuffEffectList then
self.BuffEffectList = {}
end
if not self.BuffEffectList[buffName] then
self.BuffEffectList[buffName] = {}
self.BuffEffectList[buffName].node = nil
self.BuffEffectList[buffName].count = 0
end
--
if not self.BuffEffectList[buffName].node then
local sortingOrder
if self.camp == 0 then
sortingOrder = self.GameObject:GetComponent("Canvas").sortingOrder
end
local node = loadAsset(buffName, sortingOrder)
-- node.transform:SetParent(self.RootPanel.transform)
-- node.transform.localScale = Vector3.one
node.transform:SetParent(self.GameObject.transform)
node.transform.localScale = Vector3.one
2020-06-08 13:57:30 +08:00
node.transform.localPosition = offset and Vector3.New(offset[1], offset[2], 0) or Vector3.zero--self.GameObject.transform.localPosition
2020-05-09 13:31:21 +08:00
self.BuffEffectList[buffName].node = node
end
self.BuffEffectList[buffName].node:SetActive(false)
self.BuffEffectList[buffName].node:SetActive(true)
-- 触发特效不计数
if not isTrigger then
self.BuffEffectList[buffName].count = self.BuffEffectList[buffName].count + 1
end
end
-- 卸载动画
function RoleView:RemoveBuffEffect(buffName)
if not buffName or buffName == "" then
return
end
if not self.BuffEffectList then
return
end
if not self.BuffEffectList[buffName] then
return
end
if not self.BuffEffectList[buffName].node then
return
end
-- 节点存在,数量不存在直接回收
if not self.BuffEffectList[buffName].count then
poolManager:UnLoadAsset(buffName, self.BuffEffectList[buffName].node, PoolManager.AssetType.GameObject)
self.BuffEffectList[buffName] = nil
return
end
-- 引用数量减1
self.BuffEffectList[buffName].count = self.BuffEffectList[buffName].count - 1
if self.BuffEffectList[buffName].count <= 0 then
poolManager:UnLoadAsset(buffName, self.BuffEffectList[buffName].node, PoolManager.AssetType.GameObject)
self.BuffEffectList[buffName] = nil
return
end
end
-- 卸载所有动画
function RoleView:RemoveAllBuffEffect()
if not self.BuffEffectList then
return
end
for name, v in pairs(self.BuffEffectList) do
poolManager:UnLoadAsset(name, v.node, PoolManager.AssetType.GameObject)
end
self.BuffEffectList = {}
end
--
function RoleView:AddBuffIcon(buff, icon)
if not buff or not icon or icon == "" then
return
end
if not self.BuffIconList then
self.BuffIconList = {}
end
if not self.BuffIconList[buff.id] then
local buffGO = BattlePool.GetItem(self.buffRoot.transform, BATTLE_POOL_TYPE.BUFF_VIEW)
buffGO.transform.localScale = Vector3.one
buffGO.transform.localPosition = Vector3.zero
buffGO:SetActive(true)
self.BuffIconList[buff.id] = BuffView.New(buffGO, buff, icon)
else
self.BuffIconList[buff.id].count = self.BuffIconList[buff.id].count + 1
self.BuffIconList[buff.id]:SetCount()
end
end
function RoleView:RemoveBuffIcon(buff)
if not buff then
return
end
if not self.BuffIconList then
return
end
if self.BuffIconList[buff.id] then
self.BuffIconList[buff.id]:Dispose()
self.BuffIconList[buff.id] = nil
end
end
-- 卸载所有动画
function RoleView:RemoveAllBuffIcon()
if not self.BuffIconList then
return
end
for id, v in pairs(self.BuffIconList) do
v:Dispose()
end
self.BuffIconList = {}
end
function RoleView:OnBuffStart(buff)
-- 临时显示
if buff.type == BuffName.NoDead then
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(2, Language[10280])
2020-05-09 13:31:21 +08:00
return
end
local eConfig = self:GetBuffEffectConfig(buff)
if not eConfig then return end
if buff.type == BuffName.PropertyChange then
if buff.changeType == 1 or buff.changeType == 2 then
self:AddBuffEffect(eConfig.Hit)
2020-06-08 13:57:30 +08:00
self:AddBuffEffect(eConfig.Continue, false, eConfig.ContinueOffset)
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(eConfig.DescColorType, eConfig.Describe..Language[10281])
2020-05-09 13:31:21 +08:00
self:AddBuffIcon(buff, eConfig.Icon)
SoundManager.PlaySound(SoundConfig.Sound_Buff)
else
self:AddBuffEffect(eConfig.DHit)
self:AddBuffEffect(eConfig.DContinue)
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(eConfig.DDescColorType, eConfig.Describe..Language[10282])
2020-05-09 13:31:21 +08:00
self:AddBuffIcon(buff, eConfig.DIcon)
SoundManager.PlaySound(SoundConfig.Sound_DeBuff)
end
else
self:AddBuffEffect(eConfig.Hit)
2020-06-28 17:48:49 +08:00
self:AddBuffEffect(eConfig.Continue, false, eConfig.ContinueOffset)
2020-05-09 13:31:21 +08:00
if eConfig.DescribeIcon and eConfig.DescribeIcon ~= "" then
self:ImageBuffFloating(eConfig.DescribeIcon)
else
self:TextBuffFloating(eConfig.DescColorType, eConfig.Describe)
end
self:AddBuffIcon(buff, eConfig.Icon)
end
end
--
function RoleView:OnBuffDodge(buff)
if buff.type == BuffName.Control and buff.caster.camp ~= self.camp then
self:ImageBuffFloating("z_zhandou_dikangzi")
end
end
-- 怒气值改变
function RoleView:RoleRageChange(deltaRage)
if deltaRage ~= 0 then
if deltaRage > 0 then
2020-08-27 17:26:55 +08:00
-- self:ImageBuffFloating("z_zhandou_nuqijia", "z_zhandou_nuqijia_"..deltaRage)
self:ImageBuffFloating("z_zhandou_nuqijia", nil, deltaRage)
2020-05-09 13:31:21 +08:00
-- local go = loadAsset(rageEffect)
-- go.transform:SetParent(self.GameObject.transform)
-- go.transform.localScale = Vector3.one
-- go.transform.localPosition = Vector3.zero
-- go:SetActive(true)
-- self:AddDelayRecycleRes(healEffect, go, 3)
else
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(1, Language[10283]..tostring(deltaRage))
2020-05-09 13:31:21 +08:00
end
end
end
--
function RoleView:OnBuffRoundChange(buff)
if self.BuffIconList[buff.id] then
self.BuffIconList[buff.id]:SetRound(buff)
end
end
function RoleView:OnBuffCover(buff)
if self.BuffIconList[buff.id] then
self.BuffIconList[buff.id]:SetLayer(buff)
end
end
function RoleView:OnBuffTrigger(buff)
local eConfig = self:GetBuffEffectConfig(buff)
if not eConfig then return end
if buff.type == BuffName.PropertyChange then
if buff.changeType == 1 or buff.changeType == 2 then
self:AddBuffEffect(eConfig.Trigger, true)
else
self:AddBuffEffect(eConfig.DTrigger, true)
end
else
self:AddBuffEffect(eConfig.Trigger, true)
end
end
function RoleView:OnBuffEnd(buff)
-- 临时显示
if buff.type == BuffName.NoDead then
return
end
local eConfig = self:GetBuffEffectConfig(buff)
if not eConfig then return end
if buff.type == BuffName.PropertyChange then
if buff.changeType == 1 or buff.changeType == 2 then
self:RemoveBuffEffect(eConfig.Hit)
self:RemoveBuffEffect(eConfig.Continue)
self:RemoveBuffEffect(eConfig.Trigger)
self:RemoveBuffIcon(buff, eConfig.Icon)
else
self:RemoveBuffEffect(eConfig.DHit)
self:RemoveBuffEffect(eConfig.DContinue)
self:RemoveBuffEffect(eConfig.DTrigger)
self:RemoveBuffIcon(buff, eConfig.DIcon)
end
else
self:RemoveBuffEffect(eConfig.Hit)
self:RemoveBuffEffect(eConfig.Continue)
self:RemoveBuffEffect(eConfig.Trigger)
self:RemoveBuffIcon(buff, eConfig.Icon)
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()
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(TextFloatingColor.Red, Language[10284])
2020-05-09 13:31:21 +08:00
end
function RoleView:OnRealDead()
if self.camp == 0 then
Util.SetGray(self.RoleIconGO, true)
2020-06-08 13:57:30 +08:00
self.effect_dead:SetActive(true)
self.effect_rage:SetActive(false)
2020-05-09 13:31:21 +08:00
else
2020-06-08 13:57:30 +08:00
self.effect_rage:SetActive(false)
2020-05-09 13:31:21 +08:00
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)
-- 回收所有buff相关效果
self:RemoveAllBuffEffect()
self:RemoveAllBuffIcon()
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
--
2020-06-23 18:36:24 +08:00
self:TextBuffFloating(4, Language[10285])
2020-05-09 13:31:21 +08:00
end
function RoleView:OnEnd()
self.isPlay = false
end
function RoleView:OrderStart()
self.isPlay = true
end
function RoleView:Dispose()
-- if self.trigger then
-- self.trigger.onPointerClick = self.trigger.onPointerClick - self._onPointerClick
-- self.trigger.onEndDrag = self.trigger.onEndDrag - self._onEndDrag
-- end
-- 清空所有延迟方法
self:ClearDelayFunc()
self:ClearLoopFunc()
2020-05-09 13:31:21 +08:00
self.GameObject.transform.parent.localScale = Vector3.one
--立即回收延迟列表上的资源
for k, v in pairs(self.delayRecycleList) do
for i=1, #v do
poolManager:UnLoadAsset(k, v[i], PoolManager.AssetType.GameObject)
end
self.delayRecycleList[k] = nil
end
-- 回收所有buff相关效果
self:RemoveAllBuffEffect()
self:RemoveAllBuffIcon()
--
Util.SetSpineGray(self.RoleLiveGOGraphic, false)
Util.SetSpineGray(self.RoleLiveGOGraphic2, false)
2020-06-08 13:57:30 +08:00
Util.SetColor(self.RoleLiveGOGraphic, Color.New(1, 1, 1, 1))
Util.SetColor(self.RoleLiveGOGraphic2, Color.New(1, 1, 1, 1))
2020-05-09 13:31:21 +08:00
self.RoleLiveGOGraphic.freeze = false
self.RoleLiveGOGraphic2.freeze = false
2020-06-03 19:09:01 +08:00
if self.camp == 1 then
poolManager:UnLoadLive(self.livePath, self.RoleLiveGO)
end
2020-05-09 13:31:21 +08:00
poolManager:UnLoadLive(self.livePath, self.RoleLiveGO2)
-- 父节点归位
if self.camp == 0 then
-- self.GameObject.transform.parent:SetParent(Util.GetTransform(self.RootPanel.PlayerPanel.transform, "View/"..self.role.position))
-- local battleSorting = BattleManager.GetBattleSorting()
-- self.GameObject:GetComponent("Canvas").sortingOrder = battleSorting + 10
-- self.GameObject.transform.parent.localScale = Vector3.one
-- if self.role.position == 1 then
-- self.GameObject.transform.parent.localPosition = Vector3.New(-145, -221, 0)
-- else
-- self.GameObject.transform.parent.localPosition = Vector3.New(0, -221, 0)
-- end
end
-- 回收本节点
BattlePool.RecycleItem(self.GameObject, self.camp == 0 and BATTLE_POOL_TYPE.MY_ROLE or BATTLE_POOL_TYPE.ENEMY_ROLE)
2020-06-23 18:36:24 +08:00
end