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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +20 -8
- data/README.md +1 -1
- data/assets/textures/ui/circle.png +0 -0
- data/assets/textures/ui/circle_small.png +0 -0
- data/assets/textures/ui/rounded.png +0 -0
- data/assets/textures/ui/rounded_bottom.png +0 -0
- data/assets/textures/ui/rounded_left.png +0 -0
- data/assets/textures/ui/rounded_left_bottom.png +0 -0
- data/assets/textures/ui/rounded_left_top.png +0 -0
- data/assets/textures/ui/rounded_right.png +0 -0
- data/assets/textures/ui/rounded_right_bottom.png +0 -0
- data/assets/textures/ui/rounded_right_top.png +0 -0
- data/assets/textures/ui/rounded_small.png +0 -0
- data/assets/textures/ui/rounded_tiny.png +0 -0
- data/assets/textures/ui/rounded_top.png +0 -0
- data/assets/textures/ui/square.png +0 -0
- data/cyberarm_engine.gemspec +1 -2
- data/lib/cyberarm_engine/background.rb +16 -18
- data/lib/cyberarm_engine/background_nine_slice.rb +62 -22
- data/lib/cyberarm_engine/common.rb +2 -0
- data/lib/cyberarm_engine/event_bus.rb +39 -0
- data/lib/cyberarm_engine/game_state.rb +11 -1
- data/lib/cyberarm_engine/pathfinding/graph.rb +64 -0
- data/lib/cyberarm_engine/pathfinding/graph_search.rb +6 -0
- data/lib/cyberarm_engine/pathfinding/graph_searches/astar_search.rb +6 -0
- data/lib/cyberarm_engine/pathfinding/graph_searches/breadth_first_search.rb +27 -0
- data/lib/cyberarm_engine/pathfinding/graph_searches/dijkstra_search.rb +6 -0
- data/lib/cyberarm_engine/pathfinding/graphs/grid.rb +52 -0
- data/lib/cyberarm_engine/result.rb +1 -2
- data/lib/cyberarm_engine/text.rb +54 -26
- data/lib/cyberarm_engine/timer.rb +4 -0
- data/lib/cyberarm_engine/ui/border_canvas.rb +16 -16
- data/lib/cyberarm_engine/ui/dialog.rb +24 -0
- data/lib/cyberarm_engine/ui/dsl.rb +29 -1
- data/lib/cyberarm_engine/ui/element.rb +132 -130
- data/lib/cyberarm_engine/ui/elements/button.rb +12 -13
- data/lib/cyberarm_engine/ui/elements/check_box.rb +5 -1
- data/lib/cyberarm_engine/ui/elements/container.rb +52 -46
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +30 -9
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +4 -2
- data/lib/cyberarm_engine/ui/elements/image.rb +9 -3
- data/lib/cyberarm_engine/ui/elements/list_box.rb +3 -3
- data/lib/cyberarm_engine/ui/elements/menu.rb +3 -3
- data/lib/cyberarm_engine/ui/elements/progress.rb +8 -6
- data/lib/cyberarm_engine/ui/elements/slider.rb +7 -3
- data/lib/cyberarm_engine/ui/elements/text_block.rb +31 -17
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +5 -1
- data/lib/cyberarm_engine/ui/elements/widget.rb +45 -0
- data/lib/cyberarm_engine/ui/event.rb +1 -1
- data/lib/cyberarm_engine/ui/gui_state.rb +86 -10
- data/lib/cyberarm_engine/ui/page.rb +39 -0
- data/lib/cyberarm_engine/ui/style.rb +48 -15
- data/lib/cyberarm_engine/ui/theme.rb +17 -5
- data/lib/cyberarm_engine/version.rb +1 -1
- data/lib/cyberarm_engine/window.rb +40 -1
- data/lib/cyberarm_engine.rb +11 -0
- 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
|
|
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
|
|
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
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
48
|
-
# h = Marshal.load(Marshal.dump(hash))
|
|
74
|
+
@hash = hash
|
|
49
75
|
|
|
50
|
-
|
|
76
|
+
@hover = StyleData.new(hash[:hover] || {})
|
|
77
|
+
@active = StyleData.new(hash[:active] || {})
|
|
78
|
+
@disabled = StyleData.new(hash[:disabled] || {})
|
|
51
79
|
|
|
52
|
-
|
|
53
|
-
next if value.is_a?(Hash)
|
|
80
|
+
@substyles = [@hover, @active, @disabled]
|
|
54
81
|
|
|
55
|
-
|
|
56
|
-
|
|
82
|
+
super
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def dirty?
|
|
86
|
+
@dirty || @substyles.any?(&:dirty?)
|
|
87
|
+
end
|
|
57
88
|
|
|
58
|
-
|
|
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: { # <
|
|
77
|
+
Button: { # < TextBlock
|
|
72
78
|
margin: 1,
|
|
73
79
|
padding: 4,
|
|
74
80
|
border_thickness: 1,
|
|
75
|
-
border_color: [
|
|
81
|
+
border_color: [0xffd59674, 0xffff8746],
|
|
76
82
|
border_radius: 0,
|
|
77
|
-
background: [
|
|
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: [
|
|
90
|
+
background: [0xffB23E41, 0xffFF7C00]
|
|
85
91
|
},
|
|
86
92
|
|
|
87
93
|
active: {
|
|
88
94
|
color: Gosu::Color::BLACK,
|
|
89
|
-
background: [
|
|
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,
|
|
@@ -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
|
data/lib/cyberarm_engine.rb
CHANGED
|
@@ -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.
|
|
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: '
|
|
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: '
|
|
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:
|
|
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: []
|