local love = assert( love, "This tool requires LOVE: love2d.org" ) --assert( require('mobdebug') ).start() --remote debugger local map = require 'map' local button = require 'button' local SAVEDIRECTORY = "out/" local Camera = require 'camera' local wasKeyPressed function love.load() local lfs = assert( love.filesystem ) lfs.setIdentity( "dcearth", false ) assert( lfs.createDirectory( SAVEDIRECTORY.."data/earth" )) assert( lfs.createDirectory( SAVEDIRECTORY.."data/graphics" )) love.graphics.setNewFont( 12, "mono" ) end function love.directorydropped( path ) love.filesystem.mount( path, "" ) return map.load( path ) end 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 end 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" } 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() --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 ) 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) 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 ) 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 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 end 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", } function love.keypressed(key) ToggleVisibility( layerVisibilityKeybinds[key] ) if key == "l" then -- To open a file or folder, "file://" must be prepended to the path. love.system.openURL("file://"..love.filesystem.getSaveDirectory()) end wasKeyPressed = true end