Hay dos clases en mi juego que son realmente útiles, pero que poco a poco se están volviendo dolorosas. Mensaje y propiedad (la propiedad es esencialmente un componente).
Ambos se derivan de una clase base y contienen una identificación estática para que los sistemas solo puedan prestar atención a los que desean. Está funcionando muy bien ... excepto ...
Estoy constantemente creando nuevos tipos de mensajes y tipos de propiedades a medida que extiendo mi juego. Cada vez que necesito escribir 2 archivos (hpp y cpp) y una tonelada de repeticiones para obtener esencialmente un ID de clase y uno o dos tipos de datos estándar o un puntero.
Está empezando a hacer que jugar y probar nuevas ideas sea una tarea real. Deseo cuando quiero crear un nuevo mensaje o tipo de propiedad, quiero poder escribir algo como
ShootableProperty: int gunType, float shotspeed;
ItemCollectedMessage: int itemType;
en lugar de crear un encabezado y un archivo cpp, escribir un constructor, incluida la clase principal, etc.
Son alrededor de 20 a 40 líneas (incluyendo incluir guardias y todo) solo para hacer lo que lógicamente es 1 o 2 líneas en mi mente.
¿Hay algún patrón de programación para evitar esto?
¿Qué pasa con las secuencias de comandos (de las cuales no sé nada) ... ¿hay alguna manera de definir un grupo de clases que sean casi iguales?
Así es exactamente como se ve una clase:
// 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 */
Todo eso solo para un Vector 2D y una ID que dice esperar un vector 2D. (De acuerdo, algunas propiedades tienen elementos más complicados, pero es la misma idea)