public List <Vector3> ForwardSimulate(RigidBody rigidBody, int totalPoints, int ticksBetweenPoints) { List <Vector3> futurePoints = new List <Vector3>(); float timeStep = Time.fixedDeltaTime; RigidBody myClone = rigidBody.DeepCopy(); int totalTicks = totalPoints * ticksBetweenPoints; for (int index = 0; index < totalTicks; ++index) { foreach (var attractor in attractors) { attractor.ApplyForce(myClone); } myClone.OnFixedUpdate(); if ((index) % ticksBetweenPoints == 0) { futurePoints.Add(myClone.position); } } return(futurePoints); }
public PathResult ForwardSimulate(RigidBody rigidBody, int totalPoints, int ticksBetweenPoints, Vector3 shipOffset) { PathResult pathResult = new PathResult(); List <Vector3> futurePoints = new List <Vector3>(); pathResult.FuturePoints = futurePoints; pathResult.State = FutureState.OK; float timeStep = Time.fixedDeltaTime; RigidBody myClone = rigidBody.DeepCopy(); int totalTicks = totalPoints * ticksBetweenPoints; for (int index = 0; index < totalTicks; ++index) { foreach (var attractor in attractors) { attractor.ApplyForce(myClone); } myClone.OnFixedUpdate(); foreach (var attractor in attractors) { if (Vector3.Distance(attractor.transform.position, myClone.position) < attractor.GetComponent <SphereCollider>().radius) { //we've hit this attractor pathResult.State = FutureState.PlanetHit; break; } } if (Vector3.Distance(ActiveCheckpoint.transform.position, myClone.position) < ActiveCheckpoint.GetComponent <SphereCollider>().radius *10) { pathResult.State = FutureState.CheckpointHit; } if (pathResult.State != FutureState.OK) { break; } if ((index) % ticksBetweenPoints == 0) { futurePoints.Add(myClone.position + shipOffset); } } return(pathResult); }