mirror of
https://github.com/britzl/monarch.git
synced 2025-06-27 02:17:53 +02:00
155 lines
3.8 KiB
Plaintext
155 lines
3.8 KiB
Plaintext
local M = {}
|
|
|
|
local collection_template
|
|
local gui_script_content
|
|
local gui_file_content
|
|
|
|
local function ends_with(str, ending)
|
|
return ending == "" or str:sub(-#ending) == ending
|
|
end
|
|
|
|
local function file_exists(name)
|
|
local f=io.open(name,"r")
|
|
if f~=nil then io.close(f) return true else return false end
|
|
end
|
|
|
|
local function get_filename(path)
|
|
local main, filename, extension = path:match("(.-)([^\\/]-%.?([^%.\\/]*))$")
|
|
return main, filename
|
|
end
|
|
|
|
local function create_files(file_path)
|
|
-- Construct paths
|
|
local path = editor.get(file_path, "path")
|
|
local main, filename = get_filename(path)
|
|
local basename = filename:match("(.+)%..+")
|
|
local target_collection_path = "." .. main .. basename .. ".collection"
|
|
local target_gui_script_path = "." .. main .. basename .. ".gui_script"
|
|
local target_gui_path = "." .. main .. basename .. ".gui"
|
|
|
|
-- Create the files if they don't exists
|
|
if not file_exists(target_collection_path) then
|
|
local collection_content = collection_template(path, basename)
|
|
local collection = io.open(target_collection_path, "w")
|
|
collection:write(collection_content)
|
|
collection:close()
|
|
end
|
|
if not file_exists(target_gui_script_path) then
|
|
local gui_script = io.open(target_gui_script_path, "w")
|
|
gui_script:write(gui_script_content)
|
|
gui_script:close()
|
|
|
|
-- Put the gui_script path into the gui file
|
|
local gui_file = io.open("." .. path, "rb")
|
|
local gui_text = gui_file:read("*a")
|
|
gui_file:close()
|
|
|
|
gui_text = string.gsub(gui_text, 'script: "%.*"', [[script: "]] .. main .. basename .. ".gui_script" .. [["]])
|
|
|
|
gui_file = io.open("." .. path, "w")
|
|
gui_file:write(gui_text)
|
|
gui_file:close()
|
|
end
|
|
if not file_exists(target_gui_path) then
|
|
local gui_content = gui_template(path)
|
|
local gui = io.open(target_gui_path, "w")
|
|
gui:write(gui_content)
|
|
gui:close()
|
|
end
|
|
end
|
|
|
|
function M.get_commands()
|
|
return {
|
|
{
|
|
label="Create Monarch Scene From...",
|
|
locations = {"Assets"},
|
|
query = {
|
|
selection = {type = "resource", cardinality = "one"}
|
|
},
|
|
active = function(opts)
|
|
local path = editor.get(opts.selection, "path")
|
|
return ends_with(path, ".gui")
|
|
end,
|
|
run = function(opts)
|
|
create_files(opts.selection)
|
|
end
|
|
}
|
|
}
|
|
end
|
|
|
|
gui_template = function(gui_script)
|
|
return [[script: "]].. gui_script .. [["
|
|
material: "/builtins/materials/gui.material"
|
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
|
]]
|
|
end
|
|
|
|
gui_script_content = [[local monarch = require "monarch.monarch"
|
|
|
|
function init(self)
|
|
msg.post(".", "acquire_input_focus")
|
|
end
|
|
|
|
function final(self)
|
|
end
|
|
|
|
function update(self, dt)
|
|
end
|
|
|
|
function on_message(self, message_id, message, sender)
|
|
end
|
|
|
|
function on_input(self, action_id, action)
|
|
end
|
|
|
|
function on_reload(self)
|
|
end
|
|
]]
|
|
|
|
|
|
collection_template = function(gui_script, name)
|
|
return [[name: "]].. name .. [["
|
|
scale_along_z: 0
|
|
embedded_instances {
|
|
id: "go"
|
|
data: "components {\n"
|
|
" id: \"monarch\"\n"
|
|
" component: \"]].. gui_script .. [[\"\n"
|
|
" position {\n"
|
|
" x: 0.0\n"
|
|
" y: 0.0\n"
|
|
" z: 0.0\n"
|
|
" }\n"
|
|
" rotation {\n"
|
|
" x: 0.0\n"
|
|
" y: 0.0\n"
|
|
" z: 0.0\n"
|
|
" w: 1.0\n"
|
|
" }\n"
|
|
"}\n"
|
|
""
|
|
position {
|
|
x: 0.0
|
|
y: 0.0
|
|
z: 0.0
|
|
}
|
|
rotation {
|
|
x: 0.0
|
|
y: 0.0
|
|
z: 0.0
|
|
w: 1.0
|
|
}
|
|
scale3 {
|
|
x: 1.0
|
|
y: 1.0
|
|
z: 1.0
|
|
}
|
|
}
|
|
]]
|
|
|
|
end
|
|
|
|
|
|
|
|
return M
|