package de.hems.trafficsim; import android.graphics.Canvas; /** * Calculation thread, which runs the simulation itself and also updates the view with a set rate. */ public class Worker extends Thread { /** * the track to simulate */ protected Track track; /** * Stop flag, indicating that the worker shall stop */ protected boolean stop; /** * the MainActivity of the gui */ protected MainActivity gui; /** * the Renderer drawing the Track */ protected Renderer renderer; /** * Amount of simulation steps between two frames in the view. Zero means * that every simulation step is drawn. */ protected int frameskip; /** * Construct a new worker. * * @param track the track to simulate * @param gui the MainActivity of the gui * @param renderer the Renderer drawing the Track * @param frameskip Amount of simulation steps between two frames in the view. Zero means * that every simulation step is drawn */ public Worker(Track track, MainActivity gui, Renderer renderer, int frameskip) { super(); this.track = track; this.stop = false; this.gui = gui; this.renderer = renderer; this.frameskip = frameskip; } /** * Sets a flag that causes the worker to stop. * * @param stop flag whether the thread shall stop */ public void setStop(boolean stop) { this.stop = stop; } /** * Updates the amount of simulation steps between to view frames. * * @param frames amount of steps */ public void setFrameskip(int frames) { this.frameskip = frames; } /** * Method which is automatically executed when the thread is started. It alternates between * updating the simulation and drawing a new frame in the view. */ @Override public void run() { Canvas canvas = null; int i = 0; while (!stop) { this.track.timeElapse(); this.gui.updateStats(); if (i >= this.frameskip) { this.renderer.draw(); i = 0; } i++; } } }