bug fix: was unable to select polygons with the mouse if their vertices coincided with other polygons' vertices
This commit is contained in:
parent
97f21e192f
commit
6483f42c80
2
main.lua
2
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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,0 +1 @@
|
|||
local textinput = require 'ui.textinput'
|
|
@ -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 ),
|
|
@ -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 {}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue