Я сделал это так:
- При щелчке по прибору (т.е. смене фокуса) вызывается метод установки начального значения чекбокса, т.е. если щелкнули по выключенному прибору, то и чекбокс, что вполне логично, будет в "выкл" положении.
- А на OnValueChanged этого чекбокса соответственно повешен метод переключения этого прибора
Иными словами чекбокс одновременно отображает текущее состояние объекта и позволяет его менять.
Глобальная логическая проблема: для установки чекбокса в начальное положение (п.1) нужно вызвать что-то вроде
Синтаксис:
Используется csharp
checkbox.isOn = equipment.Enabled;
Т.е. приходится менять его значение, а значит вызывается OnValueChanged, а значит и метод переключения прибора.
Разумеется у меня все чуть сложнее: кроме чекбокса есть еще слайдер, положение слайдера связано с чекбоксом (питание оборудования и включен/выключен), пункт 1 делается с помощью события и т.д. В результате эта проблема порождает кучу багов (например был самонажимающийся чекбокс, циклично переключающий самого себя).
Конечно, можно нагородить костылей (уже начал). Но такое положение вещей меня абсолютно не устраивает - первая игра, а уже костыли, fu.
В общем нужно отделить установку значения из кода и реального, которое игрок делает. Может можно как-то подписаться на событие переключения мышкой/тапом?