------------------------------------------------------------------------------- ---Class to build rule edition dialog ---@class RuleEdition RuleEdition = newclass(Form) ------------------------------------------------------------------------------- ---On initialization function RuleEdition:onInit() self.panelCaption = ({"helmod_rule-edition-panel.title"}) self.parameterLast = string.format("%s_%s",self.classname,"last") end ------------------------------------------------------------------------------- ---On Style ---@param styles table ---@param width_main number ---@param height_main number function RuleEdition:onStyle(styles, width_main, height_main) styles.flow_panel = { minimal_height = 500, maximal_height = height_main, } end ------------------------------------------------------------------------------- ---On update ---@param event LuaEvent function RuleEdition:onUpdate(event) self:updateRule(event) self:updateAction(event) end local rule_mod = nil local rule_name = nil local rule_category = nil local rule_type = nil ------------------------------------------------------------------------------- ---Update rule ---@param event LuaEvent function RuleEdition:updateRule(event) local rule_panel = self:getFramePanel("rule_panel") rule_panel.clear() local rule_table = GuiElement.add(rule_panel, GuiTable("list-data"):column(2):style("helmod_table_rule")) ---mod local mod_list = {} for name, version in pairs(game.active_mods) do table.insert(mod_list, name) end if rule_mod == nil then rule_mod = mod_list[1] end GuiElement.add(rule_table, GuiLabel("label-mod"):caption({"helmod_rule-edition-panel.mod"})) GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "mod"):items(mod_list, rule_mod)) ---name local helmod_rule_manes = {} for name,rule in pairs(helmod_rules) do table.insert(helmod_rule_manes,name) end if rule_name == nil then rule_name = helmod_rule_manes[1] end GuiElement.add(rule_table, GuiLabel("label-name"):caption({"helmod_rule-edition-panel.name"})) GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "name"):items(helmod_rule_manes, rule_name)) ---category local helmod_rule_categories = {} for name,rule in pairs(helmod_rules[rule_name].categories) do table.insert(helmod_rule_categories,name) end if rule_category == nil then rule_category = helmod_rule_categories[1] end GuiElement.add(rule_table, GuiLabel("label-category"):caption({"helmod_rule-edition-panel.category"})) GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "category"):items(helmod_rule_categories, rule_category)) ---type local helmod_rule_types = helmod_rules[rule_name].categories[rule_category] if rule_type == nil then rule_type = helmod_rule_types[1] end GuiElement.add(rule_table, GuiLabel("label-type"):caption({"helmod_rule-edition-panel.type"})) GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "type"):items(helmod_rule_types, rule_type)) GuiElement.add(rule_table, GuiLabel("label-value"):caption({"helmod_rule-edition-panel.value"})) GuiElement.add(rule_table, GuiButton("choose", "value"):choose("entity")) GuiElement.add(rule_table, GuiLabel("label-excluded"):caption({"helmod_rule-edition-panel.excluded"})) local checkbox = GuiElement.add(rule_table, GuiCheckBox("excluded"):state(false)) if helmod_rules[rule_name].excluded_only then checkbox.state=true checkbox.enabled=false end end ------------------------------------------------------------------------------- ---Update action ---@param event LuaEvent function RuleEdition:updateAction(event) local action_panel = self:getFramePanel("action_panel") action_panel.clear() local action_panel = GuiElement.add(action_panel, GuiTable("table_action"):column(2)) GuiElement.add(action_panel, GuiButton(self.classname, "save"):caption({"helmod_button.save"})) end ------------------------------------------------------------------------------- ---On event ---@param event LuaEvent function RuleEdition:onEvent(event) if User.isAdmin() then if event.action == "dropdown" then if event.item1 == "mod" then rule_mod = GuiElement.getDropdownSelection(event.element) end if event.item1 == "name" then rule_name = GuiElement.getDropdownSelection(event.element) end if event.item1 == "category" then rule_category = GuiElement.getDropdownSelection(event.element) end if event.item1 == "type" then rule_type = GuiElement.getDropdownSelection(event.element) end self:updateRule(event) end if event.action == "save" then local rule_panel = self:getFramePanel("rule_panel") local rule_table = rule_panel["list-data"] local rule_value = rule_table["choose=value"].elem_value local rule_excluded = rule_table["excluded"].state if rule_value ~= nil then if rule_type == "entity-type" then rule_value = EntityPrototype(rule_value):getType() end if rule_type == "entity-group" then rule_value = EntityPrototype(rule_value):native().group.name end if rule_type == "entity-subgroup" then rule_value = EntityPrototype(rule_value):native().subgroup.name end else rule_value = "all" end local rule = Model.newRule(rule_mod, rule_name, rule_category, rule_type, rule_value, rule_excluded, #Model.getRules()) local rules = Model.getRules() table.insert(rules, rule) self:close() Controller:send("on_gui_refresh", event) end end end