cyberarm_engine 0.13.0 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
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