miduo_client/Assets/ManagedResources/~Lua/View/MoneyNumView.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