|
|
boxes.each do |box|
case touching?(box)
when :left
if @moving_right and pushingright < 2
box.move(speed, :right, screen, offset_x, offset_y, width, height)
@x += speed if @movable_right
@pushed = true
else
@pushed = false
end
when :right
if @moving_left and pushingleft < 2
box.move(speed, :left, screen, offset_x, offset_y, width, height)
@x -= speed if @movable_left
@pushed = true
else
@pushed = false
end
when :top
if @moving_down and pushingdown < 2
box.move(speed, :down, screen, offset_x, offset_y, width, height)
@y += speed if @movable_down
@pushed = true
else
@pushed = false
end
when :bottom
if @moving_up and pushingup < 2
box.move(speed, :up, screen, offset_x, offset_y, width, height)
@y -= speed if @movable_up
@pushed = true
else
@pushed = false
end
when nil
@pushed = false
end
@message1 = @arial12.render("pushed: " + @pushed.to_s + " ", true, [0, 0, 0])
@message2 = @arial12.render("touching?: " + touching?(box).to_s + " ", true, [0, 0, 0])
@message1.blit(screen, [200,200])
@message2.blit(screen, [200,220])
box.move(speed, :not, screen, offset_x, offset_y, width, height)
end
if @pushed == false
@x += speed if @moving_right && @movable_right && !@right_edge
@x -= speed if @moving_left && @movable_left && !@left_edge
@y += speed if @moving_down && @movable_down && !@bottom_edge
@y -= speed if @moving_up && @movable_up && !@top_edge
boxes.call(:move, speed, :not, screen, offset_x, offset_y, width, height)
end
@rect.center = [@x - offset_x, @y - offset_y]
end
def touching?(touchee)
if @y + 8 == touchee.y - 8 #top
if @x + 8 == touchee.x - 8 #left
return :topleft
elsif @x - 8 == touchee.x + 8 #right
return :topright
elsif @x < touchee.x + 16 and @x > touchee.x - 16 #same x axis
return :top
end
elsif @y - 8 == touchee.y + 8 #bottom
if @x + 8 == touchee.x - 8 #left
return :bottomleft
elsif @x - 8 == touchee.x + 8 #rigth
return :bottomright
elsif @x < touchee.x + 16 and @x > touchee.x - 16 #same x axis
return :bottom
end
elsif @y < touchee.y + 16 and @y > touchee.y - 16 #same y axis
if @x + 8 == touchee.x - 8 #left
return :left
elsif @x - 8 == touchee.x + 8 #right
return :right
end
else
return nil
end
end
def checkbump(screen, speed, width, height)
@y - 8 < speed ? @top_edge = true : @top_edge = false
@y + 8 > (height * 16) - speed ? @bottom_edge = true : @bottom_edge = false
@x - 8 < speed ? @left_edge = true : @left_edge = false
@x + 8 > (width * 16) - speed ? @right_edge = true : @right_edge = false
end
end
|