preview generator
This commit is contained in:
parent
28c82181e3
commit
6eb44d010d
@ -14,5 +14,5 @@ read_globals = {
|
|||||||
"minetest",
|
"minetest",
|
||||||
|
|
||||||
-- mods
|
-- mods
|
||||||
"mapblock_lib", "mtt", "Promise"
|
"mapblock_lib", "mtt", "Promise", "isogen"
|
||||||
}
|
}
|
||||||
|
1
api.lua
1
api.lua
@ -29,6 +29,7 @@ function building_lib.register_building(name, def)
|
|||||||
error("unexpected modname: '" .. parts[1] .. "' expected: " .. minetest.get_current_modname())
|
error("unexpected modname: '" .. parts[1] .. "' expected: " .. minetest.get_current_modname())
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def.modname = parts[1]
|
||||||
buildings[name] = def
|
buildings[name] = def
|
||||||
end
|
end
|
||||||
|
|
||||||
|
5
init.lua
5
init.lua
@ -28,6 +28,11 @@ dofile(MP .. "/events.lua")
|
|||||||
dofile(MP .. "/hacks.lua")
|
dofile(MP .. "/hacks.lua")
|
||||||
dofile(MP .. "/mapgen.lua")
|
dofile(MP .. "/mapgen.lua")
|
||||||
|
|
||||||
|
local ie = minetest.request_insecure_environment()
|
||||||
|
if ie and minetest.get_modpath("isogen") then
|
||||||
|
loadfile(MP .. "/previewgen.lua")(ie)
|
||||||
|
end
|
||||||
|
|
||||||
if minetest.get_modpath("mtt") and mtt.enabled then
|
if minetest.get_modpath("mtt") and mtt.enabled then
|
||||||
dofile(MP .. "/events.spec.lua")
|
dofile(MP .. "/events.spec.lua")
|
||||||
dofile(MP .. "/conditions.spec.lua")
|
dofile(MP .. "/conditions.spec.lua")
|
||||||
|
2
mod.conf
2
mod.conf
@ -1,4 +1,4 @@
|
|||||||
name = building_lib
|
name = building_lib
|
||||||
description = Mapblock granular building placement and tools
|
description = Mapblock granular building placement and tools
|
||||||
depends = mapblock_lib, promise, wield_events
|
depends = mapblock_lib, promise, wield_events
|
||||||
optional_depends = mtt
|
optional_depends = mtt, isogen
|
85
previewgen.lua
Normal file
85
previewgen.lua
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
local ie = ...
|
||||||
|
|
||||||
|
local function generate_preview(building_def)
|
||||||
|
local catalog
|
||||||
|
local offset = {x=0, y=0, z=0}
|
||||||
|
local size
|
||||||
|
|
||||||
|
if type(building_def.catalog) == "table" then
|
||||||
|
catalog = mapblock_lib.get_catalog(building_def.catalog.filename)
|
||||||
|
offset = building_def.catalog.offset or {x=0, y=0, z=0}
|
||||||
|
size = building_def.catalog.size or {x=1, y=1, z=1}
|
||||||
|
else
|
||||||
|
catalog = mapblock_lib.get_catalog(building_def.catalog)
|
||||||
|
size = catalog:get_size()
|
||||||
|
end
|
||||||
|
|
||||||
|
local mb_pos2 = vector.add(offset, vector.subtract(size, 1))
|
||||||
|
|
||||||
|
local min = mapblock_lib.get_mapblock_bounds_from_mapblock(offset)
|
||||||
|
local _, max = mapblock_lib.get_mapblock_bounds_from_mapblock(mb_pos2)
|
||||||
|
|
||||||
|
local png = isogen.draw(min, max, {
|
||||||
|
cube_len = 8,
|
||||||
|
get_node = function(pos)
|
||||||
|
return catalog:get_node(pos)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
local filename = minetest.get_modpath(building_def.modname) ..
|
||||||
|
"/textures/" .. building_def.modname ..
|
||||||
|
"_preview_" .. building_def.name .. ".png"
|
||||||
|
|
||||||
|
local f = ie.io.open(filename, "wb")
|
||||||
|
if not f then
|
||||||
|
return false, "could not open file: '" .. filename .. "'"
|
||||||
|
end
|
||||||
|
|
||||||
|
f:write(png)
|
||||||
|
f:close()
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_chatcommand("building_previewgen", {
|
||||||
|
params = "[modname]",
|
||||||
|
privs = {
|
||||||
|
mapblock_lib = true
|
||||||
|
},
|
||||||
|
func = function(name, modname)
|
||||||
|
local buildings = building_lib.get_buildings()
|
||||||
|
local list = {}
|
||||||
|
for _, building in pairs(buildings) do
|
||||||
|
if building.modname == modname and building.placement == "mapblock_lib" then
|
||||||
|
table.insert(list, building)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #list == 0 then
|
||||||
|
return false, "no buildings found with given modname"
|
||||||
|
end
|
||||||
|
|
||||||
|
local worker
|
||||||
|
worker = function()
|
||||||
|
local building = table.remove(list)
|
||||||
|
if not building then
|
||||||
|
minetest.chat_send_player(name, "Done generating previews")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.chat_send_player(name, "Generating preview for '" .. building.name .. "'")
|
||||||
|
local success, err = generate_preview(building)
|
||||||
|
if not success then
|
||||||
|
minetest.chat_send_player(
|
||||||
|
name,
|
||||||
|
"Preview generation failed for building: '" .. building.name .. "', error: " .. err
|
||||||
|
)
|
||||||
|
else
|
||||||
|
minetest.after(0, worker)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.after(0, worker)
|
||||||
|
return true, "Scheduled " .. #list .. " buildings for preview-generation"
|
||||||
|
end
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user