Creating soldier knowledge sources
So far, our soldier's two main knowledge calculations are within enemy selection and flee position selection. With a proper KnowledgeSource
instance implementation, we can refactor our original evaluator's internals to a standalone function that returns a result and confidence value in the format expected by our KnowledgeSource
instance implementation.
Enemy selection
Converting the logic from the SoldierEvaluators_HasEnemy
function only requires modifications that return both a confidence value and the final result. Since only one source will determine enemy selection, we will return a confidence of 1
, as well as the selected enemy.
SoldierKnowledge.lua
:
function SoldierKnowledge_ChooseBestEnemy(userData) local sandbox = userData.agent:GetSandbox(); local position = Agent.GetPosition(userData.agent); local agents = Sandbox.GetAgents(userData.agent:GetSandbox()); local closestEnemy; local distanceToEnemy; for index=1, #agents do ...