yeah 0.3.5 → 0.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17da100f4d2feff2cb2eefb5f5f779d56404f044
4
- data.tar.gz: ff877fec7e0cab390ebf0419e4aaf74dc93ae415
3
+ metadata.gz: 9358d3033c95b213ffc6f6b8e34880d247aa8a34
4
+ data.tar.gz: 636ce5c237cc12d40f0f1fc832e5433df6d92182
5
5
  SHA512:
6
- metadata.gz: 255e45b43495db3c4bf644a62b821bd7d8d34067f67f6be77f4bd19515d8b2813bd28e43d9612ae474bc3761f19c59286b7467f5095200e8debb7b844dcfb657
7
- data.tar.gz: 4ad59ff0f089d070c2975a384e81a2124fbd653fb4cdb15a7388cb413fec3590f9162cf33b0ff3272f248df7d4ae11bc36e44202e794f1b59424d8180c42377a
6
+ metadata.gz: 3115c006cadf70c7e3052cb4cb6937e17a3be3b0389791e61ec2103581d73a197fbc4dcfa1e1ebc34501b789ffa2af0914a2e88fc6363db4a45f3697d55a145d
7
+ data.tar.gz: 481caa7ec53564160a1ac3edb80f052a4a115c5b9ff2d83fd13071dbd4cda26bf629600dda30669ab227e824aa521c80e1060e422ad0d03928cf7a95994cdec0
@@ -1,3 +1,32 @@
1
+ 0.4.2 (2014-09-14)
2
+ ------------------
3
+ * Need sleep.
4
+
5
+ 0.4.1 (2014-09-14)
6
+ ------------------
7
+ * Fixed `yeah build`.
8
+
9
+ 0.4.0 (2014-09-14)
10
+ ------------------
11
+ * New `Font` class
12
+ * `Web` runner scales game display to use all available space
13
+ * New configuration system; title and factorial scaling configuration
14
+ * `Display` replaced `#font_family` & `#font_size` with `#text_font` & `#text_size`
15
+ * `Vector` added `#==`, `#add[!]`, `#subtract[!]`, `#multiply[!]`, `#divide[!]`
16
+ * `Vector#toward[!]` works in 3 dimensions
17
+ * `Display#rotate` takes `Vector` instead of `Numeric`
18
+ * `Display#[translate|scale|rotate]_[x|y|z]` added
19
+ * `Display` added `#stroke_curve` and `#stroke_curve2`
20
+ * `Display#transformation` removed
21
+ * `Game::config` removed
22
+ * `yeah build` builds to `builds`
23
+ * Secure Rubygems for Gemfile in game projects (thanks cokernel)
24
+ * Tests made platform-agnostic
25
+ * Interface tests for most classes, some `Display` draw tests, some `Color` initialization tests
26
+ * Benchmarks made more consistent
27
+ * Various bug fixes
28
+ * Documentation cleanup
29
+
1
30
  0.3.5 (2014-08-24)
2
31
  ------------------
3
32
  * Updated project structure; new entrypoint is `code/game.rb`
data/README.md CHANGED
@@ -16,16 +16,15 @@ Practical Ruby video game framework, alpha stage
16
16
 
17
17
  ## Examples
18
18
 
