W mojej grze są dwie klasy, które są naprawdę przydatne, ale powoli stają się uciążliwe. Wiadomość i właściwość (właściwość jest zasadniczo składnikiem).
Oba pochodzą z klasy podstawowej i zawierają statyczny identyfikator, dzięki czemu systemy mogą zwracać uwagę tylko na te, które chcą. Działa bardzo dobrze ... oprócz ...
Ciągle tworzę nowe typy wiadomości i typy właściwości, gdy rozszerzam swoją grę. Za każdym razem muszę napisać 2 pliki (hpp i cpp) i tonę bojlera, aby uzyskać zasadniczo identyfikator klasy i jeden lub dwa standardowe typy danych lub wskaźnik.
Zaczyna się od zabawy i testowania nowych pomysłów. Chciałbym, gdy chcę utworzyć nową wiadomość lub typ właściwości, chcę móc po prostu wpisać coś takiego
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
zamiast tworzyć plik nagłówka i cpp, pisać konstruktor, w tym klasę nadrzędną itp.
To około 20 - 40 linii (włączając strażników i wszystko) tylko po to, żeby logicznie zrobić 1 lub 2 linie w mojej głowie.
Czy istnieje jakiś wzorzec programowania, aby obejść ten problem?
Co ze skryptami (o których nic nie wiem) ... czy istnieje sposób na zdefiniowanie grupy klas, które są prawie takie same?
Oto dokładnie, jak wygląda jedna klasa:
// 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 */
Wszystko to tylko dla wektora 2D i identyfikatora, który mówi, że oczekuje wektora 2D. (Oczywiście niektóre właściwości mają bardziej skomplikowane elementy, ale to ten sam pomysł)