Exemple #1
0
        public override void Pulse()
        {
            var methodName = "Pulse";

            LogTrace(methodName);

            if (!ShouldPulse())
            {
                return;
            }

            if (!_meCache.InSpace || _meCache.InStation ||
                (_movement.IsMoving && _movement.MovementType != MovementTypes.Approach))
            {
                return;
            }

            StartPulseProfiling();

            var wasTargetUnlocked = UnlockUnqueuedTargets();

            if (wasTargetUnlocked)
            {
                EndPulseProfiling();
                return;
            }

            WasTargetChangedThisFrame = false;

            //reset the modules dictionary
            _modulesBuilt = false;
            ModulesOnEntity.Clear();

            _queueTargetsByEntityId.Clear();

            if (_targetQueue.Targets.Count == 0)
            {
                _ship.DeactivateModuleList(_ship.SensorBoosterModules, true);
                EndPulseProfiling();
                return;
            }

            //Activate sensor boosters
            _ship.ActivateModuleList(_ship.SensorBoosterModules, true);

            //TargetQueue.SortQueue();
            //StartMethodProfiling("BuildE_QT_Dictionary");
            foreach (QueueTarget queueTarget in _targetQueue.Targets)
            {
                _queueTargetsByEntityId.Add(queueTarget.Id, queueTarget);
            }

            //EndMethodProfiling();
            //StartMethodProfiling("TargetNext");
            if (_randomWait.ShouldWait())
            {
                EndPulseProfiling();
                return;
            }

            if (IsTargetJammed)
            {
                LogMessage(methodName, LogSeverityTypes.Standard, "Targeting jammed, not targeting");
                _alerts.TargetJammed();
                return;
            }
            ProcessTargetQueue();
            //EndMethodProfiling();
            EndPulseProfiling();
        }