public void VesselUpdateEvent(Vessel v) { if (v == vessel) { if (_vehicleAero == null) { _vehicleAero = new VehicleAerodynamics(); _vesselIntakeRamDrag = new VesselIntakeRamDrag(); } RequestUpdateVoxel(true); } }
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.Modules.GetModule <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(); Debug.Log("Disabling FARVesselAero on " + vessel.name + " due to no FARGeometryModules on board"); } TriggerIGeometryUpdaters(); if (FARThreading.VoxelizationThreadpool.RunInMainThread) { for (int i = _currentGeoModules.Count - 1; i >= 0; --i) { if (!_currentGeoModules[i].Ready) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; return; } } } _voxelCount = VoxelCountFromType(); if (!_vehicleAero.TryVoxelUpdate(vessel.vesselTransform.worldToLocalMatrix, vessel.vesselTransform.localToWorldMatrix, _voxelCount, vessel.Parts, _currentGeoModules, !setup)) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; } if (!_updateQueued) { setup = true; } Debug.Log("Updating vessel voxel for " + vessel.vesselName); }
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 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(); } //this has been updated recently in the past; queue an update and return if (_updateRateLimiter < FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate) { _updateQueued = true; return; } _updateRateLimiter = 0; _updateQueued = false; if (vessel.rootPart.Modules.Contains <LaunchClamp>()) { DisableModule(); return; } if (recalcGeoModules) { _currentGeoModules.Clear(); geoModulesReady = 0; foreach (Part p in vessel.Parts) { GeometryPartModule g = p.Modules.GetModule <GeometryPartModule>(); if (g is null) { continue; } _currentGeoModules.Add(g); if (g.Ready) { geoModulesReady++; } } } if (_currentGeoModules.Count > geoModulesReady) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; return; } if (_currentGeoModules.Count == 0) { DisableModule(); FARLogger.Info("Disabling FARVesselAero on " + vessel.name + " due to no FARGeometryModules on board"); } TriggerIGeometryUpdaters(); if (VoxelizationThreadpool.RunInMainThread) { for (int i = _currentGeoModules.Count - 1; i >= 0; --i) { if (_currentGeoModules[i].Ready) { continue; } _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; return; } } _voxelCount = VoxelCountFromType(); if (!_vehicleAero.TryVoxelUpdate(vessel.vesselTransform.worldToLocalMatrix, vessel.vesselTransform.localToWorldMatrix, _voxelCount, vessel.Parts, _currentGeoModules, !setup, vessel)) { _updateRateLimiter = FARSettingsScenarioModule.VoxelSettings.minPhysTicksPerUpdate - 2; _updateQueued = true; } if (!_updateQueued) { setup = true; } FARLogger.Info("Updating vessel voxel for " + vessel.vesselName); }
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++; } } if (p.Modules.Contains <KerbalEVA>() || p.Modules.Contains <FlagSite>()) { Debug.Log("Handling Stuff for KerbalEVA / Flag"); g = (GeometryPartModule)p.AddModule("GeometryPartModule"); g.OnStart(StartState()); p.AddModule("FARAeroPartModule").OnStart(StartState()); _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 (_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 = new List <GeometryPartModule>(); 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); }