The RPG Maker Resource Kit

RMRK RPG Maker Creation => RPG Maker General => General Scripting => Topic started by: modern algebra on November 02, 2007, 08:16:23 PM

Title: Alternative Window Commands
Post by: modern algebra on November 02, 2007, 08:16:23 PM
Alternative Window_Command Scripts
Version: 1.0
Author: modern algebra
Date: November 2, 2007

Version History





Description



These scripts add alternatives to the standard Window_Command. Window_HorizontalCommand allows you to easily set a command window which has options extending from left to right, rather then up and down. Window_ScrollCommand allows you to have a command window with a scroll bar if the options extend beyond the space in which you have them.

Features


Screenshots

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg217.imageshack.us%2Fimg217%2F2299%2Fscrollbarwi1.png&hash=effeb1bdd91e336a1d0855c91f7bf743ea2e1474)
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg215.imageshack.us%2Fimg215%2F7135%2Fhorcommandkm9.png&hash=734cfcf0f980013c4ba9bf14f9872e968fd4880d)

Instructions

Use these scripts pretty much the same way you would use a command window. You set up the horizontal command window the exact same way you would a regular command window. With Window_ScrollCommand, you should specify a height as well, so like this:


@command_window = Window_ScrollCommand.new (<width>, <commands array>, <height>)


Script



Window_HorizontalCommand:

#==============================================================================
# ** Window_HorizontalCommand
#------------------------------------------------------------------------------
#  This window deals with general command choices, displayed horizontally
#==============================================================================

class Window_HorizontalCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     width    : window width
  #     commands : command text string array
  #--------------------------------------------------------------------------
  def initialize (width, commands)
    @average = (width - 32) / commands.size
    super (width, commands)
    self.height = 64
    self.contents = Bitmap.new (width - 32, height - 32)
    @column_max = commands.size
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(index*@average, 0, @average - 10, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rect
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(index*@average, 0, @average - 10, 32)
    end
  end
end


Window_ScrollCommand:

#----------------------------------------------------------------------------
# ** Window_ScrollCommand
#----------------------------------------------------------------------------
#  This is a subclass of Window_Command, and it will just display a scroll
#  bar on the right if it so happens that the commands extend beyond the
#  max height (which is an additional argument)
#----------------------------------------------------------------------------

class Window_ScrollCommand < Window_Command
 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     width    : window width
  #     commands : command text string array
  #--------------------------------------------------------------------------
  def initialize(width, commands, height = 480)
    # Compute window height from command quantity
    super(width, commands)
    self.height = height
    @scroll_bar = Bitmap.new (7, self.height - 32)
    # Draw the arrows
    for i in 0...4
      # Top Arrow
      @scroll_bar.fill_rect (i, 3 - i, 7 - 2*i, 1, normal_color)
      # Bottom Arrow
      @scroll_bar.fill_rect (3 - i, @scroll_bar.height - 1 - i, 1 + 2*i, 1, normal_color)
    end
    # Draw the sides
    @scroll_bar.fill_rect (0, 4, 1, @scroll_bar.height - 8, normal_color)
    @scroll_bar.fill_rect (6, 4, 1, @scroll_bar.height - 8, normal_color)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def update_cursor_rect
    super ()
    # If there are more commands then room, and the bitmap has moved
    if (self.height - 32) < @commands.size*32 && @last_top_row != self.top_row
      @last_top_row = self.top_row
      # Erase old scroll bar
      self.contents.fill_rect (self.contents.width - 7, 0, 7, self.contents.height, Color.new (0, 0, 0, 0))
      src_rect = Rect.new (0, 0, 7, @scroll_bar.height)
      # Draw the basic bar
      self.contents.blt (self.contents.width - 7, self.top_row*32, @scroll_bar, src_rect)
      # Scale the size of the bar appropriately
      scale_ratio = ((self.height - 40).to_f) / ((@commands.size*32).to_f)
      # Get the y for the scrolling bar
      y = 4 + (self.top_row*32) + ((self.top_row*32)*scale_ratio).to_i
      # Get the height of the bar
      height = ((self.height - 32)*scale_ratio).to_i
      # Draw the bar
      self.contents.fill_rect (self.contents.width - 6, y, 5, height, system_color)
    end
    self.cursor_rect.width -= 8
  end
end


Credit




Support



If there are any bugs, or if you have an idea for another variation on Window_Command, please just ask me within this topic. I will provide support at bothe RMRK and RMRevolution.

Author's Notes

Basically, I just needed a few variations of Window_Command for a couple scripts I was writing, and so these things came up. I figured they might be helpful to people and so I shared them. It's a boring story.