Еще 1 вопрос, который тормозит написание стандартной библиотеки и видимо требует поддержки на платформенном уровне.
Для примера рассмотрим всего два простых признака "низкий" и "высокий".
Эти признаки влияют на множество действий с предметами. Расположенные высоко предметы недоступны, их видно но нельзя взять или потрогать. По умолчанию считаем высоким всё что выше человеческого роста и до чего нельзя дотянуться.
А теперь почувствуйте разницу:
"низкий шкаф" - доступен как сам шкаф, так и предметы на нем.
"высокий шкаф" - шкаф доступен! хоть он и высокий но стоит то на полу. А вот предметы на нем уже не доступны.
"низкий стол", "высокий стол" - вообще без разницы, всё доступно
"высокий потолок" - тут признак обозначает расположение, а не размер предмета по вертикали. Расположен высоко, недоступен.
"низкий потолок" - доступен, можно потрогать
"низкое небо" - хоть оно и низкое, расположено высоко, потрогать нельзя.
"вы низкий человек, я вас презираю" - вообще из другой оперы
В общем целый зоопарк... наверняка есть еще варианты.
В текущей версии для каждого значения слова "высокий" необходимо создать отдельный признак:
признак высокий:по_размеру{} признак высокий:по_расположению{} признак высокий:как_недоступный{}
Но это означает что в коде уже нельзя написать Х.высокий = да, нужно указывать точное имя признака:
шкаф.высокий:по_размеру = да шкаф.высокий:по_расположению = нет шкаф.высокий:как_недоступный = нет потолок.высокий:по_расположению = да потолок.высокий:как_недоступный = да
Прозрачность кода теряется напрочь... Хотелось бы писать в коде игры Х.высокий = да, и пусть система сама разбирается что для этого конкретного X значит признак "высокий".