Open jarisrener opened 5 years ago
interface INull { } // compile-time null type
interface IMain : IView // so it can be put in the scene
{
IViewRegistry Views { get; }
IAgentRegistry Agents { get; }
IModelRegistry Models { get; }
void Register<TIView, TIAgent, TIModel>(GameObject prefab);
IEntity Create<TIEntity>(GameObject prefab = null) where TIEntity : IEntity;
IEntity Create<TIEntity>(GameObject prefab, params object[] modelCtorArgs);
IEntity CreateDefault<TIEntity>(params object[] modelCtorArgs);
}
interface IEntity<IView, IAgent = INull, IModel = INull> : IEntity
{
IMain Main { get; } // injected
IView View { get; }
IAgemt Agent { get; }
IModel Modle { get; }
}
The above doesn't make sense in C#, but the gist is there.
Create the concept of an Entity that contains a Model, Agent and View.