// штуки для создания сидескреенов // чекбокс и слидер с обвязкой и подгрузкой строк, добавляемые на панельку // установка и считывание значений реализованы через акции-каллбаки public static PPanel AddCheckBox(this PPanel parent, string prefix, string name, Action <bool> onChecked, out Action <bool> setChecked, out Action <bool> setActive) { prefix = (prefix + name).ToUpperInvariant(); GameObject cb_go = null; var cb = new PCheckBox(name) { CheckColor = PUITuning.Colors.ComponentLightStyle, CheckSize = new Vector2(26f, 26f), Text = Strings.Get(prefix + ".NAME"), TextAlignment = TextAnchor.MiddleLeft, TextStyle = PUITuning.Fonts.TextDarkStyle, ToolTip = Strings.Get(prefix + ".TOOLTIP"), OnChecked = (go, state) => { // переворачиваем предыдующее значение bool @checked = state == PCheckBox.STATE_UNCHECKED; PCheckBox.SetCheckState(go, @checked ? PCheckBox.STATE_CHECKED : PCheckBox.STATE_UNCHECKED); onChecked?.Invoke(@checked); // внесапно, численное значение состояния чекбокса совпало с индексом таблицы звуков KFMOD.PlayUISound(WidgetSoundPlayer.getSoundPath(ToggleSoundPlayer.default_values[state])); }, }.AddOnRealize(realized => cb_go = realized); setChecked = @checked => { if (cb_go != null) { PCheckBox.SetCheckState(cb_go, @checked ? PCheckBox.STATE_CHECKED : PCheckBox.STATE_UNCHECKED); } }; setActive = on => cb_go?.SetActive(on); return(parent.AddChild(cb)); }