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 }