add 'on_block_removed' event
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
local updating_blocks = {}
|
||||
local present_queues = {}
|
||||
local TYPE_REGISTER = 1
|
||||
local TYPE_UPDATING = 2
|
||||
local TYPE_PRESENT = 4
|
||||
local REGISTER_BIT = 0x1
|
||||
local UPDATING_BIT = 0x2
|
||||
local PRESENT_BIT = 0x4
|
||||
local REMOVED_BIT = 0x8
|
||||
|
||||
block.__perform_ticks = function(delta)
|
||||
for id, entry in pairs(updating_blocks) do
|
||||
@@ -25,7 +26,7 @@ block.__perform_ticks = function(delta)
|
||||
end
|
||||
for id, queue in pairs(present_queues) do
|
||||
queue.timer = queue.timer + delta
|
||||
local steps = math.floor(queue.timer / queue.delta * #queue / 4)
|
||||
local steps = math.floor(queue.timer / queue.delta * #queue / 3)
|
||||
if steps == 0 then
|
||||
goto continue
|
||||
end
|
||||
@@ -33,16 +34,15 @@ block.__perform_ticks = function(delta)
|
||||
local event = queue.event
|
||||
local update_list = updating_blocks[id]
|
||||
for i=1, steps do
|
||||
local index = #queue - 3
|
||||
local index = #queue - 2
|
||||
if index <= 0 then
|
||||
break
|
||||
end
|
||||
local is_register = queue[index]
|
||||
local x = queue[index + 1]
|
||||
local y = queue[index + 2]
|
||||
local z = queue[index + 3]
|
||||
local x = queue[index]
|
||||
local y = queue[index + 1]
|
||||
local z = queue[index + 2]
|
||||
|
||||
for j=1,4 do
|
||||
for j=1,3 do
|
||||
table.remove(queue, index)
|
||||
end
|
||||
events.emit(event, x, y, z)
|
||||
@@ -65,6 +65,10 @@ block.__process_register_events = function()
|
||||
if not register_events then
|
||||
return
|
||||
end
|
||||
|
||||
local emit_event = events.emit
|
||||
local removed_events = {}
|
||||
|
||||
for i=1, #register_events, 4 do
|
||||
local header = register_events[i]
|
||||
local event_bits = bit.band(header, 0xFFFF)
|
||||
@@ -73,11 +77,21 @@ block.__process_register_events = function()
|
||||
local y = register_events[i + 2]
|
||||
local z = register_events[i + 3]
|
||||
|
||||
local is_register = bit.band(event_bits, TYPE_REGISTER) ~= 0
|
||||
local is_updating = bit.band(event_bits, TYPE_UPDATING) ~= 0
|
||||
local is_present = bit.band(event_bits, TYPE_PRESENT) ~= 0
|
||||
local is_register = bit.band(event_bits, REGISTER_BIT) ~= 0
|
||||
local is_updating = bit.band(event_bits, UPDATING_BIT) ~= 0
|
||||
local is_present = bit.band(event_bits, PRESENT_BIT) ~= 0
|
||||
local is_removed = bit.band(event_bits, REMOVED_BIT) ~= 0
|
||||
local list = updating_blocks[id]
|
||||
|
||||
if not is_register and is_removed then
|
||||
local rm_event = removed_events[id]
|
||||
if not rm_event then
|
||||
rm_event = block.name(id) .. ".blockremoved"
|
||||
removed_events[id] = rm_event
|
||||
end
|
||||
emit_event(rm_event, x, y, z)
|
||||
end
|
||||
|
||||
if not list and is_register and is_updating then
|
||||
list = {}
|
||||
list.event = block.name(id) .. ".blocktick"
|
||||
@@ -100,7 +114,6 @@ block.__process_register_events = function()
|
||||
present_queue.updating = is_updating
|
||||
present_queues[id] = present_queue
|
||||
end
|
||||
table.insert(present_queue, is_register)
|
||||
table.insert(present_queue, x)
|
||||
table.insert(present_queue, y)
|
||||
table.insert(present_queue, z)
|
||||
|
||||
Reference in New Issue
Block a user