Добавлен Pray_AD,
опубликован
Предлагаю обсудить представление игровых объектов
- Каждая новая логика реализуется новым классом с новой реализацией, для контроля общей логики используются наследование от абстрактных классов, например IFuel IChest. Отличная организация, дублирование кода. Нет возможности изменять логику -> все объекты одного класса по-сути идентичны (в предыдущей реализации на с# использовалось это, экземпляры создавались из текстового json файла через рефлексию)
- Есть некоторые очень глобальные классы, например Block Monster Item. У этих классов, для реализации разного поведения есть некоторый список скриптов. Например
list<functor> update
void update() {
foreach up in update do up();
}
т.е. someblock.update.add(furnance_functor); делает из чего угодно печку. Средняя организация, возможность комибиинровать логику без компиляции, но некоторые ограничения на логику
- Есть некоторый набор текстовых флагов, например list<string> flags. Есть некоторый глобальный класс, который делает что-то вроде
void update() {
if some.sontainsFlag("fuel") do something;
}
Добавление логики делается добавлением флага. Плохая организация, но зато можно реализовать логику любой сложности. Например аи работает примерно так. Флаг чего монстр боится, флаг, от чего злится и т.д. Позволяет делать совершенно новую логику в блокноте без компиляции
- ?
сейчас реализация -- это что-то среднее между 1, 2 и 3. Есть флаги для кода нативной логики и есть скрипты на js
Хотелось бы услышать ваше мнение по этому поводу.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Doc
Отредактирован Pray_AD
Не знаю почему там выбран именно этот способ, вообще качество кода в этих проектов не лучшее да и решения, но сами проекты прекрасны
ПС. Кажется я осознал для чего можно использовать Injection