我正在为游戏引擎开发人工智能系统。单元可以具有由当前单元的AI状态设置的活动任务。例如,UnitA可以获得攻击UnitB的任务。 AI状态同时必须等待任务完成(这可能需要几秒钟,同时游戏循环必须继续)。
任务完成后,状态必须对任务结果作出反应。例如,如果UnitB被成功杀死,状态将继续它的默认任务(Guard / Stand / Wander,具体取决于单位)。如果任务因为UnitA太受伤而无法继续攻击而被中断,那么AI状态必须切换到"逃离"。
我应该采取哪种方法来最有效,尽可能地做到这一点?目前,我只使用简单的std::unique_ptr
实现任务,其中调用Update函数。我还有一个Move任务,它将单元中的任务设置为nullptr,一旦完成但没有通知其他任何内容。
我正在使用std::future
向std::promise
方向看,但不知道是否有更好的方法可以做到这一点。有很多有AI的活动单位,所以我不能产生一个线程来处理AI状态并等待std::future
给出一个结果,因为这将产生至少在一个体面的游戏中同时有超过100个线程。
我在解决方案中寻找的最重要的事情是AI将采取的分支决策路径的可读性。我可以创建一个消息队列,并使用一个大开关从那里读取结果,但是不能清楚地显示按什么顺序发生的事情。