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