added function to cancel active prompt added function to add new spawns from editor added keybind for that

This commit is contained in:
lustlion 2022-03-11 18:39:27 +01:00
parent 3d41699d8f
commit 61b8aa883b
4 changed files with 117 additions and 50 deletions

View File

@ -7,39 +7,15 @@ editor = {
function stepEditor()
editor.palette_mode = editor.palette_mode or false
animateTiles()
if Keybind:checkPressed(Keybind.editor.room_mode) then
if love.keyboard.isDown("lshift") then
editor.room_mode = "delete"
else
editor.room_mode = not editor.room_mode
if Prompt.active_prompt == nil then
if Keybind:checkPressed(Keybind.editor.room_mode) then
if love.keyboard.isDown("lshift") then
editor.room_mode = "delete"
else
editor.room_mode = not editor.room_mode
end
editor.room_points = {}
end
editor.room_points = {}
end
if Keybind:checkPressed(Keybind.editor.palette_mode) then
if editor.palette_mode then
editor.palette_mode = false
palette_scroll_x = nil
palette_scroll_y = nil
else
editor.palette_mode = true
palette_scroll_x = 0
palette_scroll_y = 0
end
end
if Keybind:checkPressed(Keybind.editor.palette_mode) then
if editor.palette_mode then
editor.palette_mode = false
palette_scroll_x = nil
palette_scroll_y = nil
else
editor.palette_mode = true
palette_scroll_x = 0
palette_scroll_y = 0
end
end
if Keybind:checkPressed(Keybind.editor.palette_mode) then
if editor.palette_mode then
@ -53,6 +29,31 @@ function stepEditor()
end
end
if Keybind:checkPressed(Keybind.editor.palette_mode) then
if editor.palette_mode then
editor.palette_mode = false
palette_scroll_x = nil
palette_scroll_y = nil
else
editor.palette_mode = true
palette_scroll_x = 0
palette_scroll_y = 0
end
end
if Keybind:checkPressed(Keybind.editor.palette_mode) then
if editor.palette_mode then
editor.palette_mode = false
palette_scroll_x = nil
palette_scroll_y = nil
else
editor.palette_mode = true
palette_scroll_x = 0
palette_scroll_y = 0
end
end
end
-- TODO:
-- i changed this but i dont know what was to do here.
-- - made specific action keybinds
@ -237,6 +238,10 @@ function doEditorEdit()
promptSpawnArchetype()
elseif Keybind:checkDown(Keybind.editor.entity_modify_data) then
promptSpawnArgs()
elseif Keybind:checkDown(Keybind.editor.entity_remove) then
deleteSpawn()
elseif Keybind:checkDown(Keybind.editor.entity_new) then
promptSpawnNew()
end
end
end

View File

@ -129,6 +129,8 @@ function Keybind:default()
Keybind.editor.entity_move = { keys = {2}}
Keybind.editor.entity_modify_archetype = { keys = {"t"}}
Keybind.editor.entity_modify_data = { keys = {"g"}}
Keybind.editor.entity_remove = { keys = {"delete"}}
Keybind.editor.entity_new = { keys = {"n"}}
-- Generic
Keybind.generic.lclick = { keys = {1}}
Keybind.generic.rclick = { keys = {2}}

View File

@ -55,10 +55,64 @@ function moveSpawns(x,y)
end
end
function promptSpawnArchetype()
if Prompt.active_prompt then
Prompt.active_prompt.canceled = true
function promptSpawnNew()
Prompt:cancelActive()
local text = ""
local prompt = Prompt:new({
name = "new spawn",
input = text,
func = function(prompt)
local f = loadstring("return {"..prompt.input.."}")
if f ~= nil then
local succ, result = pcall(f)
local arch = result[1]
local args = {}
if #result > 1 then
for i=2, #result+1 do
print("arg #"..i-1)
args[i-1] = result[i]
end
else
args = {0,0}
end
print("new entity spawn --",succ)
if not succ
or checkArchetypeInvalid(arch)
then
print("invalid input for prompt "..prompt.name)
else
print("archetype: ",arch.type)
print("args: ",unpack(args))
addSpawn(arch, unpack(args))
end
else
print("invalid input for prompt "..prompt.name)
end
end,
})
prompt.pos.x = 0
prompt.pos.y = 10
prompt:activate()
end
function deleteSpawn()
for i=1, #LoadedObjects.Spawns do
if LoadedObjects.Spawns[i]
and LoadedObjects.Spawns[i].selected then
table.remove(LoadedObjects.Spawns,i)
break
end
end
end
function checkArchetypeInvalid(arch)
return type(arch) ~= "table" or type(arch.type) ~= "string"
end
function promptSpawnArchetype()
Prompt:cancelActive()
for _, spawn in pairs(LoadedObjects.Spawns) do
if spawn.selected then
local offset_x, offset_y = spawn.archetype.display:getCenteredOffset()
@ -79,8 +133,7 @@ function promptSpawnArchetype()
print("archetype changed --",succ)
print("from: ", spawn.archetype.type)
if not succ
or type(arch) ~= "table"
or type(arch.type) ~= "string"
or checkArchetypeInvalid(arch)
then
arch = spawn.archetype
end
@ -90,25 +143,27 @@ function promptSpawnArchetype()
print("invalid input for prompt "..prompt.name)
end
end,
})
prompt.pos.x = (spawn.args[1]-4)*game.scale - Camera.pos.x - offset_x
prompt.pos.y = (spawn.args[2]-20)*game.scale - Camera.pos.y - offset_y
})
prompt.pos.x = (spawn.args[1]-4)*game.scale - Camera.pos.x - offset_x
prompt.pos.y = (spawn.args[2]-20)*game.scale - Camera.pos.y - offset_y
prompt:activate()
end
end
end
function checkArgsAreInvalid(args)
function checkArgsInvalid(args)
for _, arg in pairs(args) do
if arg == nil then return true end
-- this is checking the args are not nil variables
if arg == nil
or arg == ""
then
return true
end
end
end
function promptSpawnArgs()
if Prompt.active_prompt then
Prompt.active_prompt.canceled = true
end
Prompt:cancelActive()
for _, spawn in pairs(LoadedObjects.Spawns) do
if spawn.selected then
local offset_x, offset_y = spawn.archetype.display:getCenteredOffset()
@ -127,7 +182,7 @@ function promptSpawnArgs()
print("args changed --",succ)
print("from: ", unpack(args))
if not succ
or checkArgsAreInvalid(args)
or checkArgsInvalid(args)
then
args = spawn.args
end
@ -137,9 +192,9 @@ function promptSpawnArgs()
print("invalid input for prompt "..prompt.name)
end
end,
})
prompt.pos.x = (spawn.args[1]-4)*game.scale - Camera.pos.x - offset_x
prompt.pos.y = (spawn.args[2]-4)*game.scale - Camera.pos.y - offset_y
})
prompt.pos.x = (spawn.args[1]-4)*game.scale - Camera.pos.x - offset_x
prompt.pos.y = (spawn.args[2]-4)*game.scale - Camera.pos.y - offset_y
prompt:activate()
end
end

View File

@ -24,6 +24,11 @@ Prompt = {
background_color = {0,0,0,1},
active_prompt = nil,
}
function Prompt:cancelActive()
if Prompt.active_prompt then
Prompt.active_prompt.canceled = true
end
end
function Prompt:new(o)
o = o or {}