203 lines
5.5 KiB
Lua
203 lines
5.5 KiB
Lua
function EditorStep()
|
|
palette = palette or false
|
|
AnimateTiles()
|
|
if Keybind:HasPressed(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
|
|
selecting_tile = 51
|
|
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
|
|
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()
|
|
|
|
DrawSelectingPaletteTile()
|
|
if palette then
|
|
EditorDoPalette()
|
|
end
|
|
end
|
|
|
|
function EditorDoEdit()
|
|
if love.mouse.isDown(1) then
|
|
local vertical = 1+math.floor((mouse.pos.y+Camera.pos.y)/(tileProperties.scale*tileProperties.height))
|
|
local horizontal = 1+math.floor((mouse.pos.x+Camera.pos.x)/(tileProperties.scale*tileProperties.width))
|
|
local h, v = GetCanvasSize()
|
|
|
|
local expand_h = 0
|
|
local expand_v = 0
|
|
|
|
if horizontal > h then
|
|
expand_h = horizontal-h
|
|
elseif horizontal <= 0 then
|
|
expand_h = horizontal-1
|
|
end
|
|
|
|
if vertical > v then
|
|
expand_v = math.sign(vertical-v)
|
|
elseif vertical <= 0 then
|
|
expand_v = math.sign(vertical-1)
|
|
end
|
|
|
|
if Level[vertical] ~= nil
|
|
and Level[vertical][horizontal] ~= nil
|
|
and love.keyboard.isDown("lshift") ~= true
|
|
and love.keyboard.isDown("lctrl") ~= true
|
|
then
|
|
Level[vertical][horizontal] = tile_carrying
|
|
elseif love.keyboard.isDown("lshift") and not expanded then
|
|
expanded = true
|
|
ExpandCanvas(math.sign(expand_h),math.sign(expand_v))
|
|
|
|
if expand_h < 0 then
|
|
Camera.pos.x = Camera.pos.x - expand_h*tileProperties.scale*tileProperties.width
|
|
end
|
|
if expand_v < 0 then
|
|
Camera.pos.y = Camera.pos.y - expand_v*tileProperties.scale*tileProperties.height
|
|
end
|
|
|
|
elseif love.keyboard.isDown("lctrl") and not expanded then
|
|
expanded = true
|
|
ReduceCanvas(math.sign(expand_h),math.sign(expand_v))
|
|
|
|
if expand_h < 0 then
|
|
Camera.pos.x = Camera.pos.x - expand_h*tileProperties.scale*tileProperties.width
|
|
end
|
|
if expand_v < 0 then
|
|
Camera.pos.y = Camera.pos.y - expand_v*tileProperties.scale*tileProperties.height
|
|
end
|
|
end
|
|
elseif love.mouse.isDown(1) ~= true then
|
|
expanded = false
|
|
end
|
|
end
|
|
|
|
function DrawSelectingPaletteTile()
|
|
if selecting_tile ~= nil then
|
|
|
|
local mouse_x = tileProperties.width * math.floor((love.mouse.getX()/game.scale) / tileProperties.width) - Camera.pos.x % tileProperties.width
|
|
local mouse_y = tileProperties.height * math.floor((love.mouse.getY()/game.scale) / tileProperties.height) - Camera.pos.y % tileProperties.height
|
|
|
|
love.graphics.draw(
|
|
LevelData.tileset,
|
|
TileIndex[selecting_tile],
|
|
mouse_x,
|
|
mouse_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 love.mouse.isDown(1) 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)
|
|
else
|
|
--selecting_tile = nil
|
|
end
|
|
end
|
|
|
|
if selecting_tile ~= nil 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
|