Class: MiniGL::GameObject
- Includes:
- Movement
- Defined in:
- lib/minigl/game_object.rb
Overview
This class represents an object with a set of properties and methods commonly used in games. It defines an object with a rectangular bounding box, and having all the attributes required for using the Movement module.
Instance Attribute Summary
Attributes included from Movement
#bottom, #h, #left, #mass, #max_speed, #passable, #prev_speed, #right, #speed, #stored_forces, #top, #w, #x, #y
Attributes inherited from Sprite
#img_index, #x, #y
Instance Method Summary collapse
-
#draw(map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0) ⇒ Object
Draws the game object in the screen.
-
#initialize(x, y, w, h, img, img_gap = nil, sprite_cols = nil, sprite_rows = nil, mass = 1.0) ⇒ GameObject
constructor
Creates a new game object.
-
#set_animation(index) ⇒ Object
Resets the animation timer and immediately changes the image index to the specified value.
-
#visible?(map = nil) ⇒ Boolean
Returns whether this object is visible in the given map (i.e., in the viewport determined by the camera of the given map).
Methods included from Movement
#bounds, #cycle, #move, #move_carrying, #move_free
Methods inherited from Sprite
Constructor Details
#initialize(x, y, w, h, img, img_gap = nil, sprite_cols = nil, sprite_rows = nil, mass = 1.0) ⇒ GameObject
Creates a new game object.
Parameters:
- x
-
The x-coordinate of the object’s bounding box. This can be modified later via the
xattribute. - y
-
The y-coordinate of the object’s bounding box. This can be modified later via the
yattribute. - w
-
The width of the object’s bounding box.
- h
-
The height of the object’s bounding box.
- img
-
The image or spritesheet for the object.
- img_gap
-
A Vector object representing the difference between the top left corner of the bounding box and the coordinates of the image. For example, an object with
x = 100,y = 50andimg_gap = Vector.new(-5, -5)will be drawn at position (95, 45) of the screen. - sprite_cols
-
The number of columns in the spritesheet. Use
nilif the image is not a spritesheet. - sprite_rows
-
The number of rows in the spritesheet. Use
nilif the image is not a spritesheet. - mass
-
The mass of the object. Details on how it is used can be found in the Movement module.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/minigl/game_object.rb', line 140 def initialize(x, y, w, h, img, img_gap = nil, sprite_cols = nil, sprite_rows = nil, mass = 1.0) super x, y, img, sprite_cols, sprite_rows @w = w; @h = h @img_gap = if img_gap.nil? Vector.new 0, 0 else img_gap end @mass = mass @speed = Vector.new 0, 0 @max_speed = Vector.new 15, 15 @stored_forces = Vector.new 0, 0 end |
Instance Method Details
#draw(map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0) ⇒ Object
Draws the game object in the screen.
Parameters:
- map
-
A Map object, relative to which the object will be drawn (the x and y coordinates of the image will be changed according to the position of the camera).
- scale_x
-
A scale factor to be applied horizontally to the image.
- scale_y
-
A scale factor to be applied vertically to the image.
- alpha
-
The opacity with which the image will be drawn. Valid values vary from 0 (fully transparent) to 255 (fully opaque).
- color
-
A color filter to apply to the image. A white (0xffffff) filter will keep all colors unchanged, while a black (0x000000) filter will turn all colors to black. A red (0xff0000) filter will keep reddish colors with slight or no change, whereas bluish colors will be darkened, for example.
- angle
-
A rotation, in degrees, to be applied to the image, relative to its center.
- z_index
-
The z-order to draw the object. Objects with larger z-orders will be drawn on top of the ones with smaller z-orders.
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/minigl/game_object.rb', line 185 def draw(map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0) color = (alpha << 24) | color if map if angle @img[@img_index].draw_rot @x.round + @img_gap.x - map.cam.x, @y.round + @img_gap.y - map.cam.y, z_index, angle, 0.5, 0.5, scale_x, scale_y, color else @img[@img_index].draw @x.round + @img_gap.x - map.cam.x, @y.round + @img_gap.y - map.cam.y, z_index, scale_x, scale_y, color end elsif angle @img[@img_index].draw_rot @x.round + @img_gap.x, @y.round + @img_gap.y, z_index, angle, 0.5, 0.5, scale_x, scale_y, color else @img[@img_index].draw @x.round + @img_gap.x, @y.round + @img_gap.y, z_index, scale_x, scale_y, color end end |
#set_animation(index) ⇒ Object
Resets the animation timer and immediately changes the image index to the specified value.
Parameters:
- index
-
The image index to be set.
160 161 162 163 164 |
# File 'lib/minigl/game_object.rb', line 160 def set_animation(index) @anim_counter = 0 @img_index = index @index_index = 0 end |
#visible?(map = nil) ⇒ Boolean
Returns whether this object is visible in the given map (i.e., in the viewport determined by the camera of the given map). If no map is given, returns whether the object is visible on the screen.
205 206 207 208 209 |
# File 'lib/minigl/game_object.rb', line 205 def visible?(map = nil) r = Rectangle.new @x.round + @img_gap.x, @y.round + @img_gap.y, @img[0].width, @img[0].height return Rectangle.new(0, 0, G.window.width, G.window.height).intersect? r if map.nil? map.cam.intersect? r end |