1 package org.woehlke.computer.kurzweil.tabs.simulatedevolution; 2 3 import lombok.EqualsAndHashCode; 4 import lombok.Getter; 5 import lombok.Setter; 6 import lombok.ToString; 7 import lombok.extern.log4j.Log4j2; 8 import org.woehlke.computer.kurzweil.application.ComputerKurzweilContext; 9 import org.woehlke.computer.kurzweil.commons.tabs.TabContext; 10 import org.woehlke.computer.kurzweil.tabs.simulatedevolution.model.WorldPoint; 11 12 import java.util.concurrent.ForkJoinTask; 13 14 import static java.lang.Thread.State.NEW; 15 16 @Log4j2 17 @Getter 18 @ToString(callSuper = false, exclude={"ctx","controller","tab"}) 19 @EqualsAndHashCode(callSuper = false, exclude={"ctx","controller","tab"}) 20 public class SimulatedEvolutionContext extends ForkJoinTask<Void> implements TabContext, SimulatedEvolution { 21 22 private final ComputerKurzweilContext ctx; 23 private final SimulatedEvolutionTab tab; 24 private final SimulatedEvolutionCanvas canvas; 25 private final SimulatedEvolutionModel tabModel; 26 27 @Setter 28 private SimulatedEvolutionController controller; 29 30 public SimulatedEvolutionContext( 31 SimulatedEvolutionTab tab, 32 ComputerKurzweilContext ctx 33 ) { 34 this.tab = tab; 35 this.ctx = ctx; 36 int scale = 2; 37 int width = 320 * scale; 38 int height = 234 * scale; 39 WorldPointsimulatedevolution/model/WorldPoint.html#WorldPoint">WorldPoint worldDimensions = new WorldPoint(width,height); 40 this.canvas = new SimulatedEvolutionCanvas( worldDimensions ); 41 this.tabModel = this.canvas.getTabModel(); 42 this.controller = new SimulatedEvolutionController(); 43 } 44 45 @Override 46 public void stopController() { 47 this.controller.exit(); 48 this.controller = null; 49 this.controller = new SimulatedEvolutionController(); 50 } 51 52 @Override 53 public void startController() { 54 if(this.controller == null){ 55 this.controller = new SimulatedEvolutionController(); 56 } else { 57 if(this.controller.getState() != NEW){ 58 this.stopController(); 59 } 60 } 61 } 62 63 @Override 64 public Void getRawResult() { 65 return null; 66 } 67 68 @Override 69 protected void setRawResult(Void value) { 70 71 } 72 73 @Override 74 protected boolean exec() { 75 this.tab.update(); 76 this.tab.repaint(); 77 return true; 78 } 79 }