Ho una classe BallEntity che fa parte di un gioco che utilizza un'architettura di sistema di componenti Entity.
Questa classe ha 'componenti' che sono come gli attributi di quella classe.
Creo e inizializzo questi componenti nel metodo getComponents. Per costruire questi componenti ho bisogno di altri oggetti, come uno Sprite (ovvero l'immagine rappresenta quella palla) per SpriteComponent, un Body for BodyComponent, una fotocamera per CameraFollowerComponent.
Quegli oggetti arrivano alla classe attraverso argomenti al costruttore.
Istanzio BallEntity in questo modo:
BallEntity ballEntity = new BallEntity(new Sprite(atlas.findRegion("ball")),rubeSceneHelper.getBody("ball"), camera, rubeSceneHelper);
La mia domanda è se questi oggetti (o quali) devono essere inizializzati nel costruttore di BallEntity o all'interno della classe che istanzia PalEntity?
public class BallEntity extends UserEntity {
public static final float SCALE = 0.78f;
private final RubeSceneHelper rubeSceneHelper;
private ScaledSprite ballSprite;
private Body ballBody;
private Camera camera;
public BallEntity(Sprite sprite, Body ballBody, Camera camera, RubeSceneHelper rubeSceneHelper) {
this.ballSprite = ScaledSprite.create(sprite, SCALE / sprite.getHeight());
this.ballBody = ballBody;
this.camera = camera;
this.rubeSceneHelper = rubeSceneHelper;
}
@Override
public Array<Component> getComponents() {
Array<Component> components = new Array<Component>();
components.add(PositionComponent.newInstance());
components.add(CameraFollowerComponent.newInstance(camera));
components.add(SpriteComponent.newInstance(ballSprite.getSprite()));
components.add(BodyComponent.newInstance(ballBody));
components.add(BallContextComponent.newInstance());
return components;
}
@Override
public void init(Entity entity) {
BodyComponent bodyComponent = entity.getComponent(BodyComponent.class);
bodyComponent.setPosition(Vector2.Zero);
Fixture ballFixture = rubeSceneHelper.getFixture(bodyComponent.getBody(), "ball");
ballFixture.setUserData(new FixtureUserData(FixtureType.BALL, entity));
}
}