Ci sono due classi nel mio gioco che sono davvero utili, ma stanno lentamente diventando un dolore. Messaggio e proprietà (la proprietà è essenzialmente un componente).
Entrambi derivano da una classe base e contengono un ID statico in modo che i sistemi possano prestare attenzione solo a quelli che desiderano. Sta funzionando molto bene ... tranne ...
Mentre estendo il mio gioco, continuo a creare nuovi tipi di messaggi e tipi di proprietà. Ogni volta che devo scrivere 2 file (hpp e cpp) e una tonnellata di boilerplate per ottenere essenzialmente un classID e uno o due tipi di dati standard o un puntatore.
Sta iniziando a trasformare il gioco e la sperimentazione di nuove idee in un vero compito. Quando desidero creare un nuovo messaggio o tipo di proprietà, desidero poter digitare qualcosa del tipo
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
invece di creare un file header e cpp, scrivere un costruttore, inclusa la classe genitore, ecc.
Sono circa 20 - 40 linee (comprese le guardie e tutto il resto) solo per fare ciò che logicamente è 1 o 2 linee nella mia mente.
C'è qualche schema di programmazione per aggirare questo?
Che dire dello scripting (di cui non so nulla) ... c'è un modo per definire un gruppo di classi che sono quasi le stesse?
Ecco esattamente come appare una classe:
// 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 */
Tutto questo solo per un vettore 2D e un ID che dice di aspettarsi un vettore 2D. (Concesso, alcune proprietà hanno elementi più complicati, ma è la stessa idea)