diff --git a/main.lua b/main.lua index 4d5ccb0..9ced19e 100644 --- a/main.lua +++ b/main.lua @@ -2,7 +2,7 @@ local love = assert( love, "This tool requires LOVE: love2d.org" ) --assert( require('mobdebug') ).start() --remote debugger local map = require 'map.map' local button = require 'ui.button' -local mainmenu = require 'ui.mainmenu' +local mainmenu = require 'ui.menu.mainmenu' local Camera = require 'ui.camera' function love.load() diff --git a/map/lines.lua b/map/lines.lua index 39d22e5..c198689 100644 --- a/map/lines.lua +++ b/map/lines.lua @@ -12,7 +12,7 @@ function polygon:formatDisplayInfo() y: %f X: %f Y: %f - N: %d]]):format( self.x, self.y, self.X, self.Y, #self ) + Length: %d]]):format( self.x, self.y, self.X, self.Y, #self / 4 ) end function polygon:drawDirection() @@ -73,8 +73,9 @@ function t.selectNearest( lines, wx, wy ) poly.X + 5 > wx and poly.y - 5 < wy and poly.Y + 5 > wy then - for k = 1, #poly, 2 do - local x, y = poly[k], poly[k + 1] + for k = 1, #poly - 3, 4 do + --find the midpoint of each line segment + local x, y = 0.5 * (poly[k] + poly[k + 2]), 0.5 * (poly[k + 1] + poly[k + 3]) local r = ( x - wx ) * ( x - wx ) + ( y - wy ) * ( y - wy ) if r < d then d = r diff --git a/readme.txt b/readme.txt index 4956d46..18451b1 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,5 @@ -Map editor for DEFCON, the strategy game, written in LOVE2D, the engine. \ No newline at end of file +Map editor for DEFCON, the strategy game, written in LOVE2D, the engine. + +Currently does not do anything besides read the files and write them back out. + +Need to make a more structured UI, rewriting menu.lua and button.lua for this purpose. \ No newline at end of file diff --git a/ui/menu.lua b/ui/menu.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/menu/ainodes.lua b/ui/menu/ainodes.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/menu/cities.lua b/ui/menu/cities.lua new file mode 100644 index 0000000..28b4350 --- /dev/null +++ b/ui/menu/cities.lua @@ -0,0 +1 @@ +local textinput = require 'ui.textinput' \ No newline at end of file diff --git a/ui/menu/lines.lua b/ui/menu/lines.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/mainmenu.lua b/ui/menu/mainmenu.lua similarity index 71% rename from ui/mainmenu.lua rename to ui/menu/mainmenu.lua index 4658938..54f011a 100644 --- a/ui/mainmenu.lua +++ b/ui/menu/mainmenu.lua @@ -6,6 +6,23 @@ local loadmodal = require 'ui.loadmodal' local Camera = require 'ui.camera' local map = require 'map.map' +local loadImg = love.graphics.newImage +local layers = { + { name = "AF", layer = "africa" , menu = require 'ui.menu.territory' }, + { name = "EU", layer = "europe" , menu = require 'ui.menu.territory' }, + { name = "NA", layer = "northamerica" , menu = require 'ui.menu.territory' }, + { name = "SA", layer = "southamerica" , menu = require 'ui.menu.territory' }, + { name = "AS", layer = "southasia" , menu = require 'ui.menu.territory' }, + { name = "RU", layer = "russia" , menu = require 'ui.menu.territory' }, + { name = "PATH", layer = "travelnodes" , menu = require 'ui.menu.travelnodes', icon = loadImg( "icons/layer-travelnodes.png" )}, + { name = "AI", layer = "ainodes" , menu = require 'ui.menu.ainodes', icon = loadImg( "icons/layer-ainodes.png" )}, + { name = "CITY", layer = "cities" , menu = require 'ui.menu.cities', icon = loadImg( "icons/layer-cities.png" )}, + { name = "COAST", layer = "coastlines" , menu = require 'ui.menu.lines', icon = loadImg( "icons/layer-coastlines.png" )}, + { name = "LOW", layer = "coastlinesLow", menu = require 'ui.menu.lines', icon = loadImg( "icons/layer-coastlines-low.png" )}, + { name = "INT", layer = "international", menu = require 'ui.menu.lines', icon = loadImg( "icons/layer-international.png" )}, + { name = "SAIL", layer = "sailable" , menu = require 'ui.menu.territory', icon = loadImg( "icons/layer-sailable.png" )}, +} + button.new{ name = "LOAD", x = 250, y = 0, w = 28 * 13, @@ -22,23 +39,6 @@ button.new{ callback = map.undo, icon = love.graphics.newImage( "icons/undo.bmp" ) } - -local layers = { - { name = "AF", layer = "africa" }, - { name = "EU", layer = "europe" }, - { name = "NA", layer = "northamerica" }, - { name = "SA", layer = "southamerica" }, - { name = "AS", layer = "southasia" }, - { name = "RU", layer = "russia" }, - { name = "PATH", layer = "travelnodes" , icon = love.graphics.newImage( "icons/layer-travelnodes.png" )}, - { name = "AI", layer = "ainodes" , icon = love.graphics.newImage( "icons/layer-ainodes.png" )}, - { name = "CITY", layer = "cities" , icon = love.graphics.newImage( "icons/layer-cities.png" )}, - { name = "COAST", layer = "coastlines" , icon = love.graphics.newImage( "icons/layer-coastlines.png" )}, - { name = "LOW", layer = "coastlinesLow", icon = love.graphics.newImage( "icons/layer-coastlines-low.png" )}, - { name = "INT", layer = "international", icon = love.graphics.newImage( "icons/layer-international.png" )}, - { name = "SAIL", layer = "sailable" , icon = love.graphics.newImage( "icons/layer-sailable.png" )}, -} - local showButtons = {} local visibilityIcon = love.graphics.newImage( "icons/eye.bmp" ) local function updateVisibilityIcons() @@ -92,6 +92,7 @@ local x = 250 local soloButtons = {} local editButtons = {} for i = 1, #layers do + editButtons[i] = button.new( copy( i, { y = 3 * 28, x = x + (button.h + 4) * ( i - 1 ), diff --git a/ui/menu/territory.lua b/ui/menu/territory.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/menu/travelnodes.lua b/ui/menu/travelnodes.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/modal.lua b/ui/modal.lua index 5b95d32..f6e457e 100644 --- a/ui/modal.lua +++ b/ui/modal.lua @@ -5,7 +5,11 @@ t.__index = t local i = 0 function t.start( self ) - love.graphics.setScissor( 0, 0, love.graphics.getDimensions() ) + love.graphics.setScissor( + self.x or 0, + self.y or 0, + self.w or love.graphics.getWidth(), + self.h or love.graphics.getDimensions()) i = i + 1 t[i] = t[i] or {} diff --git a/ui/territory.lua b/ui/territory.lua new file mode 100644 index 0000000..e69de29 diff --git a/ui/textinput.lua b/ui/textinput.lua index 3de9e61..543f515 100644 --- a/ui/textinput.lua +++ b/ui/textinput.lua @@ -47,6 +47,7 @@ function t.keypressed(key, code, isRepeat) end if key == "backspace" then + local text = t.currentModal.currentField -- get the byte offset to the last UTF-8 character in the string. local byteoffset = utf8.offset(text, -1) @@ -56,7 +57,7 @@ function t.keypressed(key, code, isRepeat) text = string.sub(text, 1, byteoffset - 1) end end - if key == "escape" then + if code == "escape" then return t:stop() end end