640 lines
18 KiB
Lua
640 lines
18 KiB
Lua
local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
|
|
|
|
local itemTypeConfig = {
|
|
[GEnums.DomainDepotDeliverItemType.Industry] = {
|
|
'icon_goods_fragile01',
|
|
'icon_goods_fragile02',
|
|
'icon_goods_fragile03',
|
|
},
|
|
[GEnums.DomainDepotDeliverItemType.NaturalResource] = {
|
|
'icon_goods_normal01',
|
|
'icon_goods_normal02',
|
|
'icon_goods_normal03',
|
|
},
|
|
[GEnums.DomainDepotDeliverItemType.Misc] = {
|
|
'icon_goods_sturdy01',
|
|
'icon_goods_sturdy02',
|
|
'icon_goods_sturdy03',
|
|
},
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack = HL.Class('DomainDepotPack', UIWidgetBase)
|
|
|
|
|
|
DomainDepotPack.m_spriteNameList = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_currentAnim = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_randomItemIndex = HL.Field(HL.Number) << 1
|
|
|
|
|
|
DomainDepotPack.m_hasChangeItemType = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.m_animInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_randomAnimInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_packOutAnimInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_packInAnimInfo = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_itemInfo = HL.Field(HL.Table)
|
|
|
|
|
|
|
|
DomainDepotPack.m_itemCount = HL.Field(HL.Number) << 0
|
|
|
|
|
|
DomainDepotPack.m_targetCount = HL.Field(HL.Number) << 0
|
|
|
|
|
|
DomainDepotPack.m_changeValue = HL.Field(HL.Number) << 0
|
|
|
|
|
|
DomainDepotPack.m_itemType = HL.Field(GEnums.DomainDepotDeliverItemType)
|
|
|
|
|
|
DomainDepotPack.m_currentShowItemType = HL.Field(GEnums.DomainDepotDeliverItemType)
|
|
|
|
|
|
DomainDepotPack.m_packSize = HL.Field(GEnums.DeliverPackType)
|
|
|
|
|
|
DomainDepotPack.m_usedDropDownIndexTable = HL.Field(HL.Table)
|
|
|
|
|
|
DomainDepotPack.m_inRandomAnim = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
DomainDepotPack.m_isUpCountAnim = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
DomainDepotPack.m_isInCountChangeAnim = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack._OnFirstTimeInit = HL.Override() << function(self)
|
|
|
|
|
|
|
|
self:HideAllBlocks()
|
|
|
|
self.m_animInfo = {}
|
|
self.m_usedDropDownIndexTable = {}
|
|
|
|
self.m_randomAnimInfo = {
|
|
isLocal = true,
|
|
name = 'domainDepot_goods_in',
|
|
getCtrlName = function(this)
|
|
return 'goods0' .. this.index
|
|
end,
|
|
beforeFunc = function(this)
|
|
if not self.m_inRandomAnim then
|
|
return false
|
|
end
|
|
|
|
if self.m_usedDropDownIndexTable[this.index] == true then
|
|
|
|
return false
|
|
end
|
|
|
|
|
|
self.m_usedDropDownIndexTable[this.index] = true
|
|
self.view['Image0' .. this.index].enabled = true
|
|
self.view['Image0' .. this.index].gameObject:SetActiveIfNecessary(true)
|
|
self.view['Image0' .. this.index]:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, lume.randomchoice(itemTypeConfig[self.m_itemType]))
|
|
return true
|
|
end,
|
|
afterFunc = function(this)
|
|
|
|
self.m_usedDropDownIndexTable[this.index] = false
|
|
self.view['Image0' .. this.index].enabled = false
|
|
self:_StartCoroutine(function()
|
|
coroutine.wait(lume.random(self.config.RANDOM_ITEM_INTERVAL))
|
|
if self.m_inRandomAnim then
|
|
table.insert(self.m_animInfo, this)
|
|
end
|
|
self:_PlayAnimImp()
|
|
end)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end,
|
|
}
|
|
|
|
self.m_packOutAnimInfo = {
|
|
name = 'domainDepot_pack_out',
|
|
groupName = 'animationWrapper',
|
|
audioEvent = 'Au_UI_Event_RegionWareBox_Out',
|
|
}
|
|
self.m_packInAnimInfo = {
|
|
name = 'domainDepot_pack_in',
|
|
groupName = 'animationWrapper',
|
|
audioEvent = 'Au_UI_Event_RegionWareBox_In',
|
|
beforeFunc = function()
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(self.m_packSize:ToString()), string.lower(self.m_itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
self.view.layerStateController:SetState(self.m_packSize:ToString())
|
|
|
|
|
|
for i = 1, 9 do
|
|
self.view['goods0' .. i].gameObject:SetActiveIfNecessary(false)
|
|
end
|
|
end
|
|
}
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.InitDomainDepotPack = HL.Method() << function(self)
|
|
self:_FirstTimeInit()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.ChangePackSize = HL.Method(GEnums.DeliverPackType) << function(self, packSize)
|
|
self.m_packSize = packSize
|
|
self.view.layerStateController:SetState(self.m_packSize:ToString())
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(self.m_packSize:ToString()), string.lower(self.m_itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
DomainDepotPack.ClearPackItemCount = HL.Method() << function(self)
|
|
self.m_isInCountChangeAnim = false
|
|
self.m_itemCount = 0
|
|
self.m_targetCount = 0
|
|
for i = 1, 9 do
|
|
self.view['block0' .. i].gameObject:SetActiveIfNecessary(false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.ChangePackItemCount = HL.Method(HL.Number) << function(self, count)
|
|
if not self.m_isInCountChangeAnim then
|
|
self.m_isInCountChangeAnim = true
|
|
self.m_inRandomAnim = false;
|
|
self.view.goodsRoot.gameObject:SetActiveIfNecessary(false)
|
|
self.view.blockRoot.gameObject:SetActiveIfNecessary(true)
|
|
self:_StartCoroutine(function()
|
|
|
|
while self.m_isInCountChangeAnim do
|
|
if self.m_currentAnim ~= nil then
|
|
logger.warn("DomainDepotPack.ChangePackItemCount: isInCountChangeAnim but has Anther anim")
|
|
end
|
|
coroutine.wait(self.config.CHANGE_ITEM_COUNT_INTERVAL)
|
|
if self.m_targetCount ~= self.m_itemCount and self.m_currentAnim == nil then
|
|
local changeValue = self.m_targetCount > self.m_itemCount and 1 or -1
|
|
local i = self.m_itemCount + (changeValue > 0 and changeValue or 0)
|
|
table.insert(self.m_animInfo, {
|
|
isLocal = true,
|
|
getAnimName = function()
|
|
if changeValue > 0 then
|
|
return 'domainDepot_block_in'
|
|
end
|
|
if changeValue < 0 then
|
|
return 'domainDepot_block_out'
|
|
end
|
|
return 'domainDepot_block_idle'
|
|
end,
|
|
getCtrlName = function()
|
|
return 'block0' .. i
|
|
end,
|
|
beforeFunc = function()
|
|
if self.m_isInCountChangeAnim ~= true then
|
|
|
|
return false
|
|
end
|
|
|
|
self.m_itemCount = i + (changeValue > 0 and 0 or -1)
|
|
self.view['block0' .. i].gameObject:SetActiveIfNecessary(true)
|
|
end,
|
|
})
|
|
self:_PlayAnimImp()
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
count = count > 9 and 9 or count < 0 and 0 or count
|
|
if self.m_targetCount == count then
|
|
return
|
|
else
|
|
self.m_targetCount = count
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.InitPackageSellBgNode = HL.Method(HL.Any) << function(self, deliverInfo)
|
|
self.m_packSize = deliverInfo.deliverPackType
|
|
self.m_itemType = deliverInfo.itemType
|
|
|
|
self.view.layerStateController:SetState(self.m_packSize:ToString())
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(self.m_packSize:ToString()), string.lower(self.m_itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
|
|
self.view.goodsRoot.gameObject:SetActiveIfNecessary(false)
|
|
self.view.blockRoot.gameObject:SetActiveIfNecessary(true)
|
|
|
|
local valueLimitCfg = DomainDepotUtils.GetDepotPackValueLimitCfg(deliverInfo.domainDepotId)
|
|
local limitCfg = valueLimitCfg[self.m_itemType][self.m_packSize]
|
|
local max = limitCfg.maxLimitValue
|
|
|
|
self.m_targetCount = math.ceil(deliverInfo.originalPrice / max * 9)
|
|
|
|
|
|
self.m_targetCount = self.m_targetCount > 9 and 9 or self.m_targetCount < 0 and 0 or self.m_targetCount
|
|
|
|
for i = 1, self.m_targetCount do
|
|
self.view['block0' .. i].gameObject:SetActiveIfNecessary(true)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.ChangePackItemType = HL.Method(GEnums.DomainDepotDeliverItemType) << function(self, itemType)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if self.m_itemType == itemType then
|
|
return
|
|
end
|
|
self.m_itemType = itemType
|
|
if self.m_currentAnim ~= nil and self.m_currentAnim.name == 'domainDepot_pack_in' then
|
|
|
|
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(self.m_packSize:ToString()), string.lower(self.m_itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
return
|
|
end
|
|
|
|
if self.m_currentAnim ~= nil and self.m_currentAnim.name == 'domainDepot_pack_out' then
|
|
|
|
return
|
|
end
|
|
|
|
self.m_inRandomAnim = false
|
|
self.view.goodsRoot.gameObject:SetActiveIfNecessary(false)
|
|
self:_ChangePack()
|
|
self.m_isInCountChangeAnim = false;
|
|
table.insert(self.m_animInfo, {
|
|
name = 'NOT PLAY change index for start',
|
|
beforeFunc = function()
|
|
if self.m_isInCountChangeAnim then
|
|
|
|
return false
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self:PlayRandomItemDropAnim(self.m_itemType)
|
|
end
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.PlayRandomItemDropAnim = HL.Method(GEnums.DomainDepotDeliverItemType) << function(self, itemType)
|
|
self.m_itemType = itemType
|
|
self.m_inRandomAnim = true
|
|
self.m_isInCountChangeAnim = false;
|
|
self.view.goodsRoot.gameObject:SetActiveIfNecessary(true)
|
|
self.view.blockRoot.gameObject:SetActiveIfNecessary(false)
|
|
for i = 1, 9 do
|
|
self.view['goods0' .. i].gameObject:SetActiveIfNecessary(false)
|
|
end
|
|
self.m_randomItemIndex = 1
|
|
for i = 1, 9 do
|
|
self:_StartCoroutine(function()
|
|
if self.m_inRandomAnim == false then
|
|
return
|
|
end
|
|
coroutine.wait(lume.random(self.config.RANDOM_ITEM_INTERVAL))
|
|
local randomAnim = lume.deepCopy(self.m_randomAnimInfo)
|
|
randomAnim.index = i
|
|
table.insert(self.m_animInfo, randomAnim)
|
|
self:_PlayAnimImp()
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
DomainDepotPack.GetUniqueRandomIndex = HL.Method().Return(HL.Number) << function(self)
|
|
local idx = math.floor(lume.random(1, 9.999))
|
|
if self.m_usedDropDownIndexTable[idx] ~= true then
|
|
self.m_usedDropDownIndexTable[idx] = true
|
|
return idx
|
|
end
|
|
|
|
for offset = 1, 9 do
|
|
local nextIdx = (idx + offset) % 9
|
|
if self.m_usedDropDownIndexTable[nextIdx] ~= true then
|
|
self.m_usedDropDownIndexTable[nextIdx] = true
|
|
return nextIdx
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.GotoSellAnim = HL.Method(GEnums.DeliverPackType, GEnums.DomainDepotDeliverItemType) << function(self, packType, itemType)
|
|
self.m_packSize = packType
|
|
self.m_itemType = itemType
|
|
self.view.layerStateController:SetState(packType:ToString())
|
|
|
|
|
|
self.m_isInCountChangeAnim = false
|
|
|
|
if self.m_targetCount ~= self.m_itemCount then
|
|
local changeValue = self.m_targetCount > self.m_itemCount and 1 or -1
|
|
for i = self.m_itemCount + (changeValue > 0 and 1 or 0), self.m_targetCount + (changeValue > 0 and 0 or 1), changeValue do
|
|
|
|
table.insert(self.m_animInfo, {
|
|
isLocal = true,
|
|
getAnimName = function()
|
|
if changeValue > 0 then
|
|
return 'domainDepot_block_in'
|
|
end
|
|
if changeValue < 0 then
|
|
return 'domainDepot_block_out'
|
|
end
|
|
return 'domainDepot_block_idle'
|
|
end,
|
|
getCtrlName = function()
|
|
return 'block0' .. i
|
|
end,
|
|
beforeFunc = function()
|
|
self.view['block0' .. i].gameObject:SetActiveIfNecessary(true)
|
|
end,
|
|
afterFunc = function()
|
|
|
|
if i == self.m_targetCount + (changeValue > 0 and -1 or 1) then
|
|
self.view.boxCoverImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_cover_%s", string.lower(itemType:ToString())))
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(packType:ToString()), string.lower(itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
end
|
|
end,
|
|
})
|
|
self:_PlayAnimImp()
|
|
end
|
|
self.m_itemCount = self.m_targetCount
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
DomainDepotPack.CloseBoxCover = HL.Method(HL.Opt(HL.Number)) << function(self, insId)
|
|
|
|
if insId ~= nil then
|
|
local deliverInfo = GameInstance.player.domainDepotSystem:GetDomainDepotDeliverInfoByInstId(insId)
|
|
self.m_packSize = deliverInfo.deliverPackType
|
|
self.m_itemType = deliverInfo.itemType
|
|
end
|
|
|
|
self.view.layerStateController:SetState(self.m_packSize:ToString())
|
|
self.view.boxCoverImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_cover_%s", string.lower(self.m_itemType:ToString())))
|
|
self.view.boxImage:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_%s_%s", string.lower(self.m_packSize:ToString()), string.lower(self.m_itemType:ToString())))
|
|
self.view.frameImg:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, string.format("bg_domain_depot_box_mask_%s", string.lower(self.m_itemType:ToString())))
|
|
table.insert(self.m_animInfo, {
|
|
name = 'domainDepot_pack_change',
|
|
groupName = 'animationWrapper',
|
|
beforeFunc = function()
|
|
self.view.goodsRoot.gameObject:SetActiveIfNecessary(true)
|
|
for i = 1, self.m_targetCount do
|
|
self.view['Image0' .. i].enabled = true
|
|
self.view['Image0' .. i].gameObject:SetActiveIfNecessary(true)
|
|
self.view['Image0' .. i]:LoadSprite(UIConst.UI_SPRITE_DOMAIN_DEPOT, lume.randomchoice(itemTypeConfig[self.m_itemType]))
|
|
end
|
|
end,
|
|
})
|
|
table.insert(self.m_animInfo, {
|
|
name = 'domainDepot_pack_cover_down',
|
|
groupName = 'animationWrapper',
|
|
})
|
|
self:_PlayAnimImp()
|
|
end
|
|
|
|
|
|
|
|
DomainDepotPack.HideAllBlocks = HL.Method() << function(self)
|
|
|
|
for i = 1, 9 do
|
|
self.view['block0' .. i].gameObject:SetActiveIfNecessary(false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
DomainDepotPack._PlayAnimImp = HL.Method() << function(self)
|
|
local animInfoString = ''
|
|
if #self.m_animInfo > 0 then
|
|
|
|
local map = lume.map(self.m_animInfo, function(a)
|
|
return a.name or (a.getAnimName and a.getAnimName())
|
|
end)
|
|
for i = 1, #map do
|
|
if i > 1 then
|
|
animInfoString = animInfoString .. ', '
|
|
end
|
|
animInfoString = animInfoString .. map[i]
|
|
end
|
|
else
|
|
animInfoString = 'no more anims'
|
|
end
|
|
|
|
if #self.m_animInfo == 0 or self.m_currentAnim ~= nil then
|
|
|
|
logger.info(string.format("DomainDepotPack._PlayAnimImp: CurrentAnim : %s AnimList : %s", self.m_currentAnim ~= nil and self.m_currentAnim.name or 'no current anim', animInfoString))
|
|
return
|
|
end
|
|
|
|
|
|
local anim = table.remove(self.m_animInfo, 1)
|
|
local isLocal = anim.isLocal or false
|
|
if not isLocal then
|
|
self.m_currentAnim = anim
|
|
end
|
|
|
|
logger.info(string.format("DomainDepotPack._PlayAnimImp: Playing anim: %s AnimList : %s", anim.name, animInfoString))
|
|
if anim.beforeFunc then
|
|
local success = anim.beforeFunc(anim)
|
|
success = success == nil or success
|
|
|
|
if not success then
|
|
|
|
anim = nil
|
|
self.m_currentAnim = nil
|
|
self:_PlayAnimImp()
|
|
return
|
|
end
|
|
end
|
|
|
|
local groupName = anim.groupName or (anim.getCtrlName ~= nil and anim.getCtrlName(anim) or nil)
|
|
|
|
if groupName == nil then
|
|
anim = nil
|
|
self.m_currentAnim = nil
|
|
self:_PlayAnimImp()
|
|
return
|
|
end
|
|
if self.view[groupName].gameObject.activeInHierarchy == false then
|
|
|
|
logger.error(string.format("DomainDepotPack._PlayAnimImp: Group %s is not active, skipping anim: %s", groupName, anim.name))
|
|
anim = nil
|
|
self.m_currentAnim = nil
|
|
self:_PlayAnimImp()
|
|
return
|
|
end
|
|
self.view[groupName]:Play(anim.name or anim.getAnimName(), function()
|
|
if anim.afterFunc then
|
|
self.m_currentAnim = nil
|
|
anim.afterFunc(anim)
|
|
anim = nil
|
|
else
|
|
|
|
anim = nil
|
|
self.m_currentAnim = nil
|
|
self:_PlayAnimImp()
|
|
end
|
|
end)
|
|
if anim.audioEvent ~= nil then
|
|
AudioAdapter.PostEvent(anim.audioEvent)
|
|
end
|
|
|
|
|
|
if isLocal then
|
|
self:_PlayAnimImp()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
DomainDepotPack._ChangePack = HL.Method() << function(self)
|
|
table.insert(self.m_animInfo, 1, self.m_packOutAnimInfo)
|
|
table.insert(self.m_animInfo, 2, self.m_packInAnimInfo)
|
|
end
|
|
|
|
HL.Commit(DomainDepotPack)
|
|
return DomainDepotPack
|
|
|