private void Start() { FARAeroSection.GenerateCrossFlowDragCurve(); FARAeroUtil.LoadAeroDataFromConfig(); DontDestroyOnLoad(this); debugMenu = false; }
private void Awake() { VoxelizationThreadpool.RunInMainThread = Debug.isDebugBuild; FARAeroSection.GenerateCrossFlowDragCurve(); FARAeroUtil.LoadAeroDataFromConfig(); FARAeroForceDisplayScale = PhysicsGlobals.AeroForceDisplayScale; PhysicsGlobals.AeroForceDisplayScale = 0; }
private void Start() { Instance = this; FARLogger.Info("Vehicle Voxel Setup started"); FARAeroSection.GenerateCrossFlowDragCurve(); VehicleVoxel.VoxelSetup(); PhysicsGlobals.DragCubeMultiplier = 0; FARLogger.Info("Vehicle Voxel Setup complete"); newGame = false; }
private void Start() { if (!CompatibilityChecker.IsAllCompatible()) { enabled = false; return; } FARAeroSection.GenerateCrossFlowDragCurve(); FARAeroStress.LoadStressTemplates(); FARAeroUtil.LoadAeroDataFromConfig(); //LoadConfigs(); DontDestroyOnLoad(this); debugMenu = false; }
private void Start() { if (!CompatibilityChecker.IsAllCompatible()) { enabled = false; return; } Instance = this; FARLogger.Info("Vehicle Voxel Setup started"); FARAeroSection.GenerateCrossFlowDragCurve(); VehicleVoxel.VoxelSetup(); PhysicsGlobals.DragCubeMultiplier = 0; FARLogger.Info("Vehicle Voxel Setup complete"); newGame = false; }
void UpdateAerodynamicCenter() { FARCenterQuery aeroSection, dummy; aeroSection = new FARCenterQuery(); dummy = new FARCenterQuery(); if ((object)EditorLogic.RootPart == null) { return; } Vector3 vel_base, vel_fuzz; Transform rootPartTrans = EditorLogic.RootPart.partTransform; if (EditorDriver.editorFacility == EditorFacility.SPH) { vel_base = Vector3.forward; vel_fuzz = 0.02f * Vector3.up; } else { vel_base = Vector3.up; vel_fuzz = -0.02f * Vector3.forward; } Vector3 vel = (vel_base - vel_fuzz).normalized; for (int i = 0; i < _currentAeroSections.Count; i++) { FARAeroSection section = _currentAeroSections[i]; section.PredictionCalculateAeroForces(1, 3, 100000, 0.005f, vel, aeroSection); } FARBaseAerodynamics.PrecomputeGlobalCenterOfLift(aeroSection, dummy, vel, 1); Vector3 pos = Vector3.zero;//rootPartTrans.position; float mass = 0; for (int i = 0; i < EditorLogic.SortedShipList.Count; i++) { Part p = EditorLogic.SortedShipList[i]; float tmpMass = p.mass + p.GetResourceMass(); mass += tmpMass; pos += p.partTransform.position * tmpMass; } pos /= mass; Vector3 avgForcePos = Vector3.zero; Vector3 force0, moment0; force0 = aeroSection.force; moment0 = aeroSection.TorqueAt(pos); avgForcePos += aeroSection.GetPos(); //aeroSection.force = -aeroSection.force; //aeroSection.torque = -aeroSection.torque; aeroSection.ClearAll(); vel = (vel_base + vel_fuzz).normalized; for (int i = 0; i < _currentAeroSections.Count; i++) { FARAeroSection section = _currentAeroSections[i]; section.PredictionCalculateAeroForces(1, 3, 100000, 0.005f, vel, aeroSection); } FARBaseAerodynamics.PrecomputeGlobalCenterOfLift(aeroSection, dummy, vel, 1); Vector3 force1, moment1; force1 = aeroSection.force; moment1 = aeroSection.TorqueAt(pos); avgForcePos += aeroSection.GetPos(); aeroSection.ClearAll(); avgForcePos *= 0.5f; Vector3 deltaForce = force1 - force0; Vector3 deltaMoment = moment1 - moment0; Vector3 deltaForcePerp = Vector3.ProjectOnPlane(deltaForce, vel_base); float deltaForcePerpMag = deltaForcePerp.magnitude; Vector3 deltaForcePerpNorm = deltaForcePerp / deltaForcePerpMag; Vector3 deltaMomentPerp = deltaMoment - Vector3.Dot(deltaMoment, deltaForcePerpNorm) * deltaForcePerpNorm - Vector3.Project(deltaMoment, vel_base); //float dist = deltaMomentPerp.magnitude / deltaForcePerpMag; //vesselRootLocalAeroCenter = vel_base * dist; vesselRootLocalAeroCenter = deltaMomentPerp.magnitude / deltaForcePerpMag * vel_base * Math.Sign(Vector3.Dot(Vector3.Cross(deltaForce, deltaMoment), vel_base)); //Debug.Log(dist + " " + deltaMomentPerp.magnitude + " " + deltaForcePerpMag); //vesselRootLocalAeroCenter += avgForcePos; //avgForcePos = rootPartTrans.worldToLocalMatrix.MultiplyPoint3x4(avgForcePos); //vesselRootLocalAeroCenter += Vector3.ProjectOnPlane(avgForcePos, Vector3.up); //vesselRootLocalAeroCenter = aeroSection.GetPos(); vesselRootLocalAeroCenter += pos;//Vector3.ProjectOnPlane(avgForcePos - pos, vesselRootLocalAeroCenter) + pos; vesselRootLocalAeroCenter = rootPartTrans.worldToLocalMatrix.MultiplyPoint3x4(vesselRootLocalAeroCenter); }