ECS и Jobs, как реализовать взаимодействие сущностей
Добавлено: 13 июл 2019, 15:07
Доброго времени суток. Вопрос такой, вот мы имеем обобщенный интерфейс IJobForEachWithEntity<T, A, ...>, где мы в обобщении указываем набор компонентов, которые образуют архетип, и позже, в Execute, используем их по назначению ...WithEntity ещё даёт нам доступ к сущности, чтобы мы могли работать с ней через буфер, хотя сейчас что-то поменялось и я не совсем разобрался что и как, но суть не в этом. Всё вроде логично, системы могут работать с сущностями, но как в этой реализации через Job'ы сделать взаимодействие разного кол-ва сущностей? Была идея некой системы, которая ищет 2 разных архетипа (по сути, две разные сущности, или больше чем две), которые имеют общий компонент с int ID, чтобы потому отфильтровать по этому ID все оставшиеся архетипы. То есть, у нас есть архетип определяющий съедобность сущности, а есть архетип абстрактно определяющий сущность, которая может его съесть (имеет голод и вот это всё) и суть в НЕЯВНОМ взаимодействии этих двух сущностей (неявно, потому что они не знают о существовании друг друга, ни у одного из них нету ссылок друг на друга, боже упаси каких-то функций), все взаимодействия сущностей должна просчитать система, но как? У нас вроде нету сейчас, может это только сейчас, функции позволяющей сразу искать несколько архетипов (не обязательно это будут разные сущности, зависит от ваших целей, ну а ещё от внутреннего устройства самого ECS). Мы конечно можем получить EnitityQuery отфильтровав все сущности с компонентом и переменной ID, и от туда достать NativeArray сущностей, или пойти дальше и работать со всеми чанками где есть этот компонент, для этого использовать свой IJobParallelFor, но это какие-то дебри для простой реализации взаимодействий сущностей. Как же быть?