cyberarm_engine 0.12.0 → 0.15.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/.rubocop.yml +8 -0
- data/Gemfile +1 -1
- data/README.md +33 -3
- data/Rakefile +1 -1
- data/assets/textures/default.png +0 -0
- data/cyberarm_engine.gemspec +11 -8
- data/lib/cyberarm_engine.rb +24 -4
- data/lib/cyberarm_engine/animator.rb +56 -0
- data/lib/cyberarm_engine/background.rb +19 -15
- data/lib/cyberarm_engine/background_nine_slice.rb +125 -0
- data/lib/cyberarm_engine/bounding_box.rb +18 -18
- data/lib/cyberarm_engine/cache.rb +4 -0
- data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
- data/lib/cyberarm_engine/common.rb +16 -16
- data/lib/cyberarm_engine/config_file.rb +46 -0
- data/lib/cyberarm_engine/game_object.rb +63 -72
- data/lib/cyberarm_engine/game_state.rb +7 -4
- data/lib/cyberarm_engine/model.rb +207 -0
- data/lib/cyberarm_engine/model/material.rb +21 -0
- data/lib/cyberarm_engine/model/model_object.rb +131 -0
- data/lib/cyberarm_engine/model/parser.rb +74 -0
- data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -0
- data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -0
- data/lib/cyberarm_engine/model_cache.rb +31 -0
- data/lib/cyberarm_engine/opengl.rb +28 -0
- data/lib/cyberarm_engine/opengl/light.rb +50 -0
- data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -0
- data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -0
- data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -0
- data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -0
- data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +289 -0
- data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -0
- data/lib/cyberarm_engine/opengl/shader.rb +406 -0
- data/lib/cyberarm_engine/opengl/texture.rb +69 -0
- data/lib/cyberarm_engine/ray.rb +5 -5
- data/lib/cyberarm_engine/stats.rb +21 -0
- data/lib/cyberarm_engine/text.rb +45 -31
- data/lib/cyberarm_engine/timer.rb +1 -1
- data/lib/cyberarm_engine/transform.rb +221 -9
- data/lib/cyberarm_engine/ui/border_canvas.rb +4 -3
- data/lib/cyberarm_engine/ui/dsl.rb +68 -50
- data/lib/cyberarm_engine/ui/element.rb +57 -18
- data/lib/cyberarm_engine/ui/elements/button.rb +86 -16
- data/lib/cyberarm_engine/ui/elements/check_box.rb +24 -32
- data/lib/cyberarm_engine/ui/elements/container.rb +88 -24
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -0
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +180 -27
- data/lib/cyberarm_engine/ui/elements/flow.rb +1 -3
- data/lib/cyberarm_engine/ui/elements/image.rb +12 -9
- data/lib/cyberarm_engine/ui/elements/label.rb +96 -15
- data/lib/cyberarm_engine/ui/elements/list_box.rb +68 -0
- data/lib/cyberarm_engine/ui/elements/progress.rb +6 -5
- data/lib/cyberarm_engine/ui/elements/radio.rb +6 -0
- data/lib/cyberarm_engine/ui/elements/slider.rb +104 -0
- data/lib/cyberarm_engine/ui/elements/stack.rb +1 -3
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +40 -31
- data/lib/cyberarm_engine/ui/event.rb +8 -7
- data/lib/cyberarm_engine/ui/gui_state.rb +89 -6
- data/lib/cyberarm_engine/ui/style.rb +10 -9
- data/lib/cyberarm_engine/ui/theme.rb +39 -21
- data/lib/cyberarm_engine/vector.rb +132 -38
- data/lib/cyberarm_engine/version.rb +2 -2
- data/lib/cyberarm_engine/{engine.rb → window.rb} +30 -19
- metadata +87 -16
- data/lib/cyberarm_engine/shader.rb +0 -205
@@ -1,6 +1,7 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
class BorderCanvas
|
3
3
|
attr_reader :element, :top, :right, :bottom, :left
|
4
|
+
|
4
5
|
def initialize(element:)
|
5
6
|
@element = element
|
6
7
|
|
@@ -25,7 +26,7 @@ module CyberarmEngine
|
|
25
26
|
|
26
27
|
elsif color.is_a?(Array)
|
27
28
|
if color.size == 1
|
28
|
-
color=color.first
|
29
|
+
color = color.first
|
29
30
|
|
30
31
|
elsif color.size == 2
|
31
32
|
@top.background = color.first
|
@@ -61,7 +62,7 @@ module CyberarmEngine
|
|
61
62
|
|
62
63
|
def update
|
63
64
|
# TOP
|
64
|
-
@top.x = @element.x# + @element.border_thickness_left
|
65
|
+
@top.x = @element.x # + @element.border_thickness_left
|
65
66
|
@top.y = @element.y
|
66
67
|
@top.z = @element.z
|
67
68
|
|
@@ -98,4 +99,4 @@ module CyberarmEngine
|
|
98
99
|
@left.update
|
99
100
|
end
|
100
101
|
end
|
101
|
-
end
|
102
|
+
end
|
@@ -1,102 +1,120 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
module DSL
|
3
3
|
def flow(options = {}, &block)
|
4
|
-
options
|
5
|
-
options[:theme] = current_theme
|
6
|
-
_container = Element::Flow.new(options, block)
|
7
|
-
@containers << _container
|
8
|
-
_container.build
|
9
|
-
_container.parent.add(_container)
|
10
|
-
@containers.pop
|
11
|
-
|
12
|
-
return _container
|
4
|
+
container(CyberarmEngine::Element::Flow, options, &block)
|
13
5
|
end
|
14
6
|
|
15
7
|
def stack(options = {}, &block)
|
16
|
-
options
|
17
|
-
options[:theme] = current_theme
|
18
|
-
_container = Element::Stack.new(options, block)
|
19
|
-
@containers << _container
|
20
|
-
_container.build
|
21
|
-
_container.parent.add(_container)
|
22
|
-
@containers.pop
|
23
|
-
|
24
|
-
return _container
|
8
|
+
container(CyberarmEngine::Element::Stack, options, &block)
|
25
9
|
end
|
26
10
|
|
27
11
|
def label(text, options = {}, &block)
|
28
|
-
options[:parent] =
|
12
|
+
options[:parent] = element_parent
|
29
13
|
options[:theme] = current_theme
|
30
|
-
_element = Element::Label.new(text, options, block)
|
31
|
-
@containers.last.add(_element)
|
32
14
|
|
33
|
-
|
15
|
+
add_element(Element::Label.new(text, options, block))
|
34
16
|
end
|
35
17
|
|
36
18
|
def button(text, options = {}, &block)
|
37
|
-
options[:parent] =
|
19
|
+
options[:parent] = element_parent
|
20
|
+
options[:theme] = current_theme
|
21
|
+
|
22
|
+
add_element(Element::Button.new(text, options, block) { block.call if block.is_a?(Proc) })
|
23
|
+
end
|
24
|
+
|
25
|
+
def list_box(options = {}, &block)
|
26
|
+
options[:parent] = element_parent
|
38
27
|
options[:theme] = current_theme
|
39
|
-
_element = Element::Button.new(text, options, block) { if block.is_a?(Proc); block.call; end }
|
40
|
-
@containers.last.add(_element)
|
41
28
|
|
42
|
-
|
29
|
+
add_element(Element::ListBox.new(options, block) { block.call if block.is_a?(Proc) })
|
43
30
|
end
|
44
31
|
|
45
32
|
def edit_line(text, options = {}, &block)
|
46
|
-
options[:parent] =
|
33
|
+
options[:parent] = element_parent
|
47
34
|
options[:theme] = current_theme
|
48
|
-
_element = Element::EditLine.new(text, options, block)
|
49
|
-
@containers.last.add(_element)
|
50
35
|
|
51
|
-
|
36
|
+
add_element(Element::EditLine.new(text, options, block))
|
37
|
+
end
|
38
|
+
|
39
|
+
def edit_box(text, options = {}, &block)
|
40
|
+
options[:parent] = element_parent
|
41
|
+
options[:theme] = current_theme
|
42
|
+
|
43
|
+
add_element(Element::EditBox.new(text, options, block))
|
52
44
|
end
|
53
45
|
|
54
46
|
def toggle_button(options = {}, &block)
|
55
|
-
options[:parent] =
|
47
|
+
options[:parent] = element_parent
|
56
48
|
options[:theme] = current_theme
|
57
|
-
_element = Element::ToggleButton.new(options, block)
|
58
|
-
@containers.last.add(_element)
|
59
49
|
|
60
|
-
|
50
|
+
add_element(Element::ToggleButton.new(options, block))
|
61
51
|
end
|
62
52
|
|
63
53
|
def check_box(text, options = {}, &block)
|
64
|
-
options[:parent] =
|
54
|
+
options[:parent] = element_parent
|
65
55
|
options[:theme] = current_theme
|
66
|
-
_element = Element::CheckBox.new(text, options, block)
|
67
|
-
@containers.last.add(_element)
|
68
56
|
|
69
|
-
|
57
|
+
add_element(Element::CheckBox.new(text, options, block))
|
70
58
|
end
|
71
59
|
|
72
60
|
def image(path, options = {}, &block)
|
73
|
-
options[:parent] =
|
61
|
+
options[:parent] = element_parent
|
74
62
|
options[:theme] = current_theme
|
75
|
-
_element = Element::Image.new(path, options, block)
|
76
|
-
@containers.last.add(_element)
|
77
63
|
|
78
|
-
|
64
|
+
add_element(Element::Image.new(path, options, block))
|
79
65
|
end
|
80
66
|
|
81
67
|
def progress(options = {}, &block)
|
82
|
-
options[:parent] =
|
68
|
+
options[:parent] = element_parent
|
83
69
|
options[:theme] = current_theme
|
84
|
-
_element = Element::Progress.new(options, block)
|
85
|
-
@containers.last.add(_element)
|
86
70
|
|
87
|
-
|
71
|
+
add_element(Element::Progress.new(options, block))
|
72
|
+
end
|
73
|
+
|
74
|
+
def slider(options = {}, &block)
|
75
|
+
options[:parent] = element_parent
|
76
|
+
options[:theme] = current_theme
|
77
|
+
|
78
|
+
add_element(Element::Slider.new(options, block))
|
88
79
|
end
|
89
80
|
|
90
81
|
def background(color = Gosu::Color::NONE)
|
91
|
-
|
82
|
+
element_parent.style.background = color
|
92
83
|
end
|
93
84
|
|
94
85
|
def theme(theme)
|
95
|
-
|
86
|
+
element_parent.options[:theme] = theme
|
96
87
|
end
|
97
88
|
|
98
89
|
def current_theme
|
99
|
-
|
90
|
+
element_parent.options[:theme]
|
91
|
+
end
|
92
|
+
|
93
|
+
private def add_element(element)
|
94
|
+
element_parent.add(element)
|
95
|
+
|
96
|
+
element
|
97
|
+
end
|
98
|
+
|
99
|
+
private def element_parent
|
100
|
+
$__current_container__
|
101
|
+
end
|
102
|
+
|
103
|
+
private def container(klass, options = {}, &block)
|
104
|
+
options[:parent] = element_parent
|
105
|
+
options[:theme] = current_theme
|
106
|
+
|
107
|
+
_container = klass.new(options, block)
|
108
|
+
|
109
|
+
old_parent = element_parent
|
110
|
+
$__current_container__ = _container
|
111
|
+
|
112
|
+
_container.build
|
113
|
+
_container.parent.add(_container)
|
114
|
+
|
115
|
+
$__current_container__ = old_parent
|
116
|
+
|
117
|
+
_container
|
100
118
|
end
|
101
119
|
end
|
102
|
-
end
|
120
|
+
end
|
@@ -4,7 +4,7 @@ module CyberarmEngine
|
|
4
4
|
include Event
|
5
5
|
include Common
|
6
6
|
|
7
|
-
attr_accessor :x, :y, :z, :enabled
|
7
|
+
attr_accessor :x, :y, :z, :enabled, :tip
|
8
8
|
attr_reader :parent, :options, :style, :event_handler, :background_canvas, :border_canvas
|
9
9
|
|
10
10
|
def initialize(options = {}, block = nil)
|
@@ -16,9 +16,13 @@ module CyberarmEngine
|
|
16
16
|
@focus = false
|
17
17
|
@enabled = true
|
18
18
|
@visible = true
|
19
|
+
@tip = @options[:tip] || ""
|
19
20
|
|
20
21
|
@style = Style.new(options)
|
21
22
|
|
23
|
+
@root ||= nil
|
24
|
+
@gui_state ||= nil
|
25
|
+
|
22
26
|
@x = @style.x
|
23
27
|
@y = @style.y
|
24
28
|
@z = @style.z
|
@@ -26,9 +30,6 @@ module CyberarmEngine
|
|
26
30
|
@width = 0
|
27
31
|
@height = 0
|
28
32
|
|
29
|
-
@fixed_x = @x if @x != 0
|
30
|
-
@fixed_y = @y if @y != 0
|
31
|
-
|
32
33
|
@style.width = default(:width) || nil
|
33
34
|
@style.height = default(:height) || nil
|
34
35
|
|
@@ -41,6 +42,7 @@ module CyberarmEngine
|
|
41
42
|
end
|
42
43
|
|
43
44
|
def stylize
|
45
|
+
set_static_position
|
44
46
|
set_border_thickness(@style.border_thickness)
|
45
47
|
|
46
48
|
set_padding(@style.padding)
|
@@ -51,6 +53,11 @@ module CyberarmEngine
|
|
51
53
|
set_border_color(@style.border_color)
|
52
54
|
end
|
53
55
|
|
56
|
+
def set_static_position
|
57
|
+
@x = @style.x if @style.x != 0
|
58
|
+
@y = @style.y if @style.y != 0
|
59
|
+
end
|
60
|
+
|
54
61
|
def set_background(background)
|
55
62
|
@style.background = background
|
56
63
|
@style.background_canvas.background = background
|
@@ -95,7 +102,7 @@ module CyberarmEngine
|
|
95
102
|
end
|
96
103
|
|
97
104
|
def default_events
|
98
|
-
[
|
105
|
+
%i[left middle right].each do |button|
|
99
106
|
event(:"#{button}_mouse_button")
|
100
107
|
event(:"released_#{button}_mouse_button")
|
101
108
|
event(:"clicked_#{button}_mouse_button")
|
@@ -110,6 +117,8 @@ module CyberarmEngine
|
|
110
117
|
event(:leave)
|
111
118
|
|
112
119
|
event(:blur)
|
120
|
+
|
121
|
+
event(:changed)
|
113
122
|
end
|
114
123
|
|
115
124
|
def enabled?
|
@@ -126,21 +135,26 @@ module CyberarmEngine
|
|
126
135
|
end
|
127
136
|
|
128
137
|
def show
|
138
|
+
bool = visible?
|
129
139
|
@visible = true
|
130
|
-
root.gui_state.request_recalculate
|
140
|
+
root.gui_state.request_recalculate unless bool
|
131
141
|
end
|
132
142
|
|
133
143
|
def hide
|
144
|
+
bool = visible?
|
134
145
|
@visible = false
|
135
|
-
root.gui_state.request_recalculate
|
146
|
+
root.gui_state.request_recalculate if bool
|
136
147
|
end
|
137
148
|
|
138
149
|
def draw
|
139
|
-
return unless
|
150
|
+
return unless visible?
|
140
151
|
|
141
152
|
@style.background_canvas.draw
|
142
153
|
@style.border_canvas.draw
|
143
|
-
|
154
|
+
|
155
|
+
Gosu.clip_to(@x, @y, width, height) do
|
156
|
+
render
|
157
|
+
end
|
144
158
|
end
|
145
159
|
|
146
160
|
def update
|
@@ -152,12 +166,16 @@ module CyberarmEngine
|
|
152
166
|
def button_up(id)
|
153
167
|
end
|
154
168
|
|
169
|
+
def draggable?(_button)
|
170
|
+
false
|
171
|
+
end
|
172
|
+
|
155
173
|
def render
|
156
174
|
end
|
157
175
|
|
158
176
|
def hit?(x, y)
|
159
177
|
x.between?(@x, @x + width) &&
|
160
|
-
|
178
|
+
y.between?(@y, @y + height)
|
161
179
|
end
|
162
180
|
|
163
181
|
def width
|
@@ -168,6 +186,14 @@ module CyberarmEngine
|
|
168
186
|
end
|
169
187
|
end
|
170
188
|
|
189
|
+
def content_width
|
190
|
+
@width
|
191
|
+
end
|
192
|
+
|
193
|
+
def noncontent_width
|
194
|
+
(inner_width + outer_width) - width
|
195
|
+
end
|
196
|
+
|
171
197
|
def outer_width
|
172
198
|
@style.margin_left + width + @style.margin_right
|
173
199
|
end
|
@@ -184,6 +210,14 @@ module CyberarmEngine
|
|
184
210
|
end
|
185
211
|
end
|
186
212
|
|
213
|
+
def content_height
|
214
|
+
@height
|
215
|
+
end
|
216
|
+
|
217
|
+
def noncontent_height
|
218
|
+
(inner_height + outer_height) - height
|
219
|
+
end
|
220
|
+
|
187
221
|
def outer_height
|
188
222
|
@style.margin_top + height + @style.margin_bottom
|
189
223
|
end
|
@@ -192,21 +226,20 @@ module CyberarmEngine
|
|
192
226
|
(@style.border_thickness_top + @style.padding_top) + (@style.padding_bottom + @style.border_thickness_bottom)
|
193
227
|
end
|
194
228
|
|
195
|
-
|
196
|
-
raise "dimension must be either :width or :height" unless
|
229
|
+
def dimensional_size(size, dimension)
|
230
|
+
raise "dimension must be either :width or :height" unless %i[width height].include?(dimension)
|
231
|
+
|
197
232
|
if size && size.is_a?(Numeric)
|
198
233
|
if size.between?(0.0, 1.0)
|
199
|
-
@parent.send(:"#{dimension}") * size
|
234
|
+
((@parent.send(:"content_#{dimension}") - send(:"noncontent_#{dimension}")) * size).round
|
200
235
|
else
|
201
236
|
size
|
202
237
|
end
|
203
|
-
else
|
204
|
-
nil
|
205
238
|
end
|
206
239
|
end
|
207
240
|
|
208
241
|
def background=(_background)
|
209
|
-
@style.background_canvas.background=(_background)
|
242
|
+
@style.background_canvas.background = (_background)
|
210
243
|
update_background
|
211
244
|
end
|
212
245
|
|
@@ -223,6 +256,8 @@ module CyberarmEngine
|
|
223
256
|
end
|
224
257
|
|
225
258
|
def root
|
259
|
+
return self if is_root?
|
260
|
+
|
226
261
|
unless @root && @root.parent.nil?
|
227
262
|
@root = parent
|
228
263
|
|
@@ -253,8 +288,12 @@ module CyberarmEngine
|
|
253
288
|
raise "#{self.class}#value was not overridden!"
|
254
289
|
end
|
255
290
|
|
256
|
-
def value=(
|
291
|
+
def value=(_value)
|
257
292
|
raise "#{self.class}#value= was not overridden!"
|
258
293
|
end
|
294
|
+
|
295
|
+
def to_s
|
296
|
+
"#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} value=#{value.is_a?(String) ? "\"#{value}\"" : value}"
|
297
|
+
end
|
259
298
|
end
|
260
|
-
end
|
299
|
+
end
|
@@ -1,21 +1,40 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
class Element
|
3
3
|
class Button < Label
|
4
|
-
def initialize(
|
5
|
-
|
4
|
+
def initialize(text_or_image, options = {}, block = nil)
|
5
|
+
@image = nil
|
6
|
+
@scale_x = 1
|
7
|
+
@scale_y = 1
|
8
|
+
|
9
|
+
@image = text_or_image if text_or_image.is_a?(Gosu::Image)
|
10
|
+
|
11
|
+
super(text_or_image, options, block)
|
6
12
|
|
7
13
|
@style.background_canvas.background = default(:background)
|
8
14
|
end
|
9
15
|
|
10
16
|
def render
|
11
|
-
|
17
|
+
if @image
|
18
|
+
draw_image
|
19
|
+
else
|
20
|
+
draw_text
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def draw_image
|
25
|
+
@image.draw(
|
26
|
+
@style.border_thickness_left + @style.padding_left + @x,
|
27
|
+
@style.border_thickness_top + @style.padding_top + @y,
|
28
|
+
@z + 2,
|
29
|
+
@scale_x, @scale_y, @text.color
|
30
|
+
)
|
12
31
|
end
|
13
32
|
|
14
33
|
def draw_text
|
15
34
|
@text.draw
|
16
35
|
end
|
17
36
|
|
18
|
-
def enter(
|
37
|
+
def enter(_sender)
|
19
38
|
@focus = false unless window.button_down?(Gosu::MsLeft)
|
20
39
|
|
21
40
|
if @focus
|
@@ -26,42 +45,93 @@ module CyberarmEngine
|
|
26
45
|
@text.color = default(:hover, :color)
|
27
46
|
end
|
28
47
|
|
29
|
-
|
48
|
+
:handled
|
30
49
|
end
|
31
50
|
|
32
|
-
def left_mouse_button(
|
51
|
+
def left_mouse_button(_sender, _x, _y)
|
33
52
|
@focus = true
|
34
53
|
@style.background_canvas.background = default(:active, :background)
|
35
54
|
window.current_state.focus = self
|
36
55
|
@text.color = default(:active, :color)
|
37
56
|
|
38
|
-
|
57
|
+
:handled
|
39
58
|
end
|
40
59
|
|
41
|
-
def released_left_mouse_button(sender,
|
60
|
+
def released_left_mouse_button(sender, _x, _y)
|
42
61
|
enter(sender)
|
43
62
|
|
44
|
-
|
63
|
+
:handled
|
45
64
|
end
|
46
65
|
|
47
|
-
def clicked_left_mouse_button(
|
66
|
+
def clicked_left_mouse_button(_sender, _x, _y)
|
48
67
|
@block.call(self) if @block
|
49
68
|
|
50
|
-
|
69
|
+
:handled
|
51
70
|
end
|
52
71
|
|
53
|
-
def leave(
|
72
|
+
def leave(_sender)
|
54
73
|
@style.background_canvas.background = default(:background)
|
55
74
|
@text.color = default(:color)
|
56
75
|
|
57
|
-
|
76
|
+
:handled
|
58
77
|
end
|
59
78
|
|
60
|
-
def blur(
|
79
|
+
def blur(_sender)
|
61
80
|
@focus = false
|
62
81
|
|
63
|
-
|
82
|
+
:handled
|
83
|
+
end
|
84
|
+
|
85
|
+
def recalculate
|
86
|
+
if @image
|
87
|
+
@width = 0
|
88
|
+
@height = 0
|
89
|
+
|
90
|
+
_width = dimensional_size(@style.image_width, :width)
|
91
|
+
_height = dimensional_size(@style.image_height, :height)
|
92
|
+
|
93
|
+
if _width && _height
|
94
|
+
@scale_x = _width.to_f / @image.width
|
95
|
+
@scale_y = _height.to_f / @image.height
|
96
|
+
elsif _width
|
97
|
+
@scale_x = _width.to_f / @image.width
|
98
|
+
@scale_y = @scale_x
|
99
|
+
elsif _height
|
100
|
+
@scale_y = _height.to_f / @image.height
|
101
|
+
@scale_x = @scale_y
|
102
|
+
else
|
103
|
+
@scale_x = 1
|
104
|
+
@scale_y = 1
|
105
|
+
end
|
106
|
+
|
107
|
+
@width = _width || @image.width.round * @scale_x
|
108
|
+
@height = _height || @image.height.round * @scale_y
|
109
|
+
|
110
|
+
update_background
|
111
|
+
else
|
112
|
+
super
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def value
|
117
|
+
@image || super
|
118
|
+
end
|
119
|
+
|
120
|
+
def value=(value)
|
121
|
+
if value.is_a?(Gosu::Image)
|
122
|
+
@image = value
|
123
|
+
else
|
124
|
+
super
|
125
|
+
end
|
126
|
+
|
127
|
+
old_width = width
|
128
|
+
old_height = height
|
129
|
+
recalculate
|
130
|
+
|
131
|
+
root.gui_state.request_recalculate if old_width != width || old_height != height
|
132
|
+
|
133
|
+
publish(:changed, self.value)
|
64
134
|
end
|
65
135
|
end
|
66
136
|
end
|
67
|
-
end
|
137
|
+
end
|