void Update() { transform.position = body.Position * StateBus.DistanceScale; transform.rotation = body.Rotation; foreach (var info in asteroids) { info.DeltaTime += info.DeltaTime2 * Time.deltaTime; if (info.DeltaTime > maxDeltaTime) { //reset asteroid from other end of ring info.DeltaTime = -maxDeltaTime; InitShader(info.Object);//change visual } info.Object.transform.position = body.GetPosition(StateBus.ModelTime + info.DeltaTime) * StateBus.DistanceScale + info.Offset; var addRot = info.AddRotation2 * Time.deltaTime; info.AddRotation *= Quaternion.Euler(addRot.x, addRot.y, addRot.z); info.Object.transform.rotation = body.Rotation * info.AddRotation; var size = (float)(body.Radius * StateBus.SizeScale) * info.Scale; if (StateBus.LogarithmicSize) { size = Mathf.Log(size + 1, 3f); } var distanceScale = 1 - Mathf.Pow(info.DeltaTime / maxDeltaTime, 2); size *= distanceScale; info.Object.transform.localScale = new Vector3(size, size, size); } }
void UpdateTrajectory() { if (!line) { return; } if (body.Mass < Constants.EARTH_MASS / 10) { return; } if (body.OrbitalSpeed < 1) { return; } var t = StateBus.ModelTime; var stepT = (body.OrbitRadius / body.OrbitalSpeed) / points.Length * Mathf.PI * 2; for (int i = 0; i < points.Length; i++) { points[i] = body.GetPosition(t) * StateBus.DistanceScale; t -= stepT; } line.positionCount = points.Length; line.SetPositions(points); line.loop = true; }