punkmaker 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5bf9cd83ed36a867c73df5c98ae5876ff6cf6763f4c8b35bb6facf05d045605b
4
- data.tar.gz: 176da988ba69f6f333e3e5a50f831ae0a0ea963e7ce64d89145d1307cb17fd7d
3
+ metadata.gz: f6692eb9ea8a32eb0d6f104039bba563dec993e5bebc83b771e18095e48b5f0d
4
+ data.tar.gz: 39ef67f256eba06343e750875e39627e73962cf159d2a81b3fee71c44edd041f
5
5
  SHA512:
6
- metadata.gz: 02efe3a67627eb1e52bf5f13df29ed17ceb529e61c32730e9d57597d2a31cdf1dc9da5be9c27de4678048a10affa20b6eace0e37d3f8d6564117ff3a59fe699a
7
- data.tar.gz: 8f6b37d89179adcc4b55608044d37283cbcf27aa897fe0ab5756e5b0b0c76e76f9f9263e159e3909da01d594d7d7f0755ce771c0369b277d5e3d378190f86666
6
+ metadata.gz: 10e1f2e5cb734d461c66586eea4b8312c7fdf1251ca03fe9b36b37851aadf308a03fd7322d05388f45041915ece2420da40b225e1f02afd6dff0410dcd7ee201
7
+ data.tar.gz: 5444664fa42726421e0ce510a69873249ac8d46b2c533dd7da118c429b49acdd1d8cc7a3b57873d660c51ad3ea6aacb12d9ae1eded5650435ff21d41f9b38ddd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,4 @@
1
+ ### 0.2.0
1
2
  ### 0.0.1 / 2023-04-20
2
3
 
3
4
  * Everything is new. First release
data/Manifest.txt CHANGED
@@ -7,6 +7,7 @@ config/human-male4.png
7
7
  config/mummy-female.png
8
8
  config/mummy-male.png
9
9
  lib/punkmaker.rb
10
+ lib/punkmaker/hair.rb
10
11
  lib/punkmaker/human.rb
11
12
  lib/punkmaker/mummy.rb
12
13
  lib/punkmaker/version.rb
data/README.md CHANGED
@@ -4,8 +4,8 @@ punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans,
4
4
 
5
5
 
6
6
 
