class MovementComponent
Public Class Methods
new(parent, movement_style=:fourway)
click to toggle source
# File lib/delve/component/movement.rb, line 6 def initialize(parent, movement_style=:fourway) raise 'Cannot create movement component when parent is nil' unless parent @parent = parent @style = movement_style || :fourway raise 'Cannot create movement component with unknown style' unless @@styles.include?(@style) end
Public Instance Methods
east()
click to toggle source
# File lib/delve/component/movement.rb, line 45 def east move 1, 0 end
id()
click to toggle source
# File lib/delve/component/movement.rb, line 13 def id :movement end
north()
click to toggle source
# File lib/delve/component/movement.rb, line 41 def north move 0, -1 end
north_east()
click to toggle source
# File lib/delve/component/movement.rb, line 26 def north_east raise @@diagonal_error unless diagonal_movement_is_valid move 1, -1 end
north_west()
click to toggle source
# File lib/delve/component/movement.rb, line 21 def north_west raise @@diagonal_error unless diagonal_movement_is_valid move -1, -1 end
south()
click to toggle source
# File lib/delve/component/movement.rb, line 49 def south move 0, 1 end
south_east()
click to toggle source
# File lib/delve/component/movement.rb, line 36 def south_east raise @@diagonal_error unless diagonal_movement_is_valid move 1, 1 end
south_west()
click to toggle source
# File lib/delve/component/movement.rb, line 31 def south_west raise @@diagonal_error unless diagonal_movement_is_valid move -1, 1 end
style()
click to toggle source
# File lib/delve/component/movement.rb, line 17 def style @style end
west()
click to toggle source
# File lib/delve/component/movement.rb, line 53 def west move -1, 0 end
Private Instance Methods
diagonal_movement_is_valid()
click to toggle source
# File lib/delve/component/movement.rb, line 58 def diagonal_movement_is_valid @style == :eightway end
move(dx, dy)
click to toggle source
# File lib/delve/component/movement.rb, line 62 def move(dx, dy) if @parent.has? :position pos = @parent.get :position if @parent.has? :collision col = @parent.get :collision if col.free?(pos.x + dx, pos.y + dy) pos.displace(dx, dy) end else pos.displace(dx, dy) end end end