View Javadoc
1   package org.woehlke.computer.kurzweil.mandelbrot.model.state;
2   
3   import static org.woehlke.computer.kurzweil.mandelbrot.model.state.ApplicationState.*;
4   import static org.woehlke.computer.kurzweil.mandelbrot.model.state.ApplicationState.JULIA_SET_ZOOM;
5   
6   /**
7    * Mandelbrot Set drawn by a Turing Machine.
8    *
9    * (C) 2006 - 2015 Thomas Woehlke.
10   * https://thomas-woehlke.blogspot.com/2016/01/mandelbrot-set-drawn-by-turing-machine.html
11   * @author Thomas Woehlke
12   *
13   * Created by tw on 16.12.2019.
14   */
15  public class ApplicationStateMachine {
16  
17      private volatile ApplicationState applicationState;
18  
19      public ApplicationStateMachine() {
20          this.applicationState = ApplicationState.MANDELBROT;
21      }
22  
23      public void click(){
24          ApplicationState nextApplicationState = null;
25          switch (applicationState){
26              case MANDELBROT:
27                  nextApplicationState = JULIA_SET;
28                  break;
29              case JULIA_SET:
30                  nextApplicationState = MANDELBROT;
31                  break;
32              case MANDELBROT_ZOOM:
33                  nextApplicationState = MANDELBROT_ZOOM;
34                  break;
35              case JULIA_SET_ZOOM:
36                  nextApplicationState = JULIA_SET_ZOOM;
37                  break;
38          }
39          this.setApplicationState(nextApplicationState);
40      }
41  
42      public void setModeSwitch() {
43          ApplicationState nextApplicationState = this.applicationState;
44          switch (applicationState){
45              case MANDELBROT:
46              case JULIA_SET:
47                  break;
48              case MANDELBROT_ZOOM:
49                  nextApplicationState = MANDELBROT;
50                  break;
51              case JULIA_SET_ZOOM:
52                  nextApplicationState = JULIA_SET;
53                  break;
54          }
55          this.setApplicationState(nextApplicationState);
56      }
57  
58      public void setModeZoom() {
59          ApplicationState nextApplicationState = this.applicationState;
60          switch (applicationState){
61              case MANDELBROT:
62                  nextApplicationState = MANDELBROT_ZOOM;
63                  break;
64              case JULIA_SET:
65                  nextApplicationState = JULIA_SET_ZOOM;
66                  break;
67              case MANDELBROT_ZOOM:
68              case JULIA_SET_ZOOM:
69                  break;
70          }
71          this.setApplicationState(nextApplicationState);
72      }
73  
74      public ApplicationState getApplicationState() {
75          return applicationState;
76      }
77  
78      public void setApplicationState(ApplicationState applicationState) {
79          this.applicationState = applicationState;
80      }
81  
82  }