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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -8
  3. data/.rubocop.yml +7 -7
  4. data/.travis.yml +5 -5
  5. data/Gemfile +6 -6
  6. data/LICENSE.txt +21 -21
  7. data/README.md +74 -74
  8. data/Rakefile +10 -10
  9. data/bin/console +14 -14
  10. data/bin/setup +8 -8
  11. data/cyberarm_engine.gemspec +39 -39
  12. data/lib/cyberarm_engine/animator.rb +219 -219
  13. data/lib/cyberarm_engine/background.rb +179 -179
  14. data/lib/cyberarm_engine/background_nine_slice.rb +142 -142
  15. data/lib/cyberarm_engine/bounding_box.rb +150 -150
  16. data/lib/cyberarm_engine/builtin/intro_state.rb +130 -130
  17. data/lib/cyberarm_engine/cache/download_manager.rb +121 -121
  18. data/lib/cyberarm_engine/cache.rb +4 -4
  19. data/lib/cyberarm_engine/common.rb +113 -113
  20. data/lib/cyberarm_engine/config_file.rb +46 -46
  21. data/lib/cyberarm_engine/console/command.rb +157 -157
  22. data/lib/cyberarm_engine/console/commands/help_command.rb +43 -43
  23. data/lib/cyberarm_engine/console/subcommand.rb +99 -99
  24. data/lib/cyberarm_engine/console.rb +248 -248
  25. data/lib/cyberarm_engine/game_object.rb +248 -248
  26. data/lib/cyberarm_engine/game_state.rb +97 -97
  27. data/lib/cyberarm_engine/model/material.rb +21 -21
  28. data/lib/cyberarm_engine/model/model_object.rb +131 -131
  29. data/lib/cyberarm_engine/model/parser.rb +74 -74
  30. data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -138
  31. data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -154
  32. data/lib/cyberarm_engine/model.rb +212 -212
  33. data/lib/cyberarm_engine/model_cache.rb +31 -31
  34. data/lib/cyberarm_engine/opengl/light.rb +50 -50
  35. data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -46
  36. data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -38
  37. data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -249
  38. data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -164
  39. data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +298 -298
  40. data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -22
  41. data/lib/cyberarm_engine/opengl/shader.rb +406 -406
  42. data/lib/cyberarm_engine/opengl/texture.rb +69 -69
  43. data/lib/cyberarm_engine/opengl.rb +28 -28
  44. data/lib/cyberarm_engine/ray.rb +56 -56
  45. data/lib/cyberarm_engine/stats.rb +21 -21
  46. data/lib/cyberarm_engine/text.rb +197 -197
  47. data/lib/cyberarm_engine/timer.rb +23 -23
  48. data/lib/cyberarm_engine/transform.rb +296 -296
  49. data/lib/cyberarm_engine/ui/border_canvas.rb +102 -102
  50. data/lib/cyberarm_engine/ui/dsl.rb +139 -139
  51. data/lib/cyberarm_engine/ui/element.rb +488 -488
  52. data/lib/cyberarm_engine/ui/elements/button.rb +97 -97
  53. data/lib/cyberarm_engine/ui/elements/check_box.rb +54 -54
  54. data/lib/cyberarm_engine/ui/elements/container.rb +256 -256
  55. data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -179
  56. data/lib/cyberarm_engine/ui/elements/edit_line.rb +263 -263
  57. data/lib/cyberarm_engine/ui/elements/flow.rb +15 -15
  58. data/lib/cyberarm_engine/ui/elements/image.rb +72 -72
  59. data/lib/cyberarm_engine/ui/elements/list_box.rb +88 -82
  60. data/lib/cyberarm_engine/ui/elements/progress.rb +51 -51
  61. data/lib/cyberarm_engine/ui/elements/radio.rb +6 -6
  62. data/lib/cyberarm_engine/ui/elements/slider.rb +104 -104
  63. data/lib/cyberarm_engine/ui/elements/stack.rb +11 -11
  64. data/lib/cyberarm_engine/ui/elements/text_block.rb +162 -162
  65. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +65 -65
  66. data/lib/cyberarm_engine/ui/event.rb +54 -54
  67. data/lib/cyberarm_engine/ui/gui_state.rb +256 -256
  68. data/lib/cyberarm_engine/ui/style.rb +49 -49
  69. data/lib/cyberarm_engine/ui/theme.rb +207 -207
  70. data/lib/cyberarm_engine/vector.rb +293 -293
  71. data/lib/cyberarm_engine/version.rb +4 -4
  72. data/lib/cyberarm_engine/window.rb +120 -120
  73. data/lib/cyberarm_engine.rb +71 -71
  74. metadata +3 -3
