public void AddJammer(ModuleECMJammer jammer) { if (!jammers.Contains(jammer)) { jammers.Add(jammer); } UpdateJammerStrength(); }
void takeRadarSnapshot() { if (EditorLogic.RootPart == null) { return; } // Encapsulate editor ShipConstruct into a vessel: Vessel v = new Vessel(); v.parts = EditorLogic.fetch.ship.Parts; RadarUtils.RenderVesselRadarSnapshot(v, EditorLogic.RootPart.transform); //first rendering for true RCS RadarUtils.RenderVesselRadarSnapshot(v, EditorLogic.RootPart.transform, true); //second rendering for nice zoomed-in view takeSnapshot = false; // get RCS reduction measures (stealth/low observability) rcsReductionFactor = 1.0f; int rcsCount = 0; List <Part> .Enumerator parts = EditorLogic.fetch.ship.Parts.GetEnumerator(); while (parts.MoveNext()) { ModuleECMJammer rcsJammer = parts.Current.GetComponent <ModuleECMJammer>(); if (rcsJammer != null) { if (rcsJammer.rcsReduction) { rcsReductionFactor *= rcsJammer.rcsReductionFactor; rcsCount++; } } } parts.Dispose(); if (rcsCount > 0) { rcsReductionFactor = Mathf.Clamp((rcsReductionFactor * rcsCount), 0.0f, 1); //same formula as in VesselECMJInfo must be used here! } }
void dumpParts() { String gunName = "bda_weapons_list.csv"; String missileName = "bda_missile_list.csv"; String radarName = "bda_radar_list.csv"; String jammerName = "bda_jammer_list.csv"; ModuleWeapon weapon = null; MissileLauncher missile = null; ModuleRadar radar = null; ModuleECMJammer jammer = null; // 1. create the file var fileguns = KSP.IO.TextWriter.CreateForType <BDAEditorCategory>(gunName); var filemissiles = KSP.IO.TextWriter.CreateForType <BDAEditorCategory>(missileName); var fileradars = KSP.IO.TextWriter.CreateForType <BDAEditorCategory>(radarName); var filejammers = KSP.IO.TextWriter.CreateForType <BDAEditorCategory>(jammerName); // 2. write header fileguns.WriteLine("NAME;TITLE;AUTHOR;MANUFACTURER;PART_MASS;PART_COST;PART_CRASHTOLERANCE;PART_MAXTEMP;WEAPON_RPM;WEAPON_DEVIATION;WEAPON_MAXEFFECTIVEDISTANCE;WEAPON_TYPE;WEAPON_BULLETTYPE;WEAPON_AMMONAME;WEAPON_BULLETMASS;WEAPON_BULLET_VELOCITY;WEAPON_MAXHEAT;WEAPON_HEATPERSHOT;WEAPON_HEATLOSS;CANNON_SHELLPOWER;CANNON_SHELLHEAT;CANNON_SHELLRADIUS;CANNON_AIRDETONATION"); filemissiles.WriteLine("NAME;TITLE;AUTHOR;MANUFACTURER;PART_MASS;PART_COST;PART_CRASHTOLERANCE;PART_MAXTEMP;" + "MISSILE_THRUST;MISSILE_BOOSTTIME;MISSILE_CRUISETHRUST;MISSILE_CRUISETIME;MISSILE_MAXTURNRATEDPS;MISSILE_BLASTPOWER;MISSILE_BLASTHEAT;MISSILE_BLASTRADIUS;MISSILE_GUIDANCEACTIVE;MISSILE_HOMINGTYPE;MISSILE_TARGETINGTYPE;MISSILE_MINLAUNCHSPEED;MISSILE_MINSTATICLAUNCHRANGE;MISSILE_MAXSTATICLAUNCHRANGE;MISSILE_OPTIMUMAIRSPEED;" + "CRUISE_TERMINALMANEUVERING; CRUISE_TERMINALGUIDANCETYPE; CRUISE_TERMINALGUIDANCEDISTANCE;" + "RADAR_ACTIVERADARRANGE;RADAR_RADARLOAL;" + "TRACK_MAXOFFBORESIGHT;TRACK_LOCKEDSENSORFOV;" + "HEAT_HEATTHRESHOLD;" + "LASER_BEAMCORRECTIONFACTOR; LASER_BEAMCORRECTIONDAMPING" ); fileradars.WriteLine("NAME;TITLE;AUTHOR;MANUFACTURER;PART_MASS;PART_COST;PART_CRASHTOLERANCE;PART_MAXTEMP;radar_name;rwrThreatType;omnidirectional;directionalFieldOfView;boresightFOV;" + "scanRotationSpeed;lockRotationSpeed;lockRotationAngle;showDirectionWhileScan;multiLockFOV;lockAttemptFOV;canScan;canLock;canTrackWhileScan;canRecieveRadarData;" + "DEPRECATED_minSignalThreshold;DEPRECATED_minLockedSignalThreshold;maxLocks;radarGroundClutterFactor;radarDetectionCurve;radarLockTrackCurve" ); filejammers.WriteLine("NAME;TITLE;AUTHOR;MANUFACTURER;PART_MASS;PART_COST;PART_CRASHTOLERANCE;PART_MAXTEMP;alwaysOn;rcsReduction;rcsReducationFactor;lockbreaker;lockbreak_strength;jammerStrength"); Debug.Log("Dumping parts..."); // 3. iterate weapons and write out fields foreach (var item in availableParts) { weapon = null; missile = null; radar = null; jammer = null; weapon = item.partPrefab.GetComponent <ModuleWeapon>(); missile = item.partPrefab.GetComponent <MissileLauncher>(); radar = item.partPrefab.GetComponent <ModuleRadar>(); jammer = item.partPrefab.GetComponent <ModuleECMJammer>(); if (weapon != null) { fileguns.WriteLine( item.name + ";" + item.title + ";" + item.author + ";" + item.manufacturer + ";" + item.partPrefab.mass + ";" + item.cost + ";" + item.partPrefab.crashTolerance + ";" + item.partPrefab.maxTemp + ";" + weapon.roundsPerMinute + ";" + weapon.maxDeviation + ";" + weapon.maxEffectiveDistance + ";" + weapon.weaponType + ";" + weapon.bulletType + ";" + weapon.ammoName + ";" + weapon.bulletMass + ";" + weapon.bulletVelocity + ";" + weapon.maxHeat + ";" + weapon.heatPerShot + ";" + weapon.heatLoss + ";" + weapon.cannonShellPower + ";" + weapon.cannonShellHeat + ";" + weapon.cannonShellRadius + ";" + weapon.airDetonation ); } if (missile != null) { filemissiles.WriteLine( item.name + ";" + item.title + ";" + item.author + ";" + item.manufacturer + ";" + item.partPrefab.mass + ";" + item.cost + ";" + item.partPrefab.crashTolerance + ";" + item.partPrefab.maxTemp + ";" + missile.thrust + ";" + missile.boostTime + ";" + missile.cruiseThrust + ";" + missile.cruiseTime + ";" + missile.maxTurnRateDPS + ";" + missile.blastPower + ";" + missile.blastHeat + ";" + missile.blastRadius + ";" + missile.guidanceActive + ";" + missile.homingType + ";" + missile.targetingType + ";" + missile.minLaunchSpeed + ";" + missile.minStaticLaunchRange + ";" + missile.maxStaticLaunchRange + ";" + missile.optimumAirspeed + ";" + missile.terminalManeuvering + ";" + missile.terminalGuidanceType + ";" + missile.terminalGuidanceDistance + ";" + missile.activeRadarRange + ";" + missile.radarLOAL + ";" + missile.maxOffBoresight + ";" + missile.lockedSensorFOV + ";" + missile.heatThreshold + ";" + missile.beamCorrectionFactor + ";" + missile.beamCorrectionDamping ); } if (radar != null) { fileradars.WriteLine( item.name + ";" + item.title + ";" + item.author + ";" + item.manufacturer + ";" + item.partPrefab.mass + ";" + item.cost + ";" + item.partPrefab.crashTolerance + ";" + item.partPrefab.maxTemp + ";" + radar.radarName + ";" + radar.getRWRType(radar.rwrThreatType) + ";" + radar.omnidirectional + ";" + radar.directionalFieldOfView + ";" + radar.boresightFOV + ";" + radar.scanRotationSpeed + ";" + radar.lockRotationSpeed + ";" + radar.lockRotationAngle + ";" + radar.showDirectionWhileScan + ";" + radar.multiLockFOV + ";" + radar.lockAttemptFOV + ";" + radar.canScan + ";" + radar.canLock + ";" + radar.canTrackWhileScan + ";" + radar.canRecieveRadarData + ";" + radar.maxLocks + ";" + radar.radarGroundClutterFactor + ";" + radar.radarDetectionCurve.Evaluate(radar.radarMaxDistanceDetect) + "@" + radar.radarMaxDistanceDetect + ";" + radar.radarLockTrackCurve.Evaluate(radar.radarMaxDistanceLockTrack) + "@" + radar.radarMaxDistanceLockTrack ); } if (jammer != null) { filejammers.WriteLine( item.name + ";" + item.title + ";" + item.author + ";" + item.manufacturer + ";" + item.partPrefab.mass + ";" + item.cost + ";" + item.partPrefab.crashTolerance + ";" + item.partPrefab.maxTemp + ";" + jammer.alwaysOn + ";" + jammer.rcsReduction + ";" + jammer.rcsReductionFactor + ";" + jammer.lockBreaker + ";" + jammer.lockBreakerStrength + ";" + jammer.jammerStrength ); } } // 4. close file fileguns.Close(); filemissiles.Close(); fileradars.Close(); filejammers.Close(); Debug.Log("...dumping parts complete."); }
public void RemoveJammer(ModuleECMJammer jammer) { jammers.Remove(jammer); UpdateJammerStrength(); }