源战役客户端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

179 wiersze
4.5 KiB

--拖住功能
DragViewMgr = DragViewMgr or BaseClass()
local DragViewMgr = DragViewMgr
DragViewMgr.TouchType =
{
TouchDown = 1,
TouchMove = 2,
TouchUp = 3,
}
function DragViewMgr:__init()
self.base_file = false
self.layout_file = false
self.begin_callback = false
self.draging_callback = false
self.end_callback = false
self.item_class = false
self.drag_cache_item = false
self.start_drag = false
self.draging = false
self.old_pos = false
end
function DragViewMgr:Init(info)
self.base_file = info.base_file
self.layout_file = info.layout_file
self.begin_callback = info.begin_callback
self.draging_callback = info.draging_callback
self.end_callback = info.end_callback
self.item_class = info.item_class
self.item_parent = info.item_parent or MainUIController:GetInstance().GoodsFlyView.transform
end
function DragViewMgr:__delete()
if self.drag_cache_item then
self.drag_cache_item:DeleteMe()
self.drag_cache_item = nil
end
end
function DragViewMgr:Start()
self.start_drag = true
self.draging = false
Runner.Instance:AddRunObj(self, 1)
end
function DragViewMgr:Stop()
Runner.Instance:RemoveRunObj(self)
self.start_drag = false
self.draging = false
self.old_pos = false
end
function DragViewMgr:OnDragBegin(pos)
if not pos then return end
if not self.drag_cache_item then
self.drag_cache_item = self:CreatDragItem()
end
if not self.drag_cache_item then
print(">>>>>>>>>>>> 拖拽物体没有创建成功")
return
end
if self.begin_callback then
self.begin_callback(self.drag_cache_item)
end
self.drag_cache_item:SetVisible(true)
local w = ScreenWidth
local h = ScreenHeight
pos.x = w / 2 + pos.x
pos.y = h / 2 + pos.y
self.drag_cache_item:SetPosition(pos.x, pos.y)
end
function DragViewMgr:CreatDragItem()
local item = nil
if self.item_class ~= nil then
item = self.item_class.New(self.item_parent)
self.drag_cache_item = item
end
return item
end
function DragViewMgr:OnDragIng(pos)
local w = ScreenWidth
local h = ScreenHeight
pos.x = w / 2 + pos.x
pos.y = h / 2 + pos.y
if self.drag_cache_item then
self.drag_cache_item:SetPosition(pos.x, pos.y)
end
if self.draging_callback then
self.draging_callback(self.drag_cache_item, pos)
end
end
function DragViewMgr:OnDragEnd(pos)
Runner.Instance:RemoveRunObj(self)
if self.end_callback then
self.end_callback(self.drag_cache_item, pos)
end
if self.drag_cache_item then
self.drag_cache_item:SetVisible(false)
end
end
function DragViewMgr:Update()
if not self.start_drag then return end
local touch_type, pos = self:GetDragTouchTypeAndPos()
if not pos or not touch_type then
if self.draging then
self:Stop()
self:OnDragEnd(self.old_pos)
end
end
if touch_type == DragViewMgr.TouchType.TouchDown or touch_type == DragViewMgr.TouchType.TouchMove then
if not self.draging then
self:OnDragBegin(pos)
self.draging = true
self.old_pos = pos
return
end
self.old_pos = pos
self:OnDragIng(pos)
else
self:OnDragEnd(pos)
self:Stop()
end
end
function DragViewMgr:GetDragTouchTypeAndPos()
local touch_type = nil
local pos = nil
if Input.touchCount > 0 then
local touch = Input.GetTouch(0)
if touch then
pos = touch.position
pos.x = pos.x / ScreenConvertRatio - ScreenWidth*0.5
pos.y = pos.y / ScreenConvertRatio - ScreenHeight*0.5
if touch.phase == TouchPhase.Began then
touch_type = DragViewMgr.TouchType.TouchDown
elseif touch.phase == TouchPhase.Moved then
touch_type = DragViewMgr.TouchType.TouchMove
elseif touch.phase == TouchPhase.Ended then
touch_type = DragViewMgr.TouchType.TouchUp
end
end
else
if Input.GetMouseButtonDown(0) then
-- print(">>>>>>>>>>>> GetMouseButtonDown")
pos = Vector2(0,0)
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
touch_type = DragViewMgr.TouchType.TouchDown
elseif Input.GetMouseButtonUp(0) then
-- print(">>>>>>>>>>>> GetMouseButtonUp")
pos = Vector2(0,0)
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
touch_type = DragViewMgr.TouchType.TouchUp
elseif Input.GetMouseButton(0) then
--print(">>>>>>>>>>>> GetMouseButton")
pos = Vector2(0,0)
pos.x = Input.mousePosition.x / ScreenConvertRatio - ScreenWidth*0.5
pos.y = Input.mousePosition.y / ScreenConvertRatio - ScreenHeight*0.5
touch_type = DragViewMgr.TouchType.TouchMove
end
end
return touch_type, pos
end