minigl 1.3.6 → 1.3.7
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/README.md +4 -2
- data/lib/minigl/global.rb +95 -12
- data/lib/minigl/map.rb +7 -10
- data/test/game_object_tests.rb +2 -2
- data/test/res_tests.rb +1 -1
- data/test/vector_tests.rb +56 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 334e4fb063765088eb6bc85cb3d67b68d28b1867
|
4
|
+
data.tar.gz: ce24cfb378fe102dd475e32ff636b542b9b9f841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9d84abe68d022276574fc48baeea9c41a1188b1bc9b359dd88716384f0b9760c8ee28f0f1e7f9a911cfc25983c2d07d234bbfee63b9079987b7e442ce2ef8b4
|
7
|
+
data.tar.gz: 30392926054fc4e1567647dcc72f14c2479ad48bbbd66b2285b5424258b0eed0b73983f4b956eb99a62b4ea61064cc41f1f2dbb15c5230878982ee9e6400b29e
|
data/README.md
CHANGED
@@ -32,6 +32,8 @@ this [working game example](https://github.com/victords/aventura-do-saber).
|
|
32
32
|
* An auxiliary, tutorial-like documentation is under construction
|
33
33
|
[here](https://github.com/victords/minigl/wiki).
|
34
34
|
|
35
|
-
**Version 1.3.
|
35
|
+
**Version 1.3.7**
|
36
36
|
|
37
|
-
*
|
37
|
+
* Minor adjustment and exposure of `prefix` attribute of `Res`.
|
38
|
+
* Removed debug message that was being output when starting the game.
|
39
|
+
* Improved the `Vector` class with operations, comparisons, etc.
|
data/lib/minigl/global.rb
CHANGED
@@ -2,9 +2,88 @@ require 'gosu'
|
|
2
2
|
|
3
3
|
# The main module of the library, used only as a namespace.
|
4
4
|
module AGL
|
5
|
-
#
|
6
|
-
|
7
|
-
|
5
|
+
# This class represents a point or vector in a bidimensional space.
|
6
|
+
class Vector
|
7
|
+
# The x coordinate of the vector
|
8
|
+
attr_accessor :x
|
9
|
+
|
10
|
+
# The y coordinate of the vector
|
11
|
+
attr_accessor :y
|
12
|
+
|
13
|
+
# Creates a new bidimensional vector.
|
14
|
+
#
|
15
|
+
# Parameters:
|
16
|
+
# [x] The x coordinate of the vector
|
17
|
+
# [y] The y coordinate of the vector
|
18
|
+
def initialize x, y
|
19
|
+
@x = x
|
20
|
+
@y = y
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns +true+ if both coordinates of this vector are equal to the
|
24
|
+
# corresponding coordinates of +other_vector+, with +precision+ decimal
|
25
|
+
# places of precision.
|
26
|
+
def == other_vector, precision = 6
|
27
|
+
@x.round(precision) == other_vector.x.round(precision) and
|
28
|
+
@y.round(precision) == other_vector.y.round(precision)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns +true+ if at least one coordinate of this vector is different from
|
32
|
+
# the corresponding coordinate of +other_vector+, with +precision+ decimal
|
33
|
+
# places of precision.
|
34
|
+
def != other_vector, precision = 6
|
35
|
+
@x.round(precision) != other_vector.x.round(precision) or
|
36
|
+
@y.round(precision) != other_vector.y.round(precision)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Sums this vector with +other_vector+, i.e., sums each coordinate of this
|
40
|
+
# vector with the corresponding coordinate of +other_vector+.
|
41
|
+
def + other_vector
|
42
|
+
Vector.new @x + other_vector.x, @y + other_vector.y
|
43
|
+
end
|
44
|
+
|
45
|
+
# Subtracts +other_vector+ from this vector, i.e., subtracts from each
|
46
|
+
# coordinate of this vector the corresponding coordinate of +other_vector+.
|
47
|
+
def - other_vector
|
48
|
+
Vector.new @x - other_vector.x, @y - other_vector.y
|
49
|
+
end
|
50
|
+
|
51
|
+
# Multiplies this vector by a scalar, i.e., each coordinate is multiplied by
|
52
|
+
# the given number.
|
53
|
+
def * scalar
|
54
|
+
Vector.new @x * scalar, @y * scalar
|
55
|
+
end
|
56
|
+
|
57
|
+
# Divides this vector by a scalar, i.e., each coordinate is divided by the
|
58
|
+
# given number.
|
59
|
+
def / scalar
|
60
|
+
Vector.new @x / scalar.to_f, @y / scalar.to_f
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns the euclidean distance between this vector and +other_vector+.
|
64
|
+
def distance other_vector
|
65
|
+
dx = @x - other_vector.x
|
66
|
+
dy = @y - other_vector.y
|
67
|
+
Math.sqrt(dx ** 2 + dy ** 2)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns a vector corresponding to the rotation of this vector around the
|
71
|
+
# origin (0, 0) by +radians+ radians.
|
72
|
+
def rotate radians
|
73
|
+
sin = Math.sin radians
|
74
|
+
cos = Math.cos radians
|
75
|
+
Vector.new cos * @x - sin * @y, sin * @x + cos * @y
|
76
|
+
end
|
77
|
+
|
78
|
+
# Rotates this vector by +radians+ radians around the origin (0, 0).
|
79
|
+
def rotate! radians
|
80
|
+
sin = Math.sin radians
|
81
|
+
cos = Math.cos radians
|
82
|
+
prev_x = @x
|
83
|
+
@x = cos * @x - sin * @y
|
84
|
+
@y = sin * prev_x + cos * @y
|
85
|
+
end
|
86
|
+
end
|
8
87
|
|
9
88
|
# This class represents a rectangle by its x and y coordinates and width and
|
10
89
|
# height.
|
@@ -328,12 +407,16 @@ module AGL
|
|
328
407
|
@@global_songs = Hash.new
|
329
408
|
@@fonts = Hash.new
|
330
409
|
@@global_fonts = Hash.new
|
331
|
-
@@prefix = File.expand_path(File.dirname($0)) + '/'
|
332
|
-
puts @@prefix
|
410
|
+
@@prefix = File.expand_path(File.dirname($0)) + '/data/'
|
333
411
|
end
|
334
412
|
|
413
|
+
# Get the current prefix for searching data files. This is the directory
|
414
|
+
# under which 'img', 'sound', 'song', etc. folders are located.
|
415
|
+
def self.prefix; @@prefix; end
|
416
|
+
|
335
417
|
# Set a custom prefix for loading resources. By default, the prefix is the
|
336
|
-
# directory of the game script.
|
418
|
+
# directory of the game script. The prefix is the directory under which
|
419
|
+
# 'img', 'sound', 'song', etc. folders are located.
|
337
420
|
def self.prefix= value
|
338
421
|
value += '/' if value[-1] != '/'
|
339
422
|
@@prefix = value
|
@@ -359,7 +442,7 @@ module AGL
|
|
359
442
|
def self.img id, global = false, tileable = false, ext = ".png"
|
360
443
|
if global; a = @@global_imgs; else; a = @@imgs; end
|
361
444
|
return a[id] if a[id]
|
362
|
-
s = @@prefix + "
|
445
|
+
s = @@prefix + "img/" + id.to_s.split('_').join('/') + ext
|
363
446
|
img = Gosu::Image.new Game.window, s, tileable
|
364
447
|
a[id] = img
|
365
448
|
end
|
@@ -382,7 +465,7 @@ module AGL
|
|
382
465
|
def self.imgs id, sprite_cols, sprite_rows, global = false, ext = ".png"
|
383
466
|
if global; a = @@global_imgs; else; a = @@imgs; end
|
384
467
|
return a[id] if a[id]
|
385
|
-
s = @@prefix + "
|
468
|
+
s = @@prefix + "img/" + id.to_s.split('_').join('/') + ext
|
386
469
|
imgs = Gosu::Image.load_tiles Game.window, s, -sprite_cols, -sprite_rows, false
|
387
470
|
a[id] = imgs
|
388
471
|
end
|
@@ -406,7 +489,7 @@ module AGL
|
|
406
489
|
def self.tileset id, tile_width = 32, tile_height = 32, global = false, ext = ".png"
|
407
490
|
if global; a = @@global_tilesets; else; a = @@tilesets; end
|
408
491
|
return a[id] if a[id]
|
409
|
-
s = @@prefix + "
|
492
|
+
s = @@prefix + "tileset/" + id.to_s.split('_').join('/') + ext
|
410
493
|
tileset = Gosu::Image.load_tiles Game.window, s, tile_width, tile_height, true
|
411
494
|
a[id] = tileset
|
412
495
|
end
|
@@ -426,7 +509,7 @@ module AGL
|
|
426
509
|
def self.sound id, global = false, ext = ".wav"
|
427
510
|
if global; a = @@global_sounds; else; a = @@sounds; end
|
428
511
|
return a[id] if a[id]
|
429
|
-
s = @@prefix + "
|
512
|
+
s = @@prefix + "sound/" + id.to_s.split('_').join('/') + ext
|
430
513
|
sound = Gosu::Sample.new Game.window, s
|
431
514
|
a[id] = sound
|
432
515
|
end
|
@@ -446,7 +529,7 @@ module AGL
|
|
446
529
|
def self.song id, global = false, ext = ".ogg"
|
447
530
|
if global; a = @@global_songs; else; a = @@songs; end
|
448
531
|
return a[id] if a[id]
|
449
|
-
s = @@prefix + "
|
532
|
+
s = @@prefix + "song/" + id.to_s.split('_').join('/') + ext
|
450
533
|
song = Gosu::Song.new Game.window, s
|
451
534
|
a[id] = song
|
452
535
|
end
|
@@ -470,7 +553,7 @@ module AGL
|
|
470
553
|
if global; a = @@global_fonts; else; a = @@fonts; end
|
471
554
|
id_size = "#{id}_#{size}"
|
472
555
|
return a[id_size] if a[id_size]
|
473
|
-
s = @@prefix + "
|
556
|
+
s = @@prefix + "font/" + id.to_s.split('_').join('/') + ext
|
474
557
|
font = Gosu::Font.new Game.window, s, size
|
475
558
|
a[id_size] = font
|
476
559
|
end
|
data/lib/minigl/map.rb
CHANGED
@@ -5,6 +5,11 @@ module AGL
|
|
5
5
|
# a grid of equally sized tiles. It also provides viewport control, through
|
6
6
|
# its camera property and methods.
|
7
7
|
class Map
|
8
|
+
# :nodoc:
|
9
|
+
Sqrt2Div2 = Math.sqrt(2) / 2
|
10
|
+
# :nodoc:
|
11
|
+
MinusPiDiv4 = -Math::PI / 4
|
12
|
+
|
8
13
|
# A Vector where x is the tile width and y is the tile height.
|
9
14
|
attr_reader :tile_size
|
10
15
|
|
@@ -145,8 +150,6 @@ module AGL
|
|
145
150
|
end
|
146
151
|
|
147
152
|
private
|
148
|
-
Sqrt2Div2 = Math.sqrt(2) / 2
|
149
|
-
MinusPiDiv4 = -Math::PI / 4
|
150
153
|
|
151
154
|
def set_bounds
|
152
155
|
if @isometric
|
@@ -242,20 +245,14 @@ module AGL
|
|
242
245
|
center.y *= @tile_ratio
|
243
246
|
|
244
247
|
# Rotaciona o vetor posição -45°
|
245
|
-
position
|
248
|
+
position.rotate! MinusPiDiv4
|
246
249
|
|
247
250
|
# Retorna a referência da posição para o canto da tela
|
248
|
-
position
|
251
|
+
position += center
|
249
252
|
|
250
253
|
# O mapa quadrado está centralizado no centro do losango, precisa retornar ao canto da tela
|
251
254
|
position.x -= @isometric_offset_x; position.y -= @isometric_offset_y
|
252
255
|
position
|
253
256
|
end
|
254
|
-
|
255
|
-
def rotate v, angle
|
256
|
-
sin = Math.sin angle
|
257
|
-
cos = Math.cos angle
|
258
|
-
Vector.new cos * v.x - sin * v.y, sin * v.x + cos * v.y
|
259
|
-
end
|
260
257
|
end
|
261
258
|
end
|
data/test/game_object_tests.rb
CHANGED
@@ -6,7 +6,7 @@ class SpriteTest < Test::Unit::TestCase
|
|
6
6
|
def setup
|
7
7
|
@window = Gosu::Window.new 800, 600, false
|
8
8
|
Game.initialize @window
|
9
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__))
|
9
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_sprite_position
|
@@ -33,7 +33,7 @@ class GameObjectTest < Test::Unit::TestCase
|
|
33
33
|
def setup
|
34
34
|
@window = Gosu::Window.new 800, 600, false
|
35
35
|
Game.initialize @window
|
36
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__))
|
36
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_game_object_attributes
|
data/test/res_tests.rb
CHANGED
@@ -6,7 +6,7 @@ class ResTest < Test::Unit::TestCase
|
|
6
6
|
def setup
|
7
7
|
@window = Gosu::Window.new 800, 600, false
|
8
8
|
Game.initialize @window
|
9
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__))
|
9
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_tileset
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include AGL
|
4
|
+
|
5
|
+
class VectorTest < Test::Unit::TestCase
|
6
|
+
def test_vector_comparison
|
7
|
+
v1 = Vector.new 1, 2
|
8
|
+
v2 = v1.clone
|
9
|
+
assert v1 == v2
|
10
|
+
assert !(v1 != v2)
|
11
|
+
|
12
|
+
v1 = Vector.new 1.37, 4.56
|
13
|
+
v2 = Vector.new 1.373, 4.562
|
14
|
+
assert v1.==(v2, 2)
|
15
|
+
assert v1.!=(v2, 3)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_vector_operations
|
19
|
+
v1 = Vector.new 1, 1
|
20
|
+
v2 = Vector.new 2, 3
|
21
|
+
|
22
|
+
v3 = v1 + v2
|
23
|
+
assert_equal 3, v3.x
|
24
|
+
assert_equal 4, v3.y
|
25
|
+
|
26
|
+
v3 = v1 - v2
|
27
|
+
assert_equal -1, v3.x
|
28
|
+
assert_equal -2, v3.y
|
29
|
+
|
30
|
+
v3 = v2 * 3
|
31
|
+
assert_equal 6, v3.x
|
32
|
+
assert_equal 9, v3.y
|
33
|
+
|
34
|
+
v3 = v2 / 2
|
35
|
+
assert_equal 1, v3.x
|
36
|
+
assert_equal 1.5, v3.y
|
37
|
+
|
38
|
+
v3 = Vector.new 0, Math.sqrt(2)
|
39
|
+
assert v1.rotate(Math::PI / 4) == v3
|
40
|
+
|
41
|
+
v1.rotate! Math::PI / 4
|
42
|
+
assert v1 == v3
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_vector_distance
|
46
|
+
v1 = Vector.new 1, 1
|
47
|
+
v2 = Vector.new 2, 3
|
48
|
+
d = v1.distance v2
|
49
|
+
assert_equal Math.sqrt(5), d
|
50
|
+
|
51
|
+
v1 = Vector.new 0, 3
|
52
|
+
v2 = Vector.new 4, 0
|
53
|
+
d = v1.distance v2
|
54
|
+
assert_equal 5, d
|
55
|
+
end
|
56
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minigl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor David Santos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gosu
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- test/map_tests.rb
|
60
60
|
- test/movement_tests.rb
|
61
61
|
- test/res_tests.rb
|
62
|
+
- test/vector_tests.rb
|
62
63
|
homepage: https://github.com/victords/minigl
|
63
64
|
licenses:
|
64
65
|
- MIT
|
@@ -84,6 +85,7 @@ signing_key:
|
|
84
85
|
specification_version: 4
|
85
86
|
summary: MiniGL
|
86
87
|
test_files:
|
88
|
+
- test/vector_tests.rb
|
87
89
|
- test/movement_tests.rb
|
88
90
|
- test/map_tests.rb
|
89
91
|
- test/game.rb
|