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
@@ -13,7 +13,7 @@ module CyberarmEngine
13
13
  def publish(event, *args)
14
14
  raise ArgumentError, "#{self.class} does not handle #{event.inspect}" unless @event_handler.include?(event)
15
15
 
16
- return unless enabled?
16
+ return if !enabled? && event != :changed
17
17
 
18
18
  was_handled = false
19
19
 
@@ -6,6 +6,7 @@ module CyberarmEngine
6
6
  def initialize(options = {})
7
7
  @options = options
8
8
  @game_objects = []
9
+ @timers = []
9
10
  @global_pause = false
10
11
 
11
12
  @down_keys = {}
@@ -17,6 +18,10 @@ module CyberarmEngine
17
18
  @active_width = window.width
18
19
  @active_height = window.height
19
20
 
21
+ @pages = {}
22
+ @page_host = nil
23
+ @page = nil
24
+
20
25
  @menu = nil
21
26
  @focus = nil
22
27
  @mouse_over = nil
@@ -26,6 +31,7 @@ module CyberarmEngine
26
31
  @dragging_element = nil
27
32
  @pending_recalculate_request = false
28
33
  @pending_element_recalculate_requests = []
34
+ @hit_elements = []
29
35
 
30
36
  @needs_repaint = false
31
37
 
@@ -38,14 +44,45 @@ module CyberarmEngine
38
44
  @tip = Element::ToolTip.new("", parent: @root_container, z: Float::INFINITY, theme: current_theme)
39
45
  end
40
46
 
41
- def menu
47
+ def active_menu
42
48
  @menu
43
49
  end
44
50
 
51
+ def page(klass, options = {})
52
+ @page&.blur
53
+
54
+ @pages[klass] = klass.new(parent: options[:parent] || self) unless @pages[klass]
55
+ @page = @pages[klass]
56
+
57
+ @page.options = options
58
+ page_host.clear do
59
+ @page.setup
60
+ end
61
+ @page.focus
62
+ end
63
+
64
+ def current_page
65
+ @page
66
+ end
67
+
68
+ def page_host
69
+ return @page.parent if @page.parent.is_a?(CyberarmEngine::Element::Container)
70
+ return @page_host if @page_host && @page_host.is_a?(CyberarmEngine::Element::Container)
71
+
72
+ @root_container
73
+ end
74
+
75
+ def page_host=(container)
76
+ raise "page host must be a CyberarmEngine::Element::Container" unless container.is_a?(Container)
77
+
78
+ @page_host = container
79
+ end
80
+
45
81
  # throws :blur event to focused element and sets GuiState focused element
46
82
  # Does NOT throw :focus event at element or set element as focused
47
83
  def focus=(element)
48
84
  @focus.publish(:blur) if @focus && element && @focus != element
85
+ @hit_elements.delete(@focus)
49
86
  @focus = element
50
87
  end
51
88
 
@@ -61,7 +98,15 @@ module CyberarmEngine
61
98
  Stats.frame.start_timing(:gui_element_recalculate_requests)
62
99
 
63
100
  # puts "PENDING REQUESTS: #{@pending_element_recalculate_requests.size}" if @pending_element_recalculate_requests.size.positive?
64
- @pending_element_recalculate_requests.shift(&:recalculate)
101
+ while (e = @pending_element_recalculate_requests.shift)
102
+ # its pointless to recalculate individual elements when we've been asked to recalculate the whole gui
103
+ if @pending_recalculate_request
104
+ @pending_element_recalculate_requests.clear
105
+ break
106
+ end
107
+
108
+ e.recalculate
109
+ end
65
110
 
66
111
  Stats.frame.end_timing(:gui_element_recalculate_requests)
67
112
 
@@ -97,6 +142,8 @@ module CyberarmEngine
97
142
  end
98
143
 
99
144
  @needs_repaint = false
145
+
146
+ @page&.draw
100
147
  end
101
148
 
102
149
  def needs_repaint?
@@ -126,22 +173,37 @@ module CyberarmEngine
126
173
  return unless window.has_focus?
127
174
  return unless window.current_state == self
128
175
 
