mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2026-08-13 00:45:11 +09:00
Fix gui element registration and iter removal
The top, left and relative element tables are keyed by the define, but the duplicate registration assert looked up `define.name`, so it never fired. GuiIter.remove_element indexed `registered_scopes` by player index instead of the scope elements it had just fetched, so it removed nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -88,7 +88,7 @@ end
|
|||||||
--- @param define ExpElement
|
--- @param define ExpElement
|
||||||
--- @param visible Gui.VisibleCallback | boolean | nil
|
--- @param visible Gui.VisibleCallback | boolean | nil
|
||||||
function Gui.add_top_element(define, visible)
|
function Gui.add_top_element(define, visible)
|
||||||
assert(Gui.top_elements[define.name] == nil, "Element is already added to the top flow")
|
assert(Gui.top_elements[define] == nil, "Element is already added to the top flow")
|
||||||
Gui.top_elements[define] = visible or false
|
Gui.top_elements[define] = visible or false
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -96,7 +96,7 @@ end
|
|||||||
--- @param define ExpElement
|
--- @param define ExpElement
|
||||||
--- @param visible Gui.VisibleCallback | boolean | nil
|
--- @param visible Gui.VisibleCallback | boolean | nil
|
||||||
function Gui.add_left_element(define, visible)
|
function Gui.add_left_element(define, visible)
|
||||||
assert(Gui.left_elements[define.name] == nil, "Element is already added to the left flow")
|
assert(Gui.left_elements[define] == nil, "Element is already added to the left flow")
|
||||||
Gui.left_elements[define] = visible or false
|
Gui.left_elements[define] = visible or false
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -105,7 +105,7 @@ end
|
|||||||
--- @param define ExpElement
|
--- @param define ExpElement
|
||||||
--- @param visible Gui.VisibleCallback | boolean | nil
|
--- @param visible Gui.VisibleCallback | boolean | nil
|
||||||
function Gui.add_relative_element(define, visible)
|
function Gui.add_relative_element(define, visible)
|
||||||
assert(Gui.relative_elements[define.name] == nil, "Element is already added to the relative flow")
|
assert(Gui.relative_elements[define] == nil, "Element is already added to the relative flow")
|
||||||
Gui.relative_elements[define] = visible or false
|
Gui.relative_elements[define] = visible or false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -90,13 +90,16 @@ function GuiData._metatable.__index(self, key)
|
|||||||
assert(type(key) == "userdata", "Index type '" .. ExpUtil.get_class_name(key) .. "' given to GuiData. Must be of type userdata.")
|
assert(type(key) == "userdata", "Index type '" .. ExpUtil.get_class_name(key) .. "' given to GuiData. Must be of type userdata.")
|
||||||
local object_name = key.object_name --- @diagnostic disable-line assign-type-mismatch
|
local object_name = key.object_name --- @diagnostic disable-line assign-type-mismatch
|
||||||
if object_name == "LuaGuiElement" then
|
if object_name == "LuaGuiElement" then
|
||||||
|
--- @cast key LuaGuiElement
|
||||||
local data = self._raw.element_data
|
local data = self._raw.element_data
|
||||||
local player_elements = data and data[key.player_index]
|
local player_elements = data and data[key.player_index]
|
||||||
return player_elements and player_elements[key.index]
|
return player_elements and player_elements[key.index]
|
||||||
elseif object_name == "LuaPlayer" then
|
elseif object_name == "LuaPlayer" then
|
||||||
|
--- @cast key LuaPlayer
|
||||||
local data = self._raw.player_data
|
local data = self._raw.player_data
|
||||||
return data and data[key.index]
|
return data and data[key.index]
|
||||||
elseif object_name == "LuaForce" then
|
elseif object_name == "LuaForce" then
|
||||||
|
--- @cast key LuaForce
|
||||||
local data = self._raw.force_data
|
local data = self._raw.force_data
|
||||||
return data and data[key.index]
|
return data and data[key.index]
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -166,7 +166,6 @@ end
|
|||||||
function GuiIter.get_tracked_elements(scope, filter)
|
function GuiIter.get_tracked_elements(scope, filter)
|
||||||
local class_name = ExpUtil.get_class_name(filter)
|
local class_name = ExpUtil.get_class_name(filter)
|
||||||
if class_name == "nil" then
|
if class_name == "nil" then
|
||||||
--- @cast filter nil
|
|
||||||
return GuiIter.all_elements(scope)
|
return GuiIter.all_elements(scope)
|
||||||
elseif class_name == "LuaPlayer" then
|
elseif class_name == "LuaPlayer" then
|
||||||
--- @cast filter LuaPlayer
|
--- @cast filter LuaPlayer
|
||||||
@@ -189,7 +188,6 @@ end
|
|||||||
function GuiIter.get_online_elements(scope, filter)
|
function GuiIter.get_online_elements(scope, filter)
|
||||||
local class_name = ExpUtil.get_class_name(filter)
|
local class_name = ExpUtil.get_class_name(filter)
|
||||||
if class_name == "nil" then
|
if class_name == "nil" then
|
||||||
--- @cast filter nil
|
|
||||||
return GuiIter.filtered_elements(scope, game.connected_players)
|
return GuiIter.filtered_elements(scope, game.connected_players)
|
||||||
elseif class_name == "LuaPlayer" then
|
elseif class_name == "LuaPlayer" then
|
||||||
--- @cast filter LuaPlayer
|
--- @cast filter LuaPlayer
|
||||||
@@ -235,7 +233,7 @@ end
|
|||||||
function GuiIter.remove_element(scope, player_index, element_index)
|
function GuiIter.remove_element(scope, player_index, element_index)
|
||||||
local scope_elements = registered_scopes[scope]
|
local scope_elements = registered_scopes[scope]
|
||||||
if not scope_elements then return end
|
if not scope_elements then return end
|
||||||
local player_elements = registered_scopes[player_index]
|
local player_elements = scope_elements[player_index]
|
||||||
if not player_elements then return end
|
if not player_elements then return end
|
||||||
player_elements[element_index] = nil
|
player_elements[element_index] = nil
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ local function move_toolbar_button(player, item, offset)
|
|||||||
|
|
||||||
-- Swap the position in the list
|
-- Swap the position in the list
|
||||||
local list = assert(item.parent)
|
local list = assert(item.parent)
|
||||||
local other_item = list.children[new_index]
|
local other_item = assert(list.children[new_index])
|
||||||
list.swap_children(old_index, new_index)
|
list.swap_children(old_index, new_index)
|
||||||
|
|
||||||
-- Swap the position in the top flow, offset by 1 because of settings button
|
-- Swap the position in the top flow, offset by 1 because of settings button
|
||||||
@@ -499,7 +499,8 @@ function Toolbar._create_elements(player)
|
|||||||
-- Reset the state of the previous last child
|
-- Reset the state of the previous last child
|
||||||
local children = toolbar_list.children
|
local children = toolbar_list.children
|
||||||
if previous_last_index > 0 then
|
if previous_last_index > 0 then
|
||||||
elements.toolbar_list_item.data[children[previous_last_index]].move_item_down.enabled = true
|
local previous_last = assert(children[previous_last_index])
|
||||||
|
elements.toolbar_list_item.data[previous_last].move_item_down.enabled = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Set the state of the move buttons for the first and last element
|
-- Set the state of the move buttons for the first and last element
|
||||||
|
|||||||
Reference in New Issue
Block a user