cyberarm_engine 0.13.0 → 0.13.1

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -8
  3. data/.travis.yml +5 -5
  4. data/Gemfile +6 -6
  5. data/LICENSE.txt +21 -21
  6. data/README.md +73 -43
  7. data/Rakefile +10 -10
  8. data/bin/console +14 -14
  9. data/bin/setup +8 -8
  10. data/cyberarm_engine.gemspec +36 -36
  11. data/lib/cyberarm_engine.rb +49 -47
  12. data/lib/cyberarm_engine/animator.rb +53 -53
  13. data/lib/cyberarm_engine/background.rb +175 -175
  14. data/lib/cyberarm_engine/bounding_box.rb +149 -149
  15. data/lib/cyberarm_engine/common.rb +96 -96
  16. data/lib/cyberarm_engine/config_file.rb +46 -0
  17. data/lib/cyberarm_engine/engine.rb +101 -101
  18. data/lib/cyberarm_engine/game_object.rb +256 -256
  19. data/lib/cyberarm_engine/game_state.rb +88 -88
  20. data/lib/cyberarm_engine/gosu_ext/circle.rb +8 -8
  21. data/lib/cyberarm_engine/ray.rb +55 -55
  22. data/lib/cyberarm_engine/shader.rb +398 -262
  23. data/lib/cyberarm_engine/text.rb +146 -146
  24. data/lib/cyberarm_engine/timer.rb +22 -22
  25. data/lib/cyberarm_engine/transform.rb +272 -272
  26. data/lib/cyberarm_engine/ui/border_canvas.rb +100 -100
  27. data/lib/cyberarm_engine/ui/dsl.rb +98 -98
  28. data/lib/cyberarm_engine/ui/element.rb +275 -275
  29. data/lib/cyberarm_engine/ui/elements/button.rb +66 -66
  30. data/lib/cyberarm_engine/ui/elements/check_box.rb +58 -58
  31. data/lib/cyberarm_engine/ui/elements/container.rb +176 -176
  32. data/lib/cyberarm_engine/ui/elements/edit_line.rb +171 -171
  33. data/lib/cyberarm_engine/ui/elements/flow.rb +16 -16
  34. data/lib/cyberarm_engine/ui/elements/image.rb +51 -51
  35. data/lib/cyberarm_engine/ui/elements/label.rb +49 -49
  36. data/lib/cyberarm_engine/ui/elements/progress.rb +49 -49
  37. data/lib/cyberarm_engine/ui/elements/stack.rb +12 -12
  38. data/lib/cyberarm_engine/ui/elements/toggle_button.rb +55 -55
  39. data/lib/cyberarm_engine/ui/event.rb +46 -46
  40. data/lib/cyberarm_engine/ui/gui_state.rb +134 -134
  41. data/lib/cyberarm_engine/ui/style.rb +36 -36
  42. data/lib/cyberarm_engine/ui/theme.rb +120 -120
  43. data/lib/cyberarm_engine/vector.rb +289 -202
  44. data/lib/cyberarm_engine/version.rb +4 -4
  45. metadata +3 -2
