В моей игре есть два класса, которые действительно полезны, но постепенно становятся болью. Сообщение и свойство (свойство по сути является компонентом).
Они оба являются производными от базового класса и содержат статический идентификатор, поэтому системы могут обращать внимание только на те, которые им нужны. Это работает очень хорошо ... кроме ...
Я постоянно создаю новые типы сообщений и типов свойств по мере расширения своей игры. Каждый раз мне нужно написать 2 файла (hpp и cpp) и кучу шаблонов, чтобы получить по существу classID и один или два стандартных типа данных или указатель.
Это начинает превращать игру и проверять новые идеи в настоящую рутинную работу. Я хочу, когда я хочу создать новое сообщение или тип свойства, я хочу иметь возможность просто напечатать что-то вроде
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
вместо создания заголовка и файла cpp, написания конструктора, включая родительский класс и т. д. и т. д.
Это примерно 20-40 строк (включая охранников и все остальное), просто чтобы сделать то, что логически - 1 или 2 строки в моем уме.
Есть ли какой-то шаблон программирования, чтобы обойти это?
Как насчет сценариев (о которых я ничего не знаю) ... есть ли способ определить группу классов, которые почти одинаковы?
Вот как выглядит один класс:
// Velocity.h
#ifndef VELOCITY_H_
#define VELOCITY_H_
#include "Properties.h"
#include <SFML/System/Vector2.hpp>
namespace LaB
{
namespace P
{
class Velocity: public LaB::Property
{
public:
static const PropertyID id;
Velocity(float vx = 0.0, float vy = 0.0)
: velocity(vx,vy) {}
Velocity(sf::Vector2f v) : velocity(v) {};
sf::Vector2f velocity;
};
} /* namespace P */
} /* namespace LaB */
#endif /* LaB::P_VELOCITY_H_ */
// Velocity.cpp
#include "Properties/Velocity.h"
namespace LaB
{
namespace P
{
const PropertyID Velocity::id = Property::registerID();
} /* namespace P */
} /* namespace LaB */
Все это только для 2D-вектора и идентификатора, говорящего, что он ожидает 2D-вектор. (Конечно, некоторые свойства имеют более сложные элементы, но это та же идея)