All pastes #43178 Raw Edit

Anonymous

public text v1 · immutable
#43178 ·published 2006-02-26 03:02 UTC
rendered paste body
#==============================================================================
# ** Input
#------------------------------------------------------------------------------
#  Added methods for correctly detecting directional input
#==============================================================================
module Input
  
  #--------------------------------------------------------------------------
  # * Class Variables
  #--------------------------------------------------------------------------
  @@_direction   = nil
  @@_direction_v = nil
  @@_direction_h = nil
  @@_last_up     = nil
  @@_last_down   = nil
  @@_last_left   = nil
  @@_last_right  = nil
  
  #--------------------------------------------------------------------------
  # * Check if direction is the latest
  #--------------------------------------------------------------------------
  def self.direction?(direction)

    # Set direction to up if pressed (and wasn't before)
    if self.press?(UP) and !@@_last_up
      @@_direction = UP
    end
    @@_last_up = self.press?(UP)

    if self.press?(DOWN) and !@@_last_down
      @@_direction = DOWN
    end
    @@_last_down = self.press?(DOWN)

    if self.press?(LEFT) and !@@_last_left
      @@_direction = LEFT
    end
    @@_last_left = self.press?(LEFT)

    if self.press?(RIGHT) and !@@_last_right
      @@_direction = RIGHT
    end
    @@_last_right = self.press?(RIGHT)

    # True if direction is the latest and pressed
    return (direction == @@_direction and self.press?(direction))
  end

  #--------------------------------------------------------------------------
  # * Check if direction is the latest (U/D only)
  #--------------------------------------------------------------------------
  def self.direction_v?(direction)

    if self.press?(UP) and !@@_last_up
      @@_direction_v = UP
    end
    @@_last_up = self.press?(UP)

    if self.press?(DOWN) and !@@_last_down
      @@_direction_v = DOWN
    end
    @@_last_down = self.press?(DOWN)

    return (direction == @@_direction_v and self.press?(direction))
  end

  #--------------------------------------------------------------------------
  # * Check if direction is the latest (L/R only)
  #--------------------------------------------------------------------------
  def self.direction_h?(direction)

    if self.press?(LEFT) and !@@_last_left
      @@_direction_h = LEFT
    end
    @@_last_left = self.press?(LEFT)

    if self.press?(RIGHT) and !@@_last_right
      @@_direction_h = RIGHT
    end
    @@_last_right = self.press?(RIGHT)

    return (direction == @@_direction_h and self.press?(direction))
  end
end