129
- new_mouse_over = @menu.hit_element?(window.mouse_x, window.mouse_y) if @menu
130
- new_mouse_over ||= @root_container.hit_element?(window.mouse_x, window.mouse_y)
176
+ # list of containers decending down to hit element
177
+ new_hit_elements = (@menu || @root_container).hit_element?(window.mouse_x, window.mouse_y)
178
+ # element the mouse is over, if any.
179
+ new_mouse_over = new_hit_elements&.find { |c| c.is_a?(CyberarmEngine::Element::Widget) } || new_hit_elements&.last
180
+
181
+ # is the currently hit element the same as last hit element?
182
+ same_element = @mouse_over && new_mouse_over == @mouse_over
183
+
184
+ unless @hit_elements == new_hit_elements
185
+ added_hit_elements = (new_hit_elements || []) - @hit_elements
186
+ removed_hit_elements = @hit_elements - (new_hit_elements || [])
187
+
188
+ added_hit_elements.each do |e|
189
+ e.publish(:enter)
190
+ e.publish(:hover)
191
+ end
131
192
 
132
- if new_mouse_over
133
- new_mouse_over.publish(:enter) if new_mouse_over != @mouse_over
134
- new_mouse_over.publish(:hover)
135
- # puts "#{new_mouse_over.class}[#{new_mouse_over.value}]: #{new_mouse_over.x}:#{new_mouse_over.y} #{new_mouse_over.width}:#{new_mouse_over.height}" if new_mouse_over != @mouse_over
193
+ removed_hit_elements.each do |e|
194
+ e.publish(:leave)
195
+ end
136
196
  end
137
- @mouse_over.publish(:leave) if @mouse_over && new_mouse_over != @mouse_over
197
+
138
198
  @mouse_over = new_mouse_over
199
+ @hit_elements = new_hit_elements || []
139
200
 
140
201
  redirect_holding_mouse_button(:left) if @mouse_over && Gosu.button_down?(Gosu::MS_LEFT)
141
202
  redirect_holding_mouse_button(:middle) if @mouse_over && Gosu.button_down?(Gosu::MS_MIDDLE)
142
203
  redirect_holding_mouse_button(:right) if @mouse_over && Gosu.button_down?(Gosu::MS_RIGHT)
143
204
 
144
- if Vector.new(window.mouse_x, window.mouse_y) == @last_mouse_pos
205
+ # handle tooltip
206
+ if same_element
145
207
  if @mouse_over && (Gosu.milliseconds - @mouse_moved_at) > tool_tip_delay
146
208
  @tip.value = @mouse_over.tip if @mouse_over
147
209
  @tip.x = window.mouse_x
@@ -161,6 +223,8 @@ module CyberarmEngine
161
223
 
162
224
  @last_mouse_pos = Vector.new(window.mouse_x, window.mouse_y)
163
225
  @mouse_pos = @last_mouse_pos.clone
226
+
227
+ @page&.update
164
228
  end
165
229
 
166
230
  def button_down(id)
@@ -175,9 +239,14 @@ module CyberarmEngine
175
239
  redirect_mouse_button(:right)
176
240
  when Gosu::KB_F5
177
241
  request_recalculate
242
+ when Gosu::KB_F12
243
+ CyberarmEngine.const_set(:GUI_DEBUG, !CyberarmEngine::GUI_DEBUG)
244
+ request_repaint
178
245
  end
179
246
 
180
247
  @focus.button_down(id) if @focus.respond_to?(:button_down)
248
+
249
+ @page&.button_down(id)
181
250
  end
182
251
 
183
252
  def button_up(id)
@@ -208,6 +277,8 @@ module CyberarmEngine
208
277
 
209
278
  # Prevents menu from popping back up if the listbox is clicked to hide it.
210
279
  @hid_menu_for = nil
280
+
281
+ @page&.button_up(id)
211
282
  end
212
283
 
213
284
  def tool_tip_delay
@@ -218,6 +289,7 @@ module CyberarmEngine
218
289
  hide_menu unless @menu && (@menu == @mouse_over) || (@mouse_over&.parent == @menu)
219
290
 
220
291
  if @focus && @mouse_over != @focus
292
+ @hit_elements.delete(@focus)
221
293
  @focus.publish(:blur)
222
294
  @focus = nil
223
295
  end
@@ -271,10 +343,14 @@ module CyberarmEngine
271
343
  end
272
344
 
273
345
  def redirect_scroll_jump_to(edge)
346
+ return if window.text_input
347
+
274
348
  @mouse_over.publish(:"scroll_jump_to_#{edge}", window.mouse_x, window.mouse_y) if (@mouse_over && !@menu) || (@mouse_over && @mouse_over == @menu)
