public void UpdateAeroData(List<FARAeroPartModule> aeroModules, List<FARAeroSection> aeroSections, VehicleAerodynamics vehicleAero, List<FARWingAerodynamicModel> wingAerodynamicModel) { _currentAeroModules = aeroModules; _currentAeroSections = aeroSections; _wingAerodynamicModel = wingAerodynamicModel; _maxCrossSectionFromBody = vehicleAero.MaxCrossSectionArea; _bodyLength = vehicleAero.Length; }
void Start() { if (CompatibilityChecker.IsAllCompatible() && instance == null) instance = this; else { GameObject.Destroy(this); return; } _vehicleAero = new VehicleAerodynamics(); guiRect = new Rect(Screen.width / 4, Screen.height / 6, 10, 10); _instantSim = new InstantConditionSim(); GUIDropDown<int> flapSettingDropDown = new GUIDropDown<int>(new string[] { "0 (up)", "1 (init climb)", "2 (takeoff)", "3 (landing)" }, new int[] { 0, 1, 2, 3 }, 0); GUIDropDown<CelestialBody> celestialBodyDropdown = CreateBodyDropdown(); _simManager = new EditorSimManager(_instantSim); _editorGraph = new StaticAnalysisGraphGUI(_simManager, flapSettingDropDown, celestialBodyDropdown); _stabDeriv = new StabilityDerivGUI(_simManager, flapSettingDropDown, celestialBodyDropdown); _stabDerivLinSim = new StabilityDerivSimulationGUI(_simManager); Color crossSection = GUIColors.GetColor(3); crossSection.a = 0.8f; Color crossSectionDeriv = GUIColors.GetColor(2); crossSectionDeriv.a = 0.8f; _areaRulingOverlay = new EditorAreaRulingOverlay(new Color(0.05f, 0.05f, 0.05f, 0.7f), crossSection, crossSectionDeriv, 10, 5); guiRect.height = 500; guiRect.width = 650; GameEvents.onEditorPartEvent.Add(UpdateGeometryEvent); GameEvents.onEditorUndo.Add(ResetEditorEvent); GameEvents.onEditorRedo.Add(ResetEditorEvent); GameEvents.onEditorShipModified.Add(ResetEditorEvent); GameEvents.onEditorLoad.Add(ResetEditorEvent); GameEvents.onGUIEngineersReportReady.Add(AddDesignConcerns); GameEvents.onGUIEngineersReportDestroy.Add(RemoveDesignConcerns); RequestUpdateVoxel(); }
void OnDestroy() { GameEvents.onEditorPartEvent.Remove(UpdateGeometryEvent); GameEvents.onEditorUndo.Remove(ResetEditorEvent); GameEvents.onEditorRedo.Remove(ResetEditorEvent); GameEvents.onEditorShipModified.Remove(ResetEditorEvent); GameEvents.onEditorLoad.Remove(ResetEditorEvent); GameEvents.onGUIEngineersReportReady.Remove(AddDesignConcerns); GameEvents.onGUIEngineersReportDestroy.Remove(AddDesignConcerns); EditorLogic.fetch.Unlock("FAREdLock"); if (blizzyEditorGUIButton != null) blizzyEditorGUIButton.Destroy(); _stabDerivLinSim = null; _instantSim = null; _areaRulingOverlay = null; _editorGraph = null; _stabDeriv = null; if(_vehicleAero != null) _vehicleAero.ForceCleanup(); _vehicleAero = null; }
public void UpdateAeroData(VehicleAerodynamics vehicleAero, List<ferram4.FARWingAerodynamicModel> wingAerodynamicModel) { List<FARAeroPartModule> aeroModules; List<FARAeroSection> aeroSections; vehicleAero.GetNewAeroData(out aeroModules, out aeroSections); _instantCondition.UpdateAeroData(aeroModules, aeroSections, vehicleAero, wingAerodynamicModel); _aeroCenter.UpdateAeroData(aeroModules, aeroSections); }
private void Start() { if (!CompatibilityChecker.IsAllCompatible()) { this.enabled = false; return; } _vessel = gameObject.GetComponent<Vessel>(); this.enabled = true; if (_vessel.rootPart.Modules.Contains("MissileLauncher") && _vessel.parts.Count == 1) { _vessel.rootPart.dragModel = Part.DragModel.CUBE; this.enabled = false; return; } _currentGeoModules = new List<GeometryPartModule>(); for (int i = 0; i < _vessel.parts.Count; i++) { Part p = _vessel.parts[i]; p.maximum_drag = 0; p.minimum_drag = 0; p.angularDrag = 0; /*p.dragModel = Part.DragModel.NONE; p.dragReferenceVector = Vector3.zero; p.dragScalar = 0; p.dragVector = Vector3.zero; p.dragVectorDir = Vector3.zero; p.dragVectorDirLocal = Vector3.zero; p.dragVectorMag = 0; p.dragVectorSqrMag = 0; p.bodyLiftMultiplier = 0; p.bodyLiftScalar = 0;*/ GeometryPartModule g = p.GetComponent<GeometryPartModule>(); if((object)g != null) { _currentGeoModules.Add(g); if (g.Ready) geoModulesReady++; } else if(p.Modules.Contains("KerbalEVA")) { p.AddModule("GeometryPartModule"); g = p.GetComponent<GeometryPartModule>(); p.AddModule("FARAeroPartModule"); _currentGeoModules.Add(g); } } GameEvents.onVesselGoOffRails.Add(VesselUpdateEvent); //GameEvents.onVesselChange.Add(VesselUpdateEvent); //GameEvents.onVesselLoaded.Add(VesselUpdate); //GameEvents.onVesselCreate.Add(VesselUpdateEvent); GameEvents.onVesselWasModified.Add(VesselUpdateEvent); RequestUpdateVoxel(false); if (_vessel == null) { _vessel = gameObject.GetComponent<Vessel>(); if (_vessel == null) { return; } } if (_vehicleAero == null) { _vehicleAero = new VehicleAerodynamics(); _vesselIntakeRamDrag = new VesselIntakeRamDrag(); } //Debug.Log("Starting " + _vessel.vesselName + " aero properties"); }
public void VesselUpdate(bool recalcGeoModules) { if (_vessel == null) { _vessel = gameObject.GetComponent<Vessel>(); if (_vessel == null || _vessel.vesselTransform == null) { return; } } if (_vehicleAero == null) { _vehicleAero = new VehicleAerodynamics(); _vesselIntakeRamDrag = new VesselIntakeRamDrag(); } if (_updateRateLimiter < FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate) //this has been updated recently in the past; queue an update and return { _updateQueued = true; return; } else //last update was far enough in the past to run; reset rate limit counter and clear the queued flag { _updateRateLimiter = 0; _updateQueued = false; } if (_vessel.rootPart.Modules.Contains("LaunchClamp"))// || _vessel.rootPart.Modules.Contains("KerbalEVA")) { DisableModule(); return; } if (recalcGeoModules) { _currentGeoModules.Clear(); geoModulesReady = 0; for (int i = 0; i < _vessel.parts.Count; i++) { Part p = _vessel.parts[i]; GeometryPartModule g = p.GetComponent<GeometryPartModule>(); if ((object)g != null) { _currentGeoModules.Add(g); if (g.Ready) geoModulesReady++; } } } if (_currentGeoModules.Count > geoModulesReady) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; return; } if(_currentGeoModules.Count == 0) { DisableModule(); } TriggerIGeometryUpdaters(); _voxelCount = VoxelCountFromType(); if (!_vehicleAero.TryVoxelUpdate(_vessel.vesselTransform.worldToLocalMatrix, _vessel.vesselTransform.localToWorldMatrix, _voxelCount, _vessel.parts, _currentGeoModules, !setup)) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; } setup = true; Debug.Log("Updating vessel voxel for " + _vessel.vesselName); }
public AreaRulingConcern(VehicleAerodynamics vesselAero) { _vesselAero = vesselAero; }
public void UpdateAeroData(VehicleAerodynamics vehicleAero, List<ferram4.FARWingAerodynamicModel> wingAerodynamicModel) { _instantCondition.UpdateAeroData(vehicleAero, wingAerodynamicModel); _aeroCenter.UpdateAeroData(vehicleAero); }
public void UpdateAeroData(VehicleAerodynamics vehicleAero) { vehicleAero.GetNewAeroData(out _currentAeroModules, out _currentAeroSections); UpdateAerodynamicCenter(); }
public void UpdateAeroData(VehicleAerodynamics vehicleAero, List<FARWingAerodynamicModel> wingAerodynamicModel) { vehicleAero.GetNewAeroData(out _currentAeroModules, out _currentAeroSections); _wingAerodynamicModel = wingAerodynamicModel; _maxCrossSectionFromBody = vehicleAero.MaxCrossSectionArea; _bodyLength = vehicleAero.Length; }