public override bool LoadFromConfig(ConfigNode configNode) { // Before loading, verify the SCANsat version if (!SCANsatUtil.VerifySCANsatVersion()) { return(false); } // Load base class bool valid = base.LoadFromConfig(configNode); // Not invertable valid &= ConfigNodeUtil.ParseValue <bool>(configNode, "invertRequirement", x => invertRequirement = x, this, false, x => Validation.EQ(x, false)); // Do not check the requirement on active contracts. Otherwise when they scan the // contract is invalidated, which is usually not what's meant. checkOnActiveContract = false; valid &= ConfigNodeUtil.ParseValue <double>(configNode, "minCoverage", x => minCoverage = x, this, 0.0); valid &= ConfigNodeUtil.ParseValue <double>(configNode, "maxCoverage", x => maxCoverage = x, this, 100.0); valid &= ConfigNodeUtil.ParseValue <string>(configNode, "scanType", x => scanType = x, this, SCANsatUtil.ValidateSCANname); valid &= ValidateTargetBody(configNode); return(valid); }
public SCANsatCoverage(double coverage, string scanName, CelestialBody targetBody, string title) : base(title) { this.coverage = coverage; this.scanName = scanName; this.scanType = SCANsatUtil.GetSCANtype(scanName); this.targetBody = targetBody; }
public override bool RequirementMet(ConfiguredContract contract) { // Perform another validation of the target body to catch late validation issues due to expressions if (!ValidateTargetBody()) { return(false); } double coverageInPercentage = SCANsatUtil.GetCoverage(SCANsatUtil.GetSCANtype(scanType), targetBody); return(coverageInPercentage >= minCoverage && coverageInPercentage <= maxCoverage); }
public override bool RequirementMet(ConfiguredContract contract) { // Perform another validation of the target body to catch late validation issues due to expressions if (!ValidateTargetBody()) { return(false); } if (pqsCity != null) { latitude = targetBody.GetLatitude(pqsCity.transform.position); longitude = targetBody.GetLongitude(pqsCity.transform.position); pqsCity = null; } return(SCANsatUtil.IsCovered(latitude, longitude, SCANsatUtil.GetSCANtype(scanType), targetBody)); }
public override bool Load(ConfigNode configNode) { // Before loading, verify the SCANsat version if (!SCANsatUtil.VerifySCANsatVersion()) { return(false); } // Load base class bool valid = base.Load(configNode); valid &= ConfigNodeUtil.ParseValue <double>(configNode, "coverage", x => coverage = x, this); valid &= ConfigNodeUtil.ParseValue <string>(configNode, "scanType", x => scanType = x, this, SCANsatUtil.ValidateSCANname); valid &= ValidateTargetBody(configNode); return(valid); }
public override bool LoadFromConfig(ConfigNode configNode) { // Before loading, verify the SCANsat version if (!SCANsatUtil.VerifySCANsatVersion()) { return(false); } // Load base class bool valid = base.LoadFromConfig(configNode); // Do not check the requirement on active contracts. Otherwise when they scan the // contract is invalidated, which is usually not what's meant. checkOnActiveContract = false; valid &= ConfigNodeUtil.ParseValue <string>(configNode, "scanType", x => scanType = x, this, "Anomaly", SCANsatUtil.ValidateSCANname); valid &= ConfigNodeUtil.ParseValue <double>(configNode, "latitude", x => latitude = x, this, 0.0); valid &= ConfigNodeUtil.ParseValue <double>(configNode, "longitude", x => longitude = x, this, 0.0); valid &= ConfigNodeUtil.MutuallyExclusive(configNode, new string[] { "latitude", "longitude" }, new string[] { "pqsCity" }, this); valid &= ValidateTargetBody(configNode); string pqsName = null; valid &= ConfigNodeUtil.ParseValue <string>(configNode, "pqsCity", x => pqsName = x, this, (string)null); if (pqsName != null) { try { pqsCity = targetBody.GetComponentsInChildren <PQSCity>(true).Where(pqs => pqs.name == pqsName).First(); } catch (Exception e) { LoggingUtil.LogError(this, "Couldn't load PQSCity with name '" + pqsCity + "'"); LoggingUtil.LogException(e); valid = false; } } return(valid); }
protected override void OnUpdate() { base.OnUpdate(); if (targetBody == null) { return; } // Do a check if either: // REAL_UPDATE_FREQUENCY of real time has elapsed // GAME_UPDATE_FREQUENCY of game time has elapsed if (UnityEngine.Time.fixedTime - lastRealUpdate > REAL_UPDATE_FREQUENCY || Planetarium.GetUniversalTime() - lastGameTimeUpdate > GAME_UPDATE_FREQUENCY) { lastRealUpdate = UnityEngine.Time.fixedTime; lastGameTimeUpdate = Planetarium.GetUniversalTime(); currentCoverage = SCANsatUtil.GetCoverage(scanType, targetBody); // Count the number of sucesses if (currentCoverage > coverage) { consecutive_successes++; } else { consecutive_successes = 0; } // We've had enough successes to be sure that the scan is complete if (consecutive_successes >= CONSECUTIVE_SUCCESSES_REQUIRED) { SetState(ParameterState.Complete); } // Force a call to GetTitle to update the contracts app GetTitle(); } }