-
Notifications
You must be signed in to change notification settings - Fork 43
/
remote.lua
70 lines (58 loc) · 2.73 KB
/
remote.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require "resmon"
local mod_gui = require("mod-gui")
local interface = {}
---Allow the remote to query how many entities the ore tracker knows. Prints the results
---to the given player's message log.
---@param player_name_or_index string|number
function interface.how_many_entities_tracked(player_name_or_index)
local player = game.players[player_name_or_index]
player.print({ "", "Tracking ", #storage.ore_tracker.entities, " entities" })
end
---Allow the remote to reset the given player's UI by destroying the HUD root. This usually
---results in the HUD being recreated correctly. Mostly useful in UI development to clean up
---experiments.
---@param player_name_or_index string|number
function interface.reset_ui(player_name_or_index)
local player = game.players[player_name_or_index]
local frame_flow = mod_gui.get_frame_flow(player)
local root = frame_flow.YARM_root
if root and root.valid then root.destroy() end
end
---Allows the remote to learn which filter the given player is using right now. A mod could
---have special handling to change its UI based on YARM being in 'all' versus 'none' mode.
---@param player_name_or_index string|number
---@return string # The name of the filter (@see sites_module.filters)
function interface.get_current_filter(player_name_or_index)
local player = game.players[player_name_or_index]
local player_data = storage.player_data[player.index]
return player_data.ui.active_filter or 'none'
end
---Allows the remote to change the given player's filter. A mod could set a player's YARM
---to "none" mode temporarily to give itself more space to display a temporary UI in YARM's
---space.
---@param player_name_or_index string|number
---@param new_filter string Name of the new filter
---@return string old_filter Name of the old filter
function interface.set_filter(player_name_or_index, new_filter)
local player = game.players[player_name_or_index]
local player_data = storage.player_data[player.index]
local old_filter = player_data.ui.active_filter
if not resmon.sites.filters[new_filter] then
log(string.format("Warning: YARM does not have a filter named '%s'", new_filter))
return old_filter
end
player_data.ui.active_filter = new_filter
resmon.ui.update_filter_buttons(player)
resmon.ui.update_player(player)
return old_filter
end
---Allow a remote to find out the event ID for `on_site_updated`, which is raised on every site
---recount to update consumers about the site contents.
function interface.get_on_site_updated_event_id()
return on_site_updated
end
---Allow a remote to read all of YARM's `storage`, mostly for debugging purposes.
function interface.get_global_data()
return storage
end
remote.add_interface("YARM", interface)