@@ -7,27 +7,33 @@

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Observable;
import javafx.beans.value.ObservableValue;

/**
*
* @author szymon
*/
public class Universe extends Observable {
private ArrayList<Planet> PlanetsTable = new ArrayList<>();
private ArrayList<Planet> planetsTable = new ArrayList<>();
private ArrayList< Double > PlanetsEnergyData = new ArrayList<>();


void setPlanets(ArrayList<Planet> Planets){
this.PlanetsTable = Planets;
System.out.println("SET PLANETS CALLED");
this.planetsTable = Planets;
setChanged();
notifyObservers();
}

Object getPlanets(){
return this.PlanetsTable;
Collection<Planet> getPlanets(){
return this.planetsTable;
}
void packEnergyData(){
double potential = 0;
double kinetic = 0;
for(Planet planet: PlanetsTable){
for(Planet planet: planetsTable){
potential += planet.getPotentialEnergy();
kinetic += planet.getKineticEnergy(); /* just in case we would need it later */
PlanetsEnergyData.add(potential + kinetic);
@@ -37,16 +43,17 @@ void packEnergyData(){
}

void updatePlanets() {
for(Planet planet : PlanetsTable) {
for(Planet otherPlanet : PlanetsTable) {
for(Planet planet : planetsTable) {
for(Planet otherPlanet : planetsTable) {
planet.calculateGravity(otherPlanet);
planet.calculatePotentialEnergy(otherPlanet);
planet.calculateKineticEnergy();
}
}
for(Planet planet : PlanetsTable) {
for(Planet planet : planetsTable) {
planet.updateState(SimulationConfig.getSimulationTimeStep());
}
setChanged();
notifyObservers();
}
}
@@ -7,16 +7,69 @@

import java.util.Observable;
import java.util.Observer;
import javafx.scene.AmbientLight;
import javafx.scene.Camera;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.SubScene;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Sphere;

/**
*
* @author adam
*/
public class VisualisationRenderer implements Observer {

private SubScene scene;
private Universe universe;
private PhongMaterial redMaterial;
private Group group;

public VisualisationRenderer(SubScene visualizationScene, Universe universe) {
scene = visualizationScene;
this.universe = universe;

group = new Group();
scene.setRoot(group);
Camera camera = new PerspectiveCamera(true);
camera.setTranslateZ(-500.0);
camera.setNearClip(0.1);
camera.setFarClip(10000.0);
scene.setCamera(camera);
scene.setFill(null);
AmbientLight light = new AmbientLight(Color.WHITE);
group.getChildren().add(light);

Sphere sphere = new Sphere(1.0);
group.getChildren().add(sphere);
redMaterial = new PhongMaterial();
redMaterial.setDiffuseColor(Color.DARKRED);
redMaterial.setSpecularColor(Color.RED);
sphere.setMaterial(redMaterial);

// for(Planet planet : universe.getPlanets()) {
// Sphere planetMesh = new Sphere();
// planetMesh.setMaterial(redMaterial);
// planetMesh.setTranslateX(planet.getX());
// planetMesh.setTranslateY(planet.getY());
// planetMesh.setTranslateZ(planet.getZ());
// group.getChildren().add(planetMesh);
// }
}

@Override
public void update(Observable o, Object arg) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
scene.setFill(Color.BLACK);
for(Planet planet : universe.getPlanets()) {
Sphere planetMesh = new Sphere(1.0);
planetMesh.setMaterial(redMaterial);
planetMesh.setTranslateX(planet.getX());
planetMesh.setTranslateY(planet.getY());
planetMesh.setTranslateZ(planet.getZ());
group.getChildren().add(planetMesh);
}
System.out.println("Renderer updated");
}

}