cyberarm_engine 0.14.0 → 0.18.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 +5 -4
- data/Rakefile +1 -1
- data/assets/textures/default.png +0 -0
- data/assets/textures/logo.png +0 -0
- data/cyberarm_engine.gemspec +11 -9
- data/lib/cyberarm_engine.rb +19 -7
- data/lib/cyberarm_engine/animator.rb +13 -11
- 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/builtin/intro_state.rb +128 -0
- data/lib/cyberarm_engine/cache.rb +4 -0
- data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
- data/lib/cyberarm_engine/common.rb +18 -13
- data/lib/cyberarm_engine/config_file.rb +2 -2
- data/lib/cyberarm_engine/game_object.rb +63 -72
- data/lib/cyberarm_engine/game_state.rb +11 -3
- 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/{shader.rb → opengl/shader.rb} +51 -43
- data/lib/cyberarm_engine/opengl/texture.rb +69 -0
- data/lib/cyberarm_engine/ray.rb +5 -5
- data/lib/cyberarm_engine/stats.rb +2 -2
- data/lib/cyberarm_engine/text.rb +51 -27
- data/lib/cyberarm_engine/timer.rb +1 -1
- data/lib/cyberarm_engine/transform.rb +43 -20
- data/lib/cyberarm_engine/ui/border_canvas.rb +4 -3
- data/lib/cyberarm_engine/ui/dsl.rb +45 -12
- data/lib/cyberarm_engine/ui/element.rb +211 -61
- data/lib/cyberarm_engine/ui/elements/button.rb +72 -42
- data/lib/cyberarm_engine/ui/elements/check_box.rb +5 -2
- data/lib/cyberarm_engine/ui/elements/container.rb +81 -29
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +175 -2
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +139 -48
- data/lib/cyberarm_engine/ui/elements/flow.rb +1 -1
- data/lib/cyberarm_engine/ui/elements/image.rb +32 -12
- data/lib/cyberarm_engine/ui/elements/list_box.rb +78 -2
- data/lib/cyberarm_engine/ui/elements/progress.rb +5 -5
- data/lib/cyberarm_engine/ui/elements/radio.rb +1 -1
- data/lib/cyberarm_engine/ui/elements/slider.rb +13 -16
- data/lib/cyberarm_engine/ui/elements/stack.rb +1 -1
- data/lib/cyberarm_engine/ui/elements/text_block.rb +153 -0
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +27 -19
- data/lib/cyberarm_engine/ui/event.rb +7 -7
- data/lib/cyberarm_engine/ui/gui_state.rb +88 -16
- data/lib/cyberarm_engine/ui/style.rb +23 -11
- data/lib/cyberarm_engine/ui/theme.rb +95 -21
- data/lib/cyberarm_engine/vector.rb +33 -30
- data/lib/cyberarm_engine/version.rb +2 -2
- data/lib/cyberarm_engine/window.rb +35 -18
- metadata +70 -18
- data/lib/cyberarm_engine/ui/elements/label.rb +0 -52
@@ -1,11 +1,11 @@
|
|
1
1
|
module Gosu
|
2
2
|
class Color
|
3
|
-
def _dump(
|
3
|
+
def _dump(_level)
|
4
4
|
[
|
5
|
-
"%02X" %
|
6
|
-
"%02X" %
|
7
|
-
"%02X" %
|
8
|
-
"%02X" %
|
5
|
+
"%02X" % alpha,
|
6
|
+
"%02X" % red,
|
7
|
+
"%02X" % green,
|
8
|
+
"%02X" % blue
|
9
9
|
].join
|
10
10
|
end
|
11
11
|
|
@@ -17,21 +17,33 @@ end
|
|
17
17
|
|
18
18
|
module CyberarmEngine
|
19
19
|
class Style
|
20
|
+
attr_reader :hash
|
21
|
+
|
20
22
|
def initialize(hash = {})
|
21
|
-
|
23
|
+
h = Marshal.load(Marshal.dump(hash))
|
24
|
+
|
25
|
+
h[:default] = {}
|
26
|
+
|
27
|
+
h.each do |key, value|
|
28
|
+
next if value.is_a?(Hash)
|
29
|
+
|
30
|
+
h[:default][key] = value
|
31
|
+
end
|
32
|
+
|
33
|
+
@hash = h
|
22
34
|
end
|
23
35
|
|
24
|
-
def method_missing(method, *args
|
36
|
+
def method_missing(method, *args)
|
25
37
|
if method.to_s.end_with?("=")
|
26
38
|
raise "Did not expect more than 1 argument" if args.size > 1
|
27
|
-
return @hash[method.to_s.sub("=", "").to_sym] = args.first
|
28
39
|
|
29
|
-
|
30
|
-
return @hash[method]
|
40
|
+
@hash[method.to_s.sub("=", "").to_sym] = args.first
|
31
41
|
|
42
|
+
elsif args.empty?
|
43
|
+
@hash[method]
|
32
44
|
else
|
33
45
|
raise ArgumentError, "Did not expect arguments"
|
34
46
|
end
|
35
47
|
end
|
36
48
|
end
|
37
|
-
end
|
49
|
+
end
|
@@ -11,17 +11,21 @@ module CyberarmEngine
|
|
11
11
|
|
12
12
|
def theme_defaults(options)
|
13
13
|
raise "Error" unless self.class.ancestors.include?(CyberarmEngine::Element)
|
14
|
+
|
14
15
|
_theme = THEME
|
15
|
-
_theme = _theme
|
16
|
+
_theme = deep_merge(_theme, options[:theme]) if options[:theme]
|
16
17
|
_theme.delete(:theme) if options[:theme]
|
17
18
|
|
18
19
|
hash = {}
|
19
20
|
class_names = self.class.ancestors
|
20
|
-
class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map!
|
21
|
+
class_names = class_names[0..class_names.index(CyberarmEngine::Element)].map! do |c|
|
22
|
+
c.to_s.split("::").last.to_sym
|
23
|
+
end.reverse!
|
21
24
|
|
22
25
|
class_names.each do |klass|
|
23
26
|
next unless data = _theme.dig(klass)
|
24
|
-
|
27
|
+
|
28
|
+
data.each do |_key, _value|
|
25
29
|
hash.merge!(data)
|
26
30
|
end
|
27
31
|
end
|
@@ -32,7 +36,7 @@ module CyberarmEngine
|
|
32
36
|
# Derived from Rails Hash#deep_merge!
|
33
37
|
# Enables passing partial themes through Element options without issue
|
34
38
|
def deep_merge(original, intergrate, &block)
|
35
|
-
|
39
|
+
original.merge(intergrate) do |key, this_val, other_val|
|
36
40
|
if this_val.is_a?(Hash) && other_val.is_a?(Hash)
|
37
41
|
deep_merge(this_val, other_val, &block)
|
38
42
|
elsif block_given?
|
@@ -41,8 +45,6 @@ module CyberarmEngine
|
|
41
45
|
other_val
|
42
46
|
end
|
43
47
|
end
|
44
|
-
|
45
|
-
return hash
|
46
48
|
end
|
47
49
|
|
48
50
|
THEME = {
|
@@ -51,33 +53,44 @@ module CyberarmEngine
|
|
51
53
|
y: 0,
|
52
54
|
z: 30,
|
53
55
|
|
54
|
-
width:
|
56
|
+
width: nil,
|
55
57
|
height: nil,
|
56
|
-
color:
|
58
|
+
color: Gosu::Color::WHITE,
|
57
59
|
background: Gosu::Color::NONE,
|
58
|
-
margin:
|
59
|
-
padding:
|
60
|
+
margin: 0,
|
61
|
+
padding: 0,
|
60
62
|
border_thickness: 0,
|
61
63
|
border_color: Gosu::Color::NONE,
|
62
|
-
border_radius: 0
|
64
|
+
border_radius: 0
|
65
|
+
},
|
66
|
+
|
67
|
+
Container: { # < Element (Base class for Stack and Flow)
|
68
|
+
debug_color: Gosu::Color::YELLOW
|
63
69
|
},
|
64
70
|
|
65
71
|
Button: { # < Label
|
66
|
-
margin:
|
67
|
-
padding:
|
72
|
+
margin: 1,
|
73
|
+
padding: 4,
|
68
74
|
border_thickness: 1,
|
69
75
|
border_color: ["ffd59674".hex, "ffff8746".hex],
|
70
76
|
border_radius: 0,
|
71
77
|
background: ["ffc75e61".to_i(16), "ffe26623".to_i(16)],
|
78
|
+
text_align: :center,
|
79
|
+
text_wrap: :none,
|
72
80
|
|
73
81
|
hover: {
|
74
|
-
color: Gosu::Color.rgb(200,200,200),
|
75
|
-
background:
|
82
|
+
color: Gosu::Color.rgb(200, 200, 200),
|
83
|
+
background: ["ffB23E41".to_i(16), "ffFF7C00".to_i(16)]
|
76
84
|
},
|
77
85
|
|
78
86
|
active: {
|
79
87
|
color: Gosu::Color::BLACK,
|
80
88
|
background: ["ffB23E41".to_i(16)]
|
89
|
+
},
|
90
|
+
|
91
|
+
disabled: {
|
92
|
+
color: Gosu::Color::GRAY,
|
93
|
+
background: 0xff303030
|
81
94
|
}
|
82
95
|
},
|
83
96
|
|
@@ -89,24 +102,85 @@ module CyberarmEngine
|
|
89
102
|
caret_color: Gosu::Color::WHITE,
|
90
103
|
caret_interval: 500,
|
91
104
|
selection_color: Gosu::Color.rgba(255, 128, 50, 200),
|
105
|
+
text_align: :left
|
92
106
|
},
|
93
107
|
|
94
108
|
Image: { # < Element
|
109
|
+
color: Gosu::Color::WHITE,
|
110
|
+
tileable: false,
|
95
111
|
retro: false
|
96
112
|
},
|
97
113
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
114
|
+
TextBlock: { # < Element
|
115
|
+
text_size: 28,
|
116
|
+
text_wrap: :word_wrap, # :word_wrap, :break_word, :none
|
117
|
+
text_shadow: false,
|
118
|
+
text_align: :left,
|
119
|
+
font: "Arial",
|
120
|
+
margin: 0,
|
121
|
+
padding: 2
|
122
|
+
},
|
123
|
+
|
124
|
+
Banner: { # < TextBlock
|
125
|
+
text_size: 48
|
126
|
+
},
|
127
|
+
|
128
|
+
Title: { # < TextBlock
|
129
|
+
text_size: 34
|
130
|
+
},
|
131
|
+
|
132
|
+
Subtitle: { # < TextBlock
|
133
|
+
text_size: 26
|
134
|
+
},
|
135
|
+
|
136
|
+
Tagline: { # < TextBlock
|
137
|
+
text_size: 24
|
138
|
+
},
|
139
|
+
|
140
|
+
Caption: { # < TextBlock
|
141
|
+
text_size: 22
|
142
|
+
},
|
143
|
+
|
144
|
+
Para: { # < TextBlock
|
145
|
+
text_size: 18
|
146
|
+
},
|
147
|
+
|
148
|
+
Inscription: { # < TextBlock
|
149
|
+
text_size: 16
|
150
|
+
},
|
151
|
+
|
152
|
+
ToolTip: { # < TextBlock
|
153
|
+
color: Gosu::Color::WHITE,
|
154
|
+
padding_top: 4,
|
155
|
+
padding_bottom: 4,
|
156
|
+
padding_left: 8,
|
157
|
+
padding_right: 8,
|
158
|
+
border_thickness: 1,
|
159
|
+
border_color: 0xffaaaaaa,
|
160
|
+
background: 0xff404040
|
161
|
+
},
|
162
|
+
Link: { # < TextBlock
|
163
|
+
color: Gosu::Color::BLUE,
|
164
|
+
border_thickness: 1,
|
165
|
+
border_bottom_color: Gosu::Color::BLUE,
|
166
|
+
hover: {
|
167
|
+
color: 0xff_ff00ff,
|
168
|
+
border_bottom_color: 0xff_ff00ff
|
169
|
+
},
|
170
|
+
active: {
|
171
|
+
color: 0xff_ff0000,
|
172
|
+
border_bottom_color: 0xff_ff0000
|
173
|
+
}
|
104
174
|
},
|
105
175
|
|
106
176
|
ToggleButton: { # < Button
|
107
177
|
checkmark: "√"
|
108
178
|
},
|
109
179
|
|
180
|
+
CheckBox: { # < Flow
|
181
|
+
text_wrap: :none
|
182
|
+
},
|
183
|
+
|
110
184
|
Progress: { # < Element
|
111
185
|
width: 250,
|
112
186
|
height: 36,
|
@@ -60,22 +60,15 @@ module CyberarmEngine
|
|
60
60
|
Vector.new(0, 0, -1)
|
61
61
|
end
|
62
62
|
|
63
|
+
attr_accessor :x, :y, :z, :weight
|
64
|
+
|
63
65
|
def initialize(x = 0, y = 0, z = 0, weight = 0)
|
64
|
-
@x
|
66
|
+
@x = x
|
67
|
+
@y = y
|
68
|
+
@z = z
|
69
|
+
@weight = weight
|
65
70
|
end
|
66
71
|
|
67
|
-
def x; @x; end
|
68
|
-
def x=(n); @x = n; end
|
69
|
-
|
70
|
-
def y; @y; end
|
71
|
-
def y=(n); @y = n; end
|
72
|
-
|
73
|
-
def z; @z; end
|
74
|
-
def z=(n); @z = n; end
|
75
|
-
|
76
|
-
def weight; @weight; end
|
77
|
-
def weight=(n); @weight = n; end
|
78
|
-
|
79
72
|
alias w weight
|
80
73
|
alias w= weight=
|
81
74
|
|
@@ -83,14 +76,14 @@ module CyberarmEngine
|
|
83
76
|
def ==(other)
|
84
77
|
if other.is_a?(Numeric)
|
85
78
|
@x == other &&
|
86
|
-
|
87
|
-
|
88
|
-
|
79
|
+
@y == other &&
|
80
|
+
@z == other &&
|
81
|
+
@weight == other
|
89
82
|
elsif other.is_a?(Vector)
|
90
83
|
@x == other.x &&
|
91
|
-
|
92
|
-
|
93
|
-
|
84
|
+
@y == other.y &&
|
85
|
+
@z == other.z &&
|
86
|
+
@weight == other.weight
|
94
87
|
else
|
95
88
|
other == self
|
96
89
|
end
|
@@ -137,6 +130,17 @@ module CyberarmEngine
|
|
137
130
|
operator("*", other)
|
138
131
|
end
|
139
132
|
|
133
|
+
def multiply_transform(transform)
|
134
|
+
e = transform.elements
|
135
|
+
|
136
|
+
x = @x * e[0] + @y * e[1] + @z * e[2] + 1 * e[3]
|
137
|
+
y = @x * e[4] + @y * e[5] + @z * e[6] + 1 * e[7]
|
138
|
+
z = @x * e[8] + @y * e[9] + @z * e[10] + 1 * e[11]
|
139
|
+
w = @x * e[12] + @y * e[13] + @z * e[14] + 1 * e[15]
|
140
|
+
|
141
|
+
Vector.new(x / 1, y / 1, z / 1, w / 1)
|
142
|
+
end
|
143
|
+
|
140
144
|
# Divides Vector and Numeric or Vector and Vector, excluding {weight}
|
141
145
|
# @return [CyberarmEngine::Vector]
|
142
146
|
def /(other)
|
@@ -161,20 +165,20 @@ module CyberarmEngine
|
|
161
165
|
def dot(other)
|
162
166
|
product = 0
|
163
167
|
|
164
|
-
a =
|
168
|
+
a = to_a
|
165
169
|
b = other.to_a
|
166
170
|
|
167
171
|
3.times do |i|
|
168
|
-
product
|
172
|
+
product += (a[i] * b[i])
|
169
173
|
end
|
170
174
|
|
171
|
-
|
175
|
+
product
|
172
176
|
end
|
173
177
|
|
174
178
|
# cross product of {Vector}
|
175
179
|
# @return [CyberarmEngine::Vector]
|
176
180
|
def cross(other)
|
177
|
-
a =
|
181
|
+
a = to_a
|
178
182
|
b = other.to_a
|
179
183
|
|
180
184
|
Vector.new(
|
@@ -187,7 +191,7 @@ module CyberarmEngine
|
|
187
191
|
# returns degrees
|
188
192
|
# @return [Float]
|
189
193
|
def angle(other)
|
190
|
-
Math.acos(
|
194
|
+
Math.acos(normalized.dot(other.normalized)) * 180 / Math::PI
|
191
195
|
end
|
192
196
|
|
193
197
|
# returns magnitude of Vector, ignoring #weight
|
@@ -209,7 +213,6 @@ module CyberarmEngine
|
|
209
213
|
self / Vector.new(mag, mag, mag)
|
210
214
|
end
|
211
215
|
|
212
|
-
|
213
216
|
# returns a direction {Vector}
|
214
217
|
#
|
215
218
|
# z is pitch
|
@@ -254,19 +257,19 @@ module CyberarmEngine
|
|
254
257
|
# 2D distance using X and Y
|
255
258
|
# @return [Float]
|
256
259
|
def distance(other)
|
257
|
-
Math.sqrt((@x-other.x)**2 + (@y-other.y)**2)
|
260
|
+
Math.sqrt((@x - other.x)**2 + (@y - other.y)**2)
|
258
261
|
end
|
259
262
|
|
260
263
|
# 2D distance using X and Z
|
261
264
|
# @return [Float]
|
262
265
|
def gl_distance2d(other)
|
263
|
-
Math.sqrt((@x-other.x)**2 + (@z-other.z)**2)
|
266
|
+
Math.sqrt((@x - other.x)**2 + (@z - other.z)**2)
|
264
267
|
end
|
265
268
|
|
266
269
|
# 3D distance using X, Y, and Z
|
267
270
|
# @return [Float]
|
268
271
|
def distance3d(other)
|
269
|
-
Math.sqrt((@x-other.x)**2 + (@y-other.y)**2 + (@z-other.z)**2)
|
272
|
+
Math.sqrt((@x - other.x)**2 + (@y - other.y)**2 + (@z - other.z)**2)
|
270
273
|
end
|
271
274
|
|
272
275
|
# Converts {Vector} to Array
|
@@ -284,7 +287,7 @@ module CyberarmEngine
|
|
284
287
|
# Converts {Vector} to Hash
|
285
288
|
# @return [Hash]
|
286
289
|
def to_h
|
287
|
-
{x: @x, y: @y, z: @z, weight: @weight}
|
290
|
+
{ x: @x, y: @y, z: @z, weight: @weight }
|
288
291
|
end
|
289
292
|
end
|
290
|
-
end
|
293
|
+
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
class Window < Gosu::Window
|
3
|
+
include Common
|
4
|
+
|
3
5
|
IMAGES = {}
|
4
|
-
SAMPLES= {}
|
5
|
-
SONGS
|
6
|
+
SAMPLES = {}
|
7
|
+
SONGS = {}
|
6
8
|
|
7
9
|
attr_accessor :show_cursor
|
10
|
+
attr_writer :exit_on_opengl_error
|
8
11
|
attr_reader :last_frame_time
|
9
12
|
|
10
13
|
def self.now
|
@@ -12,19 +15,20 @@ module CyberarmEngine
|
|
12
15
|
end
|
13
16
|
|
14
17
|
def self.dt
|
15
|
-
$window.last_frame_time/1000.0
|
18
|
+
$window.last_frame_time / 1000.0
|
16
19
|
end
|
17
20
|
|
18
|
-
def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0/60, resizable: false)
|
21
|
+
def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0 / 60, resizable: false, borderless: false)
|
19
22
|
@show_cursor = false
|
20
23
|
|
21
|
-
super(width, height, fullscreen: fullscreen, update_interval: update_interval, resizable: resizable)
|
24
|
+
super(width, height, fullscreen: fullscreen, update_interval: update_interval, resizable: resizable, borderless: borderless)
|
22
25
|
$window = self
|
23
|
-
@last_frame_time = Gosu.milliseconds-1
|
26
|
+
@last_frame_time = Gosu.milliseconds - 1
|
24
27
|
@current_frame_time = Gosu.milliseconds
|
25
28
|
self.caption = "CyberarmEngine #{CyberarmEngine::VERSION} #{Gosu.language}"
|
26
29
|
|
27
30
|
@states = []
|
31
|
+
@exit_on_opengl_error = false
|
28
32
|
|
29
33
|
setup if defined?(setup)
|
30
34
|
end
|
@@ -37,7 +41,7 @@ module CyberarmEngine
|
|
37
41
|
Stats.clear
|
38
42
|
|
39
43
|
current_state.update if current_state
|
40
|
-
@last_frame_time = Gosu.milliseconds
|
44
|
+
@last_frame_time = Gosu.milliseconds - @current_frame_time
|
41
45
|
@current_frame_time = Gosu.milliseconds
|
42
46
|
end
|
43
47
|
|
@@ -46,7 +50,15 @@ module CyberarmEngine
|
|
46
50
|
end
|
47
51
|
|
48
52
|
def dt
|
49
|
-
@last_frame_time/1000.0
|
53
|
+
@last_frame_time / 1000.0
|
54
|
+
end
|
55
|
+
|
56
|
+
def aspect_ratio
|
57
|
+
width / height.to_f
|
58
|
+
end
|
59
|
+
|
60
|
+
def exit_on_opengl_error?
|
61
|
+
@exit_on_opengl_error
|
50
62
|
end
|
51
63
|
|
52
64
|
def button_down(id)
|
@@ -59,21 +71,23 @@ module CyberarmEngine
|
|
59
71
|
current_state.button_up(id) if current_state
|
60
72
|
end
|
61
73
|
|
62
|
-
def push_state(klass, options={})
|
63
|
-
options = {setup: true}.merge(options)
|
74
|
+
def push_state(klass, options = {})
|
75
|
+
options = { setup: true }.merge(options)
|
64
76
|
|
65
77
|
if klass.instance_of?(klass.class) && defined?(klass.options)
|
66
78
|
@states << klass
|
67
79
|
klass.setup if options[:setup]
|
80
|
+
klass.post_setup if options[:setup]
|
68
81
|
else
|
69
82
|
@states << klass.new(options) if child_of?(klass, GameState)
|
70
83
|
@states << klass.new if child_of?(klass, Element::Container)
|
71
|
-
current_state.setup if current_state.
|
84
|
+
current_state.setup if current_state.instance_of?(klass) && options[:setup]
|
85
|
+
current_state.post_setup if current_state.instance_of?(klass) && options[:setup]
|
72
86
|
end
|
73
87
|
end
|
74
88
|
|
75
89
|
private def child_of?(input, klass)
|
76
|
-
input.ancestors.detect {|c| c == klass}
|
90
|
+
input.ancestors.detect { |c| c == klass }
|
77
91
|
end
|
78
92
|
|
79
93
|
def current_state
|
@@ -81,10 +95,8 @@ module CyberarmEngine
|
|
81
95
|
end
|
82
96
|
|
83
97
|
def previous_state
|
84
|
-
if @states.size > 1 && state = @states[@states.size-2]
|
85
|
-
|
86
|
-
else
|
87
|
-
return nil
|
98
|
+
if @states.size > 1 && (state = @states[@states.size - 2])
|
99
|
+
state
|
88
100
|
end
|
89
101
|
end
|
90
102
|
|
@@ -92,11 +104,16 @@ module CyberarmEngine
|
|
92
104
|
@states.pop
|
93
105
|
end
|
94
106
|
|
107
|
+
def shift_state
|
108
|
+
@states.shift
|
109
|
+
end
|
110
|
+
|
95
111
|
# Sourced from https://gist.github.com/ippa/662583
|
96
|
-
def draw_circle(cx,cy,r, z = 9999,color = Gosu::Color::GREEN, step = 10)
|
112
|
+
def draw_circle(cx, cy, r, z = 9999, color = Gosu::Color::GREEN, step = 10)
|
97
113
|
0.step(360, step) do |a1|
|
98
114
|
a2 = a1 + step
|
99
|
-
draw_line(cx + Gosu.offset_x(a1, r), cy + Gosu.offset_y(a1, r), color, cx + Gosu.offset_x(a2, r),
|
115
|
+
draw_line(cx + Gosu.offset_x(a1, r), cy + Gosu.offset_y(a1, r), color, cx + Gosu.offset_x(a2, r),
|
116
|
+
cy + Gosu.offset_y(a2, r), color, z)
|
100
117
|
end
|
101
118
|
end
|
102
119
|
end
|