308 lines
11 KiB
Lua
308 lines
11 KiB
Lua
MoneyNumView = {}
|
|
|
|
local PositionType = {
|
|
Up_Or_Left = 1,
|
|
Down_Or_Right = 2,
|
|
}
|
|
|
|
local ImageTypeConfig = {
|
|
[MoneyNumViewImageType.Small_1] = {
|
|
[MoneyType.RMB] = {type = PositionType.Down_Or_Right, imgName = "c_czlb_yuan_zh", imgSize = nil},
|
|
[MoneyType.USD] = {type = PositionType.Up_Or_Left, imgName = "c_czlb_yuan_vi", imgSize = nil}
|
|
},
|
|
[MoneyNumViewImageType.Big_1] = {
|
|
[MoneyType.RMB] = {type = PositionType.Down_Or_Right, imgName = "c_czlb_yuan_zh", imgSize = Vector3.New(60, 60)},
|
|
[MoneyType.USD] = {type = PositionType.Up_Or_Left, imgName = "c_czlb_yuan_vi", imgSize = Vector3.New(60, 60)}
|
|
}
|
|
}
|
|
|
|
function MoneyNumView:New(gameObject)
|
|
local b = {}
|
|
b.gameObject = gameObject
|
|
b.transform = gameObject.transform
|
|
setmetatable(b, { __index = MoneyNumView })
|
|
return b
|
|
end
|
|
|
|
--初始化组件(用于子类重写)
|
|
function MoneyNumView:InitComponent()
|
|
self.spLoader = SpriteLoader.New()
|
|
self.Text_Num = Util.GetGameObject(self.gameObject, "Text_Num"):GetComponent("Text")
|
|
|
|
self.Image_Num_Vertical = Util.GetGameObject(self.gameObject, "Image_Num_Vertical"):GetComponent("VerticalLayoutGroup")
|
|
self.V_NumLayout = Util.GetGameObject(self.Image_Num_Vertical.transform, "nums"):GetComponent("VerticalLayoutGroup")
|
|
self.V_Image_1 = Util.GetGameObject(self.Image_Num_Vertical.transform, "Image (1)"):GetComponent("Image")
|
|
self.V_Image_2 = Util.GetGameObject(self.Image_Num_Vertical.transform, "Image (2)"):GetComponent("Image")
|
|
|
|
self.Image_Num_Horizontal = Util.GetGameObject(self.gameObject, "Image_Num_Horizontal"):GetComponent("HorizontalLayoutGroup")
|
|
self.H_NumLayout = Util.GetGameObject(self.Image_Num_Horizontal.transform, "nums"):GetComponent("HorizontalLayoutGroup")
|
|
self.H_Image_1 = Util.GetGameObject(self.Image_Num_Horizontal.transform, "Image (1)"):GetComponent("Image")
|
|
self.H_Image_2 = Util.GetGameObject(self.Image_Num_Horizontal.transform, "Image (2)"):GetComponent("Image")
|
|
|
|
self.V_Num = {}
|
|
self.H_Num = {}
|
|
for i = 1, 10 do
|
|
self.V_Num[i] = Util.GetGameObject(self.V_NumLayout.transform, "num ("..i..")"):GetComponent("Text")
|
|
self.H_Num[i] = Util.GetGameObject(self.H_NumLayout.transform, "num ("..i..")"):GetComponent("Text")
|
|
end
|
|
|
|
end
|
|
|
|
--绑定事件(用于子类重写)
|
|
function MoneyNumView:BindEvent()
|
|
end
|
|
|
|
--添加事件监听(用于子类重写)
|
|
function MoneyNumView:AddListener()
|
|
end
|
|
|
|
--移除事件监听(用于子类重写)
|
|
function MoneyNumView:RemoveListener()
|
|
end
|
|
|
|
---
|
|
---
|
|
--- 参数说明
|
|
--- num 要显示的金钱的数量
|
|
--- viewType 界面类型 对应 MoneyNumViewType 常量
|
|
--- font 字体
|
|
--- fontSize 字体大小(只在文本下生效)
|
|
--- localScale 字体缩放
|
|
--- rectSize 文本:文本框的大小 艺术字:单个艺术字的大小,修改会影响排版,但不会影响艺术字的大小
|
|
--- space 间距 该组件中有两个Layout嵌套 space为Vector2值 x为外层嵌套的spacing值 y为内层嵌套的值
|
|
--- imgType 符号图片的类型, 该类型可根据目前使用的货币类型,定义 元 和 $ 图片文字的大小
|
|
---
|
|
|
|
--界面打开时调用(用于子类重写)
|
|
function MoneyNumView:OnOpen(num, viewType, font, fontSize, localScale, rectSize, space, imgType)
|
|
self.num = tostring(num) or ""
|
|
self.viewType = viewType
|
|
self.font = font
|
|
self.fontSize = fontSize
|
|
self.localScale = localScale
|
|
self.rectSize = rectSize
|
|
self.space = space
|
|
self.imgType = imgType or MoneyNumViewImageType.Small_1
|
|
|
|
self:RefreshShow()
|
|
end
|
|
|
|
function MoneyNumView:RefreshShow()
|
|
--
|
|
self.Text_Num.gameObject:SetActive(self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal)
|
|
self.Image_Num_Vertical.gameObject:SetActive(self.viewType == MoneyNumViewType.Image_Vertical)
|
|
self.Image_Num_Horizontal.gameObject:SetActive(self.viewType == MoneyNumViewType.Image_Horizontal)
|
|
|
|
-- 竖向文本每个字中间添加一个\n
|
|
if self.viewType == MoneyNumViewType.Text_Vertical then
|
|
local moneyStr = MoneyUtil.GetMoneyUnitNameWithMoney(self.num)
|
|
local strTb = StringConvertToTable(moneyStr)
|
|
local txt = strTb[1]
|
|
for i = 2, #strTb do
|
|
txt = txt .. "\n" .. strTb[2]
|
|
end
|
|
self:SetTextShow(txt)
|
|
|
|
-- 横向文本直接显示
|
|
elseif self.viewType == MoneyNumViewType.Text_Horizontal then
|
|
local moneyStr = MoneyUtil.GetMoneyUnitNameWithMoney(self.num)
|
|
self:SetTextShow(moneyStr)
|
|
|
|
-- 竖向图片显示
|
|
elseif self.viewType == MoneyNumViewType.Image_Vertical then
|
|
-- 处理数字显示
|
|
self:SetNumShow(self.V_Num)
|
|
-- 处理符号显示
|
|
self:SetMarkShow(self.V_Image_1, self.V_Image_2)
|
|
--
|
|
self.Image_Num_Vertical.spacing = self.space.x or 0
|
|
self.V_NumLayout.spacing = self.space.y or 0
|
|
--
|
|
ForceRebuildLayout(self.V_NumLayout.transform)
|
|
ForceRebuildLayout(self.Image_Num_Vertical.transform)
|
|
|
|
-- 横向图片显示
|
|
elseif self.viewType == MoneyNumViewType.Image_Horizontal then
|
|
-- 处理数字显示
|
|
self:SetNumShow(self.H_Num)
|
|
-- 处理符号显示
|
|
self:SetMarkShow(self.H_Image_1, self.H_Image_2)
|
|
--
|
|
self.Image_Num_Horizontal.spacing = self.space.x or 0
|
|
self.H_NumLayout.spacing = self.space.y or 0
|
|
--
|
|
ForceRebuildLayout(self.H_NumLayout.transform)
|
|
ForceRebuildLayout(self.Image_Num_Horizontal.transform)
|
|
end
|
|
|
|
-- self.isChange = 0
|
|
self:RefreshSize()
|
|
self:RefreshOffsetPosition()
|
|
end
|
|
-- 设置图片数字显示
|
|
function MoneyNumView:SetTextShow(txt)
|
|
self.Text_Num.text = txt
|
|
self.Text_Num.font = resMgr:LoadAsset(self.font)
|
|
self.Text_Num.fontSize = self.fontSize
|
|
self.Text_Num.transform.localScale = Vector3.one * self.localScale
|
|
self.Text_Num.transform.sizeDelta = self.rectSize
|
|
|
|
ForceRebuildLayout(self.Text_Num.transform)
|
|
end
|
|
|
|
-- 设置图片数字显示
|
|
function MoneyNumView:SetNumShow(numList,num)
|
|
if num then
|
|
self.num = tostring(num)
|
|
if numList == 1 then
|
|
numList = self.H_Num
|
|
elseif numList == 2 then
|
|
numList = self.V_Num
|
|
end
|
|
end
|
|
local numTb = StringConvertToTable(self.num)
|
|
for i = 1, 10 do
|
|
if numTb[i] then
|
|
numList[i].gameObject:SetActive(true)
|
|
numList[i].text = numTb[i]
|
|
numList[i].font = resMgr:LoadAsset(self.font)
|
|
numList[i].fontSize = self.fontSize
|
|
numList[i].transform.localScale = Vector3.one * self.localScale
|
|
numList[i].transform.sizeDelta = self.rectSize
|
|
else
|
|
numList[i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
ForceRebuildLayout(self.Image_Num_Horizontal.transform)
|
|
ForceRebuildLayout(self.Image_Num_Vertical.transform)
|
|
end
|
|
|
|
-- 设置图片数字显示
|
|
function MoneyNumView:SetMarkShow(img1, img2)
|
|
local config = ImageTypeConfig[self.imgType][MoneyUtil.MT]
|
|
if not config then
|
|
return
|
|
end
|
|
local imgGo
|
|
if config.type == PositionType.Down_Or_Right then
|
|
imgGo = img2
|
|
elseif config.type == PositionType.Up_Or_Left then
|
|
imgGo = img1
|
|
end
|
|
img1.gameObject:SetActive(imgGo == img1)
|
|
img2.gameObject:SetActive(imgGo == img2)
|
|
-- 设置图片显示
|
|
imgGo.sprite = self.spLoader:LoadSprite(config.imgName)
|
|
if config.imgSize then
|
|
imgGo.transform.sizeDelta = config.imgSize
|
|
else
|
|
imgGo:SetNativeSize()
|
|
end
|
|
end
|
|
|
|
function MoneyNumView:SetRateEnabled(isShow)
|
|
local config = ImageTypeConfig[self.imgType][MoneyUtil.MT]
|
|
if not config then
|
|
return
|
|
end
|
|
local imgGo
|
|
|
|
if self.viewType == MoneyNumViewType.Image_Vertical then
|
|
if config.type == PositionType.Down_Or_Right then
|
|
imgGo = self.V_Image_2
|
|
elseif config.type == PositionType.Up_Or_Left then
|
|
imgGo = self.V_Image_1
|
|
end
|
|
elseif self.viewType == MoneyNumViewType.Image_Horizontal then
|
|
if config.type == PositionType.Down_Or_Right then
|
|
imgGo = self.H_Image_2
|
|
elseif config.type == PositionType.Up_Or_Left then
|
|
imgGo = self.H_Image_1
|
|
end
|
|
end
|
|
|
|
imgGo.gameObject:SetActive(isShow)
|
|
end
|
|
|
|
function MoneyNumView:SetNum(num)
|
|
if not num then
|
|
return
|
|
end
|
|
self.num = tostring(num)
|
|
self:RefreshShow()
|
|
end
|
|
|
|
function MoneyNumView:SetOffsetPosition(position)
|
|
if not position then
|
|
return
|
|
end
|
|
self.offsetPosition = position
|
|
self:RefreshOffsetPosition()
|
|
end
|
|
|
|
function MoneyNumView:SetOffsetRotation(rotation)
|
|
if not rotation then
|
|
return
|
|
end
|
|
self.offsetRotation = rotation
|
|
self:RefreshOffsetRotation()
|
|
end
|
|
--
|
|
-- function MoneyNumView:Update()
|
|
-- -- 延迟3帧刷新大小
|
|
-- if self.isChange <= 3 then
|
|
-- if self.isChange == 3 then
|
|
-- self:RefreshSize()
|
|
-- self:RefreshOffsetPosition()
|
|
-- end
|
|
-- self.isChange = self.isChange + 1
|
|
-- end
|
|
-- end
|
|
-- 刷新组件大小
|
|
function MoneyNumView:RefreshSize()
|
|
if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then
|
|
self.transform.sizeDelta = self.Text_Num.transform.sizeDelta
|
|
elseif self.viewType == MoneyNumViewType.Image_Vertical then
|
|
self.transform.sizeDelta = self.Image_Num_Vertical.transform.sizeDelta
|
|
elseif self.viewType == MoneyNumViewType.Image_Horizontal then
|
|
self.transform.sizeDelta = self.Image_Num_Horizontal.transform.sizeDelta
|
|
end
|
|
end
|
|
-- 修正组件位置
|
|
function MoneyNumView:RefreshOffsetPosition()
|
|
if not self.offsetPosition then
|
|
self.offsetPosition = Vector2.New(0, 0)
|
|
return
|
|
end
|
|
if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then
|
|
self.Text_Num.transform.localPosition = self.offsetPosition
|
|
elseif self.viewType == MoneyNumViewType.Image_Vertical then
|
|
self.Image_Num_Vertical.transform.localPosition = self.offsetPosition
|
|
elseif self.viewType == MoneyNumViewType.Image_Horizontal then
|
|
self.Image_Num_Horizontal.transform.localPosition = self.offsetPosition
|
|
end
|
|
end
|
|
-- 修正组件角度
|
|
function MoneyNumView:RefreshOffsetRotation()
|
|
if not self.offsetRotation then
|
|
self.offsetRotation = Vector3.New(0, 0, 0)
|
|
return
|
|
end
|
|
if self.viewType == MoneyNumViewType.Text_Vertical or self.viewType == MoneyNumViewType.Text_Horizontal then
|
|
self.Text_Num.transform.rotation = Quaternion.Euler(self.offsetRotation)
|
|
elseif self.viewType == MoneyNumViewType.Image_Vertical then
|
|
self.Image_Num_Vertical.transform.rotation = Quaternion.Euler(self.offsetRotation)
|
|
elseif self.viewType == MoneyNumViewType.Image_Horizontal then
|
|
self.Image_Num_Horizontal.transform.rotation = Quaternion.Euler(self.offsetRotation)
|
|
end
|
|
end
|
|
|
|
--界面关闭时调用(用于子类重写)
|
|
function MoneyNumView:OnClose()
|
|
self.spLoader:Destroy()
|
|
|
|
end
|
|
|
|
|
|
|
|
return MoneyNumView |