@@ -1,72 +1,72 @@
1
- module CyberarmEngine
2
- class Element
3
- class Image < Element
4
- def initialize(path_or_image, options = {}, block = nil)
5
- super(options, block)
6
- @path = path_or_image if path_or_image.is_a?(String)
7
-
8
- @image = Gosu::Image.new(path_or_image, retro: @options[:retro], tileable: @options[:tileable]) if @path
9
- @image = path_or_image unless @path
10
-
11
- @scale_x = 1
12
- @scale_y = 1
13
- end
14
-
15
- def render
16
- @image.draw(
17
- @style.border_thickness_left + @style.padding_left + @x,
18
- @style.border_thickness_top + @style.padding_top + @y,
19
- @z + 2,
20
- @scale_x, @scale_y, @style.color
21
- )
22
- end
23
-
24
- def clicked_left_mouse_button(_sender, _x, _y)
25
- @block.call(self) if @block
26
-
27
- :handled
28
- end
29
-
30
- def recalculate
31
- _width = dimensional_size(@style.width, :width)
32
- _height = dimensional_size(@style.height, :height)
33
-
34
- if _width && _height
35
- @scale_x = _width.to_f / @image.width
36
- @scale_y = _height.to_f / @image.height
37
- elsif _width
38
- @scale_x = _width.to_f / @image.width
39
- @scale_y = @scale_x
40
- elsif _height
41
- @scale_y = _height.to_f / @image.height
42
- @scale_x = @scale_y
43
- else
44
- @scale_x = 1
45
- @scale_y = 1
46
- end
47
-
48
- @width = _width || @image.width.round * @scale_x
49
- @height = _height || @image.height.round * @scale_y
50
-
51
- update_background
52
- end
53
-
54
- def value
55
- @image
56
- end
57
-
58
- def value=(path_or_image, retro: false, tileable: false)
59
- @path = path_or_image if path_or_image.is_a?(String)
60
-
61
- @image = Gosu::Image.new(path_or_image, retro: retro, tileable: tileable) if @path
62
- @image = path_or_image unless @path
63
-
64
- recalculate
65
- end
66
-
67
- def path
68
- @path
69
- end
70
- end
71
- end
72
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Image < Element
4
+ def initialize(path_or_image, options = {}, block = nil)
5
+ super(options, block)
6
+ @path = path_or_image if path_or_image.is_a?(String)
7
+
8
+ @image = Gosu::Image.new(path_or_image, retro: @options[:retro], tileable: @options[:tileable]) if @path
9
+ @image = path_or_image unless @path
10
+
11
+ @scale_x = 1
12
+ @scale_y = 1
13
+ end
14
+
15
+ def render
16
+ @image.draw(
17
+ @style.border_thickness_left + @style.padding_left + @x,
18
+ @style.border_thickness_top + @style.padding_top + @y,
19
+ @z + 2,
20
+ @scale_x, @scale_y, @style.color
21
+ )
22
+ end
23
+
24
+ def clicked_left_mouse_button(_sender, _x, _y)
25
+ @block.call(self) if @block
26
+
27
+ :handled
28
+ end
29
+
30
+ def recalculate
31
+ _width = dimensional_size(@style.width, :width)
32
+ _height = dimensional_size(@style.height, :height)
33
+
34
+ if _width && _height
35
+ @scale_x = _width.to_f / @image.width
36
+ @scale_y = _height.to_f / @image.height
37
+ elsif _width
38
+ @scale_x = _width.to_f / @image.width
39
+ @scale_y = @scale_x
40
+ elsif _height
41
+ @scale_y = _height.to_f / @image.height
42
+ @scale_x = @scale_y
43
+ else
44
+ @scale_x = 1
45
+ @scale_y = 1
46
+ end
47
+
48
+ @width = _width || @image.width.round * @scale_x
49
+ @height = _height || @image.height.round * @scale_y
50
+
51
+ update_background
52
+ end
53
+
54
+ def value
55
+ @image
56
+ end
57
+
58
+ def value=(path_or_image, retro: false, tileable: false)
59
+ @path = path_or_image if path_or_image.is_a?(String)
60
+
61
+ @image = Gosu::Image.new(path_or_image, retro: retro, tileable: tileable) if @path
62
+ @image = path_or_image unless @path
63
+
64
+ recalculate
65
+ end
66
+
67
+ def path
68
+ @path
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,82 +1,88 @@
1
- module CyberarmEngine
2
- class Element
3
- class ListBox < Button
4
- attr_accessor :items
5
- attr_reader :choose
6
-
7
- def initialize(options = {}, block = nil)
8
- @items = options[:items] || []
9
- @choose = options[:choose] || @items.first
10
-
11
- super(@choose, options, block)
12
-
13
- @style.background_canvas.background = default(:background)
14
-
15
- # TODO: "Clean Up" into own class?
16
- @menu = Stack.new(parent: parent, width: @options[:width], theme: @options[:theme])
17
- @menu.define_singleton_method(:recalculate_menu) do
18
- @x = @__list_box.x
19
- @y = @__list_box.y + @__list_box.height
20
- end
21
- @menu.instance_variable_set(:"@__list_box", self)
22
-
23
- def @menu.recalculate
24
- super
25
-
26
- recalculate_menu
27
- end
28
-
29
- self.choose = @choose
30
- end
31
-
32
- def choose=(item)
33
- valid = @items.detect { |i| i == item }
34
- raise "Invalid value '#{item}' for choose, valid options were: #{@items.map { |i| "#{i.inspect}" }.join(", ")}" unless valid
35
-
36
- @choose = item
37
-
38
- self.value = item.to_s
39
-
40
- recalculate
41
- end
42
-
43
- def released_left_mouse_button(_sender, _x, _y)
44
- show_menu
45
-
46
- :handled
47
- end
48
-
49
- def show_menu
50
- @menu.clear
51
-
52
- @items.each do |item|
53
- btn = Button.new(
54
- item,
55
- {
56
- parent: @menu,
57
- width: 1.0,
58
- theme: @options[:theme],
59
- margin: 0,
60
- border_color: 0x00ffffff
61
- },
62
- proc do
63
- self.choose = item
64
- @block&.call(item)
65
- end
66
- )
67
-
68
- @menu.add(btn)
69
- end
70
- recalculate
71
-
72
- root.gui_state.show_menu(@menu)
73
- end
74
-
75
- def recalculate
76
- super
77
-
78
- @menu.recalculate
79
- end
80
- end
81
- end
82
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class ListBox < Button
4
+ attr_accessor :items
5
+ attr_reader :choose
6
+
7
+ def initialize(options = {}, block = nil)
8
+ @items = options[:items] || []
9
+ @choose = options[:choose] || @items.first
10
+
11
+ super(@choose, options, block)
12
+
13
+ @style.background_canvas.background = default(:background)
14
+
15
+ # TODO: "Clean Up" into own class?
16
+ @menu = Stack.new(parent: parent, width: @options[:width], theme: @options[:theme])
17
+ @menu.define_singleton_method(:recalculate_menu) do
18
+ @x = @__list_box.x
19
+ @y = @__list_box.y + @__list_box.height
20
+ end
21
+ @menu.instance_variable_set(:"@__list_box", self)
22
+
23
+ def @menu.recalculate
24
+ super
25
+
26
+ recalculate_menu
27
+ end
28
+
29
+ self.choose = @choose
30
+ end
31
+
32
+ def choose=(item)
33
+ valid = @items.detect { |i| i == item }
34
+ raise "Invalid value '#{item}' for choose, valid options were: #{@items.map { |i| "#{i.inspect}" }.join(", ")}" unless valid
35
+
36
+ @choose = item
37
+
38
+ self.value = item.to_s
39
+
40
+ recalculate
41
+ end
42
+
43
+ def released_left_mouse_button(_sender, _x, _y)
44
+ show_menu
45
+
46
+ :handled
47
+ end
48
+
49
+ def clicked_left_mouse_button(_sender, _x, _y)
50
+ @block&.call(self.value) if @enabled
51
+
52
+ :handled
53
+ end
54
+
55
+ def show_menu
56
+ @menu.clear
57
+
58
+ @items.each do |item|
59
+ btn = Button.new(
60
+ item,
61
+ {
62
+ parent: @menu,
63
+ width: 1.0,
64
+ theme: @options[:theme],
65
+ margin: 0,
66
+ border_color: 0x00ffffff
67
+ },
68
+ proc do
69
+ self.choose = item
70
+ @block&.call(self.value)
71
+ end
72
+ )
73
+
74
+ @menu.add(btn)
75
+ end
76
+ recalculate
77
+
78
+ root.gui_state.show_menu(@menu)
79
+ end
80
+
81
+ def recalculate
82
+ super
83
+
84
+ @menu.recalculate
85
+ end
86
+ end
87
+ end
88
+ end
@@ -1,51 +1,51 @@
1
- module CyberarmEngine
2
- class Element
3
- class Progress < Element
4
- def initialize(options = {}, block = nil)
5
- super(options, block)
6
-
7
- @fraction_background = Background.new(background: @style.fraction_background)
8
- self.value = options[:fraction] || 0.0
9
- end
10
-
11
- def render
12
- @fraction_background.draw
13
- end
14
-
15
- def recalculate
16
- _width = dimensional_size(@style.width, :width)
17
- _height = dimensional_size(@style.height, :height)
18
- @width = _width
19
- @height = _height
20
-
21
- update_background
22
- end
23
-
24
- def update_background
25
- super
26
-
27
- @fraction_background.x = @style.border_thickness_left + @style.padding_left + @x
28
- @fraction_background.y = @style.border_thickness_top + @style.padding_top + @y
29
- @fraction_background.z = @z
30
- @fraction_background.width = @width * @fraction
31
- @fraction_background.height = @height
32
-
33
- @fraction_background.background = @style.fraction_background
34
- end
35
-
36
- def value
37
- @fraction
38
- end
39
-
40
- def value=(decimal)
41
- raise "value must be number" unless decimal.is_a?(Numeric)
42
-
43
- @fraction = decimal.clamp(0.0, 1.0)
44
- update_background
45
-
46
- publish(:changed, @fraction)
47
- @fraction
48
- end
49
- end
50
- end
51
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Progress < Element
4
+ def initialize(options = {}, block = nil)
5
+ super(options, block)
6
+
7
+ @fraction_background = Background.new(background: @style.fraction_background)
8
+ self.value = options[:fraction] || 0.0
9
+ end
10
+
11
+ def render
12
+ @fraction_background.draw
13
+ end
14
+
15
+ def recalculate
16
+ _width = dimensional_size(@style.width, :width)
17
+ _height = dimensional_size(@style.height, :height)
18
+ @width = _width
19
+ @height = _height
20
+
21
+ update_background
22
+ end
23
+
24
+ def update_background
25
+ super
26
+
27
+ @fraction_background.x = @style.border_thickness_left + @style.padding_left + @x
28
+ @fraction_background.y = @style.border_thickness_top + @style.padding_top + @y
29
+ @fraction_background.z = @z
30
+ @fraction_background.width = @width * @fraction
31
+ @fraction_background.height = @height
32
+
33
+ @fraction_background.background = @style.fraction_background
34
+ end
35
+
36
+ def value
37
+ @fraction
38
+ end
39
+
40
+ def value=(decimal)
41
+ raise "value must be number" unless decimal.is_a?(Numeric)
42
+
43
+ @fraction = decimal.clamp(0.0, 1.0)
44
+ update_background
45
+
46
+ publish(:changed, @fraction)
47
+ @fraction
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,6 +1,6 @@
1
- module CyberarmEngine
2
- class Element
3
- class Radio < Element
4
- end
5
- end
6
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Radio < Element
4
+ end
5
+ end
6
+ end
@@ -1,104 +1,104 @@
1
- module CyberarmEngine
2
- class Element
3
- class Slider < Container
4
- class Handle < Button
5
- def initialize(*args)
6
- super(*args)
7
-
8
- event(:begin_drag)
9
- event(:drag_update)
10
- event(:end_drag)
11
-
12
- subscribe :begin_drag do |_sender, x, y, _button|
13
- @drag_start_pos = Vector.new(x, y)
14
-
15
- :handled
16
- end
17
-
18
- subscribe :drag_update do |_sender, x, y, _button|
19
- @parent.handle_dragged_to(x, y)
20
-
21
- :handled
22
- end
23
-
24
- subscribe :end_drag do
25
- @drag_start_pos = nil
26
-
27
- :handled
28
- end
29
- end
30
-
31
- def draggable?(button)
32
- button == :left
33
- end
34
- end
35
-
36
- attr_reader :range, :step_size, :value
37
-
38
- def initialize(options = {}, block = nil)
39
- super(options, block)
40
-
41
- @range = @options[:range] || (0.0..1.0)
42
- @step_size = @options[:step] || 0.1
43
- @value = @options[:value] || (@range.first + @range.last) / 2
44
-
45
- @handle = Handle.new("", parent: self, width: 8, height: 1.0) { close }
46
- add(@handle)
47
- end
48
-
49
- def recalculate
50
- _width = dimensional_size(@style.width, :width)
51
- _height = dimensional_size(@style.height, :height)
52
-
53
- @width = _width
54
- @height = _height
55
-
56
- position_handle
57
- @handle.recalculate
58
- @handle.update_background
59
-
60
- update_background
61
- end
62
-
63
- def position_handle
64
- @handle.x = @x + @style.padding_left + @style.border_thickness_left +
65
- ((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f)
66
-
67
- @handle.y = @y + @style.border_thickness_top + @style.padding_top
68
- end
69
-
70
- def draw
71
- super
72
-
73
- @handle.draw
74
- end
75
-
76
- def update
77
- super
78
-
79
- @tip = value.to_s
80
- @handle.tip = @tip
81
- end
82
-
83
- def holding_left_mouse_button(_sender, x, y)
84
- handle_dragged_to(x, y)
85
-
86
- :handled
87
- end
88
-
89
- def handle_dragged_to(x, _y)
90
- @ratio = ((x - @handle.width / 2) - @x) / (content_width - @handle.outer_width)
91
-
92
- self.value = @ratio.clamp(0.0, 1.0) * (@range.max - @range.min) + @range.min
93
- end
94
-
95
- def value=(n)
96
- @value = n
97
- position_handle
98
- @handle.recalculate
99
-
100
- publish(:changed, @value)
101
- end
102
- end
103
- end
104
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Slider < Container
4
+ class Handle < Button
5
+ def initialize(*args)
6
+ super(*args)
7
+
8
+ event(:begin_drag)
9
+ event(:drag_update)
10
+ event(:end_drag)
11
+
12
+ subscribe :begin_drag do |_sender, x, y, _button|
13
+ @drag_start_pos = Vector.new(x, y)
14
+
15
+ :handled
16
+ end
17
+
18
+ subscribe :drag_update do |_sender, x, y, _button|
19
+ @parent.handle_dragged_to(x, y)
20
+
21
+ :handled
22
+ end
23
+
24
+ subscribe :end_drag do
25
+ @drag_start_pos = nil
26
+
27
+ :handled
28
+ end
29
+ end
30
+
31
+ def draggable?(button)
32
+ button == :left
33
+ end
34
+ end
35
+
36
+ attr_reader :range, :step_size, :value
37
+
38
+ def initialize(options = {}, block = nil)
39
+ super(options, block)
40
+
41
+ @range = @options[:range] || (0.0..1.0)
42
+ @step_size = @options[:step] || 0.1
43
+ @value = @options[:value] || (@range.first + @range.last) / 2
44
+
45
+ @handle = Handle.new("", parent: self, width: 8, height: 1.0) { close }
46
+ add(@handle)
47
+ end
48
+
49
+ def recalculate
50
+ _width = dimensional_size(@style.width, :width)
51
+ _height = dimensional_size(@style.height, :height)
52
+
53
+ @width = _width
54
+ @height = _height
55
+
56
+ position_handle
57
+ @handle.recalculate
58
+ @handle.update_background
59
+
60
+ update_background
61
+ end
62
+
63
+ def position_handle
64
+ @handle.x = @x + @style.padding_left + @style.border_thickness_left +
65
+ ((content_width - @handle.outer_width) * (@value - @range.min) / (@range.max - @range.min).to_f)
66
+
67
+ @handle.y = @y + @style.border_thickness_top + @style.padding_top
68
+ end
69
+
70
+ def draw
71
+ super
72
+
73
+ @handle.draw
74
+ end
75
+
76
+ def update
77
+ super
78
+
79
+ @tip = value.to_s
80
+ @handle.tip = @tip
81
+ end
82
+
83
+ def holding_left_mouse_button(_sender, x, y)
84
+ handle_dragged_to(x, y)
85
+
86
+ :handled
87
+ end
88
+
89
+ def handle_dragged_to(x, _y)
90
+ @ratio = ((x - @handle.width / 2) - @x) / (content_width - @handle.outer_width)
91
+
92
+ self.value = @ratio.clamp(0.0, 1.0) * (@range.max - @range.min) + @range.min
93
+ end
94
+
95
+ def value=(n)
96
+ @value = n
97
+ position_handle
98
+ @handle.recalculate
99
+
100
+ publish(:changed, @value)
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,11 +1,11 @@
1
- module CyberarmEngine
2
- class Element
3
- class Stack < Container
4
- def layout
5
- @children.each do |child|
6
- move_to_next_line(child)
7
- end
8
- end
9
- end
10
- end
11
- end
1
+ module CyberarmEngine
2
+ class Element
3
+ class Stack < Container
4
+ def layout
5
+ @children.each do |child|
6
+ move_to_next_line(child)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end