private void GenerateGravityObjects() { var gravityObjects = new GravityObjectModel[gravityGameObjects.Length]; int centerIndex = -1; for (int i = 0; i < gravityObjects.Length; i++) { if (gravityGameObjects[i] == FocusGameObject) { centerIndex = i; } Vector position = new Vector(); Vector velocity = new Vector(); GravityGameObjectProperties properties = gravityGameObjects[i].GetComponent <GravityGameObjectProperties>(); vectorUtilities.MakeFristVectorEqualSecondVector(position, gravityGameObjects[i].transform.position); vectorUtilities.MakeFristVectorEqualSecondVector(velocity, properties.StartVelocity); gravityObjects[i] = new GravityObjectModel(properties.Mass, position, velocity); } if (!CenterPlanets) { centerIndex = -1; } gameController = new GameController(gravityObjects, centerIndex); //centerIndex }
public void UpdateVelocity(GravityObjectModel objectNow, GravityObjectModel[] objects) { for (int i = 0; i < objects.Length; i++) { if (objects[i] != objectNow) { float sqrtDst = vectorService.SqrMagnitude(objects[i].Position - objectNow.Position); Vector forceDir = vectorService.Normilize(objects[i].Position - objectNow.Position); Vector force = forceDir * gravitationalConstant * objectNow.Mass * objects[i].Mass / sqrtDst; Vector acceleration = force / objectNow.Mass; objectNow.Velocity = objectNow.Velocity + acceleration * physicsTimeStep; } } }
public void UpdatePosition(GravityObjectModel objectNow) { objectNow.Position = objectNow.Position + objectNow.Velocity * physicsTimeStep; }
public void UpdatePosition(GravityObjectModel objectNow, Vector centerPosition) { objectNow.Position = objectNow.Position + objectNow.Velocity * physicsTimeStep - centerPosition; }