monsterid 0.4.0 → 0.4.2
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 +5 -5
- data/CHANGELOG +5 -0
- data/VERSION +1 -1
- data/lib/monsterid.rb +53 -59
- metadata +13 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 244ae4b3aae8ef433d3258aa77852dc093187b2869be99268579948577b78830
|
4
|
+
data.tar.gz: d2b8a65efaf21e61c8c8c3112450d718b258eaa214dcc2ea96718612d3bd9453
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcd9716d34441fc4f06fbe5ed4b9b494eef7630bf5961b9379e1a0070da54827d7e7c844e17ef08583c4a5d3a5900d56b529c724096dc7681a5cc0994debe37d
|
7
|
+
data.tar.gz: 1aace8a281450f025377171e522cb272fec4e58b07c9973389a7e429d43246a7e6283b53934d36e1c2fbdfa08cc398799e0564e266ddcb18fd45a4e00f2530ae
|
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/monsterid.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Load oily_png if available, otherwise default to pure ruby chunky_png
|
2
4
|
begin
|
3
5
|
require 'oily_png'
|
@@ -15,112 +17,110 @@ class MonsterID
|
|
15
17
|
'legs_4.png', 'legs_S8.png', 'legs_S11.png', 'mouth_5.png',
|
16
18
|
'mouth_8.png', 'mouth_S1.png', 'mouth_S3.png', 'mouth_2.png',
|
17
19
|
'eyes_13.png', 'legs_S13.png', 'mouth_S7.png'
|
18
|
-
]
|
20
|
+
].freeze
|
19
21
|
BODY_COLOR_PARTS = [
|
20
22
|
'arms_S8.png', 'legs_S5.png',
|
21
23
|
'mouth_S5.png', 'mouth_S4.png'
|
22
|
-
]
|
24
|
+
].freeze
|
23
25
|
SPECIFIC_COLOR_PARTS = {
|
24
|
-
'arms_S2.png'
|
25
|
-
'hair_S6.png'
|
26
|
-
'mouth_9.png'
|
27
|
-
'mouth_6.png'
|
26
|
+
'arms_S2.png' => [0, 200],
|
27
|
+
'hair_S6.png' => [0, 200],
|
28
|
+
'mouth_9.png' => [0, 200],
|
29
|
+
'mouth_6.png' => [0, 200],
|
28
30
|
'mouth_S2.png' => [0, 200]
|
29
|
-
}
|
30
|
-
|
31
|
+
}.freeze
|
32
|
+
|
31
33
|
PARTS = {
|
32
|
-
:
|
34
|
+
arms: [
|
33
35
|
'arms_1.png', 'arms_2.png', 'arms_3.png', 'arms_4.png', 'arms_5.png',
|
34
36
|
'arms_S1.png', 'arms_S2.png', 'arms_S3.png', 'arms_S4.png', 'arms_S5.png',
|
35
37
|
'arms_S6.png', 'arms_S7.png', 'arms_S8.png', 'arms_S9.png'
|
36
38
|
],
|
37
|
-
:
|
39
|
+
body: [
|
38
40
|
'body_1.png', 'body_2.png', 'body_3.png', 'body_4.png', 'body_5.png',
|
39
41
|
'body_6.png', 'body_7.png', 'body_8.png', 'body_9.png', 'body_10.png',
|
40
42
|
'body_11.png', 'body_12.png', 'body_13.png', 'body_14.png', 'body_15.png',
|
41
43
|
'body_S1.png', 'body_S2.png', 'body_S3.png', 'body_S4.png', 'body_S5.png'
|
42
44
|
],
|
43
|
-
:
|
45
|
+
eyes: [
|
44
46
|
'eyes_1.png', 'eyes_2.png', 'eyes_3.png', 'eyes_4.png', 'eyes_5.png',
|
45
47
|
'eyes_6.png', 'eyes_7.png', 'eyes_8.png', 'eyes_9.png', 'eyes_10.png',
|
46
48
|
'eyes_11.png', 'eyes_12.png', 'eyes_13.png', 'eyes_14.png', 'eyes_15.png',
|
47
49
|
'eyes_S1.png', 'eyes_S2.png', 'eyes_S3.png', 'eyes_S4.png', 'eyes_S5.png'
|
48
50
|
],
|
49
|
-
:
|
51
|
+
hair: [
|
50
52
|
'hair_1.png', 'hair_2.png', 'hair_3.png', 'hair_4.png', 'hair_5.png',
|
51
53
|
'hair_S1.png', 'hair_S2.png', 'hair_S3.png', 'hair_S4.png', 'hair_S5.png',
|
52
54
|
'hair_S6.png', 'hair_S7.png'
|
53
55
|
],
|
54
|
-
:
|
56
|
+
legs: [
|
55
57
|
'legs_1.png', 'legs_2.png', 'legs_3.png', 'legs_4.png', 'legs_5.png',
|
56
58
|
'legs_S1.png', 'legs_S10.png', 'legs_S11.png', 'legs_S12.png',
|
57
|
-
'legs_S13.png', 'legs_S2.png', 'legs_S3.png', 'legs_S4.png',
|
59
|
+
'legs_S13.png', 'legs_S2.png', 'legs_S3.png', 'legs_S4.png',
|
58
60
|
'legs_S5.png', 'legs_S6.png', 'legs_S7.png', 'legs_S8.png', 'legs_S9.png'
|
59
61
|
],
|
60
|
-
:
|
62
|
+
mouth: [
|
61
63
|
'mouth_1.png', 'mouth_2.png', 'mouth_3.png', 'mouth_4.png', 'mouth_5.png',
|
62
64
|
'mouth_6.png', 'mouth_7.png', 'mouth_8.png', 'mouth_9.png', 'mouth_10.png',
|
63
65
|
'mouth_S1.png', 'mouth_S2.png', 'mouth_S3.png', 'mouth_S4.png', 'mouth_S5.png',
|
64
66
|
'mouth_S6.png', 'mouth_S7.png'
|
65
67
|
]
|
66
|
-
}
|
67
|
-
|
68
|
+
}.freeze
|
69
|
+
|
68
70
|
# Remove body 12 for now, doesn't look good
|
69
|
-
PARTS[:body].delete(
|
70
|
-
|
71
|
+
PARTS[:body].delete('body_12.png')
|
72
|
+
|
71
73
|
# Test color set [hue, sat]
|
72
74
|
COLORS = [
|
73
75
|
[8, 255], [160, 64], [8, 127], [184, 255],
|
74
76
|
[24, 191], [208, 191], [40, 255], [208, 64],
|
75
77
|
[48, 64], [248, 191], [72, 127], [272, 64],
|
76
78
|
[128, 255], [312, 191], [160, 255], [336, 255]
|
77
|
-
]
|
78
|
-
|
79
|
+
].freeze
|
80
|
+
|
79
81
|
def initialize(seed, size = 120)
|
80
82
|
@id = Digest::SHA1.hexdigest seed.to_s
|
81
|
-
|
83
|
+
|
82
84
|
parts = {
|
83
|
-
:
|
84
|
-
:
|
85
|
-
:
|
85
|
+
legs: {
|
86
|
+
part: PARTS[:legs][@id[0, 2].hex % PARTS[:legs].length],
|
87
|
+
color: COLORS[@id[2, 2].hex % COLORS.length]
|
86
88
|
},
|
87
|
-
:
|
88
|
-
:
|
89
|
-
:
|
89
|
+
hair: {
|
90
|
+
part: PARTS[:hair][@id[4, 2].hex % PARTS[:hair].length],
|
91
|
+
color: COLORS[@id[6, 2].hex % COLORS.length]
|
90
92
|
},
|
91
|
-
:
|
92
|
-
:
|
93
|
-
:
|
93
|
+
arms: {
|
94
|
+
part: PARTS[:arms][@id[8, 2].hex % PARTS[:arms].length],
|
95
|
+
color: COLORS[@id[10, 2].hex % COLORS.length]
|
94
96
|
},
|
95
|
-
:
|
96
|
-
:
|
97
|
-
:
|
97
|
+
body: {
|
98
|
+
part: PARTS[:body][@id[12, 2].hex % PARTS[:body].length],
|
99
|
+
color: COLORS[@id[14, 2].hex % COLORS.length]
|
98
100
|
},
|
99
|
-
:
|
100
|
-
:
|
101
|
-
:
|
101
|
+
eyes: {
|
102
|
+
part: PARTS[:eyes][@id[16, 2].hex % PARTS[:eyes].length],
|
103
|
+
color: COLORS[@id[18, 2].hex % COLORS.length]
|
102
104
|
},
|
103
|
-
:
|
104
|
-
:
|
105
|
-
:
|
105
|
+
mouth: {
|
106
|
+
part: PARTS[:mouth][@id[20, 2].hex % PARTS[:mouth].length],
|
107
|
+
color: COLORS[@id[22, 2].hex % COLORS.length]
|
106
108
|
}
|
107
109
|
}
|
108
|
-
|
110
|
+
|
109
111
|
@monster = ChunkyPNG::Image.new(120, 120, ChunkyPNG::Color::TRANSPARENT)
|
110
|
-
|
112
|
+
|
111
113
|
parts.each do |_, part|
|
112
114
|
path = File.join(File.dirname(__FILE__), 'parts', part[:part])
|
113
115
|
partimg = ChunkyPNG::Image.from_file(path)
|
114
|
-
|
116
|
+
|
115
117
|
if BODY_COLOR_PARTS.include? part[:part]
|
116
118
|
part[:color] = parts[:body][:color]
|
117
119
|
elsif SPECIFIC_COLOR_PARTS.include? part[:part]
|
118
120
|
part[:color] = SPECIFIC_COLOR_PARTS[part[:part]]
|
119
121
|
end
|
120
|
-
|
121
|
-
unless WHITE_PARTS.include? part[:part]
|
122
|
-
partimg = colorise(partimg, part[:color][0], part[:color][1])
|
123
|
-
end
|
122
|
+
|
123
|
+
partimg = colorise(partimg, part[:color][0], part[:color][1]) unless WHITE_PARTS.include? part[:part]
|
124
124
|
|
125
125
|
@monster.compose!(partimg)
|
126
126
|
end
|
@@ -139,30 +139,24 @@ class MonsterID
|
|
139
139
|
def to_datastream
|
140
140
|
@monster.to_datastream
|
141
141
|
end
|
142
|
-
|
143
|
-
|
144
|
-
@id
|
145
|
-
end
|
142
|
+
|
143
|
+
attr_reader :id
|
146
144
|
|
147
145
|
def to_data_url
|
148
146
|
@monster.to_data_url
|
149
147
|
end
|
150
|
-
|
148
|
+
|
151
149
|
def inspect
|
152
150
|
"#<#{self.class.name}:#{object_id} id: #{@id}>"
|
153
151
|
end
|
154
152
|
|
155
153
|
private
|
156
154
|
|
157
|
-
def colorise(img,
|
158
|
-
|
155
|
+
def colorise(img, h, s = 255)
|
156
|
+
s = s.to_f / 255 # ChunkyPNG uses sat from 0.0 to 1.0
|
159
157
|
|
160
158
|
img.pixels.map! do |px|
|
161
|
-
|
162
|
-
|
163
|
-
h = hue
|
164
|
-
s = sat
|
165
|
-
|
159
|
+
_, _, v, a = ChunkyPNG::Color.to_hsv(px, true)
|
166
160
|
ChunkyPNG::Color.from_hsv(h, s, v, a)
|
167
161
|
end
|
168
162
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monsterid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Knut Aldrin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chunky_png
|
@@ -16,48 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.3.7
|
19
|
+
version: '1.4'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 1.3.7
|
26
|
+
version: '1.4'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: bundler
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1
|
33
|
+
version: '2.1'
|
40
34
|
type: :development
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
38
|
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1
|
40
|
+
version: '2.1'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: rubocop
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: '1.14'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: '1.14'
|
61
55
|
description: Port/rework of the php script, with new monsters snatched from the WP
|
62
56
|
plugin
|
63
57
|
email: knutaldrin@gmail.com
|
@@ -178,7 +172,7 @@ homepage: https://github.com/knutaldrin/monsterid
|
|
178
172
|
licenses:
|
179
173
|
- CC-BY-4.0
|
180
174
|
metadata: {}
|
181
|
-
post_install_message:
|
175
|
+
post_install_message:
|
182
176
|
rdoc_options: []
|
183
177
|
require_paths:
|
184
178
|
- lib
|
@@ -186,16 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
180
|
requirements:
|
187
181
|
- - ">="
|
188
182
|
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
183
|
+
version: '2.0'
|
190
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
185
|
requirements:
|
192
186
|
- - ">="
|
193
187
|
- !ruby/object:Gem::Version
|
194
188
|
version: '0'
|
195
189
|
requirements: []
|
196
|
-
|
197
|
-
|
198
|
-
signing_key:
|
190
|
+
rubygems_version: 3.2.15
|
191
|
+
signing_key:
|
199
192
|
specification_version: 4
|
200
193
|
summary: Generates tiny little monsters to discern users.
|
201
194
|
test_files: []
|