Ryan cf22651949 Added intergration loveManager
Adds multi.intergrations.loveManager,lua
Created an example file for you to look at
2017-06-24 22:46:44 -04:00

205 lines
6.3 KiB
Plaintext

--[[WORKING ON
doubleTap - UnFinished!
touchRendering - Broken
]]
function gui:TClickable(mx,my)
local x,y,w,h=love.graphics.getScissor()
if _GuiPro.HasStencel then
local obj=_GuiPro.StencelHolder
if self:isDescendant(obj) then
return math.sqrt((mx-obj.x)^2+(my-obj.y)^2)<=(obj.offset.size.x or 0)
end
end
if not(x) then
return true
end
return not(mx>x+w or mx<x or my>y+h or my<y)
end
function gui:touchable(t)
local touches = love.touch.getTouches()
local x,y=0,0
for i, id in ipairs(touches) do
if self.id==id then
x, y = love.touch.getPosition(id)
return (x > self.x and x < self.x+self.width and y > self.y and y < self.y+self.height and self:TClickable(x,y) and self:eventable())
end
end
self.id=-1
end
multi:newTask(function() -- A bit of post-loading haha
gui.touchpressed=multi:newConnection()
gui.touchreleased=multi:newConnection()
gui.touchmoved=multi:newConnection()
love.touchpressed=Library.convert(love.touchpressed or function() end)
love.touchreleased=Library.convert(love.touchreleased or function() end)
love.touchmoved=Library.convert(love.touchmoved or function() end)
love.touchpressed:inject(function(id, x, y, dx, dy, pressure) gui.touchpressed:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1)
love.touchreleased:inject(function(id, x, y, dx, dy, pressure) gui.touchreleased:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1)
love.touchmoved:inject(function(id, x, y, dx, dy, pressure) gui.touchmoved:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1)
_GuiPro.TouchReady=true
_GuiPro.TouchRegister={}
gui.touchpressed:connect(function(id, x, y, dx, dy, pressure)
for i,v in pairs(_GuiPro.TouchRegister) do
if #v.tid==0 then
if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then
v:addTID(id)
v.touchcount=1
for i=1,#v.ToFuncP do
v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1)
end
end
elseif not(v:hasTID(id)) then
if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then
v:addTID(id)
v.touchcount=v.touchcount+1
for i=1,#v.ToFuncP do
v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1)
end
end
end
end
end)
gui.touchreleased:connect(function(id, x, y, dx, dy, pressure)
for i,v in pairs(_GuiPro.TouchRegister) do
if v:hasTID(id) then
v:removeTID(id)
for i=1,#v.ToFuncR do
v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1)
end
end
end
end)
gui.touchmoved:connect(function(id, x, y, dx, dy, pressure)
for i,v in pairs(_GuiPro.TouchRegister) do
if v:hasTID(id) and (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then
for i=1,#v.ToFuncM do
v.ToFuncM[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1)
end
elseif v:hasTID(id) and not((x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable())) then
v:removeTID(id)
for i=1,#v.ToFuncR do
v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1)
end
end
end
end)
end)
-- now that that is done lets set up some more post loading checks
_GuiPro.int=multi:newProcess()
_GuiPro.int:Start()
_GuiPro.int:setJobSpeed(.001)
_GuiPro.EXACT=0
_GuiPro.LAX=.01
_GuiPro.LAZY=.05
-- now lets define the reg function
function gui.Compare(a,b,v,tp)
if tp==">" then
if (a+v>b or a-v>b) then
return true
end
elseif tp=="<" then
if (a+v<b or a-v<b) then
return true
end
elseif tp=="<=" then
if (a+v<=b or a-v<=b) then
return true
end
elseif tp==">=" then
if (a+v>=b or a-v>=b) then
return true
end
elseif tp=="==" then -- this one is gonna be tricky
if (a>=b-v and a<=b+v) or (b>=a-v and b<=a+v) then
return true
end
end
return false
end
function gui:regesterTouch()
local obj=self
obj.ToFuncP={}
obj.ToFuncM={}
obj.ToFuncR={}
obj.To2Func={}
obj.ToDTFunc={}
obj.touchRendering =_GuiPro.EXACT -- exact(0), lax(), #
function obj:removeTID(id)
for i=1,#self.tid do
if self.tid[i]==id then
table.remove(self.tid,i)
self.touchcount=self.touchcount-1
return
end
end
end
function obj:hasTID(id)
for i=1,#self.tid do
if self.tid[i]==id then
return true
end
end
return false
end
obj.txl1=0
obj.tyl1=0
obj.txl2=0
obj.tyl2=0
obj.LS=0
obj:OnUpdate(function(self)
if self.touchcount==2 then
local x1,y1=love.touch.getPosition( self.tid[1] )
local x2,y2=love.touch.getPosition( self.tid[2] )
local CS=math.sqrt((x2-x1)^2+(y2-y1)^2)
if gui.Compare(CS,self.LS,self.touchRendering,">") then
for i=1,#self.To2Func do
self.To2Func[i](self,CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y)
end
elseif gui.Compare(CS,self.LS,self.touchRendering,"<") then
for i=1,#self.To2Func do
self.To2Func[i](self,-CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y)
end
elseif gui.Compare(CS,self.LS,self.touchRendering,"==") then
for i=1,#self.To2Func do
self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y)
end
end
-- if self.txl1~=x1 or self.txl2~=x2 or self.tyl1~=y1 or self.tyl2~=y2 then
-- for i=1,#self.To2Func do
-- self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y)
-- end
-- end
self.LS=CS
self.txl1=x1
self.txl2=x2
self.tyl1=y1
self.tyl2=y2
end
end)
function obj:OnDoubleTap(func)
table.insert(self.ToDTFunc,func)
end
function obj:On2TouchMoved(func)
table.insert(self.To2Func,func)
end
function obj:addTID(id)
table.insert(self.tid,id)
end
function obj:OnTouchPressed(func)
table.insert(self.ToFuncP,func) -- event for touches
end
function obj:OnTouchReleased(func) -- event for touches
table.insert(self.ToFuncR,func)
end
function obj:OnTouchMoved(func) -- event for touches
table.insert(self.ToFuncM,func)
end
if _GuiPro.TouchReady then -- my sneaky test
print("Registred: "..tostring(obj))
table.insert(_GuiPro.TouchRegister,obj)
else
print("Attempting to register: "..tostring(obj))
_GuiPro.int:newJob(function() table.insert(_GuiPro.TouchRegister,obj) end) -- a sneaky way to ensure that your object gets registered eventually, even if you call the method before the touch patch was activated.
end
end