Неделя хардкода 8
Привет =)
Я делаю новую игру на libgdx с 20-го апреля.
Игра - action/rpg в мрачном сэттинге для мобильников. Слабых мобильников ;-)
Игры написанные не руками из жопы идут на всех устройствах.
Исходный код: http://github.com/cyberbach/likehunters
За прошедшую неделю я сделал:
- сделал голый проект/заготовочку на фреймворке libgdx
- подключил/настроил физику Bullet и компонентную систему Ashley
- рефакторил код MyPlayer, перенёс его из синглетона в Ashley
- возможность менять главного героя, перекидыванием одного компонента из одной Entity в другую
- сделал физическое тело для камеры
- переделал AnimationComponent - теперь анимации нужно переключать только по ID, а не по названиям. Хотя сами названия и хранятся в маленьком и быстром Immutable массиве.
- сделал GameHelper класс (не синглетон), чтобы его один раз использовать и выгрузить. И облегчить классы MyPlayer и DynamicLevels
- убрал из рендера КамеруОтсечения и перенастроил логику выборки для ПризмыОтсечения основной камеры.
Готовы механики:
- неограниченный мир, который подгружается "на лету"
- интерактивные объекты с физикой, поднимаемые объекты, разрушаемые объекты
- работа с ГУИ
- диалоговая система
- NPC действуют по скриптам, могут ходить/ждать/говорить/что-то делать или могут нападать
- 3д-текст и 3д-частицы 2д-декалями
TODO:
- Моделировать уровни и всё остальное
- Оформление ГУИ
- моделировать первые 3 уровня (с анимациями)
- кат-сцены
- motion-trail оружию, анимацию оружию
- фиксация камеры на цели
- хит-боксы на костях
- бамп-маппинг, фейк тени, быстрые шейдеры, свет
- анимация уровня
---
Два слова, как я делал физическое тело камере.
Над физическим телом ГГ я пытался подвесить сферу, которую я крутил бы вокруг ГГ. Адекватный вариант - присобачить тело камеры к телу ГГ через Constraint. Очень сложно было правильно подобрать правильные типы тел, типы из взаимодействия с физикой.
Над телом ГГ (playerBody) я поставил малюсенькое, но тяжелое Призрачное тело камеры (GhostCameraBody). Это тело создано с флагом CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK.
Этот флаг подсказывает Bullet-движку, что тело полностью участвует в физике, может посылать/принимать сообщения о контактах и им можно как угодно управлять. И импульсами, и просто так таскать через setWorldTransform. В любом случае, тело участвует в физике.
FixedConstraint держится только телами, которые 100% должны участвовать в физике. Другие типы тел не подходят, пробовал на CollisionFlags.CF_KINEMATIC_OBJECT и CollisionFlags.CF_NO_CONTACT_RESPONSE - не работает. Либо приклеплённое тело падает на землю, либо вообще в начале координат лежит и не шевелится. По-этому, только CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK.
К маленькому телу GhostCameraBody я прикрепил с помощью FixedConstraint лёгкое, но большое тело камеры (cameraBody).
Теперь тело cameraBody полностью получает трансформацию от тела GhostCameraBody, хотя и висит на небольшом отдалении в воздухе.
Телу GhostCameraBody я передаю трансформацию в особой системе PhysicalConnectSystem (позицию без вращения) от персонажа playerBody, каждый тик физики.
- GhostCameraBody следует за playerBody
- а камера cameraBody следует за GhostCameraBody и тело cameraBody можно вертеть вокруг GhostCameraBody
Вот и всё.
---
Интересные механики (если получаются), моделирование и анимацию я делаю в прямом эфире
на: http://twitch.tv/cb_online
gl & hf