源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

337 rivejä
7.7 KiB

AdventureBookView = AdventureBookView or BaseClass(BaseView)
local AdventureBookView = AdventureBookView
AdventureBookView.MOVE_OFFSET = 15
AdventureBookView.ITEM_OFFSET = 380
local math_abs = math.abs
function AdventureBookView:__init()
self.base_file = "adventureBook"
self.layout_file = "AdventureBookView"
self.layer_name = "Activity"
self.append_to_ctl_queue = true
self.use_background = true
self.model = AdventureBookModel:getInstance()
self.item_list = {}
--self.use_local_view = true
self.curr_index = -1
self.max_book_index = 10
self.is_moving = false
self.drag_begin_x = 0
self.drag_offset_x = 0
self.is_response_click = true -- 点击事件会在onDragend执行,如果是拖动的话不用执行点击
self.load_callback = function()
self:LoadSuccess()
end
self.open_callback = function()
self:InitView()
end
self.close_callback = function()
end
self.destroy_callback = function()
self:Remove()
end
end
function AdventureBookView:Open(type)
self.type = type
BaseView.Open(self)
end
function AdventureBookView:LoadSuccess()
self.transform.localPosition = Vector3.zero
self.transform.sizeDelta = Vector3.zero
if ClientConfig.iphone_x_model then
self.transform.offsetMin = Vector2(ClientConfig.iphone_x_offset_left,0)
self.transform.offsetMax = Vector2(-ClientConfig.iphone_x_offset_right,0)
end
self.bg = self:GetChildImages({
"bg"
})
self.item_parent = self:GetChildTransforms({
"Mask/ItemParent"
})
self.bg.transform.sizeDelta = Vector2(ScreenWidth, ScreenHeight)
lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("zjui_bg.jpg"))
self.backBtn,
self.tipBtn,
self.leftBtn,
self.rightBtn,
self.touch_btn = self:GetChildGameObjects({
"backBtn",
"tipBtn",
"leftBtn",
"rightBtn",
"Mask/Touch"
})
self:InitEvent()
end
function AdventureBookView:InitView()
self.max_book_index = TableSize(Config.Adventurebook)
self:SwitchView(self.type)
end
function AdventureBookView:InitEvent()
local function onBtnClickHandler(target)
if target == self.backBtn then
self:Close()
elseif target == self.tipBtn then
EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 601)
elseif target == self.leftBtn then
if self.is_moving then
return
end
self:ShowPreItem()
elseif target == self.rightBtn then
if self.is_moving then
return
end
self:ShowNextItem()
end
end
AddClickEvent(self.backBtn, onBtnClickHandler, 1)
AddClickEvent(self.tipBtn, onBtnClickHandler, LuaSoundManager.SOUND_UI.SWITCH)
AddClickEvent(self.leftBtn, onBtnClickHandler, LuaSoundManager.SOUND_UI.SWITCH)
AddClickEvent(self.rightBtn, onBtnClickHandler, LuaSoundManager.SOUND_UI.SWITCH)
local function onDragBegin(target,x,y)
if self.is_moving then
return
end
self:OnDragBegin(x,y)
end
local function onDragEnd(target,x,y)
if self.is_moving then
return
end
self:OnDragEnd(x,y)
end
local function onDrag(target,x, y)
if self.is_moving then
return
end
self:OnDrag(x, y)
end
local function onTouchClickHandler(target,x,y)
if target == self.touch_btn then
if self.is_moving then
return
end
self:OnTouchClick(x,y)
end
end
AddClickEvent(self.touch_btn, onTouchClickHandler,LuaSoundManager.SOUND_UI.SWITCH)
AddDragBeginEvent(self.touch_btn,onDragBegin)
AddDragEndEvent(self.touch_btn,onDragEnd)
AddDragEvent(self.touch_btn,onDrag)
--绑定更新item显示的方法
local function onUpdateItem(type, subtype)
self:SwitchView(type)
end
self.update_item_id = self.model:Bind(AdventureBookModel.UPDATE_ADVENTURE_BOOK_INFO, onUpdateItem)
end
function AdventureBookView:OnTouchClick(x,y)
if not self.is_response_click then
return
end
x,y = ScreenToViewportPoint(x,y)
x = x - ScreenWidth / 2
y = y - ScreenHeight / 2
if y > -310 and y < 190 then
local is_click_center = x >= -170 and x <= 170
local is_click_left = x >= -500 and x <= -260
local is_click_right = x >= 260 and x <= 500
if is_click_center or is_click_left or is_click_right then
if is_click_left then
self:ShowPreItem()
elseif is_click_right then
self:ShowNextItem()
elseif is_click_center then
local click_item,pos
for index,item in pairs(self.item_list) do
pos = item:GetAnchoredPosition()
if pos and pos.x >= -50 and pos.x <= 50 then
click_item = item
break
end
end
if click_item then
click_item:OnClickItem()
end
end
end
end
end
function AdventureBookView:ShowPreItem()
for index,item in ipairs(self.item_list) do
item:DragBegin()
end
self:SetMoveEndState(AdventureBookView.ITEM_OFFSET)
end
function AdventureBookView:ShowNextItem()
for index,item in ipairs(self.item_list) do
item:DragBegin()
end
self:SetMoveEndState(-AdventureBookView.ITEM_OFFSET)
end
function AdventureBookView:OnDragBegin(x,y)
self.is_response_click = false
self.drag_begin_x = x
for index,item in ipairs(self.item_list) do
item:DragBegin()
end
end
function AdventureBookView:OnDrag(x,y)
self.drag_offset_x = x - self.drag_begin_x
for index,item in ipairs(self.item_list) do
item:Drag(self.drag_offset_x)
end
end
function AdventureBookView:OnDragEnd(x,y)
self.is_response_click = true
local min_distance = -1
local pos
for index,item in ipairs(self.item_list) do
item:DragEnd()
pos = item:GetAnchoredPosition()
if pos then
if min_distance == -1 or math_abs(min_distance) > math_abs(pos.x) then
min_distance = pos.x
end
end
end
if min_distance ~= -1 then
self:SetMoveEndState( -min_distance)
end
end
--设置移动到最后的状态
function AdventureBookView:SetMoveEndState(distance)
self.is_moving = true
self.drag_begin_x = 0
self.move_end_dis = 0
self.move_end_total_dis = distance
self.move_end_offset = distance > 0 and AdventureBookView.MOVE_OFFSET or - AdventureBookView.MOVE_OFFSET
self:StartUpdateBeat()
end
function AdventureBookView:StartUpdateBeat( )
Runner:getInstance():AddRunObj(self, 1)
end
function AdventureBookView:RemoveUpdateBeat( )
Runner.Instance:RemoveRunObj(self)
end
--update是模拟drag的过程
function AdventureBookView:Update(now_time, elapse_time)
if self.is_moving then
self.move_end_dis = self.move_end_dis + self.move_end_offset
self:OnDrag(self.move_end_dis,0)
if math_abs(self.move_end_dis - self.move_end_total_dis) <= AdventureBookView.MOVE_OFFSET then
self:OnDrag(self.move_end_total_dis,0)
for index,item in ipairs(self.item_list) do
item:DragEnd()
end
self:RemoveUpdateBeat()
setTimeout(function()
self.is_moving = false
end,0.1)
end
end
end
function AdventureBookView:SwitchView(type)
local book_list = self.model:GetAllBookByType(type)
local show_index = self.model:GetBookShowIndex(type)
local show_list = {}
local real_index,data
for i = show_index - 2,show_index + 1 do
real_index = i
if real_index > self.max_book_index then
real_index = real_index - self.max_book_index
elseif real_index < 1 then
real_index = real_index + self.max_book_index
end
data = book_list[real_index]
if data then
table.insert(show_list,data)
end
end
local len = #show_list
local item,X
for i,v in ipairs(show_list) do
item = self.item_list[i]
if item == nil then
item = AdventureBookItem.New(self.item_parent)
table.insert(self.item_list,item)
end
item:SetVisible(true)
item:SetData(v)
x = (3 - i) * - AdventureBookView.ITEM_OFFSET
item:SetDragBeginX(x)
item:SetAnchoredPosition(x,0)
end
for i=#show_list + 1,#self.item_list do
self.item_list[i]:SetVisible(false)
end
end
function AdventureBookView:Remove()
if self.update_item_id then
self.model:UnBind(self.update_item_id )
self.update_item_id = nil
end
for i, v in pairs(self.item_list) do
v:DeleteMe()
v = nil
end
self.item_list = {}
self:RemoveUpdateBeat()
end