disablePath() Function Reference

disablePath(integer frame, string direction)

Disables movement from a particular tile frame, on a particular direction. Also disables movement to the tile from the reverse of that direction. So if you disable 'north', characters won't be able to leave the tile by walking upwards, or enter the tile by walking downwards.

Additionally, when characters move directly north, east, south or west - therefore crossing adjacent tiles - Qiso factors in whether those tiles can be crossed on their north, east, south or west points. For example to walk east, the origin tile must allow east, the destination tile must allow west, the northern adjacent tile must allow south and the southern adjacent tile must allow north.

Frame should be given as a numeric reference matching the references used in the Qiso or Tiled map data.

Rather than calling disablePath() hundreds of times, refer to the loadTiledMap() documentation as Qiso can now set all of this up internally, using custom tile properties.


	local qiso = require "plugin.qisoengine"
	qiso.setAssetsFolder("assets")
	qiso.loadTiledMap("sample-tilemap")

	-- Prevent walking through walls.
	qiso.disablePath(9, "south-east")
	qiso.disablePath(9, "east") -- SE wall
	qiso.disablePath(9, "south")

	qiso.disablePath(10, "north-east")
	qiso.disablePath(10, "east") -- NE wall
	qiso.disablePath(10, "north")

	qiso.disablePath(11, "north-west")
	qiso.disablePath(11, "west") -- NW wall
	qiso.disablePath(11, "north")

	qiso.disablePath(12, "south-west")
	qiso.disablePath(12, "west") -- SW wall
	qiso.disablePath(12, "south")

	-- Load a spritemap for use as a character. Sequences must be given compass names, like this...
	local playerMap = graphics.newImageSheet(qiso.getAssetsFolder() .. "/dummy.png", { width = 256, height = 512, numFrames = 64, border = 0 })
	local playerSprites = {
		{ name = 'standing-north', frames = { 25 } },
		{ name = 'standing-north-east', frames = { 17 } },
		{ name = 'standing-east', frames = { 9 } },
		{ name = 'standing-south-east', frames = { 1 } },
		{ name = 'standing-south', frames = { 57 } },
		{ name = 'standing-south-west', frames = { 49 } },
		{ name = 'standing-west', frames = { 41 } },
		{ name = 'standing-north-west', frames = { 33 } },

		{ name = 'walking-north', frames = { 25, 26, 27, 28, 29, 30, 31, 32 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-north-east', frames = { 17, 18, 19, 20, 21, 22, 23, 24 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-east', frames = { 9, 10, 11, 12, 13, 14, 15, 16 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south-east', frames = { 1, 2, 3, 4, 5, 6, 7, 8 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south', frames = { 57, 58, 59, 60, 61, 62, 63, 64 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-south-west', frames = { 49, 50, 51, 52, 53, 54, 55, 56 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-west', frames = { 41, 42, 43, 44, 45, 46, 47, 48 }, time = 750, loopCount = 0, loopDirection = 'forward' },
		{ name = 'walking-north-west', frames = { 33, 34, 35, 36, 37, 38, 39, 40 }, time = 750, loopCount = 0, loopDirection = 'forward' }
	}

	-- Add a character at tile 6x8 using the dummy spritemap, and then focus the camera on that tile.
	qiso.addCharacter("Player", playerMap, playerSprites, "standing", 6, 8)
	qiso.goTo(6, 8)

	-- Enable camera panning when the screen is dragged
	qiso.enableCameraPan()

	-- Enable the main Qiso loop to render/update our world
	qiso.activate()

	-- Walk the player to the tapped tile
	function tapTile(event)
		-- Get the tile located where the screen was tapped. If there is no tile here, getTile returns nil.
		local tile = qiso.getTile(event.x, event.y)

		if(tile ~= nil) then
			-- path-find to the tapped location, using the walking sequences defined above.
			qiso.moveCharacter("Player", tile.x, tile.y, "walking", 60)
		end
	end

	-- Do something when the screen is tapped
	Runtime:addEventListener('tap', tapTile)