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
22
23
24
25
26
27
28
29
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
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
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 }