diff --git a/.gitignore b/.gitignore index 302018e..d1b7ca4 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,5 @@ $RECYCLE.BIN/ .gitignore *.pdx -.vscode \ No newline at end of file +.vscode +*.zip \ No newline at end of file diff --git a/Source/Editor.lua b/Source/Editor.lua index 7d1f15c..d785831 100644 --- a/Source/Editor.lua +++ b/Source/Editor.lua @@ -1,8 +1,11 @@ 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") @@ -15,22 +18,24 @@ local imgtiles = gfx.sprite.new(tilemapEditor) local w, h = imgtiles:getSize() imgtiles:moveTo(w/2,h/2) -local position = {x=0,y=0} +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.image.new("gfx/floppy") +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) @@ -39,6 +44,10 @@ 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") @@ -57,9 +66,13 @@ function playdate.keyboard.keyboardWillHideCallback(ok) editLoad() else mode = "editor" - toolTipButton, error = menu:addCheckmarkMenuItem("show help",true, function(value) - print(value) + 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) @@ -81,30 +94,37 @@ 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 tileIndex > 7.9 then tileIndex = 0 end - if tileIndex < 0 then tileIndex = 7.9 end - - curY = math.floor( tileIndex ) * 28 +7 + 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 math.floor( tileIndex ) == 1 then - playdate.display.setInverted(not playdate.display.getInverted()) - elseif math.floor( tileIndex ) == 3 then - tilemapEditor:setTileAtPosition(position.x+12,position.y+8,2) - tiles[#tiles+1] = {x=position.x + 12, y=position.y + 8, 2} - imgtiles = gfx.sprite.new(tilemapEditor) - w, h = imgtiles:getSize() - imgtiles:moveTo(w/2,h/2) + 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 @@ -119,36 +139,49 @@ function editUpdate() 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(365,0,400,240) + 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, 64) - imgAdd:draw(366,93) - imgSwitch:getImage(bool2int[playdate.display.getInverted()] + 1):draw(366,36) - imgFloppy:draw(366,8) - imgLine:draw(366,120) - imgSpin:draw(366,148) + 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 diff --git a/Source/Main.lua b/Source/Main.lua index 8e27a55..824e455 100644 --- a/Source/Main.lua +++ b/Source/Main.lua @@ -23,8 +23,6 @@ local disp = playdate.display local font = gfx.font.new("gfx/big") small = gfx.font.new("gfx/font(1)") -dev = false - gfx.setFont(font) gfx.setBackgroundColor(gfx.kColorBlack) @@ -71,12 +69,6 @@ playdate.ui.crankIndicator:start() if playdate.file.exists("levels") == false then playdate.file.mkdir("levels") end -function playdate.keyPressed(key) - if key == "D" then - dev = not dev - end -end - function playdate.update() if mode == "menu" then updateMenu() @@ -109,11 +101,6 @@ function playdate.update() playdate.ui.crankIndicator:update() end end - if dev then - local ox, oy = gfx.getDrawOffset() - playdate.drawFPS(0,228) - small:drawText(math.floor( playdate.getCrankPosition() ), -ox, -oy + 218) - end updateSaws() end @@ -122,4 +109,9 @@ function playdate.gameWillTerminate() playdate.datastore.delete("savegame.json") playdate.datastore.write({savedLevel=map,savedDeaths=deaths},"savegame") end +end + +function playdate.debugDraw() + playdate.drawFPS(0,228) + small:drawText(math.floor( playdate.getCrankPosition() ), 0, 218) end \ No newline at end of file diff --git a/Source/gfx/floppy.png b/Source/gfx/floppy.png index ea0e8a5..1ae1ff1 100644 Binary files a/Source/gfx/floppy.png and b/Source/gfx/floppy.png differ diff --git a/Source/gfx/floppyT-table-30-26.png b/Source/gfx/floppyT-table-30-26.png new file mode 100644 index 0000000..b2da3f3 Binary files /dev/null and b/Source/gfx/floppyT-table-30-26.png differ diff --git a/Source/gfx/nothing.png b/Source/gfx/nothing.png new file mode 100644 index 0000000..f06d45d Binary files /dev/null and b/Source/gfx/nothing.png differ diff --git a/output.pdx.zip b/output.pdx.zip deleted file mode 100644 index 25e0b36..0000000 Binary files a/output.pdx.zip and /dev/null differ