Class: Chingu::GameObject

Inherits:
BasicGameObject show all
Includes:
Helpers::InputClient, Helpers::RotationCenter
Defined in:
lib/chingu/game_object.rb

Overview

GameObject inherits from BasicGameObject to get traits and some class-methods like .all and .destroy

On top of that, it encapsulates GOSUs Image#draw_rot and all its parameters.

In Chingu GameObject is a visual object, something to put on screen, centers around the .image-parameter.

If you wan’t a invisible object but with traits, use BasicGameObject.

Direct Known Subclasses

Parallax, ParallaxLayer, Particle

Instance Attribute Summary collapse

Attributes inherited from BasicGameObject

#options, #parent, #paused, #visible

Instance Method Summary collapse

Methods included from Helpers::RotationCenter

#rotation_center, #rotation_center=

Methods included from Helpers::InputClient

#input, #input=

Methods inherited from BasicGameObject

all, create, #destroy, destroy_all, destroy_if, #draw_trait, has_trait, has_traits, #hide!, initialize_trait, #pause!, #paused?, #setup_trait, #show!, size, #trait_options, #unpause!, #update, #update_trait, #visible?

Methods included from Helpers::ClassInheritableAccessor

included

Constructor Details

#initialize(options = {}) ⇒ GameObject

Returns a new instance of GameObject.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/chingu/game_object.rb', line 40

def initialize(options = {})
  super

  # All encapsulated draw_rot arguments can be set with hash-options at creation time
  if options[:image].is_a?(Gosu::Image)
    @image = options[:image]
  elsif options[:image].is_a? String
    @image = Gosu::Image[options[:image]]
  end
  
  @x = options[:x] || 0
  @y = options[:y] || 0
  @angle = options[:angle] || 0
  
  self.factor = options[:factor] || 1.0
  @factor_x = options[:factor_x] if options[:factor_x]
  @factor_y = options[:factor_y] if options[:factor_y]
  
  self.center = options[:center] || 0.5
  
  
  @rotation_center = options[:rotation_center]
  self.rotation_center(options[:rotation_center]) if options[:rotation_center]
  
  @center_x = options[:center_x] if options[:center_x]
  @center_y = options[:center_y] if options[:center_y]
  
  if options[:color].is_a?(Gosu::Color)
    @color = options[:color]
  else
    @color = Gosu::Color.new(options[:color] || 0xFFFFFFFF)
  end
  
  self.alpha = options[:alpha]  if options[:alpha]
  
  @mode = options[:mode] || :default # :additive is also available.
  @zorder = options[:zorder] || 100
  
  #setup_trait(options)  if self.respond_to?(:setup_trait)
end

Instance Attribute Details

#angleObject

Returns the value of attribute angle.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def angle
  @angle
end

#centerObject

, :rotation_center



35
36
37
# File 'lib/chingu/game_object.rb', line 35

def center
  @center
end

#center_xObject

Returns the value of attribute center_x.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def center_x
  @center_x
end

#center_yObject

Returns the value of attribute center_y.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def center_y
  @center_y
end

#colorObject

Returns the value of attribute color.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def color
  @color
end

#factorObject

, :rotation_center



35
36
37
# File 'lib/chingu/game_object.rb', line 35

def factor
  @factor
end

#factor_xObject

Returns the value of attribute factor_x.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def factor_x
  @factor_x
end

#factor_yObject

Returns the value of attribute factor_y.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def factor_y
  @factor_y
end

#imageObject

Returns the value of attribute image.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def image
  @image
end

#modeObject

Returns the value of attribute mode.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def mode
  @mode
end

#xObject

Returns the value of attribute x.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def x
  @x
end

#yObject

Returns the value of attribute y.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def y
  @y
end

#zorderObject

Returns the value of attribute zorder.



34
35
36
# File 'lib/chingu/game_object.rb', line 34

def zorder
  @zorder
end

Instance Method Details

#alphaObject

Get objects alpha-value (internally stored in @color.alpha)



94
95
96
# File 'lib/chingu/game_object.rb', line 94

def alpha
  @color.alpha
end

#alpha=(value) ⇒ Object

Set objects alpha-value (internally stored in @color.alpha) If out of range, set to closest working value. this makes fading simpler.



100
101
102
103
104
# File 'lib/chingu/game_object.rb', line 100

def alpha=(value)
  value = 0   if value < 0
  value = 255 if value > 255
  @color.alpha = value
end

#distance_to(object) ⇒ Object

Calculates the distance from self to a given objevt



118
119
120
# File 'lib/chingu/game_object.rb', line 118

def distance_to(object)
  distance(self.x, self.y, object.x, object.y)
end

#drawObject



122
123
124
# File 'lib/chingu/game_object.rb', line 122

def draw
  @image.draw_rot(@x, @y, @zorder, @angle, @center_x, @center_y, @factor_x, @factor_y, @color, @mode) if @visible
end

#inside_window?(x = @x, y = @y) ⇒ Boolean

Returns true if object is inside the game window, false if outside

Returns:

  • (Boolean)


108
109
110
# File 'lib/chingu/game_object.rb', line 108

def inside_window?(x = @x, y = @y)
  x >= 0 && x <= $window.width && y >= 0 && y <= $window.height
end

#outside_window?(x = @x, y = @y) ⇒ Boolean

Returns true object is outside the game window

Returns:

  • (Boolean)


113
114
115
# File 'lib/chingu/game_object.rb', line 113

def outside_window?(x = @x, y = @y)
  not inside_window?(x,y)
end