private void Awake() { nodeCollider = GetComponent <CircleCollider2D>(); if (nodeCollider == null) { throw new UnityException(string.Format("Expecting ManeuverNode to have a Circle collider on it!")); } if (nodeSprite == null) { throw new UnityException(string.Format("Expecting ManeuverNode to have a SpriterRenderer on a child object!")); } nodeOutline = nodeSprite.GetComponent <CirclePlotter>(); if (nodeOutline == null) { throw new UnityException(string.Format("Expecting ManeuverNode to have a CirclePlotter on its child object w/ a SpriteRenderer!")); } if (tangentialForwardVectorHandler == null || tangentialBackwardVectorHandler == null || orthogonalOutVectorHandler == null || orthogonalInVectorHandler == null) { throw new UnityException(string.Format("Expecting ManeuverNode to have a ManeuverVectorHandler on each of four child objects!")); } // Event listeners for velocity mag change tangentialForwardVectorHandler.DeltaVelocityAdjustedEvent += AdjustVelocityTangentiallyForward; tangentialBackwardVectorHandler.DeltaVelocityAdjustedEvent += AdjustVelocityTangentiallyBackward; orthogonalOutVectorHandler.DeltaVelocityAdjustedEvent += AdjustVelocityOrthogonallyOutward; orthogonalInVectorHandler.DeltaVelocityAdjustedEvent += AdjustVelocityOrthogonallyInward; trajectory = new Trajectory(); trajectorySolver = new UniversalVariableSolver(); maneuverNodes = new List <ManeuverNode>(); }
public Vector2 PredictPosition(float timeOfFlight) { Vector2 relativePosition = Position; Vector2 relativeVelocity = Velocity; if (CurrentGravitySource != null) { relativePosition -= CurrentGravitySource.Position; relativeVelocity -= CurrentGravitySource.Velocity; } // Initialize Solver UniversalVariableSolver tempTrajSolver = new UniversalVariableSolver(); tempTrajSolver.InitializeSolver(relativePosition, relativeVelocity, CurrentGravitySource.Mass, Trajectory); // Solve for new position given time of flight tempTrajSolver.UpdateStateVariables(timeOfFlight); return(tempTrajSolver.CalculatedPosition.RotateVector(Trajectory.ArgumentOfPeriapsis) + CurrentGravitySource.Position); }
protected virtual void Start() { Trajectory = new Trajectory(); trajectorySolver = new UniversalVariableSolver(); }