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
20
21
22
23
24
25
26
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
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
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 }