@@ -1,54 +1,54 @@
1
- module CyberarmEngine
2
- class Animator
3
- DEFAULT_TWEEN = :linear
4
- def initialize(start_time:, duration:, from:, to:, &block)
5
- @start_time, @duration = start_time, duration
6
- @from, @to = from.dup, to.dup
7
- @block = block
8
- end
9
-
10
- def update
11
- @block.call(self, @from, @to) if @block
12
- end
13
-
14
- def progress
15
- (@start_time.to_f + (Gosu.milliseconds - @start_time)) / (@start_time + @duration.to_f)
16
- end
17
-
18
- def complete?
19
- progress >= 1.0
20
- end
21
-
22
- def transition(from, to, tween = DEFAULT_TWEEN)
23
- from + (to - from) * send("tween_#{tween}", progress)
24
- end
25
-
26
- def color_transition(from, to, tween = DEFAULT_TWEEN)
27
- r = transition(from.red, to.red)
28
- g = transition(from.green, to.green)
29
- b = transition(from.blue, to.blue)
30
- a = transition(from.alpha, to.alpha)
31
-
32
- Gosu::Color.rgba(r, g, b, a)
33
- end
34
-
35
- def color_hsv_transition(from, to, tween = DEFAULT_TWEEN)
36
- hue = transition(from.hue, to.hue, tween)
37
- saturation = transition(from.saturation, to.saturation, tween)
38
- value = transition(from.value, to.value, tween)
39
- alpha = transition(from.alpha, to.alpha, tween)
40
-
41
- Gosu::Color.from_ahsv(alpha, hue, saturation, value)
42
- end
43
-
44
- # NOTE: Use this for future reference? https://github.com/danro/easing-js/blob/master/easing.js
45
-
46
- def tween_linear(t)
47
- t
48
- end
49
-
50
- def tween_sine(t)
51
- Math.sin(t) * t
52
- end
53
- end
1
+ module CyberarmEngine
2
+ class Animator
3
+ DEFAULT_TWEEN = :linear
4
+ def initialize(start_time:, duration:, from:, to:, &block)
5
+ @start_time, @duration = start_time, duration
6
+ @from, @to = from.dup, to.dup
7
+ @block = block
8
+ end
9
+
10
+ def update
11
+ @block.call(self, @from, @to) if @block
12
+ end
13
+
14
+ def progress
15
+ (@start_time.to_f + (Gosu.milliseconds - @start_time)) / (@start_time + @duration.to_f)
16
+ end
17
+
18
+ def complete?
19
+ progress >= 1.0
20
+ end
21
+
22
+ def transition(from, to, tween = DEFAULT_TWEEN)
23
+ from + (to - from) * send("tween_#{tween}", progress)
24
+ end
25
+
26
+ def color_transition(from, to, tween = DEFAULT_TWEEN)
27
+ r = transition(from.red, to.red)
28
+ g = transition(from.green, to.green)
29
+ b = transition(from.blue, to.blue)
30
+ a = transition(from.alpha, to.alpha)
31
+
32
+ Gosu::Color.rgba(r, g, b, a)
33
+ end
34
+
35
+ def color_hsv_transition(from, to, tween = DEFAULT_TWEEN)
36
+ hue = transition(from.hue, to.hue, tween)
37
+ saturation = transition(from.saturation, to.saturation, tween)
38
+ value = transition(from.value, to.value, tween)
39
+ alpha = transition(from.alpha, to.alpha, tween)
40
+
41
+ Gosu::Color.from_ahsv(alpha, hue, saturation, value)
42
+ end
43
+
44
+ # NOTE: Use this for future reference? https://github.com/danro/easing-js/blob/master/easing.js
45
+
46
+ def tween_linear(t)
47
+ t
48
+ end
49
+
50
+ def tween_sine(t)
51
+ Math.sin(t) * t
52
+ end
53
+ end
54
54
  end
