Я решил начать создавать игровой движок в последнее время.Я знаю, что большинство людей не заканчивают свои, и, если я честен, я тоже не могу.Я делаю это потому, что мне надоело гуглить «крутые проекты на C ++» и делать 3 ответа, которые дает каждый пользователь (это будет адресная книга или что-то подобное, Tic Tac Toe, генератор отчетов или что-то вродетот).Мне нравится программирование, но, к сожалению, я не пользуюсь им.Все, что я хотел бы использовать, я могу делать быстрее и проще другим способом, или решение уже существует.Однако, чтобы выучить больше, чем базовый уровень C ++ и сделать что-то, что могло бы научить меня чему-то действительно глубокому, я отменил эту политику и решил запустить игровой движок, поскольку это то, что меня всегда интересовалов. Я решил смоделировать его свободно после движка Amazon Lumberyard, поскольку он почти полностью состоит из C ++ и дает мне хорошую основу для изучения, поскольку я всегда могу просто пойти туда и что-то с ним сделать, чтобы посмотреть, как он себя ведет.
Об актуальной проблеме сейчас:
У меня есть работающая система Entity Component (yay), которая хотя и находится на ранних стадиях и не очень хороша в плане функциональности, я очень горжусь.Честно говоря, я никогда не думал, что получу это далеко.В настоящее время я работаю с системой Event Bus.Теперь я очень люблю систему EBus от LY.Он чрезвычайно прост в использовании и очень прост, но с точки зрения новичка в программировании это черная магия и колдовство.Я понятия не имею, как они делали определенные вещи, так что, надеюсь, вы делаете!
Создание EBus идет примерно так:
#include <EBusThingy.h>
class NewEbusDealio
: public EbusThingy
{
public:
//Normally there's some setup work involved here, but I'm excluding it as I don't really feel that it's necessary for now. I can always add it later (see the footnote for details on what these actually are).
//As if by magic, this is all it takes to do it (I'd like to clarify that I'm aware that this is a pure virtual function, I just don't get how they generate so much usage out of this one line):
virtual void OnStuffHappening(arguments can go here if you so choose) = 0;
};
И это все ... Как по волшебству, когдаВы собираетесь использовать его, все, что вам нужно сделать, это:
#include "NewEbusDealio.h"
class ComponentThatUsesTheBus
: public NewEbusDealio::Handler
{
public:
void Activate() override
{
NewEbusDealio::Handler::BusConnect();
}
protected:
void OnStuffHappening(arguments so chosen)
{
//Do whatever you want to happen when the event fires
}
};
class ComponentThatSendsEvents
{
public:
void UpdateOrWhatever()
{
NewEbusDealio::Broadcast(NewEbusDealio::Events::OnStuffHappening, arguments go here)
}
};
Я просто не понимаю, как вы можете сделать это много, просто добавив одну виртуальную функцию в NewEbusDealio.Любая помощь в этом очень ценится.Извините за столько текстовых стен, но я бы очень хотел получить что-то из этого, и я натолкнулся на массивную кирпичную стену на этом кусочке.Это может быть излишним из-за того, что я делаю, и может оказаться настолько большим трудом, что один человек не сможет выполнить за разумное время, но если простая версия этогоВозможно, я бы хотел попробовать.
Я опишу это здесь, чтобы люди знали, как работает установка.Все, что вам нужно сделать, это определить статические константы EBusHandlerPolicy и EBusAddressPolicy, которые определяют, сколько обработчиков может подключаться к каждому адресу на шине, и работает ли шина по одному адресу (адрес не требуется при вызове события), или можно ли использовать адресаотправлять события обработчикам, прослушивающим определенный адрес.Сейчас я хотел бы иметь простую шину, где, если вы отправляете событие, все обработчики получают его.