224 lines
6.3 KiB
Plaintext
224 lines
6.3 KiB
Plaintext
AstrolabeTipView=class("AstrolabeTipView",BaseTip)
|
|
autoImport("AstrolabeMaterilaCell")
|
|
local tempVector3 = LuaVector3.zero
|
|
local minWidth = 200
|
|
local maxWidth = 360
|
|
local minHeight = 210
|
|
local maxHeight = 415
|
|
local singleLineHeight = 20
|
|
local fix = 80
|
|
|
|
function AstrolabeTipView:Init()
|
|
self.closecomp = self.gameObject:GetComponent(CustomTouchUpCall)
|
|
local root = self:FindGO("BG")
|
|
self.closecomp.call = function (go)
|
|
self:CloseSelf();
|
|
|
|
-- helplog("click other")
|
|
-- self:CalculateWidth()
|
|
-- self:_UpdateAnchor(); --test
|
|
-- self:_ResetAttrPos()
|
|
end
|
|
self.BGImg = self:FindComponent("BG",UISprite)
|
|
self.name = self:FindComponent("name", UILabel)
|
|
self.top = self:FindComponent("Top", UIWidget)
|
|
self.attri = self:FindComponent("attri", UILabel)
|
|
self.material = self:FindComponent("material",UILabel)
|
|
self.uiTable = self:FindComponent("materialRoot", UITable);
|
|
self.bottomLine = self:FindComponent("seperatorflag_Bottom",UIWidget)
|
|
self.line=self:FindComponent("line",UISprite)
|
|
self.materialCtl = UIGridListCtrl.new(self.uiTable, AstrolabeMaterilaCell, "AstrolabeMaterilaCell");
|
|
self.scrollPanel = self:FindComponent("AttrScroll",UIPanel)
|
|
self.scrollView = self:FindComponent("AttrScroll",UIScrollView)
|
|
|
|
self:_AddAnchor(self:FindComponent("TipValidArea",UIWidget))
|
|
self:_AddAnchor(self:FindComponent("Top",UIWidget))
|
|
self:_AddAnchor(self.bottomLine)
|
|
self:_AddAnchor(self:FindComponent("Bottom",UIWidget))
|
|
self:_AddAnchor(self:FindComponent("materialRoot",UIWidget))
|
|
self:_AddAnchor(self:FindComponent("seperatorflag",UIWidget))
|
|
self:_AddAnchor(self:FindComponent("DragCollider",UIWidget))
|
|
self:_AddAnchor(self.scrollPanel)
|
|
end
|
|
|
|
function AstrolabeTipView:SetCheckClick(func)
|
|
if(self.closecomp) then
|
|
self.closecomp.check = function ()
|
|
helplog("SetCheckClick", func);
|
|
return func~=nil and func() or false
|
|
end
|
|
end
|
|
end
|
|
|
|
function AstrolabeTipView:CloseSelf()
|
|
TipsView.Me():HideCurrent();
|
|
self:sendNotification(AstrolabeEvent.TipClose);
|
|
end
|
|
|
|
function AstrolabeTipView:SetData(data)
|
|
self.name.text= data:GetName()
|
|
local materialData = data:GetCost()
|
|
self:_ParseAttr(data)
|
|
self.materialCtl:ResetDatas(materialData)
|
|
|
|
self:CalculateWidth()
|
|
self:_UpdateAnchor();
|
|
self:_ResetAttrPos()
|
|
end
|
|
|
|
function AstrolabeTipView:OnEnter()
|
|
AstrolabeTipView.super.OnEnter(self)
|
|
self.closecomp.enabled = false
|
|
self.closecomp.enabled = true
|
|
end
|
|
|
|
function AstrolabeTipView:GetSize()
|
|
return self.BGImg.width,self.BGImg.height
|
|
end
|
|
|
|
function AstrolabeTipView:_ParseAttr(data)
|
|
local base = data:GetEffect()
|
|
if(base) then
|
|
local sb = LuaStringBuilder.CreateAsTable()
|
|
local config,displayName,value
|
|
local PropNameConfig = Game.Config_PropName
|
|
for k,v in pairs(base) do
|
|
config = PropNameConfig[k]
|
|
if(config) then
|
|
displayName = config.RuneName ~= "" and config.RuneName or config.PropName;
|
|
sb:Append(displayName)
|
|
if(v>0) then
|
|
sb:Append("+")
|
|
end
|
|
if(config.IsPercent==1)then
|
|
sb:Append(v * 100)
|
|
sb:AppendLine("%")
|
|
else
|
|
sb:AppendLine(v)
|
|
end
|
|
end
|
|
end
|
|
sb:RemoveLast()
|
|
self.attri.text=sb:ToString()
|
|
sb:Destroy()
|
|
end
|
|
local special = data:GetSpecialEffect()
|
|
if(special) then
|
|
local specialConfig = Table_RuneSpecial[special]
|
|
if(specialConfig) then
|
|
local str = specialConfig.Runetip
|
|
if(Table_RuneSpecialDesc and Table_RuneSpecialDesc[str]) then
|
|
str=Table_RuneSpecialDesc[str].Text
|
|
end
|
|
if(specialConfig.SkillTipParm) then
|
|
str = string.format(str,unpack(specialConfig.SkillTipParm))
|
|
end
|
|
self.attri.text = str
|
|
end
|
|
end
|
|
end
|
|
|
|
function AstrolabeTipView:_AddAnchor(widget)
|
|
if(self.anchors == nil) then
|
|
self.anchors = {}
|
|
end
|
|
self.anchors[#self.anchors+1] = widget
|
|
end
|
|
|
|
function AstrolabeTipView:_UpdateAnchor()
|
|
if(self.anchors) then
|
|
for i=1,#self.anchors do
|
|
self.anchors[i]:ResetAndUpdateAnchors()
|
|
end
|
|
end
|
|
end
|
|
|
|
function AstrolabeTipView:SetPos(pos)
|
|
if(self.gameObject~=nil) then
|
|
local p = self.gameObject.transform.position
|
|
pos.z = p.z
|
|
self.gameObject.transform.position = pos
|
|
-- TipsView.Me().panel:ConstrainTargetToBounds(self.gameObject.transform,true)
|
|
else
|
|
self.pos = pos
|
|
end
|
|
end
|
|
|
|
function AstrolabeTipView:CalculateWidth()
|
|
local maxLabelWidth =0
|
|
local childCells = self.materialCtl:GetCells();
|
|
local singleMaterialHeight = 0
|
|
if(self.materialCtl)then
|
|
for i=1,#childCells do
|
|
local childCell = childCells[i];
|
|
local width = childCell:GetLabelWidth()
|
|
singleMaterialHeight=childCell:GetHeight()
|
|
if(width>maxLabelWidth)then
|
|
maxLabelWidth=width
|
|
end
|
|
end
|
|
end
|
|
local materialCount = #childCells
|
|
singleLineHeight = self.top.height + 82
|
|
local fixedHeight = singleMaterialHeight* materialCount+singleLineHeight -- 材料高度+名字高度
|
|
tempVector3:Set(0,singleMaterialHeight* materialCount,0)
|
|
self.bottomLine.transform.localPosition = tempVector3
|
|
local tempWidth = math.max(self.name.width,maxLabelWidth)
|
|
local tempWidth = math.max(tempWidth,minWidth)
|
|
local tempHeight = 0
|
|
-- helplog(tempWidth,minWidth,fixedHeight)
|
|
-- helplog(singleMaterialHeight,singleLineHeight)
|
|
|
|
--fix
|
|
local attrSizeX,attrSizeY = self:_WrapText(fix)
|
|
self.attri.width = attrSizeX
|
|
self.attri:ProcessText()
|
|
tempWidth = math.max(tempWidth,attrSizeX + fix)
|
|
local height = attrSizeY + fixedHeight
|
|
-- helplog(attrSizeX,attrSizeY)
|
|
tempHeight = math.max(minHeight,height)
|
|
tempHeight = math.min(maxHeight,tempHeight)
|
|
-- helplog(tempWidth,tempHeight)
|
|
if(nil~=self.BGImg)then
|
|
self.BGImg.width=tempWidth
|
|
self.BGImg.height=tempHeight
|
|
end
|
|
end
|
|
|
|
--return attrWidth,attrHeight
|
|
function AstrolabeTipView:_WrapText(fix)
|
|
local width = 0
|
|
self.attri:UpdateNGUIText()
|
|
NGUIText.rectWidth = 10000
|
|
NGUIText.regionWidth = 10000
|
|
local size = NGUIText.CalculatePrintedSize(self.attri.text)
|
|
width = math.max(size.x,minWidth-fix)
|
|
width = math.min(width,maxWidth-fix)
|
|
self.attri:UpdateNGUIText()
|
|
NGUIText.rectWidth = width
|
|
NGUIText.regionWidth = width
|
|
size = NGUIText.CalculatePrintedSize(self.attri.text)
|
|
return width,size.y
|
|
end
|
|
|
|
function AstrolabeTipView:_ResetAttrPos()
|
|
tempVector3:Set(-(self.BGImg.width-fix)/2,0,0)
|
|
self.attri.transform.localPosition = tempVector3
|
|
self.scrollView:ResetPosition()
|
|
end
|
|
|
|
function AstrolabeTipView:AddIgnoreBounds(obj)
|
|
if(self.gameObject and self.closecomp)then
|
|
self.closecomp:AddTarget(obj.transform);
|
|
end
|
|
end
|
|
|
|
function AstrolabeTipView:DestroySelf()
|
|
GameObject.Destroy(self.gameObject)
|
|
end
|
|
|
|
function AstrolabeTipView:OnExit()
|
|
--這邊發事件
|
|
self.anchors = nil
|
|
return true;
|
|
end |