Sto cercando di scrivere un gioco semplice e voglio davvero creare qualcosa che sia "programmaticamente corretto". Mi sono bloccato con un problema del genere: ho classe
public abstract class ProjectileLogic<T> where T : ProjectileInfo{
protected T _projectileInfo;
public abstract void OnInitialize();
public abstract void OnHitTerrain(Vector2 hitDirection); //hitting the floor should give Vector2.down, etc.
public abstract void OnHitEnemy();
public abstract void Destroy();
}
Sto usando i generici, perché l'ereditare le classi ha bisogno di oggetti diversi che ereditano dalla classe ProjectileInfo. ProjectileInfo contiene dati come danni, velocità iniziale ecc.
Il problema appare, quando spawner crea il proiettile e chiama "OnInitialize".
var projectile = spawner.CreateProjectile(ProjectileType.Pellet);
projectile.GetComponent<ProjectileLogic<...what exactly?...>>().OnInitialize();
GetComponent restituisce il componente associato all'oggetto di gioco "proiettile" di un determinato tipo.
Ho pensato, potrei creare un'interfaccia IProjectileLogic contenente tutti i metodi di ProjectileLogic e quindi:
public class ProjectileLogic<T> : IProjectileLogic where T : ProjectileInfo{
protected T _projectileInfo;
}
e quindi spawner:
var projectile = spawner.CreateProjectile(ProjectileType.Pellet);
projectile.GetComponentByInterface<IProjectileLogic>().OnInitialize();
Ma davvero non so se non sarebbe un uso improprio delle interfacce e delle cattive pratiche usate solo perché "aiuta in questo singolo caso".