Coder Social home page Coder Social logo

4a-engine's People

Contributors

protax avatar randomrandi avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

4a-engine's Issues

Нариcовать спрайты персонажей

Нужно нарисовать спрайты ко всем внутриигровым персонажам. Все апдейты\изменения хотелось бы видеть здесь, например, в папке res/. Насчет анимаций будет отдельное задание

Написать программный интерфейс движка

Нужно написать на C/C++ интерфейс (*.hpp файл), в котором отражены все основные функции, которые хотелось бы использовать для программирования логики игры и по возможности подробно описать их (например, в doxygen), как то так:

/**
 * Функция отрисовки главного героя на сцене
 * \param stage_name Идентификатор сцены
 * \param character_name Иденификатор персонажа
 * \param position Положение песонажа на сцене
 */
void drawMainCharacter(stage_t stage_name, character_t character_name, position_t position);

К конкретным параметрам функций и именам требований нет, но по завершению такого интерфейса с его использованием будет писаться Python-код

Поддержка Linux

Добавить поддержку сборки и запуска на системах Linux

Доработать систему управления с клавиатуры

Нужно добавить удобное управление игровым персонажем. То есть, по назначенным кнопкам (wasd, стрелки, что угодно + кнопка действия, кнопка меню) игра должна знать об их нажатии (действие, меню) или удержании (идти в направлении). Думаю, это должен быть класс с конструктором, в котором назначаются все кнопки на свои действия, и, как минимум, методом типа setKeyCallback. В этом коммите управление реализовано как раз с помощью callback-вызова (glfwSetKeyCallback, стр.343, это стандартный вызов из либы glfw, его и можно использовать) и соответствующей callback-функции (key_callback, стр.49). Также, обязательно сделать все это thread-safe, то есть обернуть это в mutex-ы, что примерно сделано в классе keyHandler (стр.12). Если это будет класс, то реализацию методов нужно сделать в .cpp файле в src/, а заголовок в .hpp в include/ и прописать #include "YourClass.hpp" в реализации

Вот что надо знать:

  • Что такое callback и зачем нужен
  • Что такое mutex и как с ним работать через WinAPI
  • Классы C++

IListenable

В файле IListenable.cpp есть куча классов с одинаковой реализацией

Реализовать смену кадров

Создать класс игрового цикла, через который можно настраивать частоту смены кадров, анимации персонажей (и их скорость), управление игрой с помощью клавиатуры

KeyboardControl

Описать интерфейс класса и привести реализацию в соответствие. Сейчас очень непонятно, чем он занимается

Умные указатели

Сейчас везде используется std::shared_ptr<>, хотя во многих местах можно использовать std::unique_ptr<>. Нужно проанализировать это и подумать над тем, как пользователь будет создавать такие объекты.

GameObject id

Нужно сделать идентификатор объекта уникальным и повторно неиспользуемым

Ошибка при завершении работы движка

Во время освобождения выделенных ресурсов в консоль выводится строка
[OpenGL error]: 0x502 C:/Users/karpe/4a-engine/lib/Texture.cpp on line 32
Есть преположение, что ошибка происходит не в деструкторе текстуры, а немного ранее

Многопоточная оптимизация

Сейчас движок рисует кадры и обрабатывает события в одном потоке. Нужно разобраться, как это можно оптимизировать

Написать удобный загрузчик ресурсов

Написать класс загрузчика, который бы мог загружать (с диска) шейдеры, текстуры, спрайты для удобного их использования в движке

  • Пример есть здесь: https://habr.com/ru/post/313380/\
  • Вот видео с загрузкой шейдеров: How I Deal with Shaders in OpenGL
  • Также лучше реализовать возможность анимаций сразу на этапе загрузки. Есть несколько способов, например загружать несколько кадров анимации в одну текстуру (при вызове glTexImage2D), а затем, при наложении текстуры на прямоугольник, использовать текстурные координаты, указывающие правильный кадр; мб есть способ через 3d-текстуры, ну или в крайнем случае, сделать так как сейчас - отдельный кадр в свой текстурный блок (вызов glActiveTexture)

Логгирование и ошибки

Нужно сделать (или найти) инструмент для вывода в лог ошибок. Также, эти ошибки надо обрабатывать

Codestyle

Переписать код, используя Google C++ Codestyle

Импорт настроек

Импортировать настройки glfw, рендерера, и чего угодно из констант или config-файла

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.