Я работаю над 2D-игрой в XNA, основанной на стекании. Я применил метод стаи Крейга Рейнольдса и теперь хочу динамически назначать лидера группе, чтобы направлять ее к цели.
Для этого я хочу найти игрового агента, перед которым нет других агентов, и сделать его лидером, но я не уверен в математике для этого.
В настоящее время у меня есть:
Vector2 separation = agentContext.Entity.Position - otherAgent.Entity.Position;
float angleToAgent = (float) Math.Atan2(separation.Y, separation.X);
float angleDifference = Math.Abs(agentContext.Entity.Rotation - angleToAgent);
bool isVisible = angleDifference >= 0 && angleDifference <= agentContext.ViewAngle;
agentContext.ViewAngle — это значения в радианах, с которыми я играл, чтобы попытаться получить правильный эффект, но в основном это приводит к тому, что все агенты назначаются лидерами.
Может ли кто-нибудь указать мне правильное направление, чтобы определить, находится ли объект в пределах «конуса» зрения другого объекта?