private void UpdateOrbit() { if (DeltaVelocity.magnitude < minimumDeltaVelocity) { return; } if (trajectoryObjectPrefab == null) { Debug.Log("No trajectory object prefab selected!"); return; } if (trajectoryObject == null) { // Instantiate prefab if null trajectoryObject = Instantiate(trajectoryObjectPrefab); trajectoryPlotter = trajectoryObject.GetComponent <TrajectoryPlotter>(); // Pass ship to intersection calculator intersectionCalculator = trajectoryObject.GetComponent <IntersectionCalculator>(); //intersectionCalculator.SetOrbitalBody(ship); } trajectoryObject.transform.parent = ship.CurrentGravitySource.transform; trajectoryObject.transform.position = trajectoryObject.transform.parent.position; // Specifically velocity in world coordinates! Vector2 newOrbitalVelocity = orbitalSpeed * orbitalDirection + DeltaVelocity; Vector2 relVel = newOrbitalVelocity.RotateVector(ship.Trajectory.ArgumentOfPeriapsis); Vector2 relPos = (Vector2)transform.position - ship.CurrentGravitySource.Position; // world pos - newSource.pos trajectory.CalculateOrbitalParametersFromStateVectors(relPos, relVel, ship.CurrentGravitySource); if (trajectory.TrajectoryType == Mechanics.Globals.TrajectoryType.Ellipse) { trajectoryPlotter.BuildEllipticalTrajectory(trajectory.SemimajorAxis, trajectory.SemiminorAxis, trajectory.Eccentricity, trajectory.ArgumentOfPeriapsis); } else { trajectoryPlotter.BuildHyperbolicTrajectory(trajectory.SemimajorAxis, trajectory.SemiminorAxis, trajectory.Eccentricity, trajectory.ArgumentOfPeriapsis); } float timeToNode = OrbitalMechanics.UniversalVariableMethod.CalculateTimeOfFlight(ship.OrbitalPosition, ship.OrbitalVelocity, orbitalPosition, ship.Trajectory.EccentricityVector, ship.Trajectory.ParentGravitySource.Mass); UpdateIntersections(timeToNode, relPos, relVel); }
private void UpdateTrajectory() { if (orbitalBody.CurrentGravitySource == null) { return; } trajectoryObject.transform.parent = orbitalBody.CurrentGravitySource.transform; trajectoryObject.transform.position = trajectoryObject.transform.parent.position; if (orbitalBody.Trajectory.Eccentricity >= 1f) { trajectoryPlotter.BuildHyperbolicTrajectory(SemimajorAxis, SemiminorAxis, orbitalBody.Trajectory.Eccentricity, orbitalBody.Trajectory.ArgumentOfPeriapsis); } else { trajectoryPlotter.BuildEllipticalTrajectory(SemimajorAxis, SemiminorAxis, orbitalBody.Trajectory.Eccentricity, orbitalBody.Trajectory.ArgumentOfPeriapsis); } // Plot nearest intersections if (intersectionCalculator != null && orbitalBody is GravityAffected) { intersectionCalculator.PlotNearestSourceIntersections(orbitalBody); } }