cyberarm_engine 0.19.0 → 0.19.1
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/.gitignore +8 -8
- data/.rubocop.yml +7 -7
- data/.travis.yml +5 -5
- data/Gemfile +6 -6
- data/LICENSE.txt +21 -21
- data/README.md +74 -74
- data/Rakefile +10 -10
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/cyberarm_engine.gemspec +39 -39
- data/lib/cyberarm_engine/animator.rb +219 -219
- data/lib/cyberarm_engine/background.rb +179 -179
- data/lib/cyberarm_engine/background_nine_slice.rb +142 -142
- data/lib/cyberarm_engine/bounding_box.rb +150 -150
- data/lib/cyberarm_engine/builtin/intro_state.rb +130 -130
- data/lib/cyberarm_engine/cache/download_manager.rb +121 -121
- data/lib/cyberarm_engine/cache.rb +4 -4
- data/lib/cyberarm_engine/common.rb +113 -113
- data/lib/cyberarm_engine/config_file.rb +46 -46
- data/lib/cyberarm_engine/console/command.rb +157 -157
- data/lib/cyberarm_engine/console/commands/help_command.rb +43 -43
- data/lib/cyberarm_engine/console/subcommand.rb +99 -99
- data/lib/cyberarm_engine/console.rb +248 -248
- data/lib/cyberarm_engine/game_object.rb +248 -248
- data/lib/cyberarm_engine/game_state.rb +97 -97
- data/lib/cyberarm_engine/model/material.rb +21 -21
- data/lib/cyberarm_engine/model/model_object.rb +131 -131
- data/lib/cyberarm_engine/model/parser.rb +74 -74
- data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -138
- data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -154
- data/lib/cyberarm_engine/model.rb +212 -212
- data/lib/cyberarm_engine/model_cache.rb +31 -31
- data/lib/cyberarm_engine/opengl/light.rb +50 -50
- data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -46
- data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -38
- data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -249
- data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -164
- data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +298 -298
- data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -22
- data/lib/cyberarm_engine/opengl/shader.rb +406 -406
- data/lib/cyberarm_engine/opengl/texture.rb +69 -69
- data/lib/cyberarm_engine/opengl.rb +28 -28
- data/lib/cyberarm_engine/ray.rb +56 -56
- data/lib/cyberarm_engine/stats.rb +21 -21
- data/lib/cyberarm_engine/text.rb +197 -197
- data/lib/cyberarm_engine/timer.rb +23 -23
- data/lib/cyberarm_engine/transform.rb +296 -296
- data/lib/cyberarm_engine/ui/border_canvas.rb +102 -102
- data/lib/cyberarm_engine/ui/dsl.rb +139 -139
- data/lib/cyberarm_engine/ui/element.rb +488 -488
- data/lib/cyberarm_engine/ui/elements/button.rb +97 -97
- data/lib/cyberarm_engine/ui/elements/check_box.rb +54 -54
- data/lib/cyberarm_engine/ui/elements/container.rb +256 -256
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -179
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +263 -263
- data/lib/cyberarm_engine/ui/elements/flow.rb +15 -15
- data/lib/cyberarm_engine/ui/elements/image.rb +72 -72
- data/lib/cyberarm_engine/ui/elements/list_box.rb +88 -82
- data/lib/cyberarm_engine/ui/elements/progress.rb +51 -51
- data/lib/cyberarm_engine/ui/elements/radio.rb +6 -6
- data/lib/cyberarm_engine/ui/elements/slider.rb +104 -104
- data/lib/cyberarm_engine/ui/elements/stack.rb +11 -11
- data/lib/cyberarm_engine/ui/elements/text_block.rb +162 -162
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +65 -65
- data/lib/cyberarm_engine/ui/event.rb +54 -54
- data/lib/cyberarm_engine/ui/gui_state.rb +256 -256
- data/lib/cyberarm_engine/ui/style.rb +49 -49
- data/lib/cyberarm_engine/ui/theme.rb +207 -207
- data/lib/cyberarm_engine/vector.rb +293 -293
- data/lib/cyberarm_engine/version.rb +4 -4
- data/lib/cyberarm_engine/window.rb +120 -120
- data/lib/cyberarm_engine.rb +71 -71
- metadata +3 -3
@@ -1,158 +1,158 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CyberarmEngine
|
4
|
-
class Console
|
5
|
-
module Style
|
6
|
-
def self.error(string)
|
7
|
-
"<c=ff5555>#{string}</c>"
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.warn(string)
|
11
|
-
"<c=ff7700>#{string}</c>"
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.notice(string)
|
15
|
-
"<c=55ff55>#{string}</c>"
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.highlight(string, color = "5555ff")
|
19
|
-
"<c=#{color}>#{string}</c>"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Command
|
24
|
-
def self.inherited(subclass)
|
25
|
-
@list ||= []
|
26
|
-
@commands ||= []
|
27
|
-
@list << subclass
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.setup
|
31
|
-
@list ||= []
|
32
|
-
@commands = []
|
33
|
-
@list.each do |subclass|
|
34
|
-
cmd = subclass.new
|
35
|
-
if @commands.detect { |c| c.command == cmd.command }
|
36
|
-
raise "Command '#{cmd.command}' from '#{cmd.class}' already exists!"
|
37
|
-
end
|
38
|
-
|
39
|
-
@commands << cmd
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.use(command, arguments, console)
|
44
|
-
found_command = @commands.detect { |cmd| cmd.command == command.to_sym }
|
45
|
-
|
46
|
-
if found_command
|
47
|
-
found_command.handle(arguments, console)
|
48
|
-
else
|
49
|
-
console.stdin("Command #{Style.error(command)} not found.")
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.find(command)
|
54
|
-
@commands.detect { |cmd| cmd.command == command.to_sym }
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.list_commands
|
58
|
-
@commands
|
59
|
-
end
|
60
|
-
|
61
|
-
def initialize
|
62
|
-
@store = {}
|
63
|
-
@subcommands = []
|
64
|
-
|
65
|
-
setup
|
66
|
-
end
|
67
|
-
|
68
|
-
def setup
|
69
|
-
end
|
70
|
-
|
71
|
-
def subcommand(command, type)
|
72
|
-
if @subcommands.detect { |subcmd| subcmd.command == command.to_sym }
|
73
|
-
raise "Subcommand '#{command}' for '#{self.command}' already exists!"
|
74
|
-
end
|
75
|
-
|
76
|
-
@subcommands << SubCommand.new(self, command, type)
|
77
|
-
end
|
78
|
-
|
79
|
-
def get(key)
|
80
|
-
@store[key]
|
81
|
-
end
|
82
|
-
|
83
|
-
def set(key, value)
|
84
|
-
@store[key] = value
|
85
|
-
end
|
86
|
-
|
87
|
-
def group
|
88
|
-
raise NotImplementedError
|
89
|
-
end
|
90
|
-
|
91
|
-
def command
|
92
|
-
raise NotImplementedError
|
93
|
-
end
|
94
|
-
|
95
|
-
def handle(arguments, console)
|
96
|
-
raise NotImplementedError
|
97
|
-
end
|
98
|
-
|
99
|
-
def autocomplete(console)
|
100
|
-
split = console.text_input.text.split(" ")
|
101
|
-
|
102
|
-
if @subcommands.size.positive?
|
103
|
-
if !console.text_input.text.end_with?(" ") && split.size == 2
|
104
|
-
list = console.abbrev_search(@subcommands.map { |cmd| cmd.command.to_s }, split.last)
|
105
|
-
|
106
|
-
if list.size == 1
|
107
|
-
console.text_input.text = "#{split.first} #{list.first} "
|
108
|
-
else
|
109
|
-
return unless list.size.positive?
|
110
|
-
|
111
|
-
console.stdin(list.map { |cmd| Console::Style.highlight(cmd) }.join(", ").to_s)
|
112
|
-
end
|
113
|
-
|
114
|
-
# List available options on subcommand
|
115
|
-
elsif (console.text_input.text.end_with?(" ") && split.size == 2) || !console.text_input.text.end_with?(" ") && split.size == 3
|
116
|
-
subcommand = @subcommands.detect { |cmd| cmd.command.to_s == (split[1]) }
|
117
|
-
|
118
|
-
if subcommand
|
119
|
-
if split.size == 2
|
120
|
-
console.stdin("Available options: #{subcommand.values.map { |value| Console::Style.highlight(value) }.join(',')}")
|
121
|
-
else
|
122
|
-
list = console.abbrev_search(subcommand.values, split.last)
|
123
|
-
if list.size == 1
|
124
|
-
console.text_input.text = "#{split.first} #{split[1]} #{list.first} "
|
125
|
-
elsif list.size.positive?
|
126
|
-
console.stdin("Available options: #{list.map { |value| Console::Style.highlight(value) }.join(',')}")
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# List available subcommands if command was entered and has only a space after it
|
132
|
-
elsif console.text_input.text.end_with?(" ") && split.size == 1
|
133
|
-
console.stdin("Available subcommands: #{@subcommands.map { |cmd| Console::Style.highlight(cmd.command) }.join(', ')}")
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
def handle_subcommand(arguments, console)
|
139
|
-
if arguments.size.zero?
|
140
|
-
console.stdin(usage)
|
141
|
-
return
|
142
|
-
end
|
143
|
-
subcommand = arguments.delete_at(0)
|
144
|
-
|
145
|
-
found_command = @subcommands.detect { |cmd| cmd.command == subcommand.to_sym }
|
146
|
-
if found_command
|
147
|
-
found_command.handle(arguments, console)
|
148
|
-
else
|
149
|
-
console.stdin("Unknown subcommand #{Style.error(subcommand)} for #{Style.highlight(command)}")
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def usage
|
154
|
-
raise NotImplementedError
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CyberarmEngine
|
4
|
+
class Console
|
5
|
+
module Style
|
6
|
+
def self.error(string)
|
7
|
+
"<c=ff5555>#{string}</c>"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.warn(string)
|
11
|
+
"<c=ff7700>#{string}</c>"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.notice(string)
|
15
|
+
"<c=55ff55>#{string}</c>"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.highlight(string, color = "5555ff")
|
19
|
+
"<c=#{color}>#{string}</c>"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Command
|
24
|
+
def self.inherited(subclass)
|
25
|
+
@list ||= []
|
26
|
+
@commands ||= []
|
27
|
+
@list << subclass
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.setup
|
31
|
+
@list ||= []
|
32
|
+
@commands = []
|
33
|
+
@list.each do |subclass|
|
34
|
+
cmd = subclass.new
|
35
|
+
if @commands.detect { |c| c.command == cmd.command }
|
36
|
+
raise "Command '#{cmd.command}' from '#{cmd.class}' already exists!"
|
37
|
+
end
|
38
|
+
|
39
|
+
@commands << cmd
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.use(command, arguments, console)
|
44
|
+
found_command = @commands.detect { |cmd| cmd.command == command.to_sym }
|
45
|
+
|
46
|
+
if found_command
|
47
|
+
found_command.handle(arguments, console)
|
48
|
+
else
|
49
|
+
console.stdin("Command #{Style.error(command)} not found.")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.find(command)
|
54
|
+
@commands.detect { |cmd| cmd.command == command.to_sym }
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.list_commands
|
58
|
+
@commands
|
59
|
+
end
|
60
|
+
|
61
|
+
def initialize
|
62
|
+
@store = {}
|
63
|
+
@subcommands = []
|
64
|
+
|
65
|
+
setup
|
66
|
+
end
|
67
|
+
|
68
|
+
def setup
|
69
|
+
end
|
70
|
+
|
71
|
+
def subcommand(command, type)
|
72
|
+
if @subcommands.detect { |subcmd| subcmd.command == command.to_sym }
|
73
|
+
raise "Subcommand '#{command}' for '#{self.command}' already exists!"
|
74
|
+
end
|
75
|
+
|
76
|
+
@subcommands << SubCommand.new(self, command, type)
|
77
|
+
end
|
78
|
+
|
79
|
+
def get(key)
|
80
|
+
@store[key]
|
81
|
+
end
|
82
|
+
|
83
|
+
def set(key, value)
|
84
|
+
@store[key] = value
|
85
|
+
end
|
86
|
+
|
87
|
+
def group
|
88
|
+
raise NotImplementedError
|
89
|
+
end
|
90
|
+
|
91
|
+
def command
|
92
|
+
raise NotImplementedError
|
93
|
+
end
|
94
|
+
|
95
|
+
def handle(arguments, console)
|
96
|
+
raise NotImplementedError
|
97
|
+
end
|
98
|
+
|
99
|
+
def autocomplete(console)
|
100
|
+
split = console.text_input.text.split(" ")
|
101
|
+
|
102
|
+
if @subcommands.size.positive?
|
103
|
+
if !console.text_input.text.end_with?(" ") && split.size == 2
|
104
|
+
list = console.abbrev_search(@subcommands.map { |cmd| cmd.command.to_s }, split.last)
|
105
|
+
|
106
|
+
if list.size == 1
|
107
|
+
console.text_input.text = "#{split.first} #{list.first} "
|
108
|
+
else
|
109
|
+
return unless list.size.positive?
|
110
|
+
|
111
|
+
console.stdin(list.map { |cmd| Console::Style.highlight(cmd) }.join(", ").to_s)
|
112
|
+
end
|
113
|
+
|
114
|
+
# List available options on subcommand
|
115
|
+
elsif (console.text_input.text.end_with?(" ") && split.size == 2) || !console.text_input.text.end_with?(" ") && split.size == 3
|
116
|
+
subcommand = @subcommands.detect { |cmd| cmd.command.to_s == (split[1]) }
|
117
|
+
|
118
|
+
if subcommand
|
119
|
+
if split.size == 2
|
120
|
+
console.stdin("Available options: #{subcommand.values.map { |value| Console::Style.highlight(value) }.join(',')}")
|
121
|
+
else
|
122
|
+
list = console.abbrev_search(subcommand.values, split.last)
|
123
|
+
if list.size == 1
|
124
|
+
console.text_input.text = "#{split.first} #{split[1]} #{list.first} "
|
125
|
+
elsif list.size.positive?
|
126
|
+
console.stdin("Available options: #{list.map { |value| Console::Style.highlight(value) }.join(',')}")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# List available subcommands if command was entered and has only a space after it
|
132
|
+
elsif console.text_input.text.end_with?(" ") && split.size == 1
|
133
|
+
console.stdin("Available subcommands: #{@subcommands.map { |cmd| Console::Style.highlight(cmd.command) }.join(', ')}")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def handle_subcommand(arguments, console)
|
139
|
+
if arguments.size.zero?
|
140
|
+
console.stdin(usage)
|
141
|
+
return
|
142
|
+
end
|
143
|
+
subcommand = arguments.delete_at(0)
|
144
|
+
|
145
|
+
found_command = @subcommands.detect { |cmd| cmd.command == subcommand.to_sym }
|
146
|
+
if found_command
|
147
|
+
found_command.handle(arguments, console)
|
148
|
+
else
|
149
|
+
console.stdin("Unknown subcommand #{Style.error(subcommand)} for #{Style.highlight(command)}")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def usage
|
154
|
+
raise NotImplementedError
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
158
|
end
|
@@ -1,43 +1,43 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CyberarmEngine
|
4
|
-
class Console
|
5
|
-
class HelpCommand < CyberarmEngine::Console::Command
|
6
|
-
def group
|
7
|
-
:global
|
8
|
-
end
|
9
|
-
|
10
|
-
def command
|
11
|
-
:help
|
12
|
-
end
|
13
|
-
|
14
|
-
def handle(arguments, console)
|
15
|
-
console.stdin(usage(arguments.first))
|
16
|
-
end
|
17
|
-
|
18
|
-
def autocomplete(console)
|
19
|
-
split = console.text_input.text.split(" ")
|
20
|
-
if !console.text_input.text.start_with?(" ") && split.size == 2
|
21
|
-
list = console.abbrev_search(Command.list_commands.map { |cmd| cmd.command.to_s }, split.last)
|
22
|
-
if list.size == 1
|
23
|
-
console.text_input.text = "#{split.first} #{list.first} "
|
24
|
-
elsif list.size > 1
|
25
|
-
console.stdin(list.map { |cmd| Style.highlight(cmd) }.join(", "))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def usage(command = nil)
|
31
|
-
if command
|
32
|
-
if cmd = Command.find(command)
|
33
|
-
cmd.usage
|
34
|
-
else
|
35
|
-
"#{Style.error(command)} is not a command"
|
36
|
-
end
|
37
|
-
else
|
38
|
-
"Available commands:\n#{Command.list_commands.map { |cmd| Style.highlight(cmd.command).to_s }.join(', ')}"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CyberarmEngine
|
4
|
+
class Console
|
5
|
+
class HelpCommand < CyberarmEngine::Console::Command
|
6
|
+
def group
|
7
|
+
:global
|
8
|
+
end
|
9
|
+
|
10
|
+
def command
|
11
|
+
:help
|
12
|
+
end
|
13
|
+
|
14
|
+
def handle(arguments, console)
|
15
|
+
console.stdin(usage(arguments.first))
|
16
|
+
end
|
17
|
+
|
18
|
+
def autocomplete(console)
|
19
|
+
split = console.text_input.text.split(" ")
|
20
|
+
if !console.text_input.text.start_with?(" ") && split.size == 2
|
21
|
+
list = console.abbrev_search(Command.list_commands.map { |cmd| cmd.command.to_s }, split.last)
|
22
|
+
if list.size == 1
|
23
|
+
console.text_input.text = "#{split.first} #{list.first} "
|
24
|
+
elsif list.size > 1
|
25
|
+
console.stdin(list.map { |cmd| Style.highlight(cmd) }.join(", "))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def usage(command = nil)
|
31
|
+
if command
|
32
|
+
if cmd = Command.find(command)
|
33
|
+
cmd.usage
|
34
|
+
else
|
35
|
+
"#{Style.error(command)} is not a command"
|
36
|
+
end
|
37
|
+
else
|
38
|
+
"Available commands:\n#{Command.list_commands.map { |cmd| Style.highlight(cmd.command).to_s }.join(', ')}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,100 +1,100 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CyberarmEngine
|
4
|
-
class Console
|
5
|
-
class Command
|
6
|
-
class SubCommand
|
7
|
-
def initialize(parent, command, type)
|
8
|
-
@parent = parent
|
9
|
-
@command = command
|
10
|
-
@type = type
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :command
|
14
|
-
|
15
|
-
def handle(arguments, console)
|
16
|
-
if arguments.size > 1
|
17
|
-
console.stdin("to many arguments for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.size)} expected #{Style.notice(1)}.")
|
18
|
-
return
|
19
|
-
end
|
20
|
-
|
21
|
-
case @type
|
22
|
-
when :boolean
|
23
|
-
case arguments.last
|
24
|
-
when "", nil
|
25
|
-
var = @parent.get(command.to_sym) || false
|
26
|
-
console.stdin("#{command}: #{Style.highlight(var)}")
|
27
|
-
when "on"
|
28
|
-
var = @parent.set(command.to_sym, true)
|
29
|
-
console.stdin("#{command} => #{Style.highlight(var)}")
|
30
|
-
when "off"
|
31
|
-
var = @parent.set(command.to_sym, false)
|
32
|
-
console.stdin("#{command} => #{Style.highlight(var)}")
|
33
|
-
else
|
34
|
-
console.stdin("Invalid argument for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.last)} expected #{Style.notice('on')}, or #{Style.notice('off')}.")
|
35
|
-
end
|
36
|
-
when :string
|
37
|
-
case arguments.last
|
38
|
-
when "", nil
|
39
|
-
var = @parent.get(command.to_sym) || "\"\""
|
40
|
-
console.stdin("#{command}: #{Style.highlight(var)}")
|
41
|
-
else
|
42
|
-
var = @parent.set(command.to_sym, arguments.last)
|
43
|
-
console.stdin("#{command} => #{Style.highlight(var)}")
|
44
|
-
end
|
45
|
-
when :integer
|
46
|
-
case arguments.last
|
47
|
-
when "", nil
|
48
|
-
var = @parent.get(command.to_sym) || "nil"
|
49
|
-
console.stdin("#{command}: #{Style.highlight(var)}")
|
50
|
-
else
|
51
|
-
begin
|
52
|
-
var = @parent.set(command.to_sym, Integer(arguments.last))
|
53
|
-
console.stdin("#{command} => #{Style.highlight(var)}")
|
54
|
-
rescue ArgumentError
|
55
|
-
console.stdin("Error: #{Style.error("Expected an integer, got '#{arguments.last}'")}")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
when :decimal
|
59
|
-
case arguments.last
|
60
|
-
when "", nil
|
61
|
-
var = @parent.get(command.to_sym) || "nil"
|
62
|
-
console.stdin("#{command}: #{Style.highlight(var)}")
|
63
|
-
else
|
64
|
-
begin
|
65
|
-
var = @parent.set(command.to_sym, Float(arguments.last))
|
66
|
-
console.stdin("#{command} => #{Style.highlight(var)}")
|
67
|
-
rescue ArgumentError
|
68
|
-
console.stdin("Error: #{Style.error("Expected a decimal or integer, got '#{arguments.last}'")}")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
else
|
72
|
-
raise RuntimeError
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def values
|
77
|
-
case @type
|
78
|
-
when :boolean
|
79
|
-
%w[on off]
|
80
|
-
else
|
81
|
-
[]
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def usage
|
86
|
-
case @type
|
87
|
-
when :boolean
|
88
|
-
"#{Style.highlight(command)} #{Style.notice('[on|off]')}"
|
89
|
-
when :string
|
90
|
-
"#{Style.highlight(command)} #{Style.notice('[string]')}"
|
91
|
-
when :integer
|
92
|
-
"#{Style.highlight(command)} #{Style.notice('[0]')}"
|
93
|
-
when :decimal
|
94
|
-
"#{Style.highlight(command)} #{Style.notice('[0.0]')}"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CyberarmEngine
|
4
|
+
class Console
|
5
|
+
class Command
|
6
|
+
class SubCommand
|
7
|
+
def initialize(parent, command, type)
|
8
|
+
@parent = parent
|
9
|
+
@command = command
|
10
|
+
@type = type
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :command
|
14
|
+
|
15
|
+
def handle(arguments, console)
|
16
|
+
if arguments.size > 1
|
17
|
+
console.stdin("to many arguments for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.size)} expected #{Style.notice(1)}.")
|
18
|
+
return
|
19
|
+
end
|
20
|
+
|
21
|
+
case @type
|
22
|
+
when :boolean
|
23
|
+
case arguments.last
|
24
|
+
when "", nil
|
25
|
+
var = @parent.get(command.to_sym) || false
|
26
|
+
console.stdin("#{command}: #{Style.highlight(var)}")
|
27
|
+
when "on"
|
28
|
+
var = @parent.set(command.to_sym, true)
|
29
|
+
console.stdin("#{command} => #{Style.highlight(var)}")
|
30
|
+
when "off"
|
31
|
+
var = @parent.set(command.to_sym, false)
|
32
|
+
console.stdin("#{command} => #{Style.highlight(var)}")
|
33
|
+
else
|
34
|
+
console.stdin("Invalid argument for #{Style.highlight(command.to_s)}, got #{Style.error(arguments.last)} expected #{Style.notice('on')}, or #{Style.notice('off')}.")
|
35
|
+
end
|
36
|
+
when :string
|
37
|
+
case arguments.last
|
38
|
+
when "", nil
|
39
|
+
var = @parent.get(command.to_sym) || "\"\""
|
40
|
+
console.stdin("#{command}: #{Style.highlight(var)}")
|
41
|
+
else
|
42
|
+
var = @parent.set(command.to_sym, arguments.last)
|
43
|
+
console.stdin("#{command} => #{Style.highlight(var)}")
|
44
|
+
end
|
45
|
+
when :integer
|
46
|
+
case arguments.last
|
47
|
+
when "", nil
|
48
|
+
var = @parent.get(command.to_sym) || "nil"
|
49
|
+
console.stdin("#{command}: #{Style.highlight(var)}")
|
50
|
+
else
|
51
|
+
begin
|
52
|
+
var = @parent.set(command.to_sym, Integer(arguments.last))
|
53
|
+
console.stdin("#{command} => #{Style.highlight(var)}")
|
54
|
+
rescue ArgumentError
|
55
|
+
console.stdin("Error: #{Style.error("Expected an integer, got '#{arguments.last}'")}")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
when :decimal
|
59
|
+
case arguments.last
|
60
|
+
when "", nil
|
61
|
+
var = @parent.get(command.to_sym) || "nil"
|
62
|
+
console.stdin("#{command}: #{Style.highlight(var)}")
|
63
|
+
else
|
64
|
+
begin
|
65
|
+
var = @parent.set(command.to_sym, Float(arguments.last))
|
66
|
+
console.stdin("#{command} => #{Style.highlight(var)}")
|
67
|
+
rescue ArgumentError
|
68
|
+
console.stdin("Error: #{Style.error("Expected a decimal or integer, got '#{arguments.last}'")}")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
raise RuntimeError
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def values
|
77
|
+
case @type
|
78
|
+
when :boolean
|
79
|
+
%w[on off]
|
80
|
+
else
|
81
|
+
[]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def usage
|
86
|
+
case @type
|
87
|
+
when :boolean
|
88
|
+
"#{Style.highlight(command)} #{Style.notice('[on|off]')}"
|
89
|
+
when :string
|
90
|
+
"#{Style.highlight(command)} #{Style.notice('[string]')}"
|
91
|
+
when :integer
|
92
|
+
"#{Style.highlight(command)} #{Style.notice('[0]')}"
|
93
|
+
when :decimal
|
94
|
+
"#{Style.highlight(command)} #{Style.notice('[0.0]')}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
100
|
end
|