dcearth/main.lua

172 lines
4.6 KiB
Lua
Raw Normal View History

2023-04-28 17:35:52 +00:00
local love = assert( love, "This tool requires LOVE: love2d.org" )
--assert( require('mobdebug') ).start() --remote debugger
2023-04-28 17:35:52 +00:00
local map = require 'map'
2024-04-21 14:10:53 +00:00
local button = require 'button'
2023-04-28 17:35:52 +00:00
local SAVEDIRECTORY = "out/"
local Camera = require 'camera'
local wasKeyPressed
2023-04-28 17:35:52 +00:00
function love.load()
2023-07-28 23:23:08 +00:00
2023-04-28 17:35:52 +00:00
local lfs = assert( love.filesystem )
lfs.setIdentity( "dcearth", false )
assert( lfs.createDirectory( SAVEDIRECTORY.."data/earth" ))
assert( lfs.createDirectory( SAVEDIRECTORY.."data/graphics" ))
2023-07-28 23:23:08 +00:00
love.graphics.setNewFont( 12, "mono" )
2023-04-28 17:35:52 +00:00
end
function love.directorydropped( path )
if map.path then assert( love.filesystem.unmount( map.path ) ) end
love.filesystem.mount( path, "" )
return map.load( path )
end
2023-04-28 17:35:52 +00:00
function love.update( dt )
local tx, ty = 0, 0
local moveCamera = false
if love.keyboard.isScancodeDown( "w" ) then moveCamera = true; ty = ty + 30 * dt end
if love.keyboard.isScancodeDown( "a" ) then moveCamera = true; tx = tx - 30 * dt end
if love.keyboard.isScancodeDown( "s" ) then moveCamera = true; ty = ty - 30 * dt end
if love.keyboard.isScancodeDown( "d" ) then moveCamera = true; tx = tx + 30 * dt end
if love.keyboard.isScancodeDown( "q" ) then Camera.Zoom( dt ) end
if love.keyboard.isScancodeDown( "e" ) then Camera.Zoom( -dt ) end
if moveCamera then Camera.Translate( tx, ty ) end
2023-07-28 23:23:08 +00:00
2023-04-28 17:35:52 +00:00
end
2024-04-21 14:10:53 +00:00
local toolButtons = {
"Brush",
"Move Nodes",
"Add Nodes",
"Edit Node",
"Draw Polygon",
"Erase Polygon"
}
local layerButtons = {
"Africa",
"Europe",
"North America",
"South America",
"Asia",
"Russia",
"Travel Nodes",
"AI Markers",
"Cities",
"Coastlines",
"Coastlines Low",
"Sailable"
}
2023-04-28 17:35:52 +00:00
function love.draw()
if not map.loaded then
return love.graphics.print( "Drag and drop folder to begin.")
end
love.graphics.push( "all" )
map.draw()
love.graphics.pop()
2023-07-28 23:23:08 +00:00
2024-04-21 14:10:53 +00:00
--Layer buttons.
do
love.graphics.setColor( 1, 1, 1, 1 )
local h = love.graphics.getHeight() - 60
for x = 0, 300, 30 do
love.graphics.rectangle( "line", x, h, 30, 30 )
end
end
--Status bar.
local x, y = love.mouse.getPosition()
local wx, wy = Camera.GetWorldCoordinate( x, y )
2023-07-28 23:23:08 +00:00
local bx, by = Camera.GetBitmapCoordinate( x, y )
local h = love.graphics.getHeight() - 30
love.graphics.setColor( 0.2, 0.1, 0.1, 1.0 )
love.graphics.rectangle( "fill", 0, h, love.graphics.getWidth() / 2, 30 )
love.graphics.setColor( 1, 1, 1, 1 )
love.graphics.rectangle( "line", 0, h, love.graphics.getWidth() / 2, 30 )
love.graphics.print(("SCREEN\t%d\t%d\nWORLD \t%5.2f\t%5.2f"):format(x, y, wx, wy), 0, h)
2023-07-28 23:23:08 +00:00
love.graphics.print(("BITMAP\t%5.2f\t%5.2f"):format(bx, by), 200, h )
--Edit box.
love.graphics.rectangle( "line", love.graphics.getWidth() / 2, h, love.graphics.getWidth() / 2, 30 )
if map.selected then
love.graphics.setColor( 0.2, 0.1, 0.1, 1.0 )
2023-09-04 00:49:02 +00:00
love.graphics.rectangle( "fill", 0, 0, 150 ,100 )
love.graphics.setColor( 1, 1, 1, 1 )
love.graphics.rectangle( "line", 0, 0, 150 ,100 )
love.graphics.setColor( 1.2, 1.1, 1.1, 1.5 )
love.graphics.print( map.selected:formatDisplayInfo(), 0, 0 )
end
end
function love.resize(w, h)
Camera.Resize( w, h )
end
function love.wheelmoved(x, y)
Camera.Zoom( (y > 0) and 0.5 or -0.5 )
end
function love.mousepressed( x, y, button, istouch, presses )
local wx, wy = Camera.GetWorldCoordinate( x, y )
if map.loaded then
if button == 1 then
map.cities.lockSelection()
else
map.cities.unlockSelection()
end
2023-07-28 05:42:16 +00:00
end
print( ("MOUSE\tx %f\ty %f\twx %f\twy %f"):format(x, y, wx, wy) )
end
function love.mousemoved( x, y, dx, dy, istouch )
local wx, wy = Camera.GetWorldCoordinate( x, y )
if map.loaded then
if map.cities.visible then map.selected = map.cities:selectNearest( wx, wy )
elseif map.travelnodes.visible then map.selected = map.travelnodes:selectNearest( wx, wy )
elseif map.ainodes.visible then map.selected = map.ainodes:selectNearest( wx, wy )
end
end
2023-04-28 17:35:52 +00:00
end
2023-07-28 23:23:08 +00:00
local function ToggleVisibility( layer )
if not layer then return end
local ml
if map[layer] then ml = map[layer] end
if map.territory[layer] then ml = map.territory[layer] end
assert( ml )
ml.visible = not( ml.visible )
print( layer, ml.visible )
end
local layerVisibilityKeybinds = {
["1"] = "africa",
["2"] = "europe",
["3"] = "northamerica",
["4"] = "southamerica",
["5"] = "southasia",
["6"] = "russia",
["7"] = "sailable",
["8"] = "coastlines",
["9"] = "coastlinesLow",
["0"] = "international",
["-"] = "cities",
["="] = "travelnodes",
["backspace"] = "ainodes",
2023-07-28 23:23:08 +00:00
}
2023-04-28 17:35:52 +00:00
function love.keypressed(key)
2023-07-28 23:23:08 +00:00
ToggleVisibility( layerVisibilityKeybinds[key] )
wasKeyPressed = true
2023-07-28 23:23:08 +00:00
if key == "l" then
return map.save()
2023-07-28 23:23:08 +00:00
end
2023-04-28 17:35:52 +00:00
end