cyberarm_engine 0.25.1 → 0.30.0

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +20 -8
  4. data/README.md +1 -1
  5. data/assets/textures/ui/circle.png +0 -0
  6. data/assets/textures/ui/circle_small.png +0 -0
  7. data/assets/textures/ui/rounded.png +0 -0
  8. data/assets/textures/ui/rounded_bottom.png +0 -0
  9. data/assets/textures/ui/rounded_left.png +0 -0
  10. data/assets/textures/ui/rounded_left_bottom.png +0 -0
  11. data/assets/textures/ui/rounded_left_top.png +0 -0
  12. data/assets/textures/ui/rounded_right.png +0 -0
  13. data/assets/textures/ui/rounded_right_bottom.png +0 -0
  14. data/assets/textures/ui/rounded_right_top.png +0 -0
  15. data/assets/textures/ui/rounded_small.png +0 -0
  16. data/assets/textures/ui/rounded_tiny.png +0 -0
  17. data/assets/textures/ui/rounded_top.png +0 -0
  18. data/assets/textures/ui/square.png +0 -0
  19. data/cyberarm_engine.gemspec +1 -2
  20. data/lib/cyberarm_engine/background.rb +16 -18
  21. data/lib/cyberarm_engine/background_nine_slice.rb +62 -22
  22. data/lib/cyberarm_engine/common.rb +2 -0
  23. data/lib/cyberarm_engine/event_bus.rb +39 -0
  24. data/lib/cyberarm_engine/game_state.rb +11 -1
  25. data/lib/cyberarm_engine/pathfinding/graph.rb +64 -0
  26. data/lib/cyberarm_engine/pathfinding/graph_search.rb +6 -0
  27. data/lib/cyberarm_engine/pathfinding/graph_searches/astar_search.rb +6 -0
  28. data/lib/cyberarm_engine/pathfinding/graph_searches/breadth_first_search.rb +27 -0
  29. data/lib/cyberarm_engine/pathfinding/graph_searches/dijkstra_search.rb +6 -0
  30. data/lib/cyberarm_engine/pathfinding/graphs/grid.rb +52 -0
  31. data/lib/cyberarm_engine/result.rb +1 -2
  32. data/lib/cyberarm_engine/text.rb +54 -26
  33. data/lib/cyberarm_engine/timer.rb +4 -0
  34. data/lib/cyberarm_engine/ui/border_canvas.rb +16 -16
  35. data/lib/cyberarm_engine/ui/dialog.rb +24 -0
  36. data/lib/cyberarm_engine/ui/dsl.rb +29 -1
  37. data/lib/cyberarm_engine/ui/element.rb +132 -130
  38. data/lib/cyberarm_engine/ui/elements/button.rb +12 -13
  39. data/lib/cyberarm_engine/ui/elements/check_box.rb +5 -1
  40. data/lib/cyberarm_engine/ui/elements/container.rb +52 -46
  41. data/lib/cyberarm_engine/ui/elements/edit_box.rb +30 -9
  42. data/lib/cyberarm_engine/ui/elements/edit_line.rb +4 -2
  43. data/lib/cyberarm_engine/ui/elements/image.rb +9 -3
  44. data/lib/cyberarm_engine/ui/elements/list_box.rb +3 -3
  45. data/lib/cyberarm_engine/ui/elements/menu.rb +3 -3
  46. data/lib/cyberarm_engine/ui/elements/progress.rb +8 -6
  47. data/lib/cyberarm_engine/ui/elements/slider.rb +7 -3
  48. data/lib/cyberarm_engine/ui/elements/text_block.rb +31 -17
  49. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +5 -1
  50. data/lib/cyberarm_engine/ui/elements/widget.rb +45 -0
  51. data/lib/cyberarm_engine/ui/event.rb +1 -1
  52. data/lib/cyberarm_engine/ui/gui_state.rb +86 -10
  53. data/lib/cyberarm_engine/ui/page.rb +39 -0
  54. data/lib/cyberarm_engine/ui/style.rb +48 -15
  55. data/lib/cyberarm_engine/ui/theme.rb +17 -5
  56. data/lib/cyberarm_engine/version.rb +1 -1
  57. data/lib/cyberarm_engine/window.rb +40 -1
  58. data/lib/cyberarm_engine.rb +11 -0
  59. metadata +28 -4
@@ -23,7 +23,7 @@ module CyberarmEngine
23
23
  @color = Gosu::Color::WHITE
24
24
  end
25
25
  @mode = options[:mode] || :default
26
- @alignment = options[:alignment] || nil
26
+ @alignment = options[:alignment] || :left
27
27
 
28
28
  @border = options[:border]
29
29
  @border = true if options[:border].nil?
@@ -39,17 +39,6 @@ module CyberarmEngine
39
39
  @static = options[:static] || (options[:static].nil? || options[:static] == false ? false : true)
