Я пытаюсь работать с пользовательской платформой Entity System Framework для разработки игры. По существу, что я пытаюсь сделать с этим, есть классы Component и Component System, из которых вы можете получить дополнительные классы. Я действительно не уверен, как напрямую объяснить, что это такое, что я пытаюсь сделать, поэтому я собираюсь скопировать и вставить свой код здесь, а затем попытаться сформулировать конкретный вопрос в конце.C# несколько классов с использованием дженериков и
Компонент
public class Component
{
public Entity entity;
public Component() { }
public Component(Entity e)
{ e.AddComponent(this); }
}
System Component
public class ComponentSystem<T> where T : Component
{
protected List<T> components;
public void AddComponent(T com)
{
this.components.Add(com);
}
public void RemoveComponent(T com)
{
this.components.Remove(com);
}
public void Update(double timeDelta = 0.0f)
{
}
}
Как Main теперь
public Main(string[] args)
{
TagSystem Tags = new TagSystem();
GroupSystem Groups = new GroupSystem();
Entity e = new Entity();
e.AddComponent(new TagComponent("UniqueID"));
e.AddComponent(new GroupComponent());
Tags.AddComponent(e.GetComponent<TagComponent>());
Groups.AddComponent(e.GetComponent<GroupComponent>());
}
Как бы мне хотелось посмотреть Основное
public Main(string[] args)
{
TagSystem Tags = new TagSystem();
GroupSystem Groups = new GroupSystem();
Entity e = new Entity();
e.AddComponent(new TagComponent(Tags, "UniqueID"));
e.AddComponent(new GroupComponent(Groups));
// Or this?
Entity e = new Entity();
e.AddComponent(new TagComponent<TagSystem>(Tags, "UniqueID"));
e.AddComponent(new GroupComponent<GroupSystem>(Groups));
}
Я предполагаю, что я пытаюсь сделать, чтобы компонент автоматически добавлялся в компонентную систему при генерации, но я действительно не знаю, как это сделать. Я пробовал следующее, но ни один из них не работает:
public void AddToSystem<T, U>(T sys) where T : ComponentSystem<U>
{ sys.AddComponent(this); }
public void AddToSystem<T>(T sys)
{ sys.AddComponent(this); } // fails because T has no method AddComponent
Hm, это может быть жизнеспособным решением в будущем, но я в конечном итоге делает что-то другое. Я наткнулся на этот ответ http://stackoverflow.com/questions/353126/c-sharp-multiple-generic-types-in-one-list, который привел меня к разработке только статического глобального списка систем, и это может позволить мне использовать ComponentSystem где угодно, так как это базовый класс. – Hondros