scorched_earth 5.0.3.pre-java → 5.0.4.pre-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/scorched_earth/color_palette.rb +13 -1
- data/lib/scorched_earth/services/cie94.rb +99 -0
- data/lib/scorched_earth/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f00d9340bc3c2def8581c5632ff80cfb2c9a1c7b
|
4
|
+
data.tar.gz: 628dff9384fc39729eaa311a7c5377e5857bb606
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d50a62e49990eb185ff5a7c2b22d6e4d7ecc43efbb45b30a901496b30c12fdf19434c249e6752837ed3d8344e126e1d1f413000838cb8a041c65f12b25f2ccd
|
7
|
+
data.tar.gz: cb23c05a6f96ac3f4a82903331c5918f01e46e9b11b2ba77e18eeae7066abc0192cf75d8ca819070c5c3350ac8d3b9c44ec2e0e7db5c6b50cf1185804cc6f5dc
|
@@ -2,6 +2,8 @@ include Java
|
|
2
2
|
|
3
3
|
import java.awt.Color
|
4
4
|
|
5
|
+
require 'scorched_earth/services/cie94'
|
6
|
+
|
5
7
|
module ScorchedEarth
|
6
8
|
class ColorPalette
|
7
9
|
include Enumerable
|
@@ -25,7 +27,17 @@ module ScorchedEarth
|
|
25
27
|
|
26
28
|
loop do
|
27
29
|
color = strategy.color colors
|
28
|
-
|
30
|
+
unless already_exists?(color)
|
31
|
+
yield color
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def already_exists?(color)
|
37
|
+
cache.values.any? do |color2|
|
38
|
+
delta_e94 = Services::CIE94.new.call color, color2
|
39
|
+
|
40
|
+
delta_e94 < 1000
|
29
41
|
end
|
30
42
|
end
|
31
43
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
include Java
|
2
|
+
|
3
|
+
import java.awt.Color
|
4
|
+
|
5
|
+
module ScorchedEarth
|
6
|
+
module Services
|
7
|
+
# https://github.com/halostatue/color/blob/master/lib/color/rgb.rb
|
8
|
+
class CIE94
|
9
|
+
def call(color_1, color_2, weighting_type = :graphic_arts)
|
10
|
+
color_1 = to_lab(color_1)
|
11
|
+
color_2 = to_lab(color_2)
|
12
|
+
|
13
|
+
case weighting_type
|
14
|
+
when :graphic_arts
|
15
|
+
k_1 = 0.045
|
16
|
+
k_2 = 0.015
|
17
|
+
k_L = 1
|
18
|
+
when :textiles
|
19
|
+
k_1 = 0.048
|
20
|
+
k_2 = 0.014
|
21
|
+
k_L = 2
|
22
|
+
else
|
23
|
+
raise ArgumentError, "Unsupported weighting type #{weighting_type}."
|
24
|
+
end
|
25
|
+
|
26
|
+
k_C = k_H = 1
|
27
|
+
|
28
|
+
l_1, a_1, b_1 = color_1.values_at(:L, :a, :b)
|
29
|
+
l_2, a_2, b_2 = color_2.values_at(:L, :a, :b)
|
30
|
+
|
31
|
+
delta_a = a_1 - a_2
|
32
|
+
delta_b = b_1 - b_2
|
33
|
+
|
34
|
+
c_1 = Math.sqrt((a_1 ** 2) + (b_1 ** 2))
|
35
|
+
c_2 = Math.sqrt((a_2 ** 2) + (b_2 ** 2))
|
36
|
+
|
37
|
+
delta_L = color_1[:L] - color_2[:L]
|
38
|
+
delta_C = c_1 - c_2
|
39
|
+
|
40
|
+
delta_H2 = (delta_a ** 2) + (delta_b ** 2) - (delta_C ** 2)
|
41
|
+
|
42
|
+
s_L = 1
|
43
|
+
s_C = 1 + k_1 * c_1
|
44
|
+
s_H = 1 + k_2 * c_1
|
45
|
+
|
46
|
+
composite_L = (delta_L / (k_L * s_L)) ** 2
|
47
|
+
composite_C = (delta_C / (k_C * s_C)) ** 2
|
48
|
+
composite_H = delta_H2 / ((k_H * s_H) ** 2)
|
49
|
+
|
50
|
+
Math.sqrt(composite_L + composite_C + composite_H)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def to_xyz(color, color_space = :sRGB)
|
56
|
+
r, g, b = [ color.red, color.green, color.blue ].map { |v|
|
57
|
+
if (v > 0.04045)
|
58
|
+
(((v + 0.055) / 1.055) ** 2.4) * 100
|
59
|
+
else
|
60
|
+
(v / 12.92) * 100
|
61
|
+
end
|
62
|
+
}
|
63
|
+
|
64
|
+
# Convert using the RGB/XYZ matrix at:
|
65
|
+
# http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html#WSMatrices
|
66
|
+
{
|
67
|
+
:x => (r * 0.4124564 + g * 0.3575761 + b * 0.1804375),
|
68
|
+
:y => (r * 0.2126729 + g * 0.7151522 + b * 0.0721750),
|
69
|
+
:z => (r * 0.0193339 + g * 0.1191920 + b * 0.9503041)
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_lab(color, color_space = :sRGB, reference_white = [ 95.047, 100.00, 108.883 ])
|
74
|
+
xyz = to_xyz color
|
75
|
+
|
76
|
+
xr = xyz[:x] / reference_white[0]
|
77
|
+
yr = xyz[:y] / reference_white[1]
|
78
|
+
zr = xyz[:z] / reference_white[2]
|
79
|
+
|
80
|
+
epsilon = (216 / 24389.0)
|
81
|
+
kappa = (24389 / 27.0)
|
82
|
+
|
83
|
+
fx, fy, fz = [ xr, yr, zr ].map do |t|
|
84
|
+
if (t > (epsilon))
|
85
|
+
t ** (1.0 / 3)
|
86
|
+
else # t <= epsilon
|
87
|
+
((kappa * t) + 16) / 116.0
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
{
|
92
|
+
:L => ((116 * fy) - 16),
|
93
|
+
:a => (500 * (fx - fy)),
|
94
|
+
:b => (200 * (fy - fz))
|
95
|
+
}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorched_earth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.4.pre
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- James Moriarty
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- lib/scorched_earth/helpers.rb
|
114
114
|
- lib/scorched_earth/mouse.rb
|
115
115
|
- lib/scorched_earth/player.rb
|
116
|
+
- lib/scorched_earth/services/cie94.rb
|
116
117
|
- lib/scorched_earth/shot.rb
|
117
118
|
- lib/scorched_earth/terrain.rb
|
118
119
|
- lib/scorched_earth/version.rb
|