275
349
  end
276
350
 
277
351
  def redirect_scroll_page(edge)
352
+ return if window.text_input
353
+
278
354
  @mouse_over.publish(:"scroll_page_#{edge}", window.mouse_x, window.mouse_y) if (@mouse_over && !@menu) || (@mouse_over && @mouse_over == @menu)
279
355
  end
280
356
 
@@ -0,0 +1,39 @@
1
+ module CyberarmEngine
2
+ class Page
3
+ include CyberarmEngine::DSL
4
+ include CyberarmEngine::Common
5
+
6
+ attr_reader :parent
7
+
8
+ def initialize(parent:)
9
+ @parent = parent
10
+
11
+ @options = {}
12
+ end
13
+
14
+ def options=(options)
15
+ @options = options
16
+ end
17
+
18
+ def setup
19
+ end
20
+
21
+ def focus
22
+ end
23
+
24
+ def blur
25
+ end
26
+
27
+ def draw
28
+ end
29
+
30
+ def update
31
+ end
32
+
33
+ def button_down(id)
34
+ end
35
+
36
+ def button_up(id)
37
+ end
38
+ end
39
+ end
@@ -16,11 +16,14 @@ module Gosu
16
16
  end
17
17
 
18
18
  module CyberarmEngine
19
- class Style
20
- attr_reader :hash
19
+ class StyleData
20
+ def initialize(hash = {})
21
+ @hash = hash
22
+ @dirty = false
23
+ end
21
24
 
22
25
  %i[
23
- x y z width height min_width min_height max_width max_height color background
26
+ x y z design_width width height min_width min_height max_width max_height color background
24
27
  background_image background_image_mode background_image_color
25
28
  background_nine_slice background_nine_slice_mode background_nine_slice_color background_nine_slice_from_edge
26
29
  background_nine_slice_left background_nine_slice_top background_nine_slice_right background_nine_slice_bottom
@@ -28,34 +31,64 @@ module CyberarmEngine
28
31
  border_thickness border_thickness_left border_thickness_right border_thickness_top border_thickness_bottom
29
32
  padding padding_left padding_right padding_top padding_bottom
30
33
  margin margin_left margin_right margin_top margin_bottom
31
- background_canvas background_nine_slice_canvas background_image_canvas border_canvas
34
+ aspect_ratio
32
35
 
33
- fraction_background scroll fill text_wrap v_align h_align delay tag
36
+ fraction_background scroll fill text_wrap v_align h_align delay tag font
37
+ text_align text_static text_size
38
+ text_shadow text_shadow_size text_shadow_alpha text_shadow_color
39
+ text_border text_border_size text_border_alpha text_border_color
34
40
  image_width image_height
35
-
36
- default hover active disabled
37
41
  ].each do |item|
38
42
  define_method(item) do
39
43
  @hash[item]
40
44
  end
41
45
  define_method(:"#{item}=") do |value|
46
+ @dirty = true if @hash[item] != value
47
+
42
48
  @hash[item] = value
43
49
  end
44
50
  end
45
51
 
52
+ # NOTE: do not change return value
53
+ def default
54
+ nil
55
+ end
56
+
57
+ def dirty?
58
+ @dirty
59
+ end
60
+
61
+ def mark_clean!
62
+ @dirty = false
63
+ end
64
+
65
+ def empty?
66
+ @hash.empty?
67
+ end
68
+ end
69
+
70
+ class Style < StyleData
71
+ attr_reader :hash, :hover, :active, :disabled
72
+
46
73
  def initialize(hash = {})
47
- h = hash
48
- # h = Marshal.load(Marshal.dump(hash))
74
+ @hash = hash
49
75
 
50
- h[:default] = {}
76
+ @hover = StyleData.new(hash[:hover] || {})
77
+ @active = StyleData.new(hash[:active] || {})
78
+ @disabled = StyleData.new(hash[:disabled] || {})
51
79
 
52
- h.each do |key, value|
53
- next if value.is_a?(Hash)
80
+ @substyles = [@hover, @active, @disabled]
54
81
 
55
- h[:default][key] = value
56
- end
82
+ super
83
+ end
84
+
85
+ def dirty?
86
+ @dirty || @substyles.any?(&:dirty?)
87
+ end
57
88
 