7
- * home :: [github.com/cryptopunksnotdead/cryptopunks](https://github.com/cryptopunksnotdead/cryptopunks)
8
- * bugs :: [github.com/cryptopunksnotdead/cryptopunks/issues](https://github.com/cryptopunksnotdead/cryptopunks/issues)
7
+ * home :: [github.com/cryptopunksnotdead/punkart.sandbox](https://github.com/cryptopunksnotdead/punkart.sandbox)
8
+ * bugs :: [github.com/cryptopunksnotdead/punkart.sandbox/issues](https://github.com/cryptopunksnotdead/punkart.sandbox/issues)
9
9
  * gem :: [rubygems.org/gems/punkmaker](https://rubygems.org/gems/punkmaker)
10
10
  * rdoc :: [rubydoc.info/gems/punkmaker](http://rubydoc.info/gems/punkmaker)
11
11
 
@@ -69,6 +69,9 @@ Use it as you please with no restrictions whatsoever.
69
69
 
70
70
  ## Questions? Comments?
71
71
 
72
- Post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
72
+ Join us in the [Punk Art discord (chat server)](https://discord.gg/FE3HeXNKRa). Yes you can.
73
+ Your questions and commentary welcome.
74
+
75
+ Or post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
73
76
 
74
77
 
data/Rakefile CHANGED
@@ -4,9 +4,9 @@ require './lib/punkmaker/version.rb'
4
4
 
5
5
  ###
6
6
  # hack/ quick fix for broken intuit_values - overwrite with dummy
7
- class Hoe
8
- def intuit_values( input ); end
9
- end
7
+ # class Hoe
8
+ # def intuit_values( input ); end
9
+ # end
10
10
 
11
11
 
12
12
  Hoe.spec 'punkmaker' do
@@ -16,7 +16,7 @@ Hoe.spec 'punkmaker' do
16
16
  self.summary = 'punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans, zombies, apes, aliens, mummies, robots, and much more'
17
17
  self.description = summary
18
18
 
19
- self.urls = { home: 'https://github.com/cryptopunksnotdead/cryptopunks' }
19
+ self.urls = { home: 'https://github.com/cryptopunksnotdead/punkart.sandbox' }
20
20
 
21
21
  self.author = 'Gerald Bauer'
22
22
  self.email = 'gerald.bauer@gmail.com'
@@ -27,6 +27,7 @@ Hoe.spec 'punkmaker' do
27
27
 
28
28
  self.extra_deps = [
29
29
  ['pixelart'],
30
+ ['spritesheet'],
30
31
  ]
31
32
 
32
33
  self.licenses = ['Public Domain']
@@ -0,0 +1,121 @@
1
+
2
+
3
+ module Punk
4
+ module Hair
5
+ def self.colors
6
+ @colors ||= begin
7
+ {
8
+ 'black' => '000000',
9
+
10
+ 'brown' => '51360c', # (darker) brown
11
+ 'brunette' => 'a66e2c', # lighter brown
12
+
13
+ 'orange' => 'e65700',
14
+ 'red' => 'e22626',
15
+ 'pink' => 'ff8ebe',
16
+ 'purple' => '710cc7',
17
+
18
+ 'green' => '28b143',
19
+
20
+ 'blonde' => 'fff68e',
21
+ 'silver' => 'e0e0e0',
22
+ 'white' => 'FFFFFF',
23
+ }.reduce( {} ) do |h, (name, color_hex)|
24
+ h[ name ] = Color.from_hex( color_hex )
25
+ h
26
+ end
27
+ end
28
+ @colors
29
+ end
30
+
31
+ def self.derive_color_map( color )
32
+ color = Color.parse( color ) if color.is_a?( String )
33
+
34
+ h,s,v = Color.to_hsv( color, include_alpha: false )
35
+ h = h % 360 ## make sure h(ue) is always positive!!!
36
+ puts " #{[h,s,v].inspect}"
37
+
38
+ # lighter - #2a2aff / rgb( 42 42 255) - hsl(240° 100% 58%) - hsv(240° 84% 100%)
39
+ # - used in hair( frumpy, f/pigtails3, f/straight3, f/wild4, f/wild5 )
40
+
41
+ # lightest - #5454ff / rgb( 84 84 255) - hsl(240° 100% 66%) - hsv(240° 67% 100%)
42
+ # - used in hair(mohawk thin)
43
+
44
+ # darker - #0000dd / rgb( 0 0 221) - hsl(240° 100% 43%) - hsv(240° 100% 87%)
45
+ # - used in hair(mohawk)
46
+
47
+ ## todo/fix: make lighter/darker formula more "robust"/ better!!!
48
+ if color == 0x000000ff # black
49
+ # hsv( 0° 0% 0%)
50
+ lighter = Color.from_hsv( h, 0.0, 0.16 )
51
+ lightest = Color.from_hsv( h, 0.0, 0.33 )
52
+ darker = Color.from_hsv( h, 0.0, 0.0 ) ## darker than black not possible ;-)
53
+ elsif color == 0xe0e0e0ff # silver
54
+ # hsv( 0° 0% 88%)
55
+ lighter = Color.from_hsv( h, 0.0, 1.0 ) # white
56
+ lightest = Color.from_hsv( h, 0.0, 1.0 ) # white
57
+ darker = Color.from_hsv( h, 0.0, [0.0, v-0.13].max )
58
+ elsif color == 0xffffffff # white
59
+ # hsv( 0° 0% 100%)
60
+ lighter = Color.from_hsv( h, 0.0, [0.0, v-0.11].max ) # note: make darker
61
+ lightest = Color.from_hsv( h, 0.0, 1.0 )
62
+ darker = Color.from_hsv( h, 0.0, [0.0, v-0.16].max )
63
+ else
64
+ lighter = Color.from_hsv( h, [0.0, s-0.16].max, v )
65
+ lightest = Color.from_hsv( h, [0.0, s-0.33].max, v )
66
+ darker = Color.from_hsv( h, s, [0.0, v-0.13].max )
67
+ end
68
+
69
+ color_map = {
70
+ '0000ffff' => color,
71
+ '2a2affff' => lighter,
72
+ '5454ffff' => lightest,
73
+ '0000ddff' => darker,
74
+ }
75
+ color_map
76
+ end # method self.derive_color_map
77
+
78
+ def self.colorize( hair, color: )
79
+ # "low-level" with no validity checks on hair image and passed in color (integer)
80
+ color_map = derive_color_map( color )
81
+ hair.change_colors( color_map )
82
+ end
83
+
84
+
85
+ class Maker ## rename to Factory or Studio or Generator or .. such - why? why not?
86
+ def self.read( image_path, meta_path, width:, height:, colors: )
87
+ sheet = Pixelart::Spritesheet.read( image_path, meta_path,
88
+ width: width,
89
+ height: height )
90
+ new( sheet, colors: colors )
91
+ end
92
+
93
+ attr_reader :sheet, :colors
94
+
95
+ def initialize( sheet, colors: )
96
+ @sheet = sheet
97
+ @colors = colors
98
+ end
99
+ def find_by( name: ) @sheet.find_by( name: name ); end
100
+
101
+ def make( style, color: 'black' ) ## change name to colorize - why? why not?
102
+ ## pass-through shavedhead (no colors - alpha only) - why? why not?
103
+ hair = @sheet.find_by( name: style )
104
+ if hair.nil?
105
+ puts "!! ERROR - unknow hair style >#{style}<; sorry"
106
+ exit 1
107
+ end
108
+
109
+ color_key = color.downcase.gsub(' ','')
110
+ rgba = @colors[ color_key ]
111
+ if rgba.nil?
112
+ puts "!! ERROR - unknow hair color >#{style}<; sorry"
113
+ exit 1
114
+ end
115
+
116
+ color_map = Hair.derive_color_map( rgba )
117
+ hair.change_colors( color_map )
118
+ end
119
+ end ## (embedded) class Maker
120
+ end # module Hair
121
+ end # module Punk
@@ -2,7 +2,7 @@ module Pixelart
2
2
  module Module
3
3
  module Punkmaker
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 2
6
6
  PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
data/lib/punkmaker.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  require 'pixelart'
2
+ require 'spritesheet'
2
3
 
3
4
 
4
- require_relative 'punkmaker/version'
5
+ require_relative 'punkmaker/version' ## let version always go first
6
+ ## more base / archetypes
5
7
  require_relative 'punkmaker/human'
6
8
  require_relative 'punkmaker/mummy'
7
9
 
10
+ ## more hair (incl. beards & eyebrows)
11
+ require_relative 'punkmaker/hair'
8
12
 
9
13
 
10
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punkmaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-21 00:00:00.000000000 Z
11
+ date: 2023-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pixelart
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: spritesheet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rdoc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +64,14 @@ dependencies:
50
64
  requirements:
51
65
  - - "~>"
52
66
  - !ruby/object:Gem::Version
53
- version: '3.23'
67
+ version: '4.0'
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - "~>"
59
73
  - !ruby/object:Gem::Version
60
- version: '3.23'
74
+ version: '4.0'
61
75
  description: punkmaker gem - make your own (pixel) punk base (archetype) heads incl.
62
76
  humans, zombies, apes, aliens, mummies, robots, and much more
63
77
  email: gerald.bauer@gmail.com
@@ -77,10 +91,11 @@ files:
77
91
  - config/mummy-female.png
78
92
  - config/mummy-male.png
79
93
  - lib/punkmaker.rb
94
+ - lib/punkmaker/hair.rb
80
95
  - lib/punkmaker/human.rb
81
96
  - lib/punkmaker/mummy.rb
82
97
  - lib/punkmaker/version.rb
83
- homepage: https://github.com/cryptopunksnotdead/cryptopunks
98
+ homepage: https://github.com/cryptopunksnotdead/punkart.sandbox
84
99
  licenses:
85
100
  - Public Domain
86
101
  metadata: {}
@@ -101,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
116
  - !ruby/object:Gem::Version
102
117
  version: '0'
103
118
  requirements: []
104
- rubygems_version: 3.3.7
119
+ rubygems_version: 3.4.10
105
120
  signing_key:
106
121
  specification_version: 4
107
122
  summary: punkmaker gem - make your own (pixel) punk base (archetype) heads incl. humans,