@@ -1,175 +1,175 @@
1
- module CyberarmEngine
2
- class Background
3
- attr_accessor :x, :y, :z, :width, :height, :angle, :debug
4
- attr_reader :background
5
- def initialize(x: 0, y: 0, z: 0, width: 0, height: 0, background: Gosu::Color::BLACK, angle: 0, debug: false)
6
- @x,@y,@z = x,y,z
7
- @width,@height = width,height
8
- @debug = debug
9
-
10
- @paint = Paint.new(background)
11
- @angle = angle
12
-
13
- @top_left = Vector.new(@x, @y)
14
- @top_right = Vector.new(@x + @width, @y)
15
- @bottom_left = Vector.new(@x, @y + @height)
16
- @bottom_right = Vector.new(@x + @width, @y + @height)
17
- end
18
-
19
- def draw
20
- Gosu.clip_to(@x, @y, @width, @height) do
21
- Gosu.draw_quad(
22
- @top_left.x, @top_left.y, @paint.top_left,
23
- @top_right.x, @top_right.y, @paint.top_right,
24
- @bottom_right.x, @bottom_right.y, @paint.bottom_right,
25
- @bottom_left.x, @bottom_left.y, @paint.bottom_left,
26
- @z
27
- )
28
- end
29
-
30
- debug_outline if @debug
31
- end
32
-
33
- def update
34
- origin_x = (@x + (@width/2))
35
- origin_y = (@y + (@height/2))
36
-
37
- points = [
38
- @top_left = Vector.new(@x, @y),
39
- @top_right = Vector.new(@x + @width, @y),
40
- @bottom_left = Vector.new(@x, @y + @height),
41
- @bottom_right = Vector.new(@x + @width, @y + @height)
42
- ]
43
-
44
- [@top_left, @top_right, @bottom_left, @bottom_right].each do |vector|
45
- temp_x = vector.x - origin_x
46
- temp_y = vector.y - origin_y
47
-
48
- # 90 is up here, while gosu uses 0 for up.
49
- radians = (@angle + 90).gosu_to_radians
50
- vector.x = (@x + (@width/2)) + ((temp_x * Math.cos(radians)) - (temp_y * Math.sin(radians)))
51
- vector.y = (@y + (@height/2)) + ((temp_x * Math.sin(radians)) + (temp_y * Math.cos(radians)))
52
- end
53
-
54
- # [
55
- # [:top, @top_left, @top_right],
56
- # [:right, @top_right, @bottom_right],
57
- # [:bottom, @bottom_right, @bottom_left],
58
- # [:left, @bottom_left, @top_left]
59
- # ].each do |edge|
60
- # points.each do |point|
61
- # puts "#{edge.first} -> #{shortest_distance(point, edge[1], edge[2])}"
62
- # end
63
- # end
64
- end
65
-
66
- def shortest_distance(point, la, lb)
67
- a = la.x - lb.x
68
- b = la.y - lb.y
69
- c = Gosu.distance(la.x, la.y, lb.x, lb.y)
70
- p a,b,c
71
- d = (a * point.x + b * point.y + c).abs / (Math.sqrt(a * a + b * b))
72
- puts "Distance: #{d}"
73
- exit!
74
- return d
75
- end
76
-
77
- def debug_outline
78
- # Top
79
- Gosu.draw_line(
80
- @x, @y, Gosu::Color::RED,
81
- @x + @width, @y, Gosu::Color::RED,
82
- @z
83
- )
84
-
85
- # Right
86
- Gosu.draw_line(
87
- @x + @width, @y, Gosu::Color::RED,
88
- @x + @width, @y + @height, Gosu::Color::RED,
89
- @z
90
- )
91
-
92
- # Bottom
93
- Gosu.draw_line(
94
- @x + @width, @y + @height, Gosu::Color::RED,
95
- @x, @y + @height, Gosu::Color::RED,
96
- @z
97
- )
98
-
99
- # Left
100
- Gosu.draw_line(
101
- @x, @y + @height, Gosu::Color::RED,
102
- @x, @y, Gosu::Color::RED,
103
- @z
104
- )
105
- end
106
-
107
- def background=(_background)
108
- @paint.set(_background)
109
- update
110
- end
111
-
112
- def angle=(n)
113
- @angle = n
114
- update
115
- end
116
- end
117
-
118
- class Paint
119
- attr_accessor :top_left, :top_right, :bottom_left, :bottom_right
120
- def initialize(background)
121
- set(background)
122
- end
123
-
124
- def set(background)
125
- @background = background
126
-
127
-
128
- if background.is_a?(Numeric)
129
- @top_left = background
130
- @top_right = background
131
- @bottom_left = background
132
- @bottom_right = background
133
- elsif background.is_a?(Gosu::Color)
134
- @top_left = background
135
- @top_right = background
136
- @bottom_left = background
137
- @bottom_right = background
138
- elsif background.is_a?(Array)
139
- if background.size == 1
140
- set(background.first)
141
- elsif background.size == 2
142
- @top_left = background.first
143
- @top_right = background.last
144
- @bottom_left = background.first
145
- @bottom_right = background.last
146
- elsif background.size == 4
147
- @top_left = background[0]
148
- @top_right = background[1]
149
- @bottom_left = background[2]
150
- @bottom_right = background[3]
151
- else
152
- raise ArgumentError, "background array was empty or had wrong number of elements (expected 2 or 4 elements)"
153
- end
154
- elsif background.is_a?(Hash)
155
- @top_left = background[:top_left]
156
- @top_right = background[:top_right]
157
- @bottom_left = background[:bottom_left]
158
- @bottom_right = background[:bottom_right]
159
- elsif background.is_a?(Range)
160
- set([background.begin, background.begin, background.end, background.end])
161
- else
162
- raise ArgumentError, "background '#{background}' of type '#{background.class}' was not able to be processed"
163
- end
164
- end
165
- end
166
- end
167
-
168
- # Add <=> method to support Range based gradients
169
- module Gosu
170
- class Color
171
- def <=>(other)
172
- self
173
- end
174
- end
175
- end
1
+ module CyberarmEngine
2
+ class Background
3
+ attr_accessor :x, :y, :z, :width, :height, :angle, :debug
4
+ attr_reader :background
5
+ def initialize(x: 0, y: 0, z: 0, width: 0, height: 0, background: Gosu::Color::BLACK, angle: 0, debug: false)
6
+ @x,@y,@z = x,y,z
7
+ @width,@height = width,height
8
+ @debug = debug
9
+
10
+ @paint = Paint.new(background)
11
+ @angle = angle
12
+
13
+ @top_left = Vector.new(@x, @y)
14
+ @top_right = Vector.new(@x + @width, @y)
15
+ @bottom_left = Vector.new(@x, @y + @height)
16
+ @bottom_right = Vector.new(@x + @width, @y + @height)
17
+ end
18
+
19
+ def draw
20
+ Gosu.clip_to(@x, @y, @width, @height) do
21
+ Gosu.draw_quad(
22
+ @top_left.x, @top_left.y, @paint.top_left,
23
+ @top_right.x, @top_right.y, @paint.top_right,
24
+ @bottom_right.x, @bottom_right.y, @paint.bottom_right,
25
+ @bottom_left.x, @bottom_left.y, @paint.bottom_left,
26
+ @z
27
+ )
28
+ end
29
+
30
+ debug_outline if @debug
31
+ end
32
+
33
+ def update
34
+ origin_x = (@x + (@width/2))
35
+ origin_y = (@y + (@height/2))
36
+
37
+ points = [
38
+ @top_left = Vector.new(@x, @y),
39
+ @top_right = Vector.new(@x + @width, @y),
40
+ @bottom_left = Vector.new(@x, @y + @height),
41
+ @bottom_right = Vector.new(@x + @width, @y + @height)
42
+ ]
43
+
44
+ [@top_left, @top_right, @bottom_left, @bottom_right].each do |vector|
45
+ temp_x = vector.x - origin_x
46
+ temp_y = vector.y - origin_y
47
+
48
+ # 90 is up here, while gosu uses 0 for up.
49
+ radians = (@angle + 90).gosu_to_radians
50
+ vector.x = (@x + (@width/2)) + ((temp_x * Math.cos(radians)) - (temp_y * Math.sin(radians)))
51
+ vector.y = (@y + (@height/2)) + ((temp_x * Math.sin(radians)) + (temp_y * Math.cos(radians)))
52
+ end
53
+
54
+ # [
55
+ # [:top, @top_left, @top_right],
56
+ # [:right, @top_right, @bottom_right],
57
+ # [:bottom, @bottom_right, @bottom_left],
58
+ # [:left, @bottom_left, @top_left]
59
+ # ].each do |edge|
60
+ # points.each do |point|
61
+ # puts "#{edge.first} -> #{shortest_distance(point, edge[1], edge[2])}"
62
+ # end
63
+ # end
64
+ end
65
+
66
+ def shortest_distance(point, la, lb)
67
+ a = la.x - lb.x
68
+ b = la.y - lb.y
69
+ c = Gosu.distance(la.x, la.y, lb.x, lb.y)
70
+ p a,b,c
71
+ d = (a * point.x + b * point.y + c).abs / (Math.sqrt(a * a + b * b))
72
+ puts "Distance: #{d}"
73
+ exit!
74
+ return d
75
+ end
76
+
77
+ def debug_outline
78
+ # Top
79
+ Gosu.draw_line(
80
+ @x, @y, Gosu::Color::RED,
81
+ @x + @width, @y, Gosu::Color::RED,
82
+ @z
83
+ )
84
+
85
+ # Right
86
+ Gosu.draw_line(
87
+ @x + @width, @y, Gosu::Color::RED,
88
+ @x + @width, @y + @height, Gosu::Color::RED,
89
+ @z
90
+ )
91
+
92
+ # Bottom
93
+ Gosu.draw_line(
94
+ @x + @width, @y + @height, Gosu::Color::RED,
95
+ @x, @y + @height, Gosu::Color::RED,
96
+ @z
97
+ )
98
+
99
+ # Left
100
+ Gosu.draw_line(
101
+ @x, @y + @height, Gosu::Color::RED,
102
+ @x, @y, Gosu::Color::RED,
103
+ @z
104
+ )
105
+ end
106
+
107
+ def background=(_background)
108
+ @paint.set(_background)
109
+ update
110
+ end
111
+
112
+ def angle=(n)
113
+ @angle = n
114
+ update
115
+ end
116
+ end
117
+
118
+ class Paint
119
+ attr_accessor :top_left, :top_right, :bottom_left, :bottom_right
120
+ def initialize(background)
121
+ set(background)
122
+ end
123
+
124
+ def set(background)
125
+ @background = background
126
+
127
+
128
+ if background.is_a?(Numeric)
129
+ @top_left = background
130
+ @top_right = background
131
+ @bottom_left = background
132
+ @bottom_right = background
133
+ elsif background.is_a?(Gosu::Color)
134
+ @top_left = background
135
+ @top_right = background
136
+ @bottom_left = background
137
+ @bottom_right = background
138
+ elsif background.is_a?(Array)
139
+ if background.size == 1
140
+ set(background.first)
141
+ elsif background.size == 2
142
+ @top_left = background.first
143
+ @top_right = background.last
144
+ @bottom_left = background.first
145
+ @bottom_right = background.last
146
+ elsif background.size == 4
147
+ @top_left = background[0]
148
+ @top_right = background[1]
149
+ @bottom_left = background[2]
150
+ @bottom_right = background[3]
151
+ else
152
+ raise ArgumentError, "background array was empty or had wrong number of elements (expected 2 or 4 elements)"
153
+ end
154
+ elsif background.is_a?(Hash)
155
+ @top_left = background[:top_left]
156
+ @top_right = background[:top_right]
157
+ @bottom_left = background[:bottom_left]
158
+ @bottom_right = background[:bottom_right]
159
+ elsif background.is_a?(Range)
160
+ set([background.begin, background.begin, background.end, background.end])
161
+ else
162
+ raise ArgumentError, "background '#{background}' of type '#{background.class}' was not able to be processed"
163
+ end
164
+ end
165
+ end
166
+ end
167
+
168
+ # Add <=> method to support Range based gradients
169
+ module Gosu
170
+ class Color
171
+ def <=>(other)
172
+ self
173
+ end
174
+ end
175
+ end