bug fix: was unable to select polygons with the mouse if their vertices coincided with other polygons' vertices

This commit is contained in:
wan-may 2024-07-18 23:36:47 -03:00
parent 97f21e192f
commit 6483f42c80
13 changed files with 36 additions and 24 deletions

View File

@ -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()

View File

@ -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

View File

@ -1 +1,5 @@
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.

0
ui/menu.lua Normal file
View File

0
ui/menu/ainodes.lua Normal file
View File

1
ui/menu/cities.lua Normal file
View File

@ -0,0 +1 @@
local textinput = require 'ui.textinput'

0
ui/menu/lines.lua Normal file
View File

View File

@ -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 ),

0
ui/menu/territory.lua Normal file
View File

0
ui/menu/travelnodes.lua Normal file
View File

View File

@ -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 {}

0
ui/territory.lua Normal file
View File

View File

@ -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