protected override IAssignment GetNewOrCurrentAssignment(ActionPriority priority)
{
if (priority == ActionPriority.Idle)
return this.CurrentAssignment;
if (m_target == null)
{
m_target = AIHelpers.FindNearestEnemy(this.Worker, LivingCategory.Civilized);
if (m_target == null)
{
// continue patrolling
if (this.CurrentAssignment == null || (this.CurrentAssignment is RandomMoveAssignment) == false)
{
trace.TraceInformation("Start random move");
return new RandomMoveAssignment(null);
}
else
{
trace.TraceVerbose("Continue patrolling");
return this.CurrentAssignment;
}
}
trace.TraceInformation("Found target: {0}", m_target);
}
Debug.Assert(m_target != null);
if (this.CurrentAssignment == null || (this.CurrentAssignment is AttackAssignment) == false)
{
trace.TraceInformation("Start attacking: {0}", m_target);
var assignment = new AttackAssignment(this, m_target);
return assignment;
}
else
{
trace.TraceInformation("Continue attacking: {0}", m_target);
return this.CurrentAssignment;
}
}