• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

BuckarooBanzay / mapblock_lib / 11399363977

18 Oct 2024 07:24AM UTC coverage: 56.284% (-2.5%) from 58.802%
11399363977

push

github

BuckarooBanzay
generate preview image if the `isogen` mod is available

3 of 12 new or added lines in 1 file covered. (25.0%)

24 existing lines in 2 files now uncovered.

627 of 1114 relevant lines covered (56.28%)

2669.61 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.55
/create_catalog.lua
1
---------
2
-- Create catalog function
3
local global_env = ...
1✔
4

5
local has_isogen = minetest.get_modpath("isogen")
1✔
6

7
------
8
-- Serialize options
9
-- @number delay for async mode: delay between serialization-calls
10
-- @field callback function to call when the blocks are serialized
11
-- @field progress_callback function to call when the progress is update
12
-- @table serialize_options
13

14
--- create a new catalog and serialize the mapblocks from pos1 to pos2 in it
15
-- @see create_catalog.lua
16
-- @string filename the filename to save to
17
-- @param pos1 @{util.mapblock_pos} the first (lower) mapblock position
18
-- @param pos2 @{util.mapblock_pos} the second (upper) mapblock position
19
-- @param options[opt] @{serialize_options} serialization options
20
function mapblock_lib.create_catalog(filename, pos1, pos2, options)
2✔
21
        local f = global_env.io.open(filename, "wb")
1✔
22
        local z = mtzip.zip(f)
1✔
23

24
        local iterator, total_count = mapblock_lib.pos_iterator(pos1, pos2)
1✔
25
        local mapblock_pos
26
        local count = 0
1✔
27

28
        -- default to async serialization
29
        options = options or {}
1✔
30
        options.delay = options.delay or 0.1
1✔
31
        options.callback = options.callback or function() end
1✔
32
        options.progress_callback = options.progress_callback or function() end
1✔
33
        options.iso_cube_len = 8
1✔
34

35
        pos1, pos2 = mapblock_lib.sort_pos(pos1, pos2)
2✔
36
        local start = minetest.get_us_time()
1✔
37

38
        local worker
39
        worker = function()
40
                mapblock_pos = iterator()
18✔
41
                if mapblock_pos then
9✔
42
                        local rel_pos = vector.subtract(mapblock_pos, pos1)
8✔
43
                        local mapblock = mapblock_lib.serialize_mapblock(mapblock_pos)
8✔
44

45
                        -- only serialize non-air blocks
46
                        if not mapblock.air_only then
8✔
47
                                z:add("mapblock_" .. minetest.pos_to_string(rel_pos) .. ".bin",mapblock_lib.write_mapblock(mapblock))
24✔
48
                                z:add("mapblock_" .. minetest.pos_to_string(rel_pos) .. ".meta.json",mapblock_lib.write_mapblock_manifest(mapblock))
24✔
49
                        end
50

51
                        count = count + 1
8✔
52
                        options.progress_callback(count / total_count)
8✔
53
                        minetest.after(options.delay, worker)
16✔
54
                else
55
                        -- done, generate preview and write global manifest
56

57
                        if has_isogen then
1✔
58
                                -- isogen in modpath, generate isometric preview and metadata
NEW
59
                                local min = mapblock_lib.get_mapblock_bounds_from_mapblock(pos1)
×
NEW
60
                                local _, max = mapblock_lib.get_mapblock_bounds_from_mapblock(pos2)
×
61

NEW
62
                                local png = isogen.draw(min, max, { cube_len = options.iso_cube_len })
×
NEW
63
                                z:add("preview.png", png)
×
64

NEW
65
                                local size = vector.add(vector.subtract(max, min), 1)
×
NEW
66
                                local width, height = isogen.calculate_image_size(size, options.iso_cube_len)
×
NEW
67
                                local preview_metadata = {
×
68
                                        width = width,
NEW
69
                                        height = height
×
70
                                }
NEW
71
                                z:add("preview.json", minetest.write_json(preview_metadata))
×
72
                        end
73

74
                        local manifest = {
1✔
75
                                range = vector.subtract(pos2, pos1),
2✔
76
                                version = mapblock_lib.version
1✔
77
                        }
78
                        z:add("manifest.json", minetest.write_json(manifest))
1✔
79
                        z:close()
1✔
80
                        f:close()
1✔
81
                        options.progress_callback(1)
1✔
82
                        local micros = minetest.get_us_time() - start
1✔
83
                        options.callback(count, micros)
1✔
84
                end
85
        end
86

87
        -- initial call
88
        worker()
1✔
89
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc