378 lines
11 KiB
Plaintext
378 lines
11 KiB
Plaintext
local baseCell = autoImport("BaseCell")
|
|
autoImport("DragDropCell")
|
|
SkillCell = class("SkillCell", baseCell)
|
|
SkillCell.Click_PreviewPeak = "SkillCell_Click_PreviewPeak"
|
|
SkillCell.SimulationUpgrade = "SkillCell_SimulationUpgrade"
|
|
SkillCell.SimulationDowngrade = "SkillCell_SimulationDowngrade"
|
|
SkillCell.EnableLineColor = Color(126.0/255.0,204.0/255.0,27.0/255.0,1)
|
|
SkillCell.DisableLineColor = Color(115.0/255.0,115.0/255.0,115.0/255.0,1)
|
|
-- SkillCell.NameGradientBottom = Color(1,197.0/255.0,58.0/255.0,1)
|
|
-- SkillCell.NameEffectColor = Color(1,1,1,1)
|
|
|
|
function SkillCell:Init()
|
|
self.nameEnableAlpha = 1
|
|
SkillCell.super.Init(self)
|
|
self:FindObjs()
|
|
end
|
|
|
|
function SkillCell:FindObjs()
|
|
self.widget = self.gameObject:GetComponent(UIWidget)
|
|
self.skillName = self:FindGO("SkillName"):GetComponent(UILabel)
|
|
self.skillLevel = self:FindGO("SkillLevel"):GetComponent(UILabel)
|
|
self.skillCount = self:FindGO("Count"):GetComponent(UILabel)
|
|
self.upgradeBtn = self:FindGO("LevelUpBtn")
|
|
self.upgradeBtnSp = self:FindGO("LevelUpBtn"):GetComponent(UIMultiSprite)
|
|
self.upgradeBtnSp.isChangeSnap = false
|
|
self.previewBtn = self:FindGO("PreviewBtn")
|
|
self.levelDelBtn = self:FindGO("LevelDelete"):GetComponent(UIButton)
|
|
self.nameBg = self:FindGO("NameBg"):GetComponent(UIMultiSprite)
|
|
self.skillIcon = self:FindGO("SkillIcon"):GetComponent(UISprite)
|
|
self.share = self:FindGO("Share")
|
|
self.func = self:FindGO("Func")
|
|
|
|
self.clickCell = self:FindGO("SkillBg")
|
|
self.dragDrop = DragDropCell.new(self.clickCell:GetComponent(UIDragItem))
|
|
self.dragDrop.dragDropComponent.data = self
|
|
self:SetEvent(self.clickCell,function ()
|
|
self:PassEvent(MouseEvent.MouseClick, self)
|
|
end)
|
|
|
|
self:SetEvent(self.upgradeBtn.gameObject,function ()
|
|
self:PassEvent(SkillCell.SimulationUpgrade, self)
|
|
end)
|
|
self:SetEvent(self.levelDelBtn.gameObject,function ()
|
|
self:PassEvent(SkillCell.SimulationDowngrade, self)
|
|
end)
|
|
self.dragDrop.dragDropComponent.OnStart = function (data)
|
|
if(self.data.staticData.SkillType == GameConfig.SkillType.Passive.type) then
|
|
self.dragDrop.dragDropComponent:StopDrag()
|
|
MsgManager.ShowMsgByIDTable(601)
|
|
end
|
|
end
|
|
|
|
self:SetEvent(self.previewBtn,function ()
|
|
self:PassEvent(SkillCell.Click_PreviewPeak, self)
|
|
end)
|
|
|
|
self:Hide(self.levelDelBtn.gameObject)
|
|
self:Hide(self.previewBtn)
|
|
end
|
|
|
|
function SkillCell:IsClickMe(click)
|
|
return click == self.clickCell
|
|
end
|
|
|
|
--SkillItemData
|
|
function SkillCell:SetData(data)
|
|
self.data = data
|
|
if(self.data and self.data.shadow) then
|
|
self:Hide()
|
|
return
|
|
else
|
|
self:Show()
|
|
end
|
|
|
|
local skillData = data.staticData
|
|
self:UpdateName(skillData)
|
|
self:UpdateLevel(skillData)
|
|
self:UpdateIcon(skillData)
|
|
self:UpdateSkillNameBg(skillData,self.data:HasRuneSpecials() and 2 or 0)
|
|
self:UpdateUpgradeBtn(skillData)
|
|
self:UpdateShare()
|
|
self:UpdateFunc()
|
|
self:UpdateDragable()
|
|
self:ShowDowngrade(false)
|
|
end
|
|
|
|
function SkillCell:UpdateName(skillData)
|
|
skillData = skillData or self.data.staticData
|
|
if(self.skillName~=skillData.NameZh) then
|
|
local name = skillData.NameZh
|
|
local len = StringUtil.getTextLen(name)
|
|
if(len>5) then
|
|
name = StringUtil.SubString( name,1,4).."..."
|
|
end
|
|
-- if(self.data.learned) then
|
|
self.skillName.text = name
|
|
UIUtil.WrapLabel(self.skillName)
|
|
-- else
|
|
-- self.skillName.text = string.format("[c][%s]%s[-][/c]",ColorUtil.GrayColor_16,name)
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateLevel(skillData)
|
|
self.skillCount.gameObject:SetActive(self.data.maxTimes >0)
|
|
self.skillLevel.gameObject:SetActive(self.data.maxTimes <=0)
|
|
if(self.data.maxTimes >0) then
|
|
self.skillCount.text = self.data.leftTimes.."/"..self.data.maxTimes
|
|
else
|
|
local breakEnable = SkillProxy.Instance:GetSkillCanBreak() or SimulateSkillProxy.Instance:GetSkillCanBreak()
|
|
if(self.data.learned) then
|
|
self:SetLevel(self.data.level,nil,breakEnable)
|
|
else
|
|
self:SetLevel(0,nil,breakEnable)
|
|
end
|
|
self:Show(self.skillLevel.gameObject)
|
|
end
|
|
end
|
|
|
|
local sb = LuaStringBuilder.new()
|
|
function SkillCell:SetLevel(level,color,breakEnable)
|
|
sb:Clear()
|
|
local extraLevel = self.data:GetExtraLevel()
|
|
local max = self.data.maxLevel
|
|
if(breakEnable and self.data.breakMaxLevel>0 and MyselfProxy.Instance:HasJobBreak()) then
|
|
max = self.data.breakMaxLevel
|
|
elseif self.data.breakNewMaxLevel > 0 and MyselfProxy.Instance:HasJobNewBreak() then
|
|
max = self.data.breakNewMaxLevel
|
|
end
|
|
if(level==0) then
|
|
if(extraLevel~=0) then
|
|
sb:Append(level)
|
|
sb:Append("+")
|
|
sb:Append(extraLevel)
|
|
level = sb:ToString()
|
|
end
|
|
self.skillLevel.text = string.format(ZhString.SkillCell_Level,ColorUtil.GrayColor_16,level,max)
|
|
else
|
|
if(extraLevel~=0) then
|
|
sb:Append(level)
|
|
sb:Append("[c][000000]")
|
|
sb:Append("+")
|
|
sb:Append(extraLevel)
|
|
sb:Append("[-][/c]")
|
|
level = sb:ToString()
|
|
end
|
|
if(color) then
|
|
self.skillLevel.text = string.format(ZhString.SkillCell_Level,color,level,max)
|
|
else
|
|
self.skillLevel.text = level.."/"..max
|
|
end
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateIcon(skillData)
|
|
if(skillData~=nil) then
|
|
IconManager:SetSkillIconByProfess(skillData.Icon, self.skillIcon,MyselfProxy.Instance:GetMyProfessionType(),true)
|
|
self:EnableGray(not self.data.learned)
|
|
else
|
|
self.icon.spriteName = nil
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateSkillNameBg(skillData,startIndex)
|
|
if(startIndex==nil) then
|
|
startIndex = 0
|
|
end
|
|
if(skillData.SkillType ~= GameConfig.SkillType.Passive.type) then
|
|
self.nameBg.CurrentState = startIndex
|
|
self.nameBg.transform.localPosition = Vector3(77,0,0)
|
|
self.nameBg.width = 158
|
|
else
|
|
self.nameBg.CurrentState = startIndex + 1
|
|
self.nameBg.transform.localPosition = Vector3(67,0,0)
|
|
self.nameBg.width = 172
|
|
end
|
|
end
|
|
|
|
function SkillCell:EnableGray(value)
|
|
if(value) then
|
|
self.nameBg.alpha = 0.5
|
|
self.skillName.alpha = 0.5
|
|
ColorUtil.ShaderGrayUIWidget(self.skillIcon)
|
|
self.skillIcon.alpha = 0.5
|
|
else
|
|
self.nameBg.alpha = 1
|
|
self:SetNameAlpha(self.nameEnableAlpha)
|
|
ColorUtil.WhiteUIWidget(self.skillIcon)
|
|
self.skillIcon.alpha = 1
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateUpgradeBtn(skillData)
|
|
if(self.data:GetNextID(SkillProxy.Instance:GetSkillCanBreak())~=nil and self.data.active and skillData.Cost>0) then
|
|
self:ShowUpgrade(true)
|
|
else
|
|
self:ShowUpgrade(false)
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateDragable()
|
|
if(self.data==nil) then
|
|
self:SetDragEnable(false)
|
|
else
|
|
self:SetDragEnable(self.data.learned)
|
|
end
|
|
end
|
|
|
|
function SkillCell:SetDragEnable(val)
|
|
if(self.data~=nil and val) then
|
|
local typeConfig = GameConfig.SkillType[self.data.staticData.SkillType]
|
|
local configEnableDrag = true
|
|
if(typeConfig and typeConfig.nodrag and typeConfig.nodrag==1) then
|
|
configEnableDrag = false
|
|
end
|
|
self.dragDrop:SetDragEnable(val and configEnableDrag)
|
|
else
|
|
self.dragDrop:SetDragEnable(false)
|
|
end
|
|
end
|
|
|
|
function SkillCell:SetUpgradeEnable(val,breakEnable)
|
|
if(val) then
|
|
if(breakEnable and MyselfProxy.Instance:HasJobBreak() and self.data~=nil and self.data.breakMaxLevel>0) then
|
|
self.upgradeBtnSp.CurrentState = 2
|
|
else
|
|
self.upgradeBtnSp.CurrentState = 0
|
|
end
|
|
else
|
|
self.upgradeBtnSp.CurrentState = 1
|
|
end
|
|
end
|
|
|
|
function SkillCell:SetNameBgEnable(val)
|
|
if(val) then
|
|
self.nameEnableAlpha = 1
|
|
else
|
|
self.nameEnableAlpha = 0.6
|
|
end
|
|
self:SetNameAlpha(self.nameEnableAlpha)
|
|
end
|
|
|
|
function SkillCell:SetNameAlpha(alpha)
|
|
self.skillName.alpha = alpha
|
|
end
|
|
|
|
function SkillCell:ShowPreview(value)
|
|
if(value) then
|
|
self:Show(self.previewBtn)
|
|
self:Hide(self.upgradeBtn.gameObject)
|
|
else self:Hide(self.previewBtn) end
|
|
end
|
|
|
|
function SkillCell:ShowUpgrade(value)
|
|
if(value) then
|
|
self:Show(self.upgradeBtn.gameObject)
|
|
self:Hide(self.previewBtn)
|
|
else self:Hide(self.upgradeBtn.gameObject) end
|
|
end
|
|
|
|
function SkillCell:ShowDowngrade(value)
|
|
if(value) then self:Show(self.levelDelBtn.gameObject)
|
|
else self:Hide(self.levelDelBtn.gameObject) end
|
|
end
|
|
|
|
function SkillCell:GetGridXY()
|
|
local id = self.data.sortID * 1000 + 1
|
|
local config = Table_SkillMould[id]
|
|
if(config and config.Pos) then
|
|
return config.Pos[1],config.Pos[2]
|
|
end
|
|
return 0,0
|
|
end
|
|
|
|
function SkillCell:RemoveLink()
|
|
if(self.linkLine ~=nil and not GameObjectUtil.Instance:ObjectIsNULL(self.linkLine)) then
|
|
GameObject.Destroy(self.linkLine.gameObject)
|
|
end
|
|
self.linkLine = nil
|
|
end
|
|
|
|
function SkillCell:ResetLink()
|
|
self.requiredCell = nil
|
|
self.linkState = nil
|
|
end
|
|
|
|
function SkillCell:DrawLink(cell,hasBetween,up)
|
|
cell.requiredCell = self
|
|
if(self.linkLine) then
|
|
GameObject.Destroy(self.linkLine.gameObject)
|
|
end
|
|
local targetX,targetY = cell:GetGridXY()
|
|
local myX,myY = self:GetGridXY()
|
|
local cellDistance = cell.gameObject.transform.localPosition - self.gameObject.transform.localPosition
|
|
self.linkLine = Game.AssetManager_UI:CreateAsset(ResourcePathHelper.UICell(hasBetween and "SkillBetweenLine" or "SkillLine"), self.gameObject):GetComponent(UISprite)
|
|
self.linkLine.transform.localPosition = Vector3(self.nameBg.transform.localPosition.x + self.nameBg.width,0,0)
|
|
if(myY == targetY) then
|
|
if(not hasBetween) then
|
|
--畫直線的
|
|
local fix = 0
|
|
if(self.data.staticData.SkillType == GameConfig.SkillType.Passive.type) then
|
|
fix = 10
|
|
end
|
|
self.linkLine.width = cellDistance.x - self.nameBg.width - 66 + fix
|
|
else
|
|
--畫兩個彎的
|
|
-- print(self.data.staticData.NameZh,myX,myY,hasBetween,up)
|
|
self:DrawBetween(up,cellDistance.x - self.nameBg.width - 55 - 62)
|
|
end
|
|
else
|
|
self.linkLine.width = cellDistance.x - self.nameBg.width - 20
|
|
local line2 = Game.AssetManager_UI:CreateAsset(ResourcePathHelper.UICell("SkillLine"),self.linkLine.gameObject):GetComponent(UIMultiSprite)
|
|
line2.transform.localPosition = Vector3(self.linkLine.width,0,0)
|
|
line2.transform.localEulerAngles = Vector3(0,0,myY<targetY and -90 or 90)
|
|
line2.width = math.abs(cellDistance.y)
|
|
end
|
|
self:LinkUnlock(true)
|
|
end
|
|
|
|
function SkillCell:DrawBetween(up,width)
|
|
if(up) then
|
|
self.linkLine.transform.localEulerAngles = Vector3(180,0,0)
|
|
end
|
|
local straightLine = self:FindGO("StraightLine",self.linkLine.gameObject):GetComponent(UISprite)
|
|
straightLine.width = width
|
|
end
|
|
|
|
function SkillCell:LinkUnlock(val)
|
|
if(self.linkLine and not Slua.IsNull(self.linkLine)) then
|
|
if(val ~= self.linkState) then
|
|
self.linkState = val
|
|
local sps = self.linkLine.gameObject:GetComponentsInChildren(UISprite)
|
|
if(sps) then
|
|
for i=1,#sps do
|
|
if(val) then
|
|
sps[i].color = SkillCell.EnableLineColor
|
|
else
|
|
sps[i].color = SkillCell.DisableLineColor
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function SkillCell:UpdateShare()
|
|
self.share:SetActive(self.data:GetIsShare())
|
|
end
|
|
|
|
function SkillCell:UpdateFunc()
|
|
local isFunc = false
|
|
for k,v in pairs(SkillItemData.FuncType) do
|
|
if self.data:CheckFuncOpen(v) then
|
|
isFunc = true
|
|
break
|
|
end
|
|
end
|
|
self.func:SetActive(isFunc)
|
|
end
|
|
|
|
AdventureSkillCell = class("AdventureSkillCell",SkillCell)
|
|
|
|
function AdventureSkillCell:UpdateLevel(skillData)
|
|
self.super.UpdateLevel(self,skillData)
|
|
if(self.data.maxTimes <=0) then
|
|
if(skillData.NextID==nil and skillData.Level <= 1) then
|
|
self:Hide(self.skillLevel.gameObject)
|
|
end
|
|
end
|
|
end
|
|
|
|
function AdventureSkillCell:SetLevel(level,color)
|
|
if(level==0) then
|
|
self.skillLevel.text = string.format("[c][%s]0/%s[-][/c]",ColorUtil.GrayColor_16,self.data.maxLevel)
|
|
else
|
|
self.skillLevel.text = "Lv."..level
|
|
end
|
|
end |