function EditorStep() palette = palette or false AnimateTiles() if Keybind:CheckPressed(Keybind.editor.palette) then if palette then palette = false palette_scroll_x = nil palette_scroll_y = nil else palette = true palette_scroll_x = 0 palette_scroll_y = 0 end end if love.keyboard.isDown('a',"left") then Camera.pos.x = Camera.pos.x - 3*game.scale end if love.keyboard.isDown('d',"right") then Camera.pos.x = Camera.pos.x + 3*game.scale end if love.keyboard.isDown("up", "w") then Camera.pos.y = Camera.pos.y - 3*game.scale end if love.keyboard.isDown("down", "s") then Camera.pos.y = Camera.pos.y + 3*game.scale end if palette then if Keybind:CheckPressed(Keybind.debug.debug) then local next = false local export = nil for k, v in pairs(tileset) do if export == nil then export = v end if next then LevelData.tileset = v next = false break end if v == LevelData.tileset then next = true end end if next then LevelData.tileset = export end LevelGetTileData() LevelIndexTiles() end end if Keybind:CheckPressed(Keybind.debug.reload) then ExportLevel("test") end if Keybind:CheckPressed(Keybind.debug.editor) then editor_mode = false TileCreateObjects() end end function EditorScroll(y) if palette then if love.keyboard.isDown("lshift") then palette_scroll_y = palette_scroll_y + y else palette_scroll_x = palette_scroll_x + y end else local oscale = game.scale game.scale = math.max(0.1,game.scale + y/16) end end function EditorDraw() GameworldDrawPrepare() GameworldDrawBackground() GridDisplay() GameworldDrawForeground() GameworldDrawEnd() EditorDoEdit() DrawSelectingPaletteTile() if palette then EditorDoPalette() end end function EditorDoEdit() local mouse_x = love.mouse.getX() local mouse_y = love.mouse.getY() local horizontal = 1+math.floor(((mouse_x/game.scale) / tileProperties.width) + (Camera.pos.x / tileProperties.width)) local vertical = 1+math.floor(((mouse_y/game.scale) / tileProperties.height) + (Camera.pos.y / tileProperties.height)) local expand_h = 0 local expand_v = 0 local LevelWidth = LevelGetTileWidth() local LevelHeight = LevelGetTileHeight() if horizontal > LevelWidth then expand_h = horizontal-LevelWidth elseif horizontal < 0 then expand_h = horizontal end if vertical > LevelHeight then expand_v = vertical-LevelHeight elseif vertical < 0 then expand_v = vertical end love.graphics.print("> " .. horizontal .. ", " .. vertical .. "; " .. math.floor(mouse_x / game.scale + Camera.pos.x) .. ", " .. math.floor(mouse_y / game.scale + Camera.pos.y)) love.graphics.print("> " .. LevelWidth .. "(" .. expand_h .. "), " .. LevelHeight .. "(".. expand_v .. ")", 0, 10) if not palette then if LevelTiles[vertical] ~= nil and LevelTiles[vertical][horizontal] ~= nil and love.keyboard.isDown("lshift") ~= true and love.keyboard.isDown("lctrl") ~= true then if Keybind:CheckDown(Keybind.generic.lclick) and selecting_tile ~= nil then SetTile(vertical,horizontal,selecting_tile) elseif Keybind:CheckDown(Keybind.generic.rclick) then SetTile(vertical,horizontal,0) end LevelReloadTiles() elseif Keybind:CheckPressed(Keybind.generic.lshift) then LevelExpandCanvas(math.sign(expand_h),math.sign(expand_v)) LevelReloadTiles() elseif Keybind:CheckPressed(Keybind.generic.lctrl) then LevelReduceCanvas(math.sign(expand_h),math.sign(expand_v)) LevelReloadTiles() end end end function DrawSelectingPaletteTile() if selecting_tile ~= nil and selecting_tile ~= 0 then local mouse_x = love.mouse.getX() local mouse_y = love.mouse.getY() local horizontal = math.floor(((mouse_x/game.scale) / tileProperties.width) + (Camera.pos.x / tileProperties.width)) local vertical = math.floor(((mouse_y/game.scale) / tileProperties.height) + (Camera.pos.y / tileProperties.height)) local draw_x = tileProperties.width * horizontal - Camera.pos.x local draw_y = tileProperties.height * vertical - Camera.pos.y love.graphics.draw( LevelData.tileset, TileIndex[selecting_tile], draw_x, draw_y ) end end function EditorDoPalette() local width = LevelData.tileset:getPixelWidth()/tileProperties.width local height = LevelData.tileset:getPixelHeight()/tileProperties.height love.graphics.setColor(0,0,0,1) love.graphics.rectangle( "fill", (palette_scroll_x + 1) * (tileProperties.width+1), (palette_scroll_y + 1) * (tileProperties.height+1), 1 + LevelData.tileset:getPixelWidth() * ((tileProperties.width+1) / tileProperties.width), 1 + LevelData.tileset:getPixelHeight()* ((tileProperties.height+1) / tileProperties.height) ) love.graphics.setColor(1,1,1,1) local position_x = 1 local position_y = 1 for i = 1, #TileIndex-width-1 do local tile_x = (palette_scroll_x + position_x) * (tileProperties.width+1) local tile_y = (palette_scroll_y + position_y) * (tileProperties.height+1) love.graphics.draw( LevelData.tileset, TileIndex[i], tile_x, tile_y, 0, 1, 1 ) if Keybind:CheckDown(Keybind.generic.lclick) then local mouse_x = love.mouse.getX() local mouse_y = love.mouse.getY() if mouse_x > (tile_x) * game.scale and mouse_x < (tile_x + tileProperties.width) * game.scale and mouse_y > (tile_y) * game.scale and mouse_y < (tile_y + tileProperties.height) * game.scale then selecting_tile = position_x + ((position_y-1) * width) love.graphics.print(selecting_tile .. " | " .. tile_x .. ", " .. tile_y, 0, 20) end end if Keybind:CheckDown(Keybind.generic.rclick) then selecting_tile = nil end if selecting_tile ~= nil and selecting_tile ~= 0 and i == selecting_tile then love.graphics.setColor(1,0,1,1) love.graphics.rectangle( "line", tile_x, tile_y, tileProperties.width, tileProperties.height ) love.graphics.setColor(1,1,1,1) end position_x = position_x + 1 if position_x > width then position_x = position_x - width position_y = position_y + 1 end end love.graphics.rectangle( "line", (palette_scroll_x + 1) * (tileProperties.width+1), (palette_scroll_y + 1) * (tileProperties.height+1), 1 + LevelData.tileset:getPixelWidth() * ((tileProperties.width+1) / tileProperties.width), 1 + LevelData.tileset:getPixelHeight()* ((tileProperties.height+1) / tileProperties.height) ) end