Example #1
0
 public void VesselUpdateEvent(Vessel v)
 {
     if (v == vessel)
     {
         if (_vehicleAero == null)
         {
             _vehicleAero         = new VehicleAerodynamics();
             _vesselIntakeRamDrag = new VesselIntakeRamDrag();
         }
         RequestUpdateVoxel(true);
     }
 }
Example #2
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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");
        }
Example #7
0
        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);
        }