sokol-luajit/editor/project-manager.lua

137 lines
4.9 KiB
Lua
Raw Normal View History

------------------------------------------------------------------------------------------------------------
local tinsert = table.insert
local utils = require('lua.utils')
local json = require('lua.json')
local ffi = require("ffi")
local dirtools = require("tools.vfs.dirtools")
local cfgmgr = require('editor.config-manager')
local datahlp = require('editor.config.data-helper')
local tiny = require('engine.world.world-manager')
------------------------------------------------------------------------------------------------------------
local projectmanager = {
current_project = {},
recents = {},
sys = {
has_create = 1,
drives = dirtools.get_drives(),
folders = dirtools.get_folderslist("."),
current_folder = dirtools.get_app_path(),
},
}
------------------------------------------------------------------------------------------------------------
projectmanager.init = function(self)
cfgmgr.load()
self.recents = cfgmgr.recents
end
------------------------------------------------------------------------------------------------------------
projectmanager.create = function(self, project)
-- Check the path is valid first
if(project) then
if(project.path and dirtools.is_folder(project.path)) then
tiny.default = tiny.default or tiny.addWorld(tiny, "MasterWorld")
local clean_name = utils.cleanstring(project.name)
local project_path = dirtools.combine_path(project.path, clean_name)
if(dirtools.make_folder(project_path)) then
local assets_path = dirtools.combine_path(project_path, "assets")
dirtools.make_folder(assets_path)
local config_path = dirtools.combine_path(project_path, "config")
dirtools.make_folder(config_path)
local build_path = dirtools.combine_path(project_path, "build")
dirtools.make_folder(build_path)
local cache_path = dirtools.combine_path(project_path, "cache")
dirtools.make_folder(cache_path)
local data_path = dirtools.combine_path(project_path, "data")
dirtools.make_folder(data_path)
-- Iterate default worlds and create datasets (assets, scripts etc) for them
local world_entries = datahlp.make_worlds(data_path, tiny.worlds)
local project_filename = dirtools.combine_path(project_path, "project.slp")
self.current_project = {
filename = project_filename,
name = clean_name,
paths = {
project = project_path,
assets = assets_path,
config = config_path,
build = build_path,
cache = cache_path,
data = data_path,
worlds = world_entries,
},
}
local fh = io.open(project_filename, "w")
if(fh) then
fh:write( json.encode(self.current_project) )
fh:close()
end
else
end
end
end
end
------------------------------------------------------------------------------------------------------------
projectmanager.load = function(self, project)
-- Check the path is valid first
if(project) then
if(project.path and dirtools.is_folder(project.path)) then
project_filename = dirtools.combine_path(project.path, project.projectfile)
local fh = io.open(project_filename, "r")
if(fh) then
local data = fh:read( "*a" )
self.current_project = json.decode(data)
fh:close()
end
-- Load worlds
-- Clear worlds first!!
tiny.worlds = {}
for i,world_obj in ipairs(self.current_project.paths.worlds) do
local fh = io.open( world_obj.filename, "r")
if(fh) then
local data = fh:read("*a")
fh:close()
tiny.addWorld(tiny, world_obj.name)
tiny.current_world.data = json.decode(data)
end
end
end
end
end
------------------------------------------------------------------------------------------------------------
-- Consider making this a timed autosaver. Will see.
projectmanager.save = function(self, project)
end
------------------------------------------------------------------------------------------------------------
return projectmanager
------------------------------------------------------------------------------------------------------------