Dwarrowdelf.AI.MonsterAI.GetNewOrCurrentAssignment C# (CSharp) Method

GetNewOrCurrentAssignment() protected method

protected GetNewOrCurrentAssignment ( ActionPriority priority ) : IAssignment
priority ActionPriority
return IAssignment
        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;
            }
        }