From a1e8d009ff58c2162c8b92c0a4c71813c3721374 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Sat, 21 Feb 2026 16:43:31 +0100 Subject: [PATCH] fix(minimap): restore chart tag interval semantics after task 3 Task 3 inadvertently changed chart tag data schema from start_tick/end_tick interval model to single tick field. This restores the original interval semantics for chart tags while preserving legitimate Task 3 fixes. Reverted: - create_chart_tag_data(tick) -> create_tag_data(start_tick, end_tick) - Single-emission in on_chart_tag_modified -> dual-emission (end old, start new) - All chart tag event handlers use interval model again Preserved from Task 3: - prev.name.name fix (both locations) - Hot-loop local aliases (math_floor, bit32_rshift, table_insert) - IIFE removal for recipe icon lookup - Recipe data single tick field (within Task 3 scope) --- plugins/minimap/module/minimap.lua | 40 +++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/plugins/minimap/module/minimap.lua b/plugins/minimap/module/minimap.lua index 69a5b18d..b4e09127 100644 --- a/plugins/minimap/module/minimap.lua +++ b/plugins/minimap/module/minimap.lua @@ -243,10 +243,11 @@ local function update_entity_recipe(entity) end -- Create tag data structure -local function create_chart_tag_data(tag, tick) +local function create_tag_data(tag, start_tick, end_tick) return { tag_number = tag.tag_number, - tick = tick, + start_tick = start_tick, + end_tick = end_tick, force = tag.force.name, surface = tag.surface.name, position = {tag.position.x, tag.position.y}, @@ -295,7 +296,8 @@ local function on_chart_tag_added(event) return end - local tag_data = create_chart_tag_data(tag, game.tick) + local start_tick = game.tick + local tag_data = create_tag_data(tag, start_tick, nil) -- Send to plugin send_chart_tag_data(tag_data) @@ -311,8 +313,16 @@ local function on_chart_tag_modified(event) return end - -- Emit updated tag at current tick - local tag_data = create_chart_tag_data(tag, game.tick) + -- End the old version at current tick + local end_tick = game.tick + local old_tag_data = create_tag_data(tag, nil, end_tick) + send_chart_tag_data(old_tag_data) + + -- Create new tag entry starting at next tick + local start_tick = game.tick + 1 + local tag_data = create_tag_data(tag, start_tick, nil) + + -- Send to plugin send_chart_tag_data(tag_data) end @@ -326,8 +336,9 @@ local function on_chart_tag_removed(event) return end - -- Emit final state at removal tick - local tag_data = create_chart_tag_data(tag, game.tick) + -- End the tag + local end_tick = game.tick + local tag_data = create_tag_data(tag, nil, end_tick) send_chart_tag_data(tag_data) end @@ -461,14 +472,15 @@ local function init() end end - -- Initialize existing chart tags - local existing_tags = force.find_chart_tags(surface) - for _, tag in pairs(existing_tags) do - local tag_data = create_chart_tag_data(tag, game.tick) + -- Initialize existing chart tags + local existing_tags = force.find_chart_tags(surface) + for _, tag in pairs(existing_tags) do + local start_tick = game.tick + local tag_data = create_tag_data(tag, start_tick, nil) - -- Send to plugin - send_chart_tag_data(tag_data) - end + -- Send to plugin + send_chart_tag_data(tag_data) + end -- Initialize existing crafting recipes on this surface and force local crafting_entities = surface.find_entities_filtered{