源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

489 lines
16 KiB

EscortMainView = EscortMainView or BaseClass(BaseView)
local EscortMainView = EscortMainView
function EscortMainView:__init()
self.base_file = "escort"
self.layout_file = "EscortMainView"
self.layer_name = "UI"
self.destroy_imm = true
self.use_background = true --全屏界面默认使用这个参数
self.hide_maincancas = true --全屏界面需要放开隐藏主UI
self.blur_activity_bg = true
self.close_fog = true
self.change_scene_close = true
self.append_to_ctl_queue = false --是否要添加进界面堆栈
self.need_show_money = true --是否要显示顶部的金钱栏
self.improve_target_id = 0
self.item_list = {}
self.awarditem_list = {}
self.position_data = {
[1] = {15, -202},
[2] = {207, -41},
[3] = {457, -64},
[4] = {617, -254},
}
self.model = EscortModel:getInstance()
self.is_auto_buy = self.model.is_auto_buy
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50000)
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.switch_callback = function(index)
self:SwitchTab(index)
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function EscortMainView:Open( )
--self.data = data
BaseView.Open(self)
end
function EscortMainView:LoadSuccess()
local nodes = {
"fresh_btn:obj", "buy_toggle:tog:obj", "bg:raw", "tip_btn:obj", "close_btn:obj",
"escort_btn:obj", "item_con", "cost_image:img:obj", "reward_con",
"time_text2:tmp", "cost_text:tmp", "time_text1:tmp", "num_text:tmp", "con_money",
"progress_text:tmp", "progress_image:img", "desc_text:tmp"
}
self:GetChildren(nodes)
local pos_x = GetAnchoredPosition(self.desc_text)
SetAnchoredPositionX(self.desc_text, pos_x - 12)
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("escort_bg"),false)
lua_resM:setOutsideImageSprite(self, self.cost_image_img, GameResPath.GetGoodsIcon(EscortConst.ESCORT_GOODS_ID),false)
self.buy_toggle_tog.isOn = self.is_auto_buy
self:CreateMoneyView()
self:UpdateEscortItem()
self:SetDoubleExpTime()
end
function EscortMainView:AddEvent()
local on_click = function ( click_obj )
if self.close_btn_obj == click_obj then
self:Close()
elseif self.tip_btn_obj == click_obj then
EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 50000)
elseif self.fresh_btn_obj == click_obj then
self:StartFresh()
elseif self.escort_btn_obj == click_obj then
if self.model:CurTimeIsDouble() then
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50002, 1)
else
self:AskCall()
end
elseif self.buy_toggle_obj == click_obj then
self.is_auto_buy = not self.is_auto_buy
self.model.is_auto_buy = self.is_auto_buy
elseif self.cost_image_obj == click_obj then
UIToolTipMgr:getInstance():AppendGoodsTips(EscortConst.ESCORT_GOODS_ID, x, y, nil, nil, nil,nil,false)
end
end
AddClickEvent(self.close_btn_obj, on_click)
AddClickEvent(self.support_btn_obj, on_click)
AddClickEvent(self.tip_btn_obj, on_click)
AddClickEvent(self.fresh_btn_obj, on_click)
AddClickEvent(self.escort_btn_obj, on_click)
AddClickEvent(self.buy_toggle_obj, on_click)
AddClickEvent(self.cost_image_obj, on_click)
local function on_update( )
local base_info = self.model:GetEscortBaseInfo()
if base_info.is_convoy == 1 then--如果已经开始护送了 就别刷新界面了 会刷到下一次的信息
else
self:UpdateView()
end
end
self.update_id = self.model:BindOne("escort_base_info", on_update)
end
function EscortMainView:AskCall( )
local cost = self.model.double_escort_cost[1][3] -- config
local cost_type = self.model.double_escort_cost[1][1]
local jin = RoleManager.Instance.mainRoleInfo.jin
local jinLock = RoleManager.Instance.mainRoleInfo.jinLock
local function recharge_call_back( ... )--充值
local args = {...}
local use_lockjin = args[1]
-- 关闭道具tips
UIToolTipMgr:getInstance():CloseGoodsTips()
local qc_data = {
price = cost - (use_lockjin and jinLock or 0),
close_callback = nil,
qc_type = 0,
}
GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true, qc_data)
end
local function invest_call_back( ... )--前往投资
-- 关闭道具tips
UIToolTipMgr:getInstance():CloseGoodsTips()
OpenFun.Open(420,1)
end
-- 双倍护送
local function ok_callback()
if cost_type == 1 then
if jin < cost then--彩钻不足
recharge_call_back()
else
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50002, 1)
end
elseif cost_type == 2 then
if jinLock < cost then
local ok = function ( )
if jinLock + jin < cost then
recharge_call_back(true)
else
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50002, 1)
end
end
local jin_type_img = WordManager:GetMoneyFaceStr( 1 )
local jinLock_type_name = GoodsModel:getInstance():getGoodsName(100001, false)
local str = string.format("您的<color=#ff203a>%s不足</color>,是否使用<color=#fdffc2> %s%s </color>补全?",jinLock_type_name,jin_type_img,cost - jinLock)
if VipModel:getInstance():HasBoughtAllInvestmentTypes() then -- 已经购买了全部的投资类型,则不提示前往投资
Alert.show(str, Alert.Type.Two, ok, nil, "彩钻补全", "取消")
else
Alert.show(str, Alert.Type.Two, ok, invest_call_back, "彩钻补全", "前往投资")
end
else
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50002, 1)
end
end
end
-- 单倍护送
local function cancel_callback()
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50002, 0)
end
local function toggle_function( flag )
self.model.not_show_go_ask = flag
end
-- 屏蔽接口里面的recharge_callback 跳转到自己的函数
local function rechanger_callback(...)
ok_callback()
end
local time_str = HtmlColorTxt("(17:00-17:30 21:30-22:00)", ColorUtil.GREEN_DARK)
local str = string.format("现在不是 %s\n%s", HtmlColorTxt("双倍护送时间", ColorUtil.GREEN_DARK), time_str)
local toggle_tip_data = {
insufficientText = str,
titleText = "提示",
nameText = "是否花费 ",
priceText = string.format("%s 进行护送获得双倍奖励", HtmlColorTxt(cost, "#fdffc2")),
okText = "确认双倍",
cancelText = "坚持单倍",
toggleText = " 记住本次选择",--8字符
ok_callback = ok_callback,
close_callback = cancel_callback,
rechanger_callback = rechanger_callback,
toggle_function = toggle_function,
is_complex_ok_callback = false,
gold_res = "ui_momey_icon_" .. cost_type,
price = cost, -- config
}
if not self.model.not_show_go_ask_indeed or self.model.last_double_escort == nil then
GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
else
if self.model.last_double_escort == 1 then
ok_callback()
elseif self.model.last_double_escort == 0 then
cancel_callback()
end
end
end
function EscortMainView:StartFresh( )
-- local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(EscortConst.ESCORT_GOODS_ID)
-- local buy_price = GoodsModel:getInstance():GetGoodsPrice(EscortConst.ESCORT_GOODS_ID)
-- local cost_price = (self.need_num - goods_num) * buy_price
-- local price_asset, price_icon = WordManager:GetCommonMoneyIcon(2)
-- local toggle_tip_data = {
-- gold_ab_res = price_asset,
-- gold_res = price_icon,
-- price = cost_price,
-- insufficientText = "",
-- priceText = string.format("<color=#fdffc2>%s</color> 补齐所需的护送令牌",cost_price),
-- titleText = "提示",
-- ok_callback = ok_callback,
-- toggle_function = toggle_function,
-- is_complex_ok_callback = true,
-- }
-- if not self.model.not_show_escort_ask and cost_price ~= 0 and self.is_auto_buy then
-- GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
-- else
-- ok_callback()
-- end
local function ok_callback()
local auto_buy = self.is_auto_buy and 1 or 0
-- local auto_buy = 1--这里改了 永远都要自动购买
self.model:Fire(EscortConst.REQUEST_SCMD_EVENT, 50001, auto_buy)
end
local function toggle_function( flag )
self.model.not_show_escort_ask = flag
end
local function use_function( toggle_tip_data,call_fun_sum )
if not self.model.not_show_escort_ask then
GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
else
call_fun_sum()
end
end
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(EscortConst.ESCORT_GOODS_ID)
local buy_price = GoodsModel:getInstance():GetGoodsPrice(EscortConst.ESCORT_GOODS_ID)
local cost_price = (self.need_num - goods_num) * buy_price
if not self.model.not_show_escort_ask and cost_price ~= 0 and not self.is_auto_buy then
local buy_tip_data = {
gold_type = 2,--货币类型
cost_price = cost_price,--消耗金额
ok_callback = ok_callback,--成功
toggle_function = toggle_function,--多选
togglePriceStr = string.format("<color=#fdffc2>%s</color> 补齐所需的%s", cost_price, HtmlColorTxt(" [外送凭证]", ColorUtil.BLUE_DARK)),--提示语
use_function = use_function,--最终调用
}
CustomActivityModel:getInstance():BuyTips(buy_tip_data)
else
ok_callback()
end
end
function EscortMainView:OpenSuccess()
self:UpdateView()
end
function EscortMainView:UpdateView()
self.base_info = self.model:GetEscortBaseInfo()
local index = self.model:GetEscortObjectIndexById(self.base_info.object_id or 1001)
local cfg = Config.Convoyobject
local cur_id = self.base_info.object_id or 1001
if cfg[cur_id] then
self.progress_text_tmp.text = string.format("%s/%s", self.base_info.pray_val or 0, cfg[cur_id].up_next_val)
self.progress_image_img.fillAmount = (self.base_info.pray_val or 0)/cfg[cur_id].up_next_val
end
-- lua_resM:setImageSprite(self, self.type_image_img, "escort_asset", "escort_text"..index)
-- self:UpdateDropDown()
self:SetSelect()
self:UpdateNeedCost()
self:UpdateRewardCon()
if self.model:IsOverMaxCount() then
self.num_text_tmp.text = string.format("剩余次数:%s/%s", HtmlColorTxt(0, ColorUtil.RED_DARK), self.model.max_escort_num)
else
local left_num = self.model.max_escort_num-self.model:GetEscortTimes()
self.num_text_tmp.text = string.format("剩余次数:%s/%s", HtmlColorTxt(left_num, ColorUtil.GREEN_DARK), self.model.max_escort_num)
end
end
function EscortMainView:CreateMoneyView( )
if not self.money_view then
self.money_view = UIMoneyView.New(self.con_money)
end
self.money_view:SetPosition(0,0)
self.money_view:SetData()
end
function EscortMainView:SetSelect( )
local index = self.model:GetEscortObjectIndexById(self.base_info.object_id or 0)
for i,v in ipairs(self.item_list) do
v:SetSelect(i==index)
end
end
--双倍时间
function EscortMainView:SetDoubleExpTime()
local cfg1 = DailyModel:getInstance():GetAcConfig(500, 1, 2)
if cfg1 then
local time = ErlangParser:GetInstance():Parse(cfg1.time_region)
for i=1,2 do
for j=1,2 do
if tonumber(time[1][i][j]) < 10 and #(tostring(time[1][i][j])) == 1 then
time[1][i][j] = "0"..time[1][i][j]
end
if tonumber(time[2][i][j]) < 10 and #(tostring(time[2][i][j])) == 1 then
time[2][i][j] = "0"..time[2][i][j]
end
end
end
local time1 = string.format("%s:%s-%s:%s", time[1][1][1], time[1][1][2],time[1][2][1], time[1][2][2])
local time2 = string.format("%s:%s-%s:%s", time[2][1][1], time[2][1][2],time[2][2][1], time[2][2][2])
self.time_text2_tmp.text = string.format("%s %s", HtmlColorTxt(time1, ColorUtil.GREEN_DARK), HtmlColorTxt(time2, ColorUtil.GREEN_DARK))
-- self.time_text2_tmp.text = string.format("%s:%s-%s:%s", time[2][1][1], time[2][1][2],
-- time[2][2][1], time[2][2][2])
end
-- local cfg2 = DailyModel:getInstance():GetAcConfig(500, 1, 2)
-- if cfg2 then
-- local time = ErlangParser:GetInstance():Parse(cfg2.time_region)
-- for j=1,2 do
-- for k=1,2 do
-- if tonumber(time[1][j][k]) < 10 then
-- time[1][j][k] = "0"..time[1][j][k]
-- end
-- end
-- end
-- self.time_text2_tmp.text = string.format("%s:%s-%s:%s", time[1][1][1], time[1][1][2],
-- time[1][2][1], time[1][2][2])
-- end
end
function EscortMainView:UpdateDropDown( )
local list = {}
local cfg_list = {}
local cfg = Config.Convoyobject
local first = true
local cur_index = self.base_info.object_id
local last_cfg = {}
local count = 1
for i,v in pairsByKeys(cfg) do
if first then
first = false
cur_index = cur_index or i
end
if i > cur_index then
local name = self:GetColorName(v.name, v.id)
table.insert(list, name)
table.insert(cfg_list, v)
end
if count == TableSize(cfg) then
last_cfg = v
end
count = count + 1
end
if TableSize(cfg_list) == 0 then
local name = self:GetColorName(last_cfg.name, last_cfg.id)
table.insert(list, name)
table.insert(cfg_list, last_cfg)
end
self.improve_index = 1
self.improve_target_id = cfg_list[self.improve_index].id
local function update_object_id_func(index)
self.improve_index = index
self.improve_target_id = cfg_list[index].id
self:UpdateNeedCost()
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height -10}
if not self.object_drop_down then
self.object_drop_down = Combox.New(self.improve_con,list,update_object_id_func,138,30,nil,prefab_data)
else
self.object_drop_down:ResetData(list,self.improve_index,update_object_id_func,138,30)
end
end
function EscortMainView:UpdateNeedCost( )
local cur_id = self.base_info.object_id
if cur_id == 0 or not cur_id then
return
end
local cfg = Config.Convoyobject
local num = 0
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(EscortConst.ESCORT_GOODS_ID)
if self.is_improve_to then
for k,v in pairsByKeys(cfg) do
if k >= cur_id and k < self.improve_target_id then
num = num + stringtotable(v.upgrade_cost)[1][3]
end
end
else
local data = stringtotable(cfg[cur_id].upgrade_cost)
if TableSize(data) > 0 then
num = data[1][3]
end
end
local color_str = ColorUtil.GREEN_DARK
if goods_num < num then
color_str = ColorUtil.RED_DARK
end
self.need_num = num
self.cost_text_tmp.text = string.format("剩余:%s/%s", HtmlColorTxt(goods_num, color_str), num)
end
function EscortMainView:GetColorName(name,id)
local index = self.model:GetEscortObjectIndexById(id)
local color_str = {
[1] = "#ffffff",
[2] = "#10aaf1",--7bb1ff
[3] = "#d322ff",--f280f7
[4] = "#ffea9c",--ffe96c
}
return HtmlColorTxt(name, color_str[index])
end
function EscortMainView:UpdateEscortItem( )
local data = Config.Convoyobject
local count = 1
local x_offset = 290
for i,v in pairsByKeys(data) do
local item = self.item_list[count]
if not item then
item = EscortItem.New(self.item_con)
self.item_list[count] = item
end
item:SetData(v, count)
-- item:SetPosition(self.position_data[count][1], self.position_data[count][2])
item:SetPosition((count - 1) * x_offset-10, -168)
count = count + 1
end
end
function EscortMainView:UpdateRewardCon( )
local cur_id = self.base_info.object_id or 1001
cur_id = cur_id == 0 and 1001 or cur_id
local exp_num = self.model:GetEscortExpByLv(RoleManager.Instance.mainRoleInfo.level, cur_id, false)
local data = stringtotable(Config.Convoyobject[cur_id].award) or {}
local exp_data = {
[1] = 0,
[2] = EscortConst.EXP_TPYE_ID,
[3] = exp_num
}
table.insert(data, exp_data)
for i,v in ipairs(data) do
local item = self.awarditem_list[i]
if not item then
item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.reward_con)
item:SetItemSize(59,59)
item:SetPosition(64*(i-1), 0)
self.awarditem_list[i] = item
end
item:SetData(v[2],v[3])
end
end
function EscortMainView:DestroySuccess( )
for i,v in ipairs(self.item_list) do
v:DeleteMe()
v = nil
end
self.item_list = {}
if self.drop_down then
self.drop_down:DeleteMe()
self.drop_down = nil
end
if self.update_id then
self.model:UnBind(self.update_id)
self.update_id = nil
end
if self.money_view then
self.money_view:DeleteMe()
self.money_view = nil
end
if self.object_drop_down then
self.object_drop_down:DeleteMe()
self.object_drop_down = nil
end
for i,v in ipairs(self.awarditem_list) do
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v)
end
self.awarditem_list = {}
end