Я хотел бы реализовать то, что я знаю как Систему CVAR, я не совсем уверен в том, какое официальное название у нее (если есть).
По сути, это система, используемая в некоторых программах ивидеоигры, где пользователь может снять консоль и ввести команду, например, «переменная 500», чтобы установить эту переменную равной 500. Примеры этого можно найти в любой игре Half-Life, играх Doom и Quake и многих других,Общая идея, по-видимому, заключается в том, чтобы скрыть базовую архитектуру, но при этом разрешить защищенный доступ, например, можно просмотреть значение, скажем, силы тяжести, но не изменить Это.Некоторые из этих значений также могут быть функциями, например, пользователь может ввести «создать» для создания типа врага в своем местоположении или в другом указанном местоположении.
Просмотр Half-Life 2 SDKи из того, что я помню в GoldSrc SDK, кажется, что они, по крайней мере, реализовали «пометки» своего рода, когда определенные команды будут работать только при определенных условиях, например, если задано другое значение или если у пользователя есть некоторый уровень разрешений,
Первоначально я думал о том, чтобы создать словарь или объект, подобный этому, и использовать его для привязки строковых значений к делегатам функций, а также для поддержания своего рода «уровня защиты», чтобы ограничить использованиеопределенные команды.Однако это кажется довольно громоздким, так как я считаю, что мне нужно было бы пройти и добавить новую запись вручную для каждого значения или функции, которую я хотел реализовать.Я также не знаю, даст ли это мне нужный мне уровень управления.
В идеале я бы хотел, чтобы класс системы CVAR, а также функция Register, которая могла бы его приниматьскажем, делегат переменной / функции, строка для доступа к ней и любой уровень защиты, который мне нужен.Таким образом, я могу добавлять то, что мне нужно, так как я их вижу, так что все по-прежнему находится в связанных классах и файлах.
Я просто ищу некоторые идеи здесь, поэтому мои вопросы:
- Кто-нибудь когда-либо делал что-то подобное раньше, и если да, то как?
- Будет ли моя реализация работать?(Теоретически, если нет, можете ли вы придумать лучший способ?)
- Если кто-то более осведомлен о том, как это делает одно из упомянутых ранее названий, можете ли вы остановиться на этом немного подробнее?Кажется, трудно найти документацию по ним.
Я на самом деле не ищу конкретный код, просто больше структурирования дизайна.И это не обязательно должно быть «коммерчески» или работать как другой, мне просто нужно что-то, чтобы заставить меня работать.