import "CoreLibs/keyboard" import "CoreLibs/animation" import "CoreLibs/math" local gfx = playdate.graphics local prevtext = "" local levelname = nil local inverted = false gfx.setLineWidth(5) local tileTable = gfx.imagetable.new("gfx/tiles") local tilemapEditor = gfx.tilemap.new() tilemapEditor:setImageTable(tileTable) local tiles = {} tilemapEditor:setSize(10,10) local imgtiles = gfx.sprite.new(tilemapEditor) local w, h = imgtiles:getSize() imgtiles:moveTo(w/2,h/2) local position = {x=100,y=100} local positionLerp = {x=0,y=0} local bool2int = {[true]=1,[false]=0} local menu = playdate.getSystemMenu() local toolTipButton, error local altClrButton, error local editor = "main" local imgSwitch = gfx.imagetable.new("gfx/switch") local imgFloppy = gfx.imagetable.new("gfx/floppyT") local imgAdd = gfx.image.new("gfx/add") local imgMus = gfx.image.new("gfx/music") local imgLine = gfx.image.new("gfx/line") local imgSpin = gfx.image.new("gfx/spin") local imgCursor = gfx.image.new("gfx/cursor2") local imgCant = gfx.image.new("gfx/nothing") assert(imgSwitch) assert(imgFloppy) assert(imgAdd) assert(imgMus) assert(imgLine) assert(imgSpin) assert(imgCursor) local animFloppy = gfx.animation.loop.new(100, imgFloppy) local saveTime = 0 function newProject() mode = "newproj" playdate.keyboard.show("NEW LEVEL") end function updateNewproj() gfx.clear() gfx.drawText("LEVEL NAME:", 0, 105) gfx.drawTextInRect(playdate.keyboard.text:upper(),0,125, 210, 80) end function playdate.keyboard.keyboardWillHideCallback(ok) if ok == false then page = 0 playdate.wait(0.3) editLoad() else mode = "editor" toolTipButton, error = menu:addMenuItem("save",false, function() editSave() end) altClrButton, error = menu:addCheckmarkMenuItem("alt colours",inverted, function(value) playdate.display.setInverted(value) end) levelname = playdate.keyboard.text:upper() imgtiles:add() menuButton:setTitle("save & quit") playdate.wait(0.1) end end function playdate.keyboard.textChangedCallback() print(#playdate.keyboard.text) if #playdate.keyboard.text > 24 then playdate.keyboard.text = prevtext end prevtext = playdate.keyboard.text end local tileIndex = 0.0 local curY = math.floor( tileIndex ) * 28 + 3 local curYlerp = -32 function editSave() saveTime = 5 playdate.datastore.write({tiles = tiles},"levels/"..levelname) end function editUpdate() local change, aChange = playdate.getCrankChange() tileIndex += change * 0.01 if editor == "main" then if tileIndex > 7.9 then tileIndex = 0 end if tileIndex < 0 then tileIndex = 7.9 end curY = math.floor( tileIndex ) * 28 +7 end curYlerp = playdate.math.lerp(curYlerp, curY, 0.4) positionLerp.x = playdate.math.lerp(positionLerp.x, position.x * 16, 0.5) positionLerp.y = playdate.math.lerp(positionLerp.y, position.y * 16, 0.5) if playdate.buttonJustPressed(playdate.kButtonA) then if editor == "main" then if math.floor( tileIndex ) == 0 then tilemapEditor:setTileAtPosition(position.x+12,position.y+8,2) tiles[#tiles+1] = {x=position.x + 12, y=position.y + 8, t=2} imgtiles = gfx.sprite.new(tilemapEditor) w, h = imgtiles:getSize() imgtiles:moveTo(w/2,h/2) end end end if playdate.buttonJustPressed(playdate.kButtonLeft) then position.x -= 1 elseif playdate.buttonJustPressed(playdate.kButtonRight) then position.x += 1 end if playdate.buttonJustPressed(playdate.kButtonUp) then position.y -= 1 elseif playdate.buttonJustPressed(playdate.kButtonDown) then position.y += 1 end if position.x + 11 < 0 then position.x = -11 end if position.y + 7 < 0 then position.y = -7 end gfx.clear() -- draw map gfx.setDrawOffset(-positionLerp.x, -positionLerp.y) imgtiles:update() imgCursor:draw((position.x + 11) * 16, (position.y + 7) * 16) if position.y < 1 then imgCant:drawTiled((position.x-1) * 16,-112,400,112) end if position.x < 1 then imgCant:drawTiled(-176,(position.y-1) * 16,176,272) end -- draw ui/ gfx.setDrawOffset(0,0) gfx.setColor(gfx.kColorBlack) gfx.fillRect(362,0,400,240) gfx.setColor(gfx.kColorWhite) gfx.drawLine(360,0,360,240) -- draw changes if editor == "main" then imgMus:draw(366, 128) imgAdd:draw(366,8) imgLine:draw(366,36) imgSpin:draw(366,64) end gfx.setColor(playdate.graphics.kColorXOR) gfx.fillRect(365,curYlerp,33,28) if saveTime > 0 then saveTime -= 0.1 animFloppy:draw(2,2) end end function editClose() editSave() for tile = 1, #tiles, 1 do tilemapEditor:setTileAtPosition(tiles[tile].x,tiles[tile].y,0) end imgtiles:remove() playdate.getSystemMenu():removeMenuItem(toolTipButton) menuButton:setTitle("game menu") end