Log In  


Thanks to HTML export, it's now possible to run picotron cartridges on a mobile phone.
However, at present the DPAD isn't displayed, and touch operations are replaced by mouse movements, making operation very uncomfortable.

So I wrote the following code to simulate touch operations.
This also led me to notice some strange behavior, but that's another story.

I'd be happy if the picotron itself could support touch operations in the future.

function _init()
	window{cursor=0} -- Hide the mouse cursor
	tch = touch.new() -- Initializing the touch structure
end

function _draw()
	-- Touch Structure Update. This is necessary to determine touch.
	tch:check() 

	--[[
	*** Wait until it truly becomes the initial state ***

	Since _init cannot fully initialize, it waits for time to pass in the main program.
	It seems that the time t() stops in _init, and the mouse position does not change. 
	It seems that time progresses entirely within _draw(_update).

	This is to prevent unnecessary tap events from occurring because a touch is 
	determined by moving the position of the mouse cursor, and the initial position of 
	the mouse cannot be obtained correctly.

	There may be a way to avoid this using memory manipulation, etc. 
	This decision statement is clearly a waste of processing.
	--]]
	if t() < 0.2 then return end

	-- Processes when it is determined that a touch has occurred.
	if tch.tap then
		splatter(tch.x, tch.y)
	end
end

--[[
It's not used within the program, but is useful 
for making the mouse cursor visible again.
--]]
function rst()
	cls()
	window { cursor=1 }
end

--[[
Creates an ink splatter effect.
This is just to make the examples a bit more interesting. Have fun!
--]]
function splatter(x, y)
	local col = flr(rnd(31)+1)
	local mdist = rnd(20)+10
	for i=0,mdist do
		local ang = rnd(1)
		local dist = rnd(mdist)
		local rad = rnd(mdist-dist)
		local xx = dist * cos(ang) + x
		local yy = dist * sin(ang) + y
		circfill(xx, yy, rad, col)
	end
end

--[[
Touch Structure
This determines if a tap has been performed by touch 
operation when the mouse cursor is moved.
--]]
touch = {}
touch.new = function()
	local x, y, _ = mouse()
	local obj = {}
	obj.x = 0
	obj.y = 0
	obj.tap = false
	obj.check = function(self)
		local x, y, _ = mouse()
		if self.tap == false and (x != self.x or y != self.y) then
			self.x = x
			self.y = y
			self.tap = true
		else
			self.tap = false
		end
	end
	return obj
end
1



[Please log in to post a comment]