|
67 | 67 | minetest.register_on_shutdown(write_entities)
|
68 | 68 | luaentity.entities_index = 0
|
69 | 69 |
|
70 |
| -local function get_blockpos(pos) |
71 |
| - return {x = math.floor(pos.x / 16), |
72 |
| - y = math.floor(pos.y / 16), |
73 |
| - z = math.floor(pos.z / 16)} |
74 |
| -end |
75 |
| - |
76 | 70 | local move_entities_globalstep_part1
|
77 | 71 | local is_active
|
78 | 72 |
|
79 | 73 | if pipeworks.use_real_entities then
|
80 | 74 | local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones)
|
81 | 75 |
|
| 76 | + local function get_blockpos(pos) |
| 77 | + return {x = math.floor(pos.x / 16), |
| 78 | + y = math.floor(pos.y / 16), |
| 79 | + z = math.floor(pos.z / 16)} |
| 80 | + end |
| 81 | + |
82 | 82 | move_entities_globalstep_part1 = function(dtime)
|
83 | 83 | local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2
|
84 |
| - local new_active_blocks = {} |
| 84 | + for key in pairs(active_blocks) do |
| 85 | + active_blocks[key] = nil |
| 86 | + end |
85 | 87 | for _, player in ipairs(minetest.get_connected_players()) do
|
86 | 88 | local blockpos = get_blockpos(player:get_pos())
|
87 |
| - local minp = vector.subtract(blockpos, active_block_range) |
88 |
| - local maxp = vector.add(blockpos, active_block_range) |
89 |
| - |
90 |
| - for x = minp.x, maxp.x do |
91 |
| - for y = minp.y, maxp.y do |
92 |
| - for z = minp.z, maxp.z do |
93 |
| - local pos = {x = x, y = y, z = z} |
94 |
| - new_active_blocks[minetest.hash_node_position(pos)] = pos |
95 |
| - end |
96 |
| - end |
| 89 | + local minpx = blockpos.x - active_block_range |
| 90 | + local minpy = blockpos.y - active_block_range |
| 91 | + local minpz = blockpos.z - active_block_range |
| 92 | + local maxpx = blockpos.x + active_block_range |
| 93 | + local maxpy = blockpos.y + active_block_range |
| 94 | + local maxpz = blockpos.z + active_block_range |
| 95 | + |
| 96 | + for x = minpx, maxpx do |
| 97 | + for y = minpy, maxpy do |
| 98 | + for z = minpz, maxpz do |
| 99 | + local pos = {x = x, y = y, z = z} |
| 100 | + active_blocks[minetest.hash_node_position(pos)] = true |
| 101 | + end |
| 102 | + end |
97 | 103 | end
|
98 | 104 | end
|
99 |
| - active_blocks = new_active_blocks |
100 | 105 | -- todo: callbacks on block load/unload
|
101 | 106 | end
|
102 | 107 |
|
|
0 commit comments