На этом уроке мы рассмотрим операторы условного ветвления if/else и switch
Подстатья
18 189
5
побороть ограничение на И + ИЛИ
Ага, но через арифметику - это шуточный вариант. В Реконе и Far Horizons используют:
bool Con(bool a, bool b) {return a && b;} //КОНЪЮНКЦИЯ
bool Dis(bool a, bool b) {return a || b;} //ДИЗЪЮНКЦИЯ
То есть некорректное if( (a && b) || c) можно превратить в работающее if( Con(a, b) || c)
Злоупотреблять Con/Dis не стоит, код может стать неудобочитаемым, но в иных случаях всё понятно, можно не плодить лишние предваряющие bool'ы.
Также важно помнить про оптимизацию (сначала базовые чеки релевантности, потом большие функции), о ней в гайде ты написал, и, например, что проверка значений атрибута обычно идёт в связке с проверкой его наличия (если только заведомо не известно, что он есть).
26
nazarpunk, да.
Кстати, сложениями и умножениями можно закостылитьпобороть ограничение на И + ИЛИ
if(((a)*(b) + с) - (a)*(b)*(c))
где операция И - это a x b; операция ИЛИ - это a+b-(a x b)
30
использование логических И и ИЛИ в одном выражении вызывает ошибку
Я надеюсь сложение и умножение разрешено в одном выражении?
26
Вышла новая версия!
Прокрутить к ресурсу
Внесены подсказанные Rosarak правки:
  • особенности ветвлений else if вне интерфейсов
  • выполнение кода оператором switch вне конструкций case-break
  • альтернатива лейблу default для последних версий Storm Engine
  • третий вариант обхода ограничения на логические И и ИЛИ в одном выражении
В ходе этого урока мы рассмотрим реализацию так называемых объектов, которые служат аналогом объектов класса в скриптовой части игры.
Подстатья
5 158
26
Вышла новая версия!
Прокрутить к ресурсу
  • Описана проблема при обращении к атрибуту
Спасибо камраду Rosarak
26
Вышла новая версия!
Прокрутить к ресурсу
  • Добавлен раздел, описывающий функции для работы с атрибутами объекта.
позже будет добавлен раздел практических примеров работы с объектами
В этом уроке мы рассмотрим доступные в скриптах типы данных и как с ними работать.
Подстатья
20 269
30
avuremybe, в плюсах такое же поведение:
int main()
{
    
    int a = 0;
    std::cout<< (a == true) << (a == false) << (a ? 1 : 0) << "\n"; // 010
    
    int b = 1;
    std::cout<< (b == true) << (b == false) << (b ? 1 : 0) << "\n"; // 101
    
    int c = 2;
    std::cout<< (c == true) << (c == false) << (c ? 1 : 0) << "\n"; // 001
    
    int d = -2;
    std::cout<< (d == true) << (d == false) << (d ? 1 : 0) << "\n"; // 001

    return 0;
}
26
nazarpunk, совместно с Rasarak удалось разгадать тайну работы bool в этой шайтан-машине:
int a;

if (a == true) {}	// при таком обращении 1 возвращает true, а все остальные числа - false
if (a) {}			// а при таком - 0 возвращает false, a все остальные числа true
26
Вышла новая версия!
Прокрутить к ресурсу
Добавлено описание следующих нюансов:
  • Уточнение принимаемых значений bool, если передавать в него числа.
  • Передача float в bool.
  • Прямое присвоение float строке.
  • Особенности работы string.
В данном уроке мы познакомимся с массивами переменных и научимся с ними работать.
Подстатья
11 157
26
Rosarak, мысль интересная.
Для ситуаций, когда очень нужно и без этого никак - вполне себе решение.