mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2024-12-30 23:17:53 +02:00
109 lines
3.2 KiB
Lua
109 lines
3.2 KiB
Lua
local Tabs = require 'comfy_panel.main'
|
|
local Token = require 'utils.token'
|
|
|
|
local module_name = 'Map Scores'
|
|
|
|
local Public = {}
|
|
|
|
local function get_sorted_score()
|
|
local list = {}
|
|
for player_index, score_points in pairs(global.custom_highscore.score_list) do
|
|
table.insert(list, {name = game.players[player_index].name, points = score_points})
|
|
end
|
|
local list_size = #list
|
|
if list_size == 0 then
|
|
return list
|
|
end
|
|
table.sort(
|
|
list,
|
|
function(a, b)
|
|
return a.points > b.points
|
|
end
|
|
)
|
|
return list
|
|
end
|
|
|
|
local function score_list(data)
|
|
local frame = data.frame
|
|
frame.clear()
|
|
frame.style.padding = 4
|
|
frame.style.margin = 0
|
|
|
|
local line = frame.add {type = 'line'}
|
|
line.style.top_margin = 4
|
|
line.style.bottom_margin = 4
|
|
|
|
local scroll_pane = frame.add {type = 'scroll-pane', name = 'scroll_pane', direction = 'vertical', horizontal_scroll_policy = 'never', vertical_scroll_policy = 'auto'}
|
|
scroll_pane.style.minimal_width = 780
|
|
scroll_pane.style.maximal_height = 360
|
|
scroll_pane.style.minimal_height = 360
|
|
|
|
local t = scroll_pane.add {type = 'table', column_count = 3}
|
|
|
|
local label = t.add({type = 'label', caption = '#'})
|
|
label.style.minimal_width = 30
|
|
label.style.font = 'heading-2'
|
|
label.style.padding = 3
|
|
local player_label = t.add({type = 'label', caption = 'Player:'})
|
|
player_label.style.minimal_width = 160
|
|
player_label.style.font = 'heading-2'
|
|
player_label.style.padding = 3
|
|
local desc_label = t.add({type = 'label', caption = global.custom_highscore.description})
|
|
desc_label.style.minimal_width = 160
|
|
desc_label.style.font = 'heading-2'
|
|
desc_label.style.padding = 3
|
|
|
|
for key, score in pairs(get_sorted_score()) do
|
|
local key_label = t.add({type = 'label', caption = key})
|
|
key_label.style.font = 'heading-2'
|
|
key_label.style.padding = 1
|
|
local scoreName_label = t.add({type = 'label', caption = score.name})
|
|
scoreName_label.style.font = 'heading-2'
|
|
scoreName_label.style.padding = 1
|
|
scoreName_label.style.font_color = game.players[score.name].chat_color
|
|
local points_label = t.add({type = 'label', caption = score.points})
|
|
points_label.style.font = 'heading-2'
|
|
points_label.style.padding = 1
|
|
end
|
|
end
|
|
|
|
local score_list_token = Token.register(score_list)
|
|
|
|
function Public.set_score_description(str)
|
|
global.custom_highscore.description = str
|
|
end
|
|
|
|
function Public.set_score(player, count)
|
|
local score_lists = global.custom_highscore.score_list
|
|
score_lists[player.index] = count
|
|
end
|
|
|
|
function Public.get_score(player)
|
|
local score_lists = global.custom_highscore.score_list
|
|
if not score_lists[player.index] then
|
|
score_lists[player.index] = 0
|
|
end
|
|
return score_lists[player.index]
|
|
end
|
|
|
|
function Public.reset_score()
|
|
global.custom_highscore = {
|
|
description = 'Won rounds:',
|
|
score_list = {}
|
|
}
|
|
end
|
|
|
|
local function on_init()
|
|
global.custom_highscore = {
|
|
description = 'Won rounds:',
|
|
score_list = {}
|
|
}
|
|
end
|
|
|
|
Tabs.add_tab_to_gui({name = module_name, id = score_list_token, admin = false})
|
|
|
|
local event = require 'utils.event'
|
|
event.on_init(on_init)
|
|
|
|
return Public
|