19
- [Code for all examples](https://github.com/yeahrb/examples)
19
+ [Code for all examples][Example code]
20
20
 
21
- [![Asteroids](https://cdn.mediacru.sh/IkYZP46TmCsd.png)](https://yeahrb.github.io/examples/asteroids/runner.html)
21
+ [![Asteroids](https://cdn.mediacru.sh/IkYZP46TmCsd.png)][Asteroids example]
22
22
 
23
- [*Asteroids*](https://yeahrb.github.io/examples/asteroids/runner.html)
23
+ [*Asteroids*][Asteroids example]
24
24
 
25
- [![Random](https://cdn.mediacru.sh/KW9M6TndLry0.png)](https://yeahrb.github.io/examples/random/runner.html)
26
-
27
- [*Random*](https://yeahrb.github.io/examples/random/runner.html)
25
+ [![Random](https://cdn.mediacru.sh/KW9M6TndLry0.png)][Random example]
28
26
 
27
+ [*Random*][Random example]
29
28
 
30
29
  ## Usage
31
30
 
@@ -40,17 +39,26 @@ NOTE: This is alpha-stage software, expect changes!
40
39
  ### Making a game
41
40
 
42
41
  1. In a command line, enter `yeah new` to generate a new game project.
43
- 2. Change into the new `game` directory, then enter `bundle install`.
44
- 3. Add game code to `code/game.rb`. No tutorials yet; please take a look at the [example code](https://github.com/yeahrb/examples) and [API reference](http://rdoc.info/github/yeahrb/yeah/85e75c5/frames).
42
+ 2. Change into the new project directory, then enter `bundle install`.
43
+ 3. Add game code to `code/game.rb`. No tutorials yet; please take a look at the [example code][Example code] and [API reference][0.4.2 API].
45
44
  4. Enter `yeah serve` and visit [http://localhost:1234](http://localhost:1234) to try the game.
46
45
 
47
46
 
48
47
  ## Links
49
48
 
50
- [0.3.4 API reference](http://rdoc.info/github/yeahrb/yeah/85e75c5/frames)
49
+ API reference: [0.4.2][0.4.2 API], [0.3.5][0.3.5 API]
50
+
51
+ [Version upgrade notes](https://github.com/yeahrb/yeah/blob/master/UPGRADING.md)
51
52
 
52
53
  [Issue & feature tracker](https://github.com/yeahrb/yeah/issues)
53
54
 
54
55
  [Discussion via Gitter](https://gitter.im/yeahrb/yeah)
55
56
 
56
57
  [Author's email](mailto:skoofoo@gmail.com)
58
+
59
+
60
+ [0.4.2 API]: http://rdoc.info/github/yeahrb/yeah/32a50f5/frames
61
+ [0.3.5 API]: http://rdoc.info/github/yeahrb/yeah/5efbbc9/frames
62
+ [Example code]: https://github.com/yeahrb/examples
63
+ [Asteroids example]: https://yeahrb.github.io/examples/asteroids/runner.html
64
+ [Random example]: https://yeahrb.github.io/examples/random/runner.html
@@ -0,0 +1,9 @@
1
+ module Yeah
2
+ # @!method self.configure
3
+ # @abstract Provided by a `Platform`.
4
+ # @yield [config] configuration block
5
+ # @yieldparam [Struct] configuration
6
+ # @note Configuration struct attributes: `title` (String),
7
+ # `factorial_scaling` (Boolean)
8
+ # @return [nil]
9
+ end
@@ -7,22 +7,22 @@ class Display
7
7
  # @param [Hash] options for new object
8
8
  # @option options [Vector] :size (V[1280, 720]) of display
9
9
  # @option options [String] :canvas_selector ('canvas') for canvas HTML
10
- # element (applicable only to `Web::Display`)
10
+ # element (applies only to `Web::Display`)
11
11
  def initialize(options = {})
12
12
  raise NotImplementedError
13
13
  end
14
14
 
15
15
  # @!attribute size
16
- # @param [Vector] size to make display
17
- # @return [Vector] size of display
16
+ # @param [Vector] size to make display in pixels
17
+ # @return [Vector] size of display in pixels
18
18
 
19
19
  # @!attribute width
20
- # @param [Vector] width to make display
21
- # @return [Vector] width of display
20
+ # @param [Integer] width to make display in pixels
21
+ # @return [Integer] width of display in pixels
22
22
 
23
23
  # @!attribute height
24
- # @param [Vector] height to make display
25
- # @return [Vector] height of display
24
+ # @param [Integer] height to make display in pixels
25
+ # @return [Integer] height of display in pixels
26
26
 
27
27
  # @!attribute fill_color
28
28
  # @param [Color] color for fill
@@ -33,78 +33,146 @@ class Display
33
33
  # @return [Color] color for stroke
34
34
 
35
35
  # @!attribute stroke_width
36
- # @param [Numeric] width for stroke
37
- # @return [Numeric] width for stroke
36
+ # @param [Numeric] width for stroke in pixels
37
+ # @return [Numeric] width for stroke in pixels
38
38
 
39
- # @!attribute font_family
40
- # @param [String] font family for text
41
- # @return [String] font family for text
39
+ # @!attribute text_font
40
+ # @param [Font] font for text
41
+ # @return [Font] font for text
42
42
 
43
- # @!attribute font_size
44
- # @param [String] font size for text
45
- # @return [String] font size for text
43
+ # @!attribute text_size
44
+ # @param [Integer] size for text in pixels
45
+ # @return [Integer] size for text in pixels
46
46
 
47
47
  # @!method color_at(position)
48
48
  # @param [Vector] position of pixel from which to get color
49
49
  # @return [Color] color of pixel
50
50
 
51
- # @!attribute [r] transformation
52
- # @return [Array] transformation matrix
53
-
54
51
  # @!method translate(displacement)
55
- # @param [Vector] displacement in 2D
52
+ # @param [Vector] displacement
53
+ # @return [nil]
54
+ # @note `Web::Display#translate` is currently 2D (only X and Y apply).
55
+ # Move the transformation by a vector displacement.
56
+
57
+ # @!method translate_x(displacement)
58
+ # @param [Numeric] displacement
59
+ # @return [nil]
60
+ # Move the transformation by a displacement on the X axis.
61
+
62
+ # @!method translate_y(displacement)
63
+ # @param [Numeric] displacement
64
+ # @return [nil]
65
+ # Move the transformation by a displacement on the Y axis.
66
+
67
+ # @!method translate_z(displacement)
68
+ # @param [Numeric] displacement
56
69
  # @return [nil]
57
- # @todo Make this work in 3D.
58
- # Move the transformation by a 2D displacement.
70
+ # @note No-op in `Web::Display`, which is currently 2D.
71
+ # Move the transformation by a displacement on the Z axis.
59
72
 
60
73
  # @!method scale(multiplier)
61
- # @param [Vector] multiplier in 2D
74
+ # @param [Vector] multiplier
62
75
  # @return [nil]
63
- # @todo Make this work in 3D.
64
- # Scale the transformation by a 2D multiplier.
76
+ # @note `Web::Display#scale` is currently 2D (only X and Y apply).
77
+ # Scale the transformation by a vector multiplier.
78
+
79
+ # @!method scale_x(multiplier)
80
+ # @param [Numeric] multiplier
81
+ # @return [nil]
82
+ # Scale the transformation by a multiplier on the X axis.
83
+
84
+ # @!method scale_y(multiplier)
85
+ # @param [Numeric] multiplier
86
+ # @return [nil]
87
+ # Scale the transformation by a multiplier on the Y axis.
88
+
89
+ # @!method scale_z(multiplier)
90
+ # @param [Numeric] multiplier
91
+ # @return [nil]
92
+ # @note No-op in `Web::Display`, which is currently 2D.
93
+ # Scale the transformation by a multiplier on the Z axis.
65
94
 
66
95
  # @!method rotate(radians)
67
- # @param [Numeric] radians in 2D
96
+ # @param [Vector] radians
97
+ # @return [nil]
98
+ # @note `Web::Display#rotate` is currently 2D (only Z applies).
99
+ # Rotate the transformation by vector radians.
100
+
101
+ # @!method rotate_x(radians)
102
+ # @param [Numeric] radians
103
+ # @return [nil]
104
+ # @note No-op in `Web::Display`, which is currently 2D.
105
+ # Rotate the transformation by radians on the X axis.
106
+
107
+ # @!method rotate_y(radians)
108
+ # @param [Numeric] radians
68
109
  # @return [nil]
69
- # @todo Make this work in 3D.
70
- # Rotate the transformation by radians.
110
+ # @note No-op in `Web::Display`, which is currently 2D.
111
+ # Rotate the transformation by radians on the Y axis.
112
+
113
+ # @!method rotate_z(radians)
114
+ # @param [Numeric] radians
115
+ # @return [nil]
116
+ # Rotate the transformation by radians on the Z axis.
71
117
 
72
118
  # @!method push
73
119
  # @return [nil]
74
- # Push transformation to the transformation stack.
120
+ # Push current transformation to the transformation stack.
75
121
 
76
122
  # @!method pop
77
123
  # @return [nil]
78
- # Pop a transformation off the transformation stack.
124
+ # Pop a transformation off the transformation stack and use it.
79
125
 
80
126
  # @!method stroke_line(start_pos, end_pos)
81
- # @param [Vector] start position in 2D
82
- # @param [Vector] end position in 2D
127
+ # @param [Vector] start position
128
+ # @param [Vector] end position
83
129
  # @return [nil]
130
+ # @note `Web::Display#stroke_line` is currently 2D (only X and Y apply).
84
131
  # Stroke a line between two positions.
85
132
 
133
+ # @!method stroke_curve(start_pos, end_pos, control)
134
+ # @param [Vector] start position
135
+ # @param [Vector] end position
136
+ # @param [Vector] control point position
137
+ # @return [nil]
138
+ # @note `Web::Display#stroke_curve` is currently 2D (only X and Y apply).
139
+ # Stroke curve with a control point between two positions.
140
+
141
+ # @!method stroke_curve2(start_pos, end_pos, control1, control2)
142
+ # @param [Vector] start position
143
+ # @param [Vector] end position
144
+ # @param [Vector] first control point position
145
+ # @param [Vector] second control point position
146
+ # @return [nil]
147
+ # @note `Web::Display#stroke_curve2` is currently 2D (only X and Y apply).
148
+ # Stroke curve with 2 control points between two positions.
149
+
86
150
  # @!method stroke_rectangle(position, size)
87
- # @param [Vector] position in 2D
88
- # @param [Vector] size in 2D
151
+ # @param [Vector] position
152
+ # @param [Vector] size
89
153
  # @return [nil]
154
+ # @note `Web::Display#stroke_rectangle` is currently 2D (only X and Y apply).
90
155
  # Stroke a rectangle at a position and size.
91
156
 
92
157
  # @!method fill_rectangle(position, size)
93
- # @param [Vector] position in 2D
94
- # @param [Vector] size in 2D
158
+ # @param [Vector] position
159
+ # @param [Vector] size
95
160
  # @return [nil]
161
+ # @note `Web::Display#fill_rectangle` is currently 2D (only X and Y apply).
96
162
  # Fill a rectangle at a position and size.
97
163
 
98
164
  # @!method stroke_ellipse(center, radius)
99
- # @param [Vector] center position in 2D
100
- # @param [Vector] radius in 2D
165
+ # @param [Vector] center position
166
+ # @param [Vector] radius in pixels in 2D
101
167
  # @return [nil]
168
+ # @note `Web::Display#stroke_ellipse` is currently 2D (only X and Y apply).
102
169
  # Stroke an ellipse at a center position and 2D radius.
103
170
 
104
171
  # @!method fill_ellipse(center, radius)
105
- # @param [Vector] center position in 2D
106
- # @param [Vector] radius in 2D
172
+ # @param [Vector] center position
173
+ # @param [Vector] radius in pixels in 2D
107
174
  # @return [nil]
175
+ # @note `Web::Display#fill_ellipse` is currently 2D (only X and Y apply).
108
176
  # Fill an ellipse at a center position and 2D radius.
109
177
 
110
178
  # @!method clear
@@ -127,20 +195,20 @@ class Display
127
195
  # @!method line_to(position)
128
196
  # @param [Vector] position
129
197
  # @return [nil]
130
- # Draw line to position as part of shape.
198
+ # Trace line to position as part of shape.
131
199
 
132
200
  # @!method curve_to(position, control)
133
201
  # @param [Vector] position
134
202
  # @param [Vector] control point position
135
203
  # @return [nil]
136
- # Draw curve with a control point to position as part of shape.
204
+ # Trace curve with a control point to position as part of shape.
137
205
 
138
206
  # @!method curve2_to(position, control1, control2)
139
207
  # @param [Vector] position
140
208
  # @param [Vector] first control point position
141
209
  # @param [Vector] second control point position
142
210
  # @return [nil]
143
- # Draw curve with 2 control points to position as part of shape.
211
+ # Trace curve with 2 control points to position as part of shape.
144
212
 
145
213
  # @!method stroke_shape
146
214
  # @return [nil]
@@ -155,13 +223,13 @@ class Display
155
223
  # @param [Vector] position
156
224
  # @return [nil]
157
225
  # @example Draw a duck within a game
158
- # display.image Image['images/duck.png'], V[80, 80]
226
+ # display.image(Image['images/duck.png'], V[80, 80])
159
227
  # Draw an image at a position.
160
228
 
161
229
  # @!method image_cropped(image, position, crop_position, crop_size)
162
230
  # @param [Image] image to draw
163
231
  # @param [Vector] position
164
- # @param [Vector] start point of crop
232
+ # @param [Vector] start position of crop
165
233
  # @param [Vector] size of crop
166
234
  # @return [nil]
167
235
  # Draw a cropped image at a position.
@@ -0,0 +1,10 @@
1
+ module Yeah
2
+
3
+ # A `Font` is an asset that is used to set `Display#text_font` in order to be
4
+ # drawn using `Display#fill_text` and `Display#stroke_text`.
5
+ # @abstract Provided by a `Platform`.
6
+ # @see Yeah::Display#text_font
7
+ class Font < Asset
8
+ end
9
+
10
+ end
@@ -1,4 +1,4 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
- gem 'yeah', '~> 0.3.5'
4
- gem 'opal', github: 'opal/opal', ref: '7e843b0'
3
+ gem 'yeah', '~> 0.4.2'
4
+ gem 'opal', github: 'opal/opal', ref: '78b4fb9'
@@ -0,0 +1,4 @@
1
+ Yeah.configure do |c|
2
+ c.title = "Game"
3
+ c.factorial_scaling = false
4
+ end
@@ -1,6 +1,5 @@
1
1
  module Yeah
2
2
  DEFAULT_DISPLAY_SIZE = V[1280, 720]
3
- DEFAULT_DISPLAY_FONT_FAMILY = 'DejaVu Serif'
4
- DEFAULT_DISPLAY_FONT_SIZE = 36
3
+ DEFAULT_DISPLAY_TEXT_SIZE = 36
5
4
  DEFAULT_TICKER_RATE = 60
6
5
  end
@@ -9,21 +9,6 @@ module Yeah
9
9
  # @abstract Subclass this to make a game.
10
10
  class Game
11
11
  class << self
12
- # @param [Hash] configuration used for new game instances
13
- # @option configuration [Hash] :ticker options
14
- # @option configuration [Hash] :display options
15
- # @option configuration [Hash] :keyboard options
16
- # @option configuration [Hash] :mouse options
17
- # @return [Hash] configuration for new game instances
18
- def config
19
- @config ||= {
20
- ticker: {},
21
- display: {},
22
- keyboard: {},
23
- mouse: {}
24
- }
25
- end
26
-
27
12
  # @return [Game] default subclass (i.e. project game)
28
13
  def default
29
14
  subclasses.last
@@ -84,18 +69,14 @@ class Game
84
69
 
85
70
  private
86
71
 
87
- def config
88
- self.class.config
89
- end
90
-
91
72
  def defaults
92
- ticker = Ticker.new(config[:ticker])
73
+ ticker = Ticker.new
93
74
 
94
75
  {
95
76
  ticker: ticker,
96
- display: Display.new(config[:display]),
97
- keyboard: Keyboard.new({ ticker: ticker }.merge(config[:keyboard])),
98
- mouse: Mouse.new({ ticker: ticker }.merge(config[:mouse]))
77
+ display: Display.new,
78
+ keyboard: Keyboard.new(ticker: ticker),
79
+ mouse: Mouse.new(ticker: ticker)
99
80
  }
100
81
  end
101
82
  end
@@ -74,6 +74,12 @@ class Vector
74
74
 
75
75
  alias :unit :normalize
76
76
 
77
+ # @param [Vector] vector to equate
78
+ # @return [Boolean] whether self equals vector
79
+ def ==(other)
80
+ @components == other.components
81
+ end
82
+
77
83
  # @param [Vector] vector to add
78
84
  # @return [Vector] vector sum
79
85
  def +(vector)
@@ -106,11 +112,56 @@ class Vector
106
112
  @components[2] / numeric)
107
113
  end
108
114
 
109
- # @return [Vector] identical vector
110
- def +@
111
- self.class.new(*@components)
115
+ alias :add :+
116
+
117
+ alias :subtract :-
118
+
119
+ alias :multiply :*
120
+
121
+ alias :divide :/
122
+
123
+ # @param (see #add)
124
+ # @return [Vector] self after adding vector
125
+ def add!(vector)
126
+ @components[0] += vector.components[0]
127
+ @components[1] += vector.components[1]
128
+ @components[2] += vector.components[2]
129
+
130
+ self
112
131
  end
113
132
 
133
+ # @param (see #subtract)
134
+ # @return [Vector] self after subtracting vector
135
+ def subtract!(vector)
136
+ @components[0] -= vector.components[0]
137
+ @components[1] -= vector.components[1]
138
+ @components[2] -= vector.components[2]
139
+
140
+ self
141
+ end
142
+
143
+ # @param (see #multiply)
144
+ # @return [Vector] self after multiplying by numeric
145
+ def multiply!(numeric)
146
+ @components[0] *= numeric
147
+ @components[1] *= numeric
148
+ @components[2] *= numeric
149
+
150
+ self
151
+ end
152
+
153
+ # @param (see #divide)
154
+ # @return [Vector] self after dividing by numeric
155
+ def divide!(numeric)
156
+ @components[0] /= numeric
157
+ @components[1] /= numeric
158
+ @components[2] /= numeric
159
+
160
+ self
161
+ end
162
+
163
+ alias :+@ :dup
164
+
114
165
  # @return [Vector] negative vector
115
166
  def -@
116
167
  self.class.new(-@components[0],
@@ -138,7 +189,8 @@ class Vector
138
189
  # @return [Vector] position moved along an angle for a distance in 2D
139
190
  def along(angle, distance)
140
191
  self.class.new(@components[0] + Math.cos(angle) * distance,
141
- @components[1] + Math.sin(angle) * distance)
192
+ @components[1] + Math.sin(angle) * distance,
193
+ @components[2])
142
194
  end
143
195
 
144
196
  # @param (see #along)
@@ -152,18 +204,15 @@ class Vector
152
204
 
153
205
  # @param [Vector] position to move to
154
206
  # @param [Vector] distance to move
155
- # @return [Vector] position moved toward other position for a distance in 2D
156
- # @todo Make work in 3D.
207
+ # @return [Vector] position moved toward other position for a distance
157
208
  def toward(position, distance)
158
- along angle_to(position), amount
209
+ self + (position - self).unit * distance
159
210
  end
160
211
 
161
212
  # @param (see #toward)
162
- # @return [Vector] self after moving toward other position for a distance in
163
- # 2D
164
- # @todo Make work in 3D.
165
- def toward!(position, amount)
166
- along! angle_to(position), amount
213
+ # @return [Vector] self after moving toward other position for a distance
214
+ def toward!(position, distance)
215
+ self.add! (position - self).unit * distance
167
216
  end
168
217
  end
169
218
  end
@@ -1,3 +1,3 @@
1
1
  module Yeah
2
- VERSION = '0.3.5'
2
+ VERSION = '0.4.2'
3
3
  end
@@ -18,14 +18,14 @@ class Builder
18
18
  setup_compiler
19
19
  compile
20
20
 
21
- puts "Built game package to `build/web/`."
21
+ puts "Built game package to `builds/web`."
22
22
  end
23
23
 
24
24
  private
25
25
 
26
26
  def make_build_dirs
27
27
  # Make build directories.
28
- FileUtils.mkpath 'build/web/assets/yeah/web'
28
+ FileUtils.mkpath 'builds/web/assets/yeah/web'
29
29
  end
30
30
 
31
31
  def setup_compiler
@@ -46,7 +46,7 @@ class Builder
46
46
  def compile
47
47
  runner_path = Pathname.new(__FILE__).join('..', 'runner.html.erb')
48
48
  html = ERB.new(File.read(runner_path)).result(binding)
49
- File.write('build/web/runner.html', html)
49
+ File.write('builds/web/runner.html', html)
50
50
  end
51
51
 
52
52
  def asset_include_tags
@@ -58,6 +58,10 @@ class Builder
58
58
  case path
59
59
  when /\.(ogg|wav|mp3)$/
60
60
  "<audio src=\"./#{path}\"></audio>"
61
+ when /\.(otf|ttf|woff)$/
62
+ "<style>" +
63
+ "@font-face { font-family: \"#{path[7..-1]}\"; src: url(#{path}) }" +
64
+ "</style>"
61
65
  else
62
66
  "<img src=\"./#{path}\" />"
63
67
  end
@@ -81,7 +85,7 @@ class Builder
81
85
  end
82
86
 
83
87
  def build_path
84
- @build_path ||= Pathname.new("build/web")
88
+ @build_path ||= Pathname.new("builds/web")
85
89
  end
86
90
 
87
91
  def gem_path
@@ -1,49 +1,62 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>Game</title>
4
+ <title>Game</title>
5
5
 
6
6
  <style>
7
+ html, body {
8
+ overflow: hidden;
9
+ height: 100%;
10
+ margin: 0;
11
+ }
12
+
7
13
  body {
8
14
  background: black;
9
- margin: 0;
10
15
  }
11
16
 
12
17
  .center-content {
13
- /* Internet Explorer 10 */
14
18
  display: -ms-flexbox;
15
19
  -ms-flex-pack: center;
16
20
  -ms-flex-align: center;
17
- /* Firefox */
18
21
  display: -moz-box;
19
22
  -moz-box-pack: center;
20
23
  -moz-box-align: center;
21
- /* Safari, Opera, and Chrome */
22
24
  display: -webkit-box;
23
25
  -webkit-box-pack: center;
24
26
  -webkit-box-align: center;
25
- /* W3C */
26
27
  display: box;
27
28
  box-pack: center;
28
29
  box-align: center;
29
30
  }
30
31
 
31
- html, body{
32
- width: 100%;
33
- height: 100%;
34
- }
35
-
36
- canvas {
37
- max-width: 100%;
38
- max-height: 100%;
39
- }
40
-
41
32
  .hidden {
42
33
  display: none;
43
34
  }
44
35
  </style>
36
+
37
+ <script>
38
+ function scaleDisplay() {
39
+ var canvas = document.getElementsByTagName('canvas')[0],
40
+
41
+ width_scale = window.innerWidth / canvas.width,
42
+ height_scale = window.innerHeight / canvas.height,
43
+
44
+ scale = Math.min(width_scale, height_scale);
45
+
46
+ if (FACTORIAL_SCALING && scale >= 1) {
47
+ scale = Math.floor(scale);
48
+ }
49
+
50
+ var width = canvas.width * scale,
51
+ height = canvas.height * scale,
52
+
53
+ sizeStyle = "width:"+width+"px; height:"+height+"px";
54
+
55
+ canvas.setAttribute('style', sizeStyle);
56
+ }
57
+ </script>
45
58
  </head>
46
- <body class="center-content">
59
+ <body class="center-content" onresize="scaleDisplay()">
47
60
  <canvas></canvas>
48
61
 
49
62
  <div class="hidden">
@@ -54,8 +67,11 @@
54
67
  <%= script_include_tag 'yeah/web' %>
55
68
  <%= script_include_tag 'yeah/web/setup' %>
56
69
 
70
+ <%= script_include_tag 'config' %>
57
71
  <%= script_include_tag 'game' %>
58
72
 
59
73
  <%= script_include_tag 'yeah/web/start' %>
74
+
75
+ <script>scaleDisplay()</script>
60
76
  </body>
61
77
  </html>
@@ -69,6 +69,10 @@ class Server
69
69
  case path
70
70
  when /\.(ogg|wav|mp3)$/
71
71
  "<audio src=\"/#{path}\"></audio>"
72
+ when /\.(otf|ttf|woff)$/
73
+ "<style>" +
74
+ "@font-face { font-family: \"#{path[7..-1]}\"; src: url(#{path}) }" +
75
+ "</style>"
72
76
  else
73
77
  "<img src=\"/#{path}\" />"
74
78
  end
@@ -1,5 +1,6 @@
1
1
  module Yeah
2
2
  include Web
3
+ extend Web::ClassMethods
3
4
  end
4
5
 
5
6
  include Yeah
@@ -1,7 +1,11 @@
1
+ require 'math'
2
+
1
3
  require 'yeah/web/constants'
4
+ require 'yeah/web/class_methods'
2
5
  require 'yeah/web/asset'
3
6
  require 'yeah/web/image'
4
7
  require 'yeah/web/sound'
8
+ require 'yeah/web/font'
5
9
  require 'yeah/web/display'
6
10
  require 'yeah/web/keyboard'
7
11
  require 'yeah/web/mouse'
@@ -0,0 +1,14 @@
1
+ module Yeah
2
+ module Web
3
+ module ClassMethods
4
+ def configure(&block)
5
+ config = Struct.new(:title, :factorial_scaling).new
6
+
7
+ yield config
8
+
9
+ `window.document.title = #{config.title}` unless config.title.nil?
10
+ `FACTORIAL_SCALING = #{config.factorial_scaling}`
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  module Yeah
2
2
  module Web
3
3
  class Display
4
- attr_reader :font_family, :font_size
4
+ attr_reader :text_font, :text_size
5
5
 
6
6
  def initialize(options = {})
7
7
  canvas_selector = options.fetch(:canvas_selector, DEFAULT_CANVAS_SELECTOR)
@@ -9,8 +9,8 @@ class Display
9
9
  @canvas = `document.querySelectorAll(#{canvas_selector})[0]`
10
10
  @context = `#@canvas.getContext('2d')`
11
11
  self.size = options.fetch(:size, DEFAULT_DISPLAY_SIZE)
12
- self.font_family = DEFAULT_DISPLAY_FONT_FAMILY
13
- self.font_size = DEFAULT_DISPLAY_FONT_SIZE
12
+ self.text_font = Font['']
13
+ self.text_size = DEFAULT_DISPLAY_TEXT_SIZE
14
14
  @transform = [1, 0, 0, 1, 0, 0]
15
15
  @transforms = []
16
16
  end
@@ -27,14 +27,14 @@ class Display
27
27
  `#@canvas.width`
28
28
  end
29
29
  def width=(value)
30
- `#@canvas.width = #{value.x}`
30
+ `#@canvas.width = #{value}`
31
31
  end
32
32
 
33
33
  def height
34
34
  `#@canvas.height`
35
35
  end
36
36
  def height=(value)
37
- `#@canvas.height = #{value.x}`
37
+ `#@canvas.height = #{value}`
38
38
  end
39
39
 
40
40
  def fill_color
@@ -58,17 +58,17 @@ class Display
58
58
  `#@context.lineWidth = #{numeric}`
59
59
  end
60
60
 
61
- def font_family=(type)
62
- @font_family= type
61
+ def text_font=(font)
62
+ @text_font = font
63
63
 
64
- font = "#{@font_size}px #{@font_family}"
64
+ font = "#{@text_size}px \"#{@text_font.path}\""
65
65
  `#@context.font = #{font}`
66
66
  end
67
67
 
68
- def font_size=(size)
69
- @font_size = size
68
+ def text_size=(size)
69
+ @text_size = size
70
70
 
71
- font = "#{@font_size}px #{@font_family}"
71
+ font = "#{@text_size}px \"#{@text_font.path}\""
72
72
  `#@context.font = #{font}`
73
73
  end
74
74
 
@@ -77,10 +77,6 @@ class Display
77
77
  C[`data[0]`, `data[1]`, `data[2]`]
78
78
  end
79
79
 
80
- def transformation
81
- @transform + [0, 0, 1] # appendage to fulfill signature
82
- end
83
-
84
80
  def translate(displacement)
85
81
  @transform[4] += `#{@transform[0]} * #{displacement.x} +
86
82
  #{@transform[2]} * #{displacement.y}`
@@ -93,6 +89,29 @@ class Display
93
89
  #{@transform[4]}, #{@transform[5]}); }
94
90
  end
95
91
 
92
+ def translate_x(displacement)
93
+ @transform[4] += `#{@transform[0]} * #{displacement} + #{@transform[2]}`
94
+ @transform[5] += `#{@transform[1]} * #{displacement} + #{@transform[3]}`
95
+
96
+ %x{
97
+ #@context.setTransform(#{@transform[0]}, #{@transform[1]},
98
+ #{@transform[2]}, #{@transform[3]},
99
+ #{@transform[4]}, #{@transform[5]}); }
100
+ end
101
+
102
+ def translate_y(displacement)
103
+ @transform[4] += `#{@transform[0]} + #{@transform[2]} * #{displacement}`
104
+ @transform[5] += `#{@transform[1]} + #{@transform[3]} * #{displacement}`
105
+
106
+ %x{
107
+ #@context.setTransform(#{@transform[0]}, #{@transform[1]},
108
+ #{@transform[2]}, #{@transform[3]},
109
+ #{@transform[4]}, #{@transform[5]}); }
110
+ end
111
+
112
+ def translate_z(displacement)
113
+ end
114
+
96
115
  def scale(multiplier)
97
116
  %x{
98
117
  #{@transform} = [#{@transform[0]} * #{multiplier.x},
@@ -106,7 +125,44 @@ class Display
106
125
  #{@transform[4]}, #{@transform[5]}); }
107
126
  end
108
127
 
128
+ def scale_x(multiplier)
129
+ %x{
130
+ #{@transform} = [#{@transform[0]} * #{multiplier},
131
+ #{@transform[1]} * #{multiplier},
132
+ #{@transform[2]}, #{@transform[3]},
133
+ #{@transform[4]}, #{@transform[5]}];
134
+
135
+ #@context.setTransform(#{@transform[0]}, #{@transform[1]},
136
+ #{@transform[2]}, #{@transform[3]},
137
+ #{@transform[4]}, #{@transform[5]}); }
138
+ end
139
+
140
+ def scale_y(multiplier)
141
+ %x{
142
+ #{@transform} = [#{@transform[0]}, #{@transform[1]},
143
+ #{@transform[2]} * #{multiplier},
144
+ #{@transform[3]} * #{multiplier},
145
+ #{@transform[4]}, #{@transform[5]}];
146
+
147
+ #@context.setTransform(#{@transform[0]}, #{@transform[1]},
148
+ #{@transform[2]}, #{@transform[3]},
149
+ #{@transform[4]}, #{@transform[5]}); }
150
+ end
151
+
152
+ def scale_z(multiplier)
153
+ end
154
+
109
155
  def rotate(radians)
156
+ rotate_z(radians.z)
157
+ end
158
+
159
+ def rotate_x(radians)
160
+ end
161
+
162
+ def rotate_y(radians)
163
+ end
164
+
165
+ def rotate_z(radians)
110
166
  %x{
111
167
  var cos = Math.cos(#{radians}),
112
168
  sin = Math.sin(#{radians}),
@@ -145,6 +201,29 @@ class Display
145
201
  }
146
202
  end
147
203
 
204
+ def stroke_curve(start_pos, end_pos, control)
205
+ %x{
206
+ #@context.beginPath();
207
+ #@context.moveTo(#{start_pos.x}, #{start_pos.y});
208
+ #@context.quadraticCurveTo(#{control.x}, #{control.y},
209
+ #{end_pos.x}, #{end_pos.y});
210
+ #@context.closePath();
211
+ #@context.stroke();
212
+ }
213
+ end
214
+
215
+ def stroke_curve2(start_pos, end_pos, control1, control2)
216
+ %x{
217
+ #@context.beginPath();
218
+ #@context.moveTo(#{start_pos.x}, #{start_pos.y});
219
+ #@context.bezierCurveTo(#{control1.x}, #{control1.y},
220
+ #{control2.x}, #{control2.y},
221
+ #{end_pos.x}, #{end_pos.y});
222
+ #@context.closePath();
223
+ #@context.stroke();
224
+ }
225
+ end
226
+
148
227
  def stroke_rectangle(position, size)
149
228
  `#@context.strokeRect(#{position.x}, #{position.y}, #{size.x}, #{size.y})`
150
229
  end
@@ -0,0 +1,6 @@
1
+ module Yeah
2
+ module Web
3
+ class Font < Asset
4
+ end
5
+ end
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Ostrega
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-24 00:00:00.000000000 Z
11
+ date: 2014-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.3
47
+ version: 0.0.4
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.3
54
+ version: 0.0.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,13 +94,16 @@ files:
94
94
  - bin/yeah
95
95
  - lib/yeah.rb
96
96
  - lib/yeah/_platform/asset.rb
97
+ - lib/yeah/_platform/class_methods.rb
97
98
  - lib/yeah/_platform/display.rb
99
+ - lib/yeah/_platform/font.rb
98
100
  - lib/yeah/_platform/image.rb
99
101
  - lib/yeah/_platform/keyboard.rb
100
102
  - lib/yeah/_platform/mouse.rb
101
103
  - lib/yeah/_platform/sound.rb
102
104
  - lib/yeah/_platform/ticker.rb
103
105
  - lib/yeah/_template/Gemfile
106
+ - lib/yeah/_template/code/config.rb
104
107
  - lib/yeah/_template/code/game.rb
105
108
  - lib/yeah/_web.rb
106
109
  - lib/yeah/color.rb
@@ -116,8 +119,10 @@ files:
116
119
  - lib/yeah/web/start.rb
117
120
  - opal/yeah/web.rb
118
121
  - opal/yeah/web/asset.opal
122
+ - opal/yeah/web/class_methods.opal
119
123
  - opal/yeah/web/constants.opal
120
124
  - opal/yeah/web/display.opal
125
+ - opal/yeah/web/font.opal
121
126
  - opal/yeah/web/image.opal
122
127
  - opal/yeah/web/keyboard.opal
123
128
  - opal/yeah/web/mouse.opal