Beispiel #1
0
    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>();
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
 protected virtual void Start()
 {
     Trajectory       = new Trajectory();
     trajectorySolver = new UniversalVariableSolver();
 }