View Javadoc
1   package org.woehlke.computer.kurzweil.tabs.randomwalk.canvas;
2   
3   
4   import lombok.EqualsAndHashCode;
5   import lombok.Getter;
6   import lombok.ToString;
7   import lombok.extern.java.Log;
8   import org.woehlke.computer.kurzweil.commons.model.LatticePoint;
9   import org.woehlke.computer.kurzweil.commons.layouts.LayoutCanvas;
10  import org.woehlke.computer.kurzweil.commons.tabs.TabCanvas;
11  import org.woehlke.computer.kurzweil.tabs.randomwalk.config.RandomWalkContext;
12  import org.woehlke.computer.kurzweil.tabs.randomwalk.model.RandomWalkModel;
13  import org.woehlke.computer.kurzweil.tabs.randomwalk.config.RandomWalk;
14  
15  import javax.swing.*;
16  import javax.swing.border.Border;
17  import java.awt.*;
18  import java.io.Serializable;
19  
20  /**
21   * Cyclic Cellular Automaton.
22   * <p>
23   * (C) 2006 - 2013 Thomas Woehlke.
24   * http://thomas-woehlke.de/p/cyclic-cellular-automaton/
25   *
26   * @author Thomas Woehlke
27   * <p>
28   * Date: 05.02.2006
29   * Time: 00:51:51
30   */
31  @Log
32  @Getter
33  @ToString(callSuper = true, exclude = {"tabCtx", "border", "preferredSize", "layout", "colorScheme", "tabModel"})
34  @EqualsAndHashCode(callSuper = true, exclude = {"tabCtx", "border", "preferredSize", "layout", "colorScheme", "tabModel"})
35  public class RandomWalkCanvas extends JComponent implements
36      Serializable, TabCanvas, RandomWalk {
37  
38      private static final long serialVersionUID = 7526471155622776147L;
39  
40      private final RandomWalkContext tabCtx;
41      private final RandomWalkModel tabModel;
42      private final Border border;
43      private final Dimension preferredSize;
44      private final LayoutCanvas layout;
45      private final RandomWalkColorScheme colorScheme;
46      private Boolean running;
47      private LatticePoint particlePosition;
48  
49      private final static int startX = 0;
50      private final static int startY = 0;
51      private final int worldX;
52      private final int worldY;
53  
54      public RandomWalkCanvas(RandomWalkContext tabCtx) {
55          this.tabCtx = tabCtx;
56          this.tabModel = new RandomWalkModel(this.tabCtx);
57          this.border = this.tabCtx.getCtx().getCanvasBorder();
58          this.worldX = this.tabCtx.getCtx().getWorldDimensions().getX();
59          this.worldY = this.tabCtx.getCtx().getWorldDimensions().getY();
60          this.layout = new LayoutCanvas(this);
61          this.preferredSize = new Dimension(worldX, worldY);
62          this.colorScheme = new RandomWalkColorScheme();
63          this.setLayout(layout);
64          this.setPreferredSize(preferredSize);
65          this.setMinimumSize(preferredSize);
66          this.setMaximumSize(preferredSize);
67          this.setSize(this.worldX, this.worldY);
68          this.tabModel.resetLattice();
69          this.particlePosition = new LatticePoint(worldX / 2, worldY / 2);
70          this.running = Boolean.FALSE;
71      }
72  
73      @Override
74      public void paint(Graphics g) {
75          //log.info("paint START (Graphics g)");
76          int x;
77          int y;
78          long age;
79          int red;
80          int green;
81          int blue;
82          long myage;
83          long mybyte;
84          long limit = 256 * 256 * 256;
85          if (this.tabModel.getLattice() == null) {
86              this.tabModel.resetLattice();
87          }
88          for (y = 0; y < worldY; y++) {
89              for (x = 0; x < worldX; x++) {
90                  age = this.tabModel.getLattice()[x][y];
91                  if (age == 0) {
92                      red = 0;
93                      green = 0;
94                      blue = 0;
95                  } else {
96                      myage = limit - (age % limit);
97                      mybyte = myage % 256;
98                      red = (int) (mybyte);
99                      myage /= 256;
100                     mybyte = myage % 256;
101                     green = (int) (mybyte);
102                     myage /= 256;
103                     mybyte = myage % 256;
104                     blue = (int) (mybyte);
105                 }
106                 Color colorForAge = new Color(red, green, blue);
107                 g.setColor(colorForAge);
108                 g.drawLine(x, y, x, y);
109             }
110         }
111         super.paintComponent(g);
112         //log.info("paint DONE (Graphics g)");
113     }
114 
115     @Override
116     public void update(Graphics g) {
117         paint(g);
118     }
119 
120 
121     @Override
122     public void showMe() {
123 
124     }
125 }