Module: MiniGL::Res
- Defined in:
- lib/minigl/global.rb
Overview
This class is responsible for resource management. It keeps references to all loaded resources until a call to clear is made. Resources can be loaded as global, so that their references won’t be removed even when clear is called.
It also provides an easier syntax for loading resources, assuming a particular folder structure. All resources must be inside subdirectories of a ‘data’ directory, so that you will only need to specify the type of resource being loaded and the file name (either as string or as symbol). There are default extensions for each type of resource, so the extension must be specified only if the file is in a format other than the default.
Class Attribute Summary collapse
-
.font_dir ⇒ Object
Gets the current path to font files (under
prefix). -
.img_dir ⇒ Object
Gets the current path to image files (under
prefix). -
.prefix ⇒ Object
Get the current prefix for searching data files.
-
.separator ⇒ Object
Gets or sets the character that is currently being used in the
idparameter of the loading methods as a folder separator. -
.song_dir ⇒ Object
Gets the current path to song files (under
prefix). -
.sound_dir ⇒ Object
Gets the current path to sound files (under
prefix). -
.tileset_dir ⇒ Object
Gets the current path to tileset files (under
prefix).
Class Method Summary collapse
-
.clear ⇒ Object
Releases the memory used by all non-global resources.
-
.font(id, size, global = true, ext = '.ttf') ⇒ Object
Returns a
Gosu::Fontobject. -
.img(id, global = false, tileable = false, ext = '.png') ⇒ Object
Returns a
Gosu::Imageobject. -
.imgs(id, sprite_cols, sprite_rows, global = false, ext = '.png') ⇒ Object
Returns an array of
Gosu::Imageobjects, using the image as a spritesheet. -
.initialize ⇒ Object
This is called by
GameWindow.initialize. -
.song(id, global = false, ext = '.ogg') ⇒ Object
Returns a
Gosu::Songobject. -
.sound(id, global = false, ext = '.wav') ⇒ Object
Returns a
Gosu::Sampleobject. -
.tileset(id, tile_width = 32, tile_height = 32, global = false, ext = '.png') ⇒ Object
Returns an array of
Gosu::Imageobjects, using the image as a tileset.
Class Attribute Details
.font_dir ⇒ Object
Gets the current path to font files (under prefix). Default is ‘font’.
467 468 469 |
# File 'lib/minigl/global.rb', line 467 def font_dir @font_dir end |
.img_dir ⇒ Object
Gets the current path to image files (under prefix). Default is ‘img’.
454 455 456 |
# File 'lib/minigl/global.rb', line 454 def img_dir @img_dir end |
.prefix ⇒ Object
Get the current prefix for searching data files. This is the directory under which ‘img’, ‘sound’, ‘song’, etc. folders are located.
451 452 453 |
# File 'lib/minigl/global.rb', line 451 def prefix @prefix end |
.separator ⇒ Object
Gets or sets the character that is currently being used in the id parameter of the loading methods as a folder separator. Default is ‘_’. Note that if you want to use symbols to specify paths, this separator should be a valid character in a Ruby symbol. On the other hand, if you want to use only slashes in Strings, you can specify a ‘weird’ character that won’t appear in any file name.
475 476 477 |
# File 'lib/minigl/global.rb', line 475 def separator @separator end |
.song_dir ⇒ Object
Gets the current path to song files (under prefix). Default is ‘song’.
464 465 466 |
# File 'lib/minigl/global.rb', line 464 def song_dir @song_dir end |
.sound_dir ⇒ Object
Gets the current path to sound files (under prefix). Default is ‘sound’.
461 462 463 |
# File 'lib/minigl/global.rb', line 461 def sound_dir @sound_dir end |
.tileset_dir ⇒ Object
Gets the current path to tileset files (under prefix). Default is ‘tileset’.
458 459 460 |
# File 'lib/minigl/global.rb', line 458 def tileset_dir @tileset_dir end |
Class Method Details
.clear ⇒ Object
Releases the memory used by all non-global resources.
676 677 678 679 680 681 682 |
# File 'lib/minigl/global.rb', line 676 def clear @imgs.clear @tilesets.clear @sounds.clear @songs.clear @fonts.clear end |
.font(id, size, global = true, ext = '.ttf') ⇒ Object
Returns a Gosu::Font object. Fonts are needed to draw text and used by MiniGL elements like buttons, text fields and TextHelper objects.
Parameters:
- id
-
A string or symbol representing the path to the song. It must be specified the same way as in
img, but the base directory isprefix/font_dir. - size
-
The size of the font, in pixels. This will correspond, approximately, to the height of the tallest character when drawn.
- global
-
Set to true if you want to keep the font in memory until the game execution is finished. If false, the font will be released when you call
clear. - ext
-
The extension of the file being loaded. Specify only if it is other than “.ttf”.
666 667 668 669 670 671 672 673 |
# File 'lib/minigl/global.rb', line 666 def font(id, size, global = true, ext = '.ttf') if global; a = @global_fonts; else; a = @fonts; end id_size = "#{id}_#{size}" return a[id_size] if a[id_size] s = @prefix + @font_dir + id.to_s.split(@separator).join('/') + ext font = Gosu::Font.new G.window, s, size a[id_size] = font end |
.img(id, global = false, tileable = false, ext = '.png') ⇒ Object
Returns a Gosu::Image object.
Parameters:
- id
-
A string or symbol representing the path to the image. If the file is inside
prefix/img_dir, only the file name is needed. If it’s inside a subdirectory ofprefix/img_dir, the id must be prefixed by each subdirectory name followed byseparator. Example: to load ‘data/img/sprite/1.png’, with the default values ofprefix,img_dirandseparator, provide:sprite_1or “sprite_1”. - global
-
Set to true if you want to keep the image in memory until the game execution is finished. If false, the image will be released when you call
clear. - tileable
-
Whether the image should be loaded in tileable mode, which is proper for images that will be used as a tile, i.e., that will be drawn repeated times, side by side, forming a continuous composition.
- ext
-
The extension of the file being loaded. Specify only if it is other than ‘.png’.
556 557 558 559 560 561 562 |
# File 'lib/minigl/global.rb', line 556 def img(id, global = false, tileable = false, ext = '.png') if global; a = @global_imgs; else; a = @imgs; end return a[id] if a[id] s = @prefix + @img_dir + id.to_s.split(@separator).join('/') + ext img = Gosu::Image.new G.window, s, tileable a[id] = img end |
.imgs(id, sprite_cols, sprite_rows, global = false, ext = '.png') ⇒ Object
Returns an array of Gosu::Image objects, using the image as a spritesheet. The image with index 0 will be the top left sprite, and the following indices raise first from left to right and then from top to bottom.
Parameters:
- id
-
A string or symbol representing the path to the image. See
imgfor details. - sprite_cols
-
Number of columns in the spritesheet.
- sprite_rows
-
Number of rows in the spritesheet.
- global
-
Set to true if you want to keep the image in memory until the game execution is finished. If false, the image will be released when you call
clear. - ext
-
The extension of the file being loaded. Specify only if it is other than “.png”.
579 580 581 582 583 584 585 |
# File 'lib/minigl/global.rb', line 579 def imgs(id, sprite_cols, sprite_rows, global = false, ext = '.png') if global; a = @global_imgs; else; a = @imgs; end return a[id] if a[id] s = @prefix + @img_dir + id.to_s.split(@separator).join('/') + ext imgs = Gosu::Image.load_tiles G.window, s, -sprite_cols, -sprite_rows, false a[id] = imgs end |
.initialize ⇒ Object
This is called by GameWindow.initialize. Don’t call it explicitly.
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 |
# File 'lib/minigl/global.rb', line 479 def initialize @imgs = {} @global_imgs = {} @tilesets = {} @global_tilesets = {} @sounds = {} @global_sounds = {} @songs = {} @global_songs = {} @fonts = {} @global_fonts = {} @prefix = File.(File.dirname($0)) + '/data/' @img_dir = 'img/' @tileset_dir = 'tileset/' @sound_dir = 'sound/' @song_dir = 'song/' @font_dir = 'font/' @separator = '_' end |
.song(id, global = false, ext = '.ogg') ⇒ Object
Returns a Gosu::Song object. This should be used for the background musics of your game.
Parameters:
- id
-
A string or symbol representing the path to the song. It must be specified the same way as in
img, but the base directory isprefix/song_dir. - global
-
Set to true if you want to keep the song in memory until the game execution is finished. If false, the song will be released when you call
clear. - ext
-
The extension of the file being loaded. Specify only if it is other than “.ogg”.
643 644 645 646 647 648 649 |
# File 'lib/minigl/global.rb', line 643 def song(id, global = false, ext = '.ogg') if global; a = @global_songs; else; a = @songs; end return a[id] if a[id] s = @prefix + @song_dir + id.to_s.split(@separator).join('/') + ext song = Gosu::Song.new G.window, s a[id] = song end |
.sound(id, global = false, ext = '.wav') ⇒ Object
Returns a Gosu::Sample object. This should be used for simple and short sound effects.
Parameters:
- id
-
A string or symbol representing the path to the sound. It must be specified the same way as in
img, but the base directory isprefix/sound_dir. - global
-
Set to true if you want to keep the sound in memory until the game execution is finished. If false, the sound will be released when you call
clear. - ext
-
The extension of the file being loaded. Specify only if it is other than “.wav”.
623 624 625 626 627 628 629 |
# File 'lib/minigl/global.rb', line 623 def sound(id, global = false, ext = '.wav') if global; a = @global_sounds; else; a = @sounds; end return a[id] if a[id] s = @prefix + @sound_dir + id.to_s.split(@separator).join('/') + ext sound = Gosu::Sample.new G.window, s a[id] = sound end |
.tileset(id, tile_width = 32, tile_height = 32, global = false, ext = '.png') ⇒ Object
Returns an array of Gosu::Image objects, using the image as a tileset. Works the same as imgs, except you must provide the tile size instead of the number of columns and rows, and that the images will be loaded as tileable.
Parameters:
- id
-
A string or symbol representing the path to the image. It must be specified the same way as in
img, but the base directory isprefix/tileset_dir. - tile_width
-
Width of each tile, in pixels.
- tile_height
-
Height of each tile, in pixels.
- global
-
Set to true if you want to keep the image in memory until the game execution is finished. If false, the image will be released when you call
clear. - ext
-
The extension of the file being loaded. Specify only if it is other than “.png”.
603 604 605 606 607 608 609 |
# File 'lib/minigl/global.rb', line 603 def tileset(id, tile_width = 32, tile_height = 32, global = false, ext = '.png') if global; a = @global_tilesets; else; a = @tilesets; end return a[id] if a[id] s = @prefix + @tileset_dir + id.to_s.split(@separator).join('/') + ext tileset = Gosu::Image.load_tiles G.window, s, tile_width, tile_height, true a[id] = tileset end |