openlang

Как случайно выбирать варианты enum в GDScript на Godot 3.3, не перечисляя их?

Вот объявление enum, которое я использую в GDScript:

enum Motion = { IDLE, STEPPING, DASHING }

Хочу случайно выбирать вариант enum, не перечисляя все возможные варианты, чтобы позже добавлять новые, не редактируя код случайного выбора.

Вот один из опробованных подходов:

Motion.get(randi() % Motion.size())

И другой:

Motion[randi() % Motion.size()]

Оба не работают. Один возвращает Null, другой сообщает "Invalid get index '1' (on base: 'Dictionary')."

Как добиться результата так, чтобы это действительно работало?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Это можно сделать таким выражением:

    Motion.keys()[randi() % Motion.size()]

    Работает потому, что keys() превращает словарь Motion в массив и позволяет обращаться к элементам через [].

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Свёртка пустого вектора возвращает нейтральный элемент

    Свёртка пустого вектора. APL отвечает. У каждой примитивной функции свой нейтральный элемент. Ноль для плюса. Единица для умн…

    Ответы 3Последняя активность apl
  2. Можно ли индексировать списки Gleam с конца в обратном направлении?

    Мне нужно разбивать строки с разным количеством разделителей -. Нужен четвёртый элемент с конца, а результаты со слишком малы…

    Ответы 2Последняя активность gleam
  3. Большинство моих макросов стали const и static

    Nim позволяет легко писать макросы. В этом и проблема. Прежде чем браться за macro, проверь инструменты подешевле. const вычи…

    Ответы 3Последняя активность nim