drakkon 0.0.7 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/drakkon/build.rb +61 -4
- data/lib/drakkon/cli.rb +3 -1
- data/lib/drakkon/gem/bundle.rb +86 -17
- data/lib/drakkon/gem/cli.rb +2 -0
- data/lib/drakkon/gem/helpers/modules.rb +5 -0
- data/lib/drakkon/init.rb +23 -15
- data/lib/drakkon/lib/fonts/fonts.rb +88 -0
- data/lib/drakkon/lib/hub.rb +4 -3
- data/lib/drakkon/lib/images/biggest.rb +8 -6
- data/lib/drakkon/lib/images/bulk_rename.rb +1 -13
- data/lib/drakkon/lib/images/cli.rb +35 -19
- data/lib/drakkon/lib/images/compress.rb +60 -0
- data/lib/drakkon/lib/images/double.rb +77 -0
- data/lib/drakkon/lib/images/downcase_normalize.rb +70 -0
- data/lib/drakkon/lib/images/hue_modulation.rb +71 -0
- data/lib/drakkon/lib/images/index.rb +43 -20
- data/lib/drakkon/lib/images/layers.rb +55 -0
- data/lib/drakkon/lib/images/resize.rb +3 -2
- data/lib/drakkon/lib/images/split.rb +4 -4
- data/lib/drakkon/lib/images/spritesheet.rb +52 -13
- data/lib/drakkon/lib/images/text.rb +4 -1
- data/lib/drakkon/lib/images/trim.rb +7 -6
- data/lib/drakkon/lib/manifest.rb +24 -16
- data/lib/drakkon/lib/pastel.rb +1 -1
- data/lib/drakkon/lib/platform_compat.rb +27 -0
- data/lib/drakkon/lib/settings.rb +68 -5
- data/lib/drakkon/lib/sounds/sounds.rb +126 -0
- data/lib/drakkon/lib/utils/cli.rb +38 -0
- data/lib/drakkon/lib/utils/rename_normalize.rb +75 -0
- data/lib/drakkon/lib/version.rb +17 -2
- data/lib/drakkon/release.rb +1 -1
- data/lib/drakkon/run/commands/utils.rb +14 -0
- data/lib/drakkon/run/helpers.rb +15 -4
- data/lib/drakkon/run/reader_shim.rb +9 -5
- data/lib/drakkon/run/tty.rb +1 -1
- data/lib/drakkon/run.rb +6 -2
- data/lib/drakkon/skeleton/deploy.rb +4 -1
- data/lib/drakkon/web.rb +16 -44
- data/lib/drakkon.rb +10 -7
- metadata +32 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20674edb1e5357b6971a88c0dd4b222274ee75bb65bed6f8840530f8d9a804ec
|
4
|
+
data.tar.gz: 530c12ba7dedaa85213710fe7fd46f2b220feb02526002c21bac9450687d5cc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f52deb9d5a66285535f3cd03089575a8a7f1831923a6a7f37d688f008468711e759fe25aa7841012e499fa8f7e89f082f3fe318dcede83579f9a77ae0266635c
|
7
|
+
data.tar.gz: 065b90c52e8d60a35a0c3a4b1f141056a8fac63df483c074dec858bb41471ea975f67fe20a41a2fc75f27fcdec19806e3fa7a52b7a91c1ab4f52a0d166f1370b
|
data/lib/drakkon/build.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Drakkon
|
2
2
|
# Run Command for CLI
|
3
3
|
module Build
|
4
|
+
extend PlatformCompat
|
5
|
+
|
4
6
|
def self.args(raw = nil)
|
5
7
|
@args ||= raw
|
6
8
|
|
@@ -15,6 +17,9 @@ module Drakkon
|
|
15
17
|
|
16
18
|
Settings.update(:platforms, platform_setup) unless Settings.platforms?
|
17
19
|
|
20
|
+
# Run Index if configured
|
21
|
+
Manifest.index if Settings.config[:manifest]
|
22
|
+
|
18
23
|
builder = if args.empty?
|
19
24
|
Settings.platforms
|
20
25
|
else
|
@@ -40,8 +45,12 @@ module Drakkon
|
|
40
45
|
# Clean Up Accidental Leftovers
|
41
46
|
FileUtils.rm_r(context_name) if Dir.exist? context_name
|
42
47
|
|
43
|
-
|
44
|
-
|
48
|
+
if Settings.manifest_compile?
|
49
|
+
manifest_compile(context, context_name)
|
50
|
+
else
|
51
|
+
# DragonRuby Publish doesn't like symlinks or PATH...
|
52
|
+
FileUtils.cp_r(context, context_name)
|
53
|
+
end
|
45
54
|
|
46
55
|
# Clean Builds Dir
|
47
56
|
FileUtils.rm_r(Dir['builds/*'])
|
@@ -50,7 +59,8 @@ module Drakkon
|
|
50
59
|
FileUtils.rm_r("#{context_name}/builds") if Dir.exist? "#{context_name}/builds"
|
51
60
|
|
52
61
|
# Execute
|
53
|
-
|
62
|
+
io = IO.popen(build_env, build!(list, context_name, publish))
|
63
|
+
output(io)
|
54
64
|
|
55
65
|
# Preflight
|
56
66
|
FileUtils.mkdir_p("#{context}/builds")
|
@@ -73,13 +83,52 @@ module Drakkon
|
|
73
83
|
end
|
74
84
|
# rubocop:enable Metrics/AbcSize
|
75
85
|
|
86
|
+
# Send output to console
|
87
|
+
def self.output(io)
|
88
|
+
loop do
|
89
|
+
next unless io.ready?
|
90
|
+
end
|
91
|
+
rescue SystemExit, Interrupt, EOFError
|
92
|
+
LogBot.info('Build', 'Exiting')
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.manifest_compile(context, context_name)
|
96
|
+
# Base Folders
|
97
|
+
Dir.mkdir context_name
|
98
|
+
Dir.mkdir "#{context_name}/app"
|
99
|
+
|
100
|
+
# Copy Directories that are not being managed
|
101
|
+
FileUtils.cp_r("#{context}/fonts", "#{context_name}/fonts")
|
102
|
+
FileUtils.cp_r("#{context}/sprites", "#{context_name}/sprites")
|
103
|
+
FileUtils.cp_r("#{context}/sounds", "#{context_name}/sounds")
|
104
|
+
FileUtils.cp_r("#{context}/metadata", "#{context_name}/metadata")
|
105
|
+
|
106
|
+
# Copy over base files
|
107
|
+
FileUtils.cp("#{context}/app/main.rb", "#{context_name}/app/main.rb")
|
108
|
+
FileUtils.cp_r("#{context}/app/drakkon", "#{context_name}/app/drakkon")
|
109
|
+
|
110
|
+
# Compile into Manifest
|
111
|
+
File.open("#{context_name}/app/drakkon/manifest.rb", 'w') do |f|
|
112
|
+
Manifest.index.reverse.each do |file|
|
113
|
+
f << File.read("#{context}/#{file}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
76
118
|
def self.metadata_version(context)
|
77
119
|
File.read("#{context}/metadata/game_metadata.txt").split("\n").find { |y| y.include? 'version' }.split('=').last
|
78
120
|
end
|
79
121
|
|
80
122
|
# DEW THE BUILD
|
81
123
|
def self.build!(list, context, package = '--package')
|
82
|
-
|
124
|
+
# 5.25 not liking the blank package flag
|
125
|
+
cmd = []
|
126
|
+
cmd.push './dragonruby-publish'
|
127
|
+
cmd.push package unless package.nil? || package.empty?
|
128
|
+
cmd.push "--platforms=#{list}"
|
129
|
+
cmd.push context
|
130
|
+
|
131
|
+
cmd
|
83
132
|
end
|
84
133
|
|
85
134
|
def self.version_dir
|
@@ -90,6 +139,14 @@ module Drakkon
|
|
90
139
|
args.include?('images')
|
91
140
|
end
|
92
141
|
|
142
|
+
def self.force_fonts?
|
143
|
+
args.include?('fonts')
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.force_sounds?
|
147
|
+
args.include?('sounds')
|
148
|
+
end
|
149
|
+
|
93
150
|
def self.force_manifest?
|
94
151
|
args.include?('manifest')
|
95
152
|
end
|
data/lib/drakkon/cli.rb
CHANGED
@@ -21,6 +21,7 @@ module Drakkon
|
|
21
21
|
when :build then Build.go!(args)
|
22
22
|
when :publish then Build.go!([], '')
|
23
23
|
when :images then Images::CLI.run!(args)
|
24
|
+
when :utils then Utils::CLI.run!(args)
|
24
25
|
when :install then Version.install!(args)
|
25
26
|
when :gem then Gems::CLI.init!(args)
|
26
27
|
when :skeleton then Skeleton::CLI.init!(args)
|
@@ -48,7 +49,8 @@ module Drakkon
|
|
48
49
|
menu.choice name: 'build', value: :build
|
49
50
|
menu.choice name: 'publish', value: :publish
|
50
51
|
menu.choice name: 'install (DragonRuby Versions)', value: :install
|
51
|
-
menu.choice name: 'images', value: :images
|
52
|
+
menu.choice name: 'Image Helpers [images]', value: :images
|
53
|
+
menu.choice name: 'Utilities [utils]', value: :utils
|
52
54
|
menu.choice name: 'gem (Shared Code)', value: :gem
|
53
55
|
menu.choice name: 'skeleton (Templates)', value: :skeleton
|
54
56
|
menu.choice name: 'console (pry)', value: :console
|
data/lib/drakkon/gem/bundle.rb
CHANGED
@@ -3,11 +3,12 @@ module Drakkon
|
|
3
3
|
# Run Command for CLI
|
4
4
|
module Bundle
|
5
5
|
def self.build!(args, context)
|
6
|
-
|
6
|
+
# Gems are not required
|
7
|
+
# return if Settings.gems.empty?
|
7
8
|
|
8
9
|
@context = context
|
9
10
|
|
10
|
-
if Settings.config[:bundle_digest] == digest && !args.include?('bundle')
|
11
|
+
if Settings.config[:bundle_digest] == digest && !args.include?('bundle') && File.exist?(bundle_file)
|
11
12
|
LogBot.info('Gems Bundle', 'Nothing New')
|
12
13
|
return unless args.include?('bundle')
|
13
14
|
else
|
@@ -16,14 +17,64 @@ module Drakkon
|
|
16
17
|
|
17
18
|
idx = collect
|
18
19
|
|
19
|
-
|
20
|
+
if Settings.bundle_compile?
|
21
|
+
LogBot.info('Gems Bundle', 'Compile')
|
22
|
+
compiled_bundle(idx)
|
23
|
+
else
|
24
|
+
LogBot.info('Gems Bundle', 'Expand')
|
25
|
+
expand_bundle(idx)
|
26
|
+
end
|
20
27
|
|
21
28
|
Settings.update(:bundle_digest, digest)
|
22
29
|
rescue TTY::Reader::InputInterrupt
|
23
30
|
exit 0
|
24
31
|
end
|
25
32
|
|
26
|
-
|
33
|
+
# Including files without merging them
|
34
|
+
def self.expand_bundle(idx)
|
35
|
+
# Make Directory `app/drakkon` if it doesn't exist
|
36
|
+
FileUtils.mkdir_p('app/drakkon') unless File.directory?('app/drakkon')
|
37
|
+
|
38
|
+
# Create Sub Directory to make switching to compile / eaiser
|
39
|
+
# Always clear to ensure fresh directory
|
40
|
+
FileUtils.rm_rf(unbundle_dir) if File.directory?(unbundle_dir)
|
41
|
+
FileUtils.mkdir_p(unbundle_dir)
|
42
|
+
|
43
|
+
# Touch the file if it doesn't exist
|
44
|
+
FileUtils.touch(bundle_file) unless File.exist?(bundle_file)
|
45
|
+
|
46
|
+
File.open(bundle_file, 'w') do |f|
|
47
|
+
idx.keys.sort.reverse.each do |i|
|
48
|
+
idx[i].each do |file_data|
|
49
|
+
file = file_data[:path]
|
50
|
+
unless File.exist?(file)
|
51
|
+
LogBot.fatal('Bundle', "File not found #{file.pastel(:red)}")
|
52
|
+
next
|
53
|
+
end
|
54
|
+
|
55
|
+
file_path = "#{unbundle_dir}/#{File.basename(file_data[:safe_name])}.rb"
|
56
|
+
|
57
|
+
FileUtils.cp(file, file_path)
|
58
|
+
f << "require '#{file_path}'\n"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Include other files
|
63
|
+
f << "require 'app/drakkon/image_index.rb' \n" if Settings.image_index?
|
64
|
+
f << "require 'app/drakkon/font_index.rb' \n" if Settings.font_index?
|
65
|
+
f << "require 'app/drakkon/sound_index.rb' \n" if Settings.sound_index?
|
66
|
+
f << "require 'app/drakkon/manifest.rb' \n" if Settings.manifest?
|
67
|
+
|
68
|
+
# File Close
|
69
|
+
end
|
70
|
+
|
71
|
+
# FileUtils.cp(bundle_file, "#{drakkon_dir}/bundle/#{Time.now.to_i}.rb")
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.compiled_bundle(idx)
|
75
|
+
# Always clear to ensure fresh directory
|
76
|
+
FileUtils.rm_rf(unbundle_dir) if File.directory?(unbundle_dir)
|
77
|
+
|
27
78
|
# Make Directory `app/drakkon` if it doesn't exist
|
28
79
|
FileUtils.mkdir_p('app/drakkon') unless File.directory?('app/drakkon')
|
29
80
|
|
@@ -33,7 +84,9 @@ module Drakkon
|
|
33
84
|
File.open(bundle_file, 'w') do |f|
|
34
85
|
# Index Writer
|
35
86
|
idx.keys.sort.reverse.each do |i|
|
36
|
-
idx[i].each do |
|
87
|
+
idx[i].each do |file_data|
|
88
|
+
file = file_data[:path]
|
89
|
+
|
37
90
|
unless File.exist?(file)
|
38
91
|
LogBot.fatal('Bundle', "File not found #{file.pastel(:red)}")
|
39
92
|
next
|
@@ -45,6 +98,8 @@ module Drakkon
|
|
45
98
|
|
46
99
|
# Include other files
|
47
100
|
f << "require 'app/drakkon/image_index.rb' \n" if Settings.image_index?
|
101
|
+
f << "require 'app/drakkon/font_index.rb' \n" if Settings.font_index?
|
102
|
+
f << "require 'app/drakkon/sound_index.rb' \n" if Settings.sound_index?
|
48
103
|
f << "require 'app/drakkon/manifest.rb' \n" if Settings.manifest?
|
49
104
|
|
50
105
|
# File Close
|
@@ -53,7 +108,8 @@ module Drakkon
|
|
53
108
|
|
54
109
|
def self.collect
|
55
110
|
idx = {}
|
56
|
-
Settings.gems.
|
111
|
+
Settings.gems.each do |gem_name, gem|
|
112
|
+
gem[:name] = gem_name.to_s.downcase
|
57
113
|
case gem[:source].to_sym
|
58
114
|
when :local then collect_local_source(idx, gem)
|
59
115
|
else
|
@@ -68,17 +124,22 @@ module Drakkon
|
|
68
124
|
path = gem[:data][:path]
|
69
125
|
|
70
126
|
# Modules
|
71
|
-
gem[:data]
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
127
|
+
if gem[:data].key?(:modules)
|
128
|
+
gem[:data][:modules].each do |mod|
|
129
|
+
idx[mod.weight] ||= []
|
130
|
+
mod.files.each do |file|
|
131
|
+
file_name = "#{path}/#{file}.rb"
|
132
|
+
unless File.exist?(file_name)
|
133
|
+
LogBot.fatal('Bundle',
|
134
|
+
"Module File not found #{mod.name.pastel(:bright_blue)}, #{file_name.pastel(:red)}")
|
135
|
+
next
|
136
|
+
end
|
137
|
+
|
138
|
+
# Convert full file path into single string / relative naming (no directories)
|
139
|
+
safe_name = "#{gem.name}_#{file.gsub('/', '_')}"
|
80
140
|
|
81
|
-
|
141
|
+
idx[mod.weight].push(path: file_name, name: file, safe_name: safe_name)
|
142
|
+
end
|
82
143
|
end
|
83
144
|
end
|
84
145
|
|
@@ -86,7 +147,10 @@ module Drakkon
|
|
86
147
|
if gem[:data].key?(:files)
|
87
148
|
gem[:data][:files].each_value do |f|
|
88
149
|
idx[f.weight] ||= []
|
89
|
-
idx[f.weight].push "#{path}/#{f.file}"
|
150
|
+
# idx[f.weight].push "#{path}/#{f.file}"
|
151
|
+
safe_name = "#{gem.name}_#{f.file.gsub('/', '_')}"
|
152
|
+
|
153
|
+
idx[f.weight].push(path: "#{path}/#{f.file}", name: f.file, safe_name: safe_name)
|
90
154
|
end
|
91
155
|
|
92
156
|
end
|
@@ -105,6 +169,11 @@ module Drakkon
|
|
105
169
|
"#{@context}/app/drakkon"
|
106
170
|
end
|
107
171
|
|
172
|
+
# Directory for uncompiled files / Relative
|
173
|
+
def self.unbundle_dir
|
174
|
+
'app/drakkon/unbundle'
|
175
|
+
end
|
176
|
+
|
108
177
|
def self.prompt
|
109
178
|
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|
110
179
|
end
|
data/lib/drakkon/gem/cli.rb
CHANGED
@@ -3,6 +3,8 @@ module Drakkon
|
|
3
3
|
# General Helpers for Gem Class
|
4
4
|
module GemHelpers
|
5
5
|
def select_modules
|
6
|
+
return if (data[:modules].nil? || data[:modules].empty?) && modules.empty?
|
7
|
+
|
6
8
|
data[:modules] = prompt_modules.map do |selected|
|
7
9
|
modules.find { |x| x[:name] == selected }
|
8
10
|
end
|
@@ -13,6 +15,9 @@ module Drakkon
|
|
13
15
|
valid_structure?
|
14
16
|
load_modules
|
15
17
|
|
18
|
+
# Ignore if no modules
|
19
|
+
return if data[:modules].nil? || data[:modules].empty?
|
20
|
+
|
16
21
|
data[:modules] = data[:modules].map(&:name).map do |selected|
|
17
22
|
modules.find { |x| x[:name] == selected }
|
18
23
|
end
|
data/lib/drakkon/init.rb
CHANGED
@@ -27,15 +27,30 @@ module Drakkon
|
|
27
27
|
metadata
|
28
28
|
|
29
29
|
# TODO: Validate / Confirm
|
30
|
-
|
30
|
+
try_write('app/main.rb') do |to|
|
31
|
+
File.write(to, main_tick)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.try_write(to, &blk)
|
36
|
+
if File.exist?(to)
|
37
|
+
LogBot.warn('Init', "- Tried to create #{to} but it already exists")
|
38
|
+
else
|
39
|
+
LogBot.info('Init', "- Created #{to}")
|
40
|
+
blk.call(to)
|
41
|
+
end
|
31
42
|
end
|
32
43
|
|
33
44
|
def self.metadata
|
34
45
|
# Icon is required for build
|
35
|
-
|
46
|
+
try_write('metadata/icon.png') do |to|
|
47
|
+
FileUtils.cp(metdata_dir('icon.png'), to)
|
48
|
+
end
|
36
49
|
|
37
50
|
# Copy metdata files
|
38
|
-
|
51
|
+
try_write('metadata/game_metadata.txt') do |to|
|
52
|
+
FileUtils.cp(metdata_dir('game_metadata.txt'), to)
|
53
|
+
end
|
39
54
|
end
|
40
55
|
|
41
56
|
def self.metdata_dir(file_name = nil)
|
@@ -45,18 +60,11 @@ module Drakkon
|
|
45
60
|
def self.settings
|
46
61
|
LogBot.info('Init', 'Settings Setup')
|
47
62
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
gems: {}
|
54
|
-
}
|
55
|
-
|
56
|
-
# TODO: Be better, this is lazy...
|
57
|
-
opts.each do |key, value|
|
58
|
-
Settings.update(key, value)
|
59
|
-
end
|
63
|
+
# If we're here, it means Settings.init? returned false,
|
64
|
+
# which eans the config file doesn't exist.
|
65
|
+
# As a happy accident, accessing Settings.config for the first time also
|
66
|
+
# writes out a default config file
|
67
|
+
Settings.config
|
60
68
|
end
|
61
69
|
|
62
70
|
def self.directories
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Fonts
|
3
|
+
# General Font Index Helper
|
4
|
+
module Index
|
5
|
+
def self.index
|
6
|
+
@index ||= {}
|
7
|
+
|
8
|
+
@index
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.context
|
12
|
+
@context ||= Dir.pwd
|
13
|
+
|
14
|
+
@context
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.digest
|
18
|
+
list = Dir["#{fonts_directory}/**/*"].select { |file| File.file?(file) }
|
19
|
+
Digest::MD5.hexdigest(list.map { |x| Digest::MD5.file(x).hexdigest }.join)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.fonts_directory
|
23
|
+
"#{context}/fonts"
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.run!(force: false, dir: nil)
|
27
|
+
@context = dir || Dir.pwd
|
28
|
+
|
29
|
+
# Create Directory if sprites directory is missing
|
30
|
+
FileUtils.mkdir_p(fonts_directory)
|
31
|
+
|
32
|
+
if Settings.config[:font_digest] == digest && File.exist?("#{context}/app/drakkon/font_index.rb")
|
33
|
+
LogBot.info('Fonts Index', 'Nothing New')
|
34
|
+
return unless force
|
35
|
+
end
|
36
|
+
|
37
|
+
build_index
|
38
|
+
|
39
|
+
Settings.update(:font_digest, digest)
|
40
|
+
|
41
|
+
File.write("#{context}/app/drakkon/font_index.rb", result)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.build_index
|
45
|
+
check fonts_directory
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.result
|
49
|
+
<<~RB
|
50
|
+
module Drakkon
|
51
|
+
module Fonts
|
52
|
+
def self.index
|
53
|
+
#{index.inspect}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
RB
|
58
|
+
end
|
59
|
+
|
60
|
+
# Recursively Go through
|
61
|
+
def self.check(dir = nil)
|
62
|
+
LogBot.info('Font Index', "Check: #{dir}")
|
63
|
+
|
64
|
+
# Collect Fonts
|
65
|
+
list = Dir["#{dir}/*"]
|
66
|
+
|
67
|
+
# Ignore Empties
|
68
|
+
return if list.empty?
|
69
|
+
|
70
|
+
# Do other things
|
71
|
+
Dir["#{dir}/*"].each do |file|
|
72
|
+
next if File.directory?(file)
|
73
|
+
|
74
|
+
process(file)
|
75
|
+
end
|
76
|
+
|
77
|
+
:done
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.process(file = nil)
|
81
|
+
name = File.basename(file, File.extname(file))
|
82
|
+
index[name] = file.gsub(fonts_directory, '')[1..]
|
83
|
+
end
|
84
|
+
# =========================================================
|
85
|
+
end
|
86
|
+
# =========================================================
|
87
|
+
end
|
88
|
+
end
|
data/lib/drakkon/lib/hub.rb
CHANGED
@@ -68,13 +68,14 @@ module Drakkon
|
|
68
68
|
|
69
69
|
def self.config
|
70
70
|
# Write Default
|
71
|
-
File.write(config_file,
|
71
|
+
File.write(config_file, JSON.pretty_generate({})) unless File.exist?(config_file)
|
72
72
|
|
73
73
|
@config ||= JSON.parse(File.read(config_file), { symbolize_names: true })
|
74
74
|
|
75
75
|
# TODO: Optimize this a bit more
|
76
76
|
config_defaults.each do |key, value|
|
77
|
-
|
77
|
+
# ||= Is problematic with falses
|
78
|
+
@config[key] = value unless @config.key?(key)
|
78
79
|
end
|
79
80
|
|
80
81
|
@config
|
@@ -92,7 +93,7 @@ module Drakkon
|
|
92
93
|
|
93
94
|
def self.write
|
94
95
|
# LogBot.debug('Hub', "Writing Config: #{config_file}")
|
95
|
-
File.write(config_file,
|
96
|
+
File.write(config_file, JSON.pretty_generate(config))
|
96
97
|
end
|
97
98
|
|
98
99
|
def self.log_file
|
@@ -7,16 +7,17 @@ module Drakkon
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.start
|
10
|
-
index = []
|
11
10
|
LogBot.info('Image Biggest Index')
|
12
|
-
images.
|
13
|
-
|
11
|
+
index = images.map do |img|
|
12
|
+
process(img)
|
14
13
|
end
|
15
14
|
|
16
|
-
|
17
|
-
|
15
|
+
img_w = index.max_by(&:w)
|
16
|
+
img_h = index.max_by(&:h)
|
18
17
|
|
19
|
-
puts "Largest
|
18
|
+
puts "Largest Sizes: { w: #{img_w.w}, h: #{img_h.h} }"
|
19
|
+
puts " Width: #{img_w}"
|
20
|
+
puts " Height: #{img_h}"
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.process(file)
|
@@ -24,6 +25,7 @@ module Drakkon
|
|
24
25
|
img = MiniMagick::Image.open(file)
|
25
26
|
|
26
27
|
{
|
28
|
+
file: File.basename(file),
|
27
29
|
w: img.width,
|
28
30
|
h: img.height
|
29
31
|
}
|
@@ -58,22 +58,10 @@ module Drakkon
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
def self.process(file, filter, size)
|
62
|
-
image = MiniMagick::Image.open(file)
|
63
|
-
|
64
|
-
# Ignore if the same for w/h
|
65
|
-
return if image.width == size.split('x', 2).first.to_i && image.height == size.split('x', 2).last.to_i
|
66
|
-
|
67
|
-
LogBot.info('Image Resize', "Resizing: #{file}: #{size}")
|
68
|
-
image.filter filter
|
69
|
-
image.resize size
|
70
|
-
image.write file
|
71
|
-
end
|
72
|
-
|
73
61
|
def self.images
|
74
62
|
# Dir["#{Dir.pwd}/*.png"].sort_by(&:File.basename)
|
75
63
|
|
76
|
-
Dir["#{Dir.pwd}/*.png"]
|
64
|
+
Dir["#{Dir.pwd}/*.png"]
|
77
65
|
end
|
78
66
|
|
79
67
|
def self.prompt
|
@@ -25,50 +25,66 @@ module Drakkon
|
|
25
25
|
when :flip_flop then Images::FlipFlop.run!(args)
|
26
26
|
when :rotate then Images::Rotate.run!(args)
|
27
27
|
when :canvas then Images::Canvas.run!(args)
|
28
|
+
when :desaturate then Images::Desaturate.run!(args)
|
28
29
|
when :blur then Images::Blur.run!(args)
|
29
30
|
when :split then Images::SplitSpriteSheet.run!(args)
|
30
31
|
when :combine then Images::SpriteSheetCombine.run!(args)
|
32
|
+
when :double then Images::Double.run!(args)
|
31
33
|
when :trim then Images::Trim.run!(args)
|
32
34
|
when :gif_split then Images::GifSplit.run!(args)
|
33
35
|
when :sepia then Images::Sepia.run!(args)
|
34
36
|
when :modulate then Images::Modulate.run!(args)
|
37
|
+
when :layers then Images::Layers.run!(args)
|
38
|
+
when :hue_modulate then Images::HueModulate.run!(args)
|
35
39
|
when :bulk_rename then Images::BulkRename.run!(args)
|
40
|
+
when :downcase_norm then Images::DowncaseNormalize.run!(args)
|
36
41
|
when :text_to_image then Images::TextToImage.run!(args)
|
42
|
+
when :compress then Images::Compress.run!(args)
|
37
43
|
when :index then Images::Index.run!(force: true)
|
38
44
|
when :exit then exit(0)
|
39
45
|
else
|
40
46
|
start(menu, args)
|
41
47
|
end
|
48
|
+
rescue TTY::Reader::InputInterrupt
|
49
|
+
exit 0
|
42
50
|
end
|
43
51
|
# rubocop:enable Metrics/CyclomaticComplexity
|
44
52
|
|
53
|
+
# rubocop:disable Metrics/BlockLength
|
45
54
|
def self.menu
|
46
55
|
prompt.select('Image Helpers:', filter: true, per_page: 20) do |menu|
|
47
56
|
menu.choice name: 'Listing; Filter', value: :list
|
48
|
-
menu.choice name: 'Biggest: Find largest dimensions', value: :biggest
|
49
|
-
menu.choice name: 'Convert alpha to white', value: :white
|
50
|
-
menu.choice name: 'Resize WxH', value: :resize
|
51
|
-
menu.choice name: 'Scale', value: :scale
|
52
|
-
menu.choice name: 'Shift (Splice/Gravity)', value: :shift
|
53
|
-
menu.choice name: 'Roll', value: :roll
|
54
|
-
menu.choice name: 'Flip/Flop', value: :flip_flop
|
55
|
-
menu.choice name: 'Rotate', value: :rotate
|
56
|
-
menu.choice name: 'Canvas (Change/Retain)', value: :canvas
|
57
|
-
menu.choice name: 'Desaturate (Grey Colorspace)', value: :desaturate
|
58
|
-
menu.choice name: 'Blur', value: :blur
|
59
|
-
menu.choice name: 'Split SpriteSheet
|
60
|
-
menu.choice name: 'Create SpriteSheet
|
61
|
-
menu.choice name: '
|
62
|
-
menu.choice name: '
|
63
|
-
menu.choice name: '
|
64
|
-
menu.choice name: '
|
65
|
-
menu.choice name: '
|
66
|
-
menu.choice name: '
|
57
|
+
menu.choice name: 'Biggest: Find largest dimensions [biggest]', value: :biggest
|
58
|
+
menu.choice name: 'Convert alpha to white [white]', value: :white
|
59
|
+
menu.choice name: 'Resize WxH [resize]', value: :resize
|
60
|
+
menu.choice name: 'Scale [scale]', value: :scale
|
61
|
+
menu.choice name: 'Shift (Splice/Gravity) [shift]', value: :shift
|
62
|
+
menu.choice name: 'Roll [roll]', value: :roll
|
63
|
+
menu.choice name: 'Flip/Flop [flip_flop]', value: :flip_flop
|
64
|
+
menu.choice name: 'Rotate [rotate]', value: :rotate
|
65
|
+
menu.choice name: 'Canvas (Change/Retain) [canvas]', value: :canvas
|
66
|
+
menu.choice name: 'Desaturate (Grey Colorspace) [desaturate]', value: :desaturate
|
67
|
+
menu.choice name: 'Blur [blur]', value: :blur
|
68
|
+
menu.choice name: 'Split SpriteSheet [split]', value: :split
|
69
|
+
menu.choice name: 'Create SpriteSheet [combine]', value: :combine
|
70
|
+
menu.choice name: 'Double Image [double]', value: :double
|
71
|
+
menu.choice name: 'Trim Transparency (:trim]', value: :trim
|
72
|
+
menu.choice name: 'Gif Split [gif_split]', value: :gif_split
|
73
|
+
menu.choice name: 'Sepia [sepia]', value: :sepia
|
74
|
+
menu.choice name: 'Modulate [modulate]', value: :modulate
|
75
|
+
menu.choice name: 'Layers [layers]', value: :layers
|
76
|
+
menu.choice name: 'Bulk Rename [bulk_rename]', value: :bulk_rename
|
77
|
+
menu.choice name: 'Downcase Normalize [downcase_norm]', value: :downcase_norm
|
78
|
+
menu.choice name: 'Hue Modulate [hue_modulate]', value: :hue_modulate
|
79
|
+
menu.choice name: 'TextToImage [text_to_image]', value: :text_to_image
|
80
|
+
menu.choice name: 'Compress (file size) [compress]', value: :compress
|
81
|
+
menu.choice name: 'Index (Re-run Index) [index]', value: :index
|
67
82
|
menu.choice name: 'exit', value: :exit
|
68
83
|
end
|
69
84
|
rescue TTY::Reader::InputInterrupt
|
70
85
|
exit 0
|
71
86
|
end
|
87
|
+
# rubocop:enable Metrics/BlockLength
|
72
88
|
|
73
89
|
def self.prompt
|
74
90
|
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|