|
|
- 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
|