public override bool RequirementMet(ConfiguredContract contract)
        {
            LoggingUtil.LogVerbose(this, "Checking requirement");

            // Perform another validation of the target body to catch late validation issues due to expressions
            if (!ValidateTargetBody())
            {
                return(false);
            }

            if (RemoteTechProgressTracker.Instance == null)
            {
                // Assume no coverage
                return(maxCoverage == 0.0);
            }

            double coverage = RemoteTechProgressTracker.GetCoverage(targetBody);

            return(coverage >= minCoverage && coverage <= maxCoverage);
        }
        protected override void OnUpdate()
        {
            if (RemoteTechProgressTracker.Instance != null)
            {
                double oldCoverage = currentCoverage;
                currentCoverage = RemoteTechProgressTracker.GetCoverage(targetBody);
                if (currentCoverage >= coverage)
                {
                    SetState(ParameterState.Complete);
                    RemoteTechProgressTracker.Instance.RemoveFromPriorityList(targetBody);
                }
                else
                {
                    SetState(ParameterState.Incomplete);
                    RemoteTechProgressTracker.Instance.AddToPriorityList(targetBody);
                }

                // Update contract window
                GetTitle();
            }
        }