Название: Цепочка boolean для юзверя Отправлено: Igors от Июнь 20, 2016, 13:33 Добрый день
Есть/рисуется "схема" из пр-ков (ноды). Каждый нод имеет входную и выходную бубочки (триггера). При нажатии на бубочку она выделяется (красная) и в др панели появляются тип и опции триггера, которые можно менять. Опций немного, обычно триггер - простое условие, напр "время истекло", "расстояние до цели меньше заданного" и.т.п. Однако вариантов (типов) триггеров много, и это число будет расти. Хотелось бы дать юзеру возможность создавать "составные" триггера, напр триггер срабатывает если "время истекло" ИЛИ "расстояние меньше". Понятно что это можно сделать в виде еще одного графа - но нет ли более компактных (или менее развесистых) решений? Спасибо Название: Re: Цепочка boolean для юзверя Отправлено: Racheengel от Июнь 29, 2016, 19:01 Ну, разве что блоки размещать друг в друге и объединять условиями И или ИЛИ.
Как матрешку. Название: Re: Цепочка boolean для юзверя Отправлено: Igors от Июнь 30, 2016, 09:20 Ну, разве что блоки размещать друг в друге и объединять условиями И или ИЛИ. А как это выглядит? (можно грубый эскиз в дызайнере или просто словами)Как матрешку. Название: Re: Цепочка boolean для юзверя Отправлено: Racheengel от Июнь 30, 2016, 10:37 Ну допустим есть комбобокс, в котором можно выбирать доступные триггеры.
И есть кнопки "добавить условие" и "добавить блок". Когда выбирается "блок", на месте комбобокса появляется групбокс, в котором расположен комбобокс с триггерами и снова те же 2 кнопки. Когда выбирается "добавить условие", то ниже добавляется еще один комбик с вариантами "И", "ИЛИ", и пр. А под ним еще один комбик с триггерами. Примерно так: 1. [Тут триггеры] [+условие] [+блок][-удалить] [И/ИЛИ] 2. [Тут триггеры] [+условие] [+блок][-удалить] [И/ИЛИ] 3. (а тут блок:) .......................................................[-удалить] | 1. [Тут триггеры] [+условие] [+блок][-удалить]| | [И/ИЛИ] | | 2. [Тут триггеры] [+условие] [+блок][-удалить]| ....................................................... Название: Re: Цепочка boolean для юзверя Отправлено: Igors от Июль 02, 2016, 15:32 Когда выбирается "блок", на месте комбобокса появляется групбокс, в котором расположен комбобокс с триггерами и снова те же 2 кнопки. "Ни асилил" :). Ладно, поговорим о другом чтобы не плодить темы (тем более картинка подходит)Тут вообще с архитектурой(?) испытываю трудности. Как всегда, сначала все казалось простым. Есть "нод" (какое-то действие) которое имеет 2 триггера, входной и выходной. Пример Нод 1 - char кивает головой. Нод 2 - char идет Вроде все хорошо. Юзер может соединить ноды параллельно (сразу идет и кивает) или последовательно (сначала кивает, потом идет, или наоборот). И вот тут начинают выползать всякие мелкие но противные детали. Действия (выполняемые нодами) разные. "Идет" имеет неопределенную продолжительность, да, все как задумывалось, нужен выходной триггер чтобы его завершить. А вот "Кивает головой" - нет, это действие разовое и длится лишь некоторое время. Для него выходной триггер обычно ни пришей-ни пристегни, только мешает. Ну ладно, добавил новый тип триггера "auto" который автоматом возвращает true если действие закончилось. Заметим что с "академической" точки зрения такое решение не очень хорошо - триггер уже зависит от нода. Но тут выясняется что часто нужно объединить разовые действия в группы. Напр char может кивать головой неск раз, причем это может обыгрываться всяко-разно. Напр выполнить последовательность из нескольких разных кивков: каждый по разу или случайным образом выбирая новый. И тут я маленько растерялся - куда же поселить этот ф-ционал группы (набора неск действий)? В сам нод - вполне реально, ну просто табличка. Но как-то не нравится. Вариантов "как выполнять группу" явно много, получается нод загроможден подробностями которые могут быть и не нужны (если просто 1 действие). В триггер - ну явно "не туда". Городить еще какую-то сущность (напр "оператор") - ну может быть, но я не представляю как. Что посоветуете? Название: Re: Цепочка boolean для юзверя Отправлено: Old от Июль 02, 2016, 16:02 Node - это базовый класс действий, от которого наследуются остальные.
Первый наследник это, например, Action - это одиночное действие (кивнуть, шагнуть, моргнуть). Другой наследник это Group - набор нод. В зависимости от выбранной стратегии выполняет последовательность действий. Стратегии можно менять в наследниках Group, но лучше выделить это в отдельный класс, объекты которого будут выбирать последовательность действий. Действие "идти" можно получить поместив в группу два одиночных действия шаг левой и шаг правой ногой, со стратегией циклического их выполнения. |