package solarsim.renderer; import java.awt.Canvas; import java.awt.Graphics; import java.util.LinkedList; import solarsim.common.Particle; import solarsim.common.State; import solarsim.common.Vector; class MyCanvas extends Canvas { private final LinkedList states; MyCanvas() { super(); this.setSize(800, 600); states = new LinkedList(); } void drawState(State s) { synchronized( states ) { if( states.size() == RenderConstants.MAX_STATES ) { states.removeLast(); } states.addFirst(s); } this.repaint(); } @Override public void paint(Graphics g) { g.translate(400, 300); g.drawLine(-300, -300, 300, 300); g.drawLine(-300, 300, 300, -300); g.drawLine(-300, -300, -300, 300); g.drawLine(300, -300, 300, 300); g.drawLine(-400, 0, 400, 0); g.drawLine(0, -300, 0, 300); synchronized(states) { for( State s : states ) { for( Particle p : s.getParticles() ) { Vector r = p.getPosition(); int dx = +(int)(r.x/RenderConstants.SCALE_FACTOR*300); int dy = -(int)(r.y/RenderConstants.SCALE_FACTOR*300); g.translate(dx, dy); g.fillOval(-1, -1, 3, 3); g.translate(-dx, -dy); } } } g.translate(-400, -300); } }