local lang = require("lang.lang") local druid = require("druid.druid") local event = require("event.event") local panthera = require("panthera.panthera") local window_animation_panthera = require("example.examples.windows.window_animation_panthera") ---@class examples.window_language: druid.widget ---@field text_header druid.text ---@field button_close druid.button ---@field lang_buttons table ---@field grid druid.grid ---@field on_language_change event ---@field animation panthera.animation local M = {} ---Color: #F0FBFF local DEFAULT_LANGUAGE_COLOR = vmath.vector4(240/255, 251/255, 255/255, 1.0) ---Color: #E6DF9F local SELECTED_LANGUAGE_COLOR = vmath.vector4(230/255, 223/255, 159/255, 1.0) function M:init() self.lang_buttons = {} self.created_nodes = {} self.prefab = self:get_node("button_prefab") gui.set_enabled(self.prefab, false) self._current_lang_id = lang.get_lang() self.button_close = self.druid:new_button("button_close", self.on_button_close) self.druid:new_lang_text("text_header", "ui_language") self.grid = self.druid:new_grid("content", self.prefab, 2) self.grid.style.IS_DYNAMIC_NODE_POSES = true self.animation = panthera.create_gui(window_animation_panthera, self:get_template(), self:get_nodes()) panthera.play(self.animation, "open") self:load_langs() self.on_language_change = event.create() end function M:on_remove() for index = 1, #self.created_nodes do local nodes = self.created_nodes[index] for _, node in pairs(nodes) do gui.delete_node(node) end end end function M:load_langs() local languages = lang.get_langs() for index = 1, #languages do local lang_id = languages[index] local template = self:get_template() if template and template ~= "" then template = template .. "/" end local prefab_nodes = gui.clone_tree(self.prefab) local root = prefab_nodes[template .. "button_prefab"] local button_node = prefab_nodes[template .. "button/root"] local text = prefab_nodes[template .. "button/text"] local button = self.druid:new_button(button_node, self.on_language_button, lang_id) self.druid:new_lang_text(text, "ui_language_" .. lang_id) gui.set_enabled(root, true) self.grid:add(root) self.lang_buttons[lang_id] = button table.insert(self.created_nodes, prefab_nodes) end do -- Update window size to fit all languages local height = self.grid:get_size().y gui.set(self:get_node("window"), "size.y", height + 110) gui.set(self:get_node("panel_header"), "position.y", (height + 110)/2) end do -- Select current language button local current_lang_button = self.lang_buttons[self._current_lang_id] gui.animate(current_lang_button.node, "color", SELECTED_LANGUAGE_COLOR, gui.EASING_OUTQUAD, 0.2) end end function M:on_button_close() panthera.play(self.animation, "close") end function M:on_language_button(lang_id) local current_lang_button = self.lang_buttons[self._current_lang_id] local new_lang_button = self.lang_buttons[lang_id] self._current_lang_id = lang_id lang.set_lang(lang_id) druid.on_language_change() self.on_language_change:trigger(lang_id) gui.animate(current_lang_button.node, "color", DEFAULT_LANGUAGE_COLOR, gui.EASING_OUTQUAD, 0.2) gui.animate(new_lang_button.node, "color", SELECTED_LANGUAGE_COLOR, gui.EASING_OUTQUAD, 0.2) end return M