Commit | Line | Data |
---|---|---|
97491195 | 1 | import java.awt.Color; |
d75d0a00 | 2 | import java.util.Arrays; |
97491195 | 3 | |
5687dc10 | 4 | public class Eye { |
d75d0a00 | 5 | private String strColor; |
97491195 | 6 | private Color color; |
d75d0a00 | 7 | private String[] colorsList = {"black", "blue", "brown", "green"}; |
883508ca JB |
8 | |
9 | Eye() { | |
7add5cb9 | 10 | //this.color = Color.white; |
d75d0a00 | 11 | sortColorList(); |
883508ca | 12 | } |
97491195 | 13 | |
ac6c3ea2 | 14 | /** |
ac6c3ea2 JB |
15 | * @param color |
16 | */ | |
1c118933 | 17 | Eye(String color) { |
d75d0a00 | 18 | setStrColor(color); |
97491195 | 19 | setColor(color); |
d75d0a00 JB |
20 | sortColorList(); |
21 | } | |
22 | ||
23 | public String getStrColor() { | |
24 | return strColor; | |
25 | } | |
26 | ||
27 | public void setStrColor(String strColor) { | |
28 | if (validateColor(strColor)) { | |
29 | this.strColor = strColor; | |
30 | } else { | |
480ff9f5 | 31 | throw new IllegalArgumentException("Color must be" + this.colorListToString()); |
d75d0a00 | 32 | } |
97491195 JB |
33 | } |
34 | ||
883508ca JB |
35 | public String[] getColorsList() { |
36 | return colorsList; | |
37 | } | |
38 | ||
ac6c3ea2 | 39 | /** |
ac6c3ea2 JB |
40 | * @return |
41 | */ | |
97491195 JB |
42 | public Color getColor() { |
43 | return color; | |
44 | } | |
45 | ||
ac6c3ea2 | 46 | /** |
ac6c3ea2 JB |
47 | * @param color |
48 | */ | |
1c118933 | 49 | public void setColor(String color) { |
6b48f570 | 50 | if (validateColor(color)) { |
9b3bfcdd JB |
51 | if (color.equals("black")) |
52 | this.color = Color.black; | |
53 | else if (color.equals("blue")) | |
54 | this.color = Color.blue; | |
55 | else if (color.equals("brown")) | |
6b48f570 | 56 | this.color = new Color(88, 41, 0); |
9b3bfcdd JB |
57 | else if (color.equals("green")) |
58 | this.color = Color.green; | |
6b48f570 | 59 | } else { |
480ff9f5 | 60 | throw new IllegalArgumentException("Color must be" + this.colorListToString()); |
6b48f570 JB |
61 | } |
62 | } | |
63 | ||
ac6c3ea2 | 64 | /** |
ac6c3ea2 JB |
65 | * @param color |
66 | * @return | |
67 | */ | |
6b48f570 | 68 | private boolean validateColor(String color) { |
883508ca JB |
69 | for (String c : colorsList) { |
70 | if (color.equals(c)) { | |
71 | return true; | |
72 | } | |
73 | } | |
74 | return false; | |
1c118933 JB |
75 | } |
76 | ||
d75d0a00 JB |
77 | private void sortColorList() { |
78 | Arrays.sort(this.colorsList); | |
79 | } | |
80 | ||
ac6c3ea2 | 81 | /** |
ac6c3ea2 JB |
82 | * @param eye |
83 | * @return | |
84 | */ | |
5687dc10 | 85 | public int distanceTo(Eye eye) { |
6b48f570 JB |
86 | double r_diff = this.getColor().getRed() - eye.getColor().getRed(); |
87 | double g_diff = this.getColor().getGreen() - eye.getColor().getGreen(); | |
88 | double b_diff = this.getColor().getBlue() - eye.getColor().getBlue(); | |
f1e9d6d2 | 89 | //See https://en.wikipedia.org/wiki/Color_difference |
6b48f570 JB |
90 | Double distance = Math.sqrt(2 * Math.pow(r_diff, 2) + 4 * Math.pow(g_diff, 2) + 3 * Math.pow(b_diff, 2)); |
91 | return distance.intValue(); | |
97491195 | 92 | } |
b974e749 | 93 | |
d75d0a00 | 94 | private String colorListToString() { |
b974e749 JB |
95 | StringBuilder stringBuilder = new StringBuilder(); |
96 | for (String c : colorsList) { | |
97 | stringBuilder.append(" "); | |
98 | stringBuilder.append(c); | |
99 | } | |
100 | return stringBuilder.toString(); | |
101 | } | |
97491195 | 102 | } |