58
- @hash = h
89
+ def mark_clean!
90
+ @substyles.each(&:mark_clean!)
91
+ @dirty = false
59
92
  end
60
93
  end
61
94
  end
@@ -30,6 +30,11 @@ module CyberarmEngine
30
30
  end
31
31
  end
32
32
 
33
+ # css-like style classes, however First In, First Out- that is,
34
+ options[:style_class]&.each do |klass|
35
+ hash = deep_merge(hash, _theme[klass]) if _theme[klass]
36
+ end
37
+
33
38
  deep_merge(hash, options)
34
39
  end
35
40
 
@@ -53,6 +58,7 @@ module CyberarmEngine
53
58
  y: 0,
54
59
  z: 30,
55
60
 
61
+ design_width: nil,
56
62
  width: nil,
57
63
  height: nil,
58
64
  color: Gosu::Color::WHITE,
@@ -68,25 +74,25 @@ module CyberarmEngine
68
74
  debug_color: Gosu::Color::YELLOW
69
75
  },
70
76
 
71
- Button: { # < Label
77
+ Button: { # < TextBlock
72
78
  margin: 1,
73
79
  padding: 4,
74
80
  border_thickness: 1,
75
- border_color: ["ffd59674".hex, "ffff8746".hex],
81
+ border_color: [0xffd59674, 0xffff8746],
76
82
  border_radius: 0,
77
- background: ["ffc75e61".to_i(16), "ffe26623".to_i(16)],
83
+ background: [0xffc75e61, 0xffe26623],
78
84
  text_align: :center,
79
85
  text_v_align: :center,
80
86
  text_wrap: :none,
81
87
 
82
88
  hover: {
83
89
  color: Gosu::Color.rgb(200, 200, 200),
84
- background: ["ffB23E41".to_i(16), "ffFF7C00".to_i(16)]
90
+ background: [0xffB23E41, 0xffFF7C00]
85
91
  },
86
92
 
87
93
  active: {
88
94
  color: Gosu::Color::BLACK,
89
- background: ["ffB23E41".to_i(16)]
95
+ background: [0xffB23E41]
90
96
  },
91
97
 
92
98
  disabled: {
@@ -121,7 +127,13 @@ module CyberarmEngine
121
127
  text_size: 28,
122
128
  text_wrap: :word_wrap, # :word_wrap, :break_word, :none
123
129
  text_shadow: false,
130
+ text_shadow_color: 0,
131
+ text_shadow_alpha: 30,
132
+ text_shadow_size: 2,
124
133
  text_border: false,
134
+ text_border_color: 0,
135
+ text_border_alpha: 30,
136
+ text_border_size: 2,
125
137
  text_align: :left,
126
138
  font: "Arial",
127
139
  margin: 0,
@@ -1,4 +1,4 @@
1
1
  module CyberarmEngine
2
2
  NAME = "InDev".freeze
3
- VERSION = "0.25.1".freeze
3
+ VERSION = "0.30.0".freeze
4
4
  end
@@ -6,6 +6,9 @@ module CyberarmEngine
6
6
  SAMPLES = {}
7
7
  SONGS = {}
8
8
 
9
+ FixedUpdateProperties = Data.define(:fixed_timestep, :fixed_timestep_int_ms, :max_timestep)
10
+ FixedUpdate = Struct.new(:milliseconds, :accumulator, :interpolation, :alpha)
11
+
9
12
  attr_accessor :show_cursor, :show_stats_plotter
10
13
  attr_writer :exit_on_opengl_error
11
14
  attr_reader :last_frame_time, :delta_time, :states
@@ -28,7 +31,7 @@ module CyberarmEngine
28
31
  @@instance
29
32
  end
30
33
 
31
- def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0 / 60, resizable: false, borderless: false)
34
+ def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0 / 60, resizable: false, borderless: false, fixed_update_timestep: 1.0 / 125, fixed_update_timestep_int_ms: 8, fixed_max_timestep: 1.0 / 60)
32
35
  @show_cursor = false
33
36
  @has_focus = false
34
37
  @show_stats_plotter = false
@@ -46,6 +49,9 @@ module CyberarmEngine
46
49
  preload_default_shaders if respond_to?(:preload_default_shaders)
47
50
  @stats_plotter = Stats::StatsPlotter.new(2, 28) # FIXME: Make positioning easy
48
51
 
52
+ @fixed_timestep_data = FixedUpdateProperties.new(1.0 / 125, 8, 1.0 / 60)
53
+ @fixed_update = FixedUpdate.new(0, 0.0, 0.0, 1.0)
54
+
49
55
  setup
50
56
  end
51
57
 
@@ -79,11 +85,44 @@ module CyberarmEngine
79
85
 
80
86
  Stats.frame.start_timing(:update)
81
87
  current_state&.update
88
+ Stats.frame.start_timing(:fixed_update)
89
+ fixed_update
90
+ Stats.frame.end_timing(:fixed_update)
82
91
  Stats.frame.end_timing(:update)
83
92
 
84
93
  Stats.frame.start_timing(:interframe_sleep) unless needs_redraw?
85
94
  end
86
95
 
96
+ def fixed_update
97
+ @delta_time = @fixed_timestep_data.max_timestep if @delta_time > @fixed_timestep_data.max_timestep
98
+ @fixed_update.accumulator += @delta_time
99
+
100
+ while @fixed_update.accumulator >= @fixed_timestep_data.fixed_timestep
101
+ @fixed_update.accumulator -= @fixed_timestep_data.fixed_timestep
102
+
103
+ @fixed_update.alpha = @fixed_update.accumulator / @fixed_timestep_data.fixed_timestep
104
+
105
+ @fixed_update.milliseconds += @fixed_timestep_data.fixed_timestep_int_ms
106
+ current_state&.fixed_update(@fixed_timestep_data.fixed_timestep)
107
+ end
108
+ end
109
+
110
+ def fixed_update_milliseconds
111
+ @fixed_update.milliseconds
112
+ end
113
+
114
+ def fixed_update_accumulator
115
+ @fixed_update.accumulator
116
+ end
117
+
118
+ def fixed_update_interpolation
119
+ @fixed_update.interpolation
120
+ end
121
+
122
+ def fixed_update_alpha
123
+ @fixed_update.alpha
124
+ end
125
+
87
126
  def needs_cursor?
88
127
  @show_cursor
89
128
  end
@@ -10,6 +10,7 @@ require "json"
10
10
  require_relative "cyberarm_engine/version"
11
11
  require_relative "cyberarm_engine/stats"
12
12
  require_relative "cyberarm_engine/result"
13
+ require_relative "cyberarm_engine/event_bus"
13
14
 
14
15
  require_relative "cyberarm_engine/common"
15
16
 
@@ -41,6 +42,13 @@ require_relative "cyberarm_engine/console/command"
41
42
  require_relative "cyberarm_engine/console/subcommand"
42
43
  require_relative "cyberarm_engine/console/commands/help_command"
43
44
 
45
+ require_relative "cyberarm_engine/pathfinding/graph"
46
+ require_relative "cyberarm_engine/pathfinding/graphs/grid"
47
+ require_relative "cyberarm_engine/pathfinding/graph_search"
48
+ require_relative "cyberarm_engine/pathfinding/graph_searches/breadth_first_search"
49
+ require_relative "cyberarm_engine/pathfinding/graph_searches/dijkstra_search"
50
+ require_relative "cyberarm_engine/pathfinding/graph_searches/astar_search"
51
+
44
52
  require_relative "cyberarm_engine/ui/dsl"
45
53
 
46
54
  require_relative "cyberarm_engine/ui/theme"
@@ -58,6 +66,7 @@ require_relative "cyberarm_engine/ui/elements/image"
58
66
  require_relative "cyberarm_engine/ui/elements/container"
59
67
  require_relative "cyberarm_engine/ui/elements/flow"
60
68
  require_relative "cyberarm_engine/ui/elements/stack"
69
+ require_relative "cyberarm_engine/ui/elements/widget"
61
70
  require_relative "cyberarm_engine/ui/elements/check_box"
62
71
  require_relative "cyberarm_engine/ui/elements/radio"
63
72
  require_relative "cyberarm_engine/ui/elements/progress"
@@ -67,6 +76,8 @@ require_relative "cyberarm_engine/ui/elements/menu_item"
67
76
 
68
77
  require_relative "cyberarm_engine/game_state"
69
78
  require_relative "cyberarm_engine/ui/gui_state"
79
+ require_relative "cyberarm_engine/ui/dialog"
80
+ require_relative "cyberarm_engine/ui/page"
70
81
 
71
82
  require_relative "cyberarm_engine/builtin/intro_state"
72
83
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cyberarm_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyberarm
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '2.2'
32
+ version: '4'
33
33
  type: :development
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '2.2'
39
+ version: '4'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: minitest
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +88,20 @@ files:
88
88
  - assets/shaders/vertex/lighting.glsl
89
89
  - assets/textures/default.png
90
90
  - assets/textures/logo.png
91
+ - assets/textures/ui/circle.png
92
+ - assets/textures/ui/circle_small.png
93
+ - assets/textures/ui/rounded.png
94
+ - assets/textures/ui/rounded_bottom.png
95
+ - assets/textures/ui/rounded_left.png
96
+ - assets/textures/ui/rounded_left_bottom.png
97
+ - assets/textures/ui/rounded_left_top.png
98
+ - assets/textures/ui/rounded_right.png
99
+ - assets/textures/ui/rounded_right_bottom.png
100
+ - assets/textures/ui/rounded_right_top.png
101
+ - assets/textures/ui/rounded_small.png
102
+ - assets/textures/ui/rounded_tiny.png
103
+ - assets/textures/ui/rounded_top.png
104
+ - assets/textures/ui/square.png
91
105
  - bin/console
92
106
  - bin/setup
93
107
  - cyberarm_engine.gemspec
@@ -106,6 +120,7 @@ files:
106
120
  - lib/cyberarm_engine/console/command.rb
107
121
  - lib/cyberarm_engine/console/commands/help_command.rb
108
122
  - lib/cyberarm_engine/console/subcommand.rb
123
+ - lib/cyberarm_engine/event_bus.rb
109
124
  - lib/cyberarm_engine/game_object.rb
110
125
  - lib/cyberarm_engine/game_state.rb
111
126
  - lib/cyberarm_engine/gosu_ext/draw_arc.rb
@@ -130,6 +145,12 @@ files:
130
145
  - lib/cyberarm_engine/opengl/renderer/renderer.rb
131
146
  - lib/cyberarm_engine/opengl/shader.rb
132
147
  - lib/cyberarm_engine/opengl/texture.rb
148
+ - lib/cyberarm_engine/pathfinding/graph.rb
149
+ - lib/cyberarm_engine/pathfinding/graph_search.rb
150
+ - lib/cyberarm_engine/pathfinding/graph_searches/astar_search.rb
151
+ - lib/cyberarm_engine/pathfinding/graph_searches/breadth_first_search.rb
152
+ - lib/cyberarm_engine/pathfinding/graph_searches/dijkstra_search.rb
153
+ - lib/cyberarm_engine/pathfinding/graphs/grid.rb
133
154
  - lib/cyberarm_engine/ray.rb
134
155
  - lib/cyberarm_engine/result.rb
135
156
  - lib/cyberarm_engine/stats.rb
@@ -140,6 +161,7 @@ files:
140
161
  - lib/cyberarm_engine/trees/aabb_tree.rb
141
162
  - lib/cyberarm_engine/trees/aabb_tree_debug.rb
142
163
  - lib/cyberarm_engine/ui/border_canvas.rb
164
+ - lib/cyberarm_engine/ui/dialog.rb
143
165
  - lib/cyberarm_engine/ui/dsl.rb
144
166
  - lib/cyberarm_engine/ui/element.rb
145
167
  - lib/cyberarm_engine/ui/elements/button.rb
@@ -158,8 +180,10 @@ files:
158
180
  - lib/cyberarm_engine/ui/elements/stack.rb
159
181
  - lib/cyberarm_engine/ui/elements/text_block.rb
160
182
  - lib/cyberarm_engine/ui/elements/toggle_button.rb
183
+ - lib/cyberarm_engine/ui/elements/widget.rb
161
184
  - lib/cyberarm_engine/ui/event.rb
162
185
  - lib/cyberarm_engine/ui/gui_state.rb
186
+ - lib/cyberarm_engine/ui/page.rb
163
187
  - lib/cyberarm_engine/ui/style.rb
164
188
  - lib/cyberarm_engine/ui/theme.rb
165
189
  - lib/cyberarm_engine/vector.rb
@@ -186,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
210
  - !ruby/object:Gem::Version
187
211
  version: '0'
188
212
  requirements: []
189
- rubygems_version: 3.6.7
213
+ rubygems_version: 4.0.3
190
214
  specification_version: 4
191
215
  summary: Make games quickly and easily with gosu
192
216
  test_files: []