40
40
 
41
41
  @textobject = check_cache(@size, @font)
42
-
43
- if @alignment
44
- case @alignment
45
- when :left
46
- @x = 0 + BUTTON_PADDING
47
- when :center
48
- @x = (CyberarmEngine::Window.instance.width / 2) - (@textobject.text_width(@text) / 2)
49
- when :right
50
- @x = CyberarmEngine::Window.instance.width - BUTTON_PADDING - @textobject.text_width(@text)
51
- end
52
- end
53
42
  end
54
43
 
55
44
  def check_cache(size, font_name)
@@ -113,6 +102,38 @@ module CyberarmEngine
113
102
  invalidate_cache! if old_color != color
114
103
  end
115
104
 
105
+ def alignment=(value)
106
+ invalidate_cache! if @alignment != value
107
+ @alignment = value
108
+ end
109
+
110
+ def shadow=(value)
111
+ invalidate_cache! if @shadow != value
112
+ @shadow = value
113
+ end
114
+
115
+ def shadow_color=(color)
116
+ old_color = @shadow_color
117
+
118
+ if color
119
+ @shadow_color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
120
+ else
121
+ raise "color cannot be nil"
122
+ end
123
+
124
+ invalidate_cache! if old_color != color
125
+ end
126
+
127
+ def shadow_alpha=(value)
128
+ invalidate_cache! if @shadow_alpha != value
129
+ @shadow_alpha = value
130
+ end
131
+
132
+ def shadow_size=(value)
133
+ invalidate_cache! if @shadow_size != value
134
+ @shadow_size = value
135
+ end
136
+
116
137
  def border=(boolean)
117
138
  invalidate_cache! if @border != boolean
118
139
  @border = boolean
@@ -128,9 +149,16 @@ module CyberarmEngine
128
149
  @border_alpha = n
129
150
  end
130
151
 
131
- def border_color=(n)
132
- invalidate_cache! if @border_color != n
133
- @border_color = n
152
+ def border_color=(color)
153
+ old_color = @border_color
154
+
155
+ if color
156
+ @border_color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
157
+ else
158
+ raise "color cannot be nil"
159
+ end
160
+
161
+ invalidate_cache! if old_color != color
134
162
  end
135
163
 
136
164
  def width(text = @text)
@@ -180,23 +208,23 @@ module CyberarmEngine
180
208
  img = Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font)
181
209
 
182
210
  @cached_text_border_image = Gosu.render((_width + (@border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
183
- img.draw(-_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
184
- img.draw(-_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
211
+ img.draw(-_x, 0, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
212
+ img.draw(-_x, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
185
213
 
186
- img.draw(0, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
187
- img.draw(_x, -_y, @z, @factor_x, @factor_y, @border_color, @mode)
214
+ img.draw(0, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
215
+ img.draw(_x, -_y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
188
216
 
189
- img.draw(_x, 0, @z, @factor_x, @factor_y, @border_color, @mode)
190
- img.draw(_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
217
+ img.draw(_x, 0, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
218
+ img.draw(_x, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
191
219
 
192
- img.draw(0, _y, @z, @factor_x, @factor_y, @border_color, @mode)
193
- img.draw(-_x, _y, @z, @factor_x, @factor_y, @border_color, @mode)
220
+ img.draw(0, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
221
+ img.draw(-_x, _y, @z, @factor_x, @factor_y, Gosu::Color::WHITE, @mode)
194
222
  end
195
223
  end
196
224
 
197
- @cached_text_shadow_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font) if @shadow
225
+ @cached_text_shadow_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font, align: @alignment) if @shadow
198
226
 
199
- @gosu_cached_text_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font)
227
+ @gosu_cached_text_image ||= Gosu::Image.send(:"from_#{method.to_s.split("_").last}", @text, @size, font: @font, align: @alignment)
200
228
 
201
229
  @cached_text_border_image.draw(@x, @y, @z, @factor_x, @factor_y, @border_color, @mode) if @border
202
230
 
@@ -228,7 +256,7 @@ module CyberarmEngine
228
256
  @textobject.send(method, @text, _x + @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
229
257
  end
230
258
 
231
- @cached_text_border_image.draw(@x - @border_size, @y - @border_size, @z, @factor_x, @factor_y, border_color)
259
+ @cached_text_border_image.draw(@x - @border_size, @y - @border_size, @z, @factor_x, @factor_y, border_color, @mode)
232
260
  end
233
261
 
234
262
  if @shadow
@@ -19,5 +19,9 @@ module CyberarmEngine
19
19
  @block.call if @block
20
20
  end
21
21
  end
22
+
23
+ def dead?
24
+ @triggered && !@looping
25
+ end
22
26
  end
23
27
  end
@@ -62,36 +62,36 @@ module CyberarmEngine
62
62
 
63
63
  def update
64
64
  # TOP
65
- @top.x = @element.x + @element.style.border_thickness_left
66
- @top.y = @element.y
65
+ @top.x = @element.x + @element.styled(:margin_left) + @element.styled(:border_thickness_left)
66
+ @top.y = @element.y + @element.styled(:margin_top)
67
67
  @top.z = @element.z
68
68
 
69
- @top.width = @element.width - @element.style.border_thickness_left
70
- @top.height = @element.style.border_thickness_top
69
+ @top.width = @element.width - @element.styled(:border_thickness_left)
70
+ @top.height = @element.styled(:border_thickness_top)
71
71
 
72
72
  # RIGHT
73
- @right.x = @element.x + @element.width
74
- @right.y = @element.y + @element.style.border_thickness_top
73
+ @right.x = @element.x + @element.styled(:margin_left) + @element.width
74
+ @right.y = @element.y + @element.styled(:margin_top) + @element.styled(:border_thickness_top)
75
75
  @right.z = @element.z
76
76
 
77
- @right.width = -@element.style.border_thickness_right
78
- @right.height = @element.height - @element.style.border_thickness_top
77
+ @right.width = -@element.styled(:border_thickness_right)
78
+ @right.height = @element.height - @element.styled(:border_thickness_top)
79
79
 
80
80
  # BOTTOM
81
- @bottom.x = @element.x
82
- @bottom.y = @element.y + @element.height
81
+ @bottom.x = @element.x + @element.styled(:margin_left)
82
+ @bottom.y = @element.y + @element.styled(:margin_top) + @element.height
83
83
  @bottom.z = @element.z
84
84
 
85
- @bottom.width = @element.width - @element.style.border_thickness_right
86
- @bottom.height = -@element.style.border_thickness_bottom
85
+ @bottom.width = @element.width - @element.styled(:border_thickness_right)
86
+ @bottom.height = -@element.styled(:border_thickness_bottom)
87
87
 
88
88
  # LEFT
89
- @left.x = @element.x
90
- @left.y = @element.y
89
+ @left.x = @element.x + @element.styled(:margin_left)
90
+ @left.y = @element.y + @element.styled(:margin_top)
91
91
  @left.z = @element.z
92
92
 
93
- @left.width = @element.style.border_thickness_left
94
- @left.height = @element.height - @element.style.border_thickness_bottom
93
+ @left.width = @element.styled(:border_thickness_left)
94
+ @left.height = @element.height - @element.styled(:border_thickness_bottom)
95
95
 
96
96
  @top.update
97
97
  @right.update
@@ -0,0 +1,24 @@
1
+ module CyberarmEngine
2
+ class Dialog < CyberarmEngine::GuiState
3
+ def draw
4
+ previous_state&.draw
5
+
6
+ Gosu.flush
7
+
8
+ super
9
+ end
10
+
11
+ def update
12
+ super
13
+
14
+ return unless window.current_state == self
15
+
16
+ window.states.reverse.each do |state|
17
+ # Don't update ourselves, forever
18
+ next if state == self && state.is_a?(CyberarmEngine::GuiState)
19
+
20
+ state.update
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,17 @@
1
1
  module CyberarmEngine
2
2
  module DSL
3
+ def every(milliseconds, &block)
4
+ element_parent.root.gui_state.add_timer(
5
+ CyberarmEngine::Timer.new(milliseconds, true, &block)
6
+ )
7
+ end
8
+
9
+ def after(milliseconds, &block)
10
+ element_parent.root.gui_state.add_timer(
11
+ CyberarmEngine::Timer.new(milliseconds, false, &block)
12
+ )
13
+ end
14
+
3
15
  def flow(options = {}, &block)
4
16
  container(CyberarmEngine::Element::Flow, options, &block)
5
17
  end
@@ -8,6 +20,10 @@ module CyberarmEngine
8
20
  container(CyberarmEngine::Element::Stack, options, &block)
9
21
  end
10
22
 
23
+ def widget(options = {}, &block)
24
+ container(CyberarmEngine::Element::Widget, options, &block)
25
+ end
26
+
11
27
  def menu(options = {}, &block)
12
28
  container(CyberarmEngine::Element::Menu, options, &block)
13
29
  end
@@ -100,8 +116,20 @@ module CyberarmEngine
100
116
  add_element(Element::Slider.new(options, block))
101
117
  end
102
118
 
119
+ def page(klass, options = {})
120
+ element_parent.root.gui_state.page(klass, options)
121
+ end
122
+
123
+ def current_page
124
+ element_parent.root.gui_state.current_page
125
+ end
126
+
127
+ def dialog(klass, options = {})
128
+ element_parent.root.gui_state.window.push_state(klass, options)
129
+ end
130
+
103
131
  def background(color = Gosu::Color::NONE)
104
- element_parent.style.default[:background] = color
132
+ element_parent.style.background = color
105
133
  end
106
134
 
107
135
  def theme(theme)