I'm trying to set up a (horizontal) command window where, upon pressing either left or right, the command window refreshes and draws a different picture. However, I cannot seem to get the command window to refresh upon key input.
Any help or suggestions would be MUCH appreciated. Thanks!
Window_Battle_Command
[spoiler]#===============================================================================
#===============================================================================
# Window_Battle_Command BEGIN ++++++++++++++++++++++++++++++++++++++++++++++++++
#===============================================================================
#===============================================================================
class Window_Battle_Command < Window_Selectable
#--------------------------------------------------------------------------
attr_accessor :actor
#--------------------------------------------------------------------------
# * Object Initialization
# width : window width
# commands : command text string array
#--------------------------------------------------------------------------
def initialize(commands)
super(170, 330, 470, 150)
#super(width*commands.size, [commands[0]])
@column_max = 5
@item_max = 5
@commands = commands
self.contents = Bitmap.new(470, height - 32)
self.z = 9988
self.opacity=155
self.index = 0
refresh
end
def draw_item(index, color)
self.contents.font.color = color
rect = Rect.new((@item_width * index)-16, 0, @item_width, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index], 1)
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if index == 0
draw_battlemenu_WeaponAttack(0, 85)
elsif index == 1
draw_battlemenu_WeaponSkill(0, 85)
elsif index == 2
draw_battlemenu_ArmOre(0, 85)
elsif index == 3
draw_battlemenu_RankSkill(0, 85)
elsif index == 4
draw_battlemenu_Rest(0, 85)
else
draw_battlemenu(0, 85)
end
for i in 0...@item_max
self.contents.font.name = "Warlock"
self.contents.font.bold = false
self.contents.font.size = 24
# draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_actor(@actor)
end
end
#===============================================================================
#===============================================================================
# Window_Battle_Command END ++++++++++++++++++++++++++++++++++++++++++++++++++++
#===============================================================================
#===============================================================================[/spoiler]
Window_Selectable_Battle
[spoiler]#==============================================================================
# ** Window_Selectable_Battle
#------------------------------------------------------------------------------
# This window class contains cursor HORIZONTAL movement and scroll functions.
#==============================================================================
class Window_Selectable_Battle < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :index # cursor position
attr_reader :help_window # help window
#--------------------------------------------------------------------------
# * Object Initialization
# x : window x-coordinate
# y : window y-coordinate
# width : window width
# height : window height
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@item_max = 1
@column_max = 1
@index = -1
end
#--------------------------------------------------------------------------
# * Set Cursor Position
# index : new cursor position
#--------------------------------------------------------------------------
def index=(index)
@index = index
# Update Help Text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_help
end
# Update cursor rectangle
update_cursor_rect
end
#--------------------------------------------------------------------------
# * Get Row Count
#--------------------------------------------------------------------------
def row_max
# Compute rows from number of items and columns
return (@item_max + @column_max - 1) / @column_max
end
#--------------------------------------------------------------------------
# * Get Top Row
#--------------------------------------------------------------------------
def top_row
# Divide y-coordinate of window contents transfer origin by 1 row
# height of 32
return self.oy / 32
end
#--------------------------------------------------------------------------
# * Set Top Row
# row : row shown on top
#--------------------------------------------------------------------------
def top_row=(row)
# If row is less than 0, change it to 0
if row < 0
row = 0
end
# If row exceeds row_max - 1, change it to row_max - 1
if row > row_max - 1
row = row_max - 1
end
# Multiply 1 row height by 32 for y-coordinate of window contents
# transfer origin
self.oy = row * 32
end
#--------------------------------------------------------------------------
# * Get Number of Rows Displayable on 1 Page
#--------------------------------------------------------------------------
def page_row_max
# Subtract a frame height of 32 from the window height, and divide it by
# 1 row height of 32
return (self.height - 32) / 32
end
#--------------------------------------------------------------------------
# * Get Number of Items Displayable on 1 Page
#--------------------------------------------------------------------------
def page_item_max
# Multiply row count (page_row_max) times column count (@column_max)
return page_row_max * @column_max
end
#--------------------------------------------------------------------------
# * Set Help Window
# help_window : new help window
#--------------------------------------------------------------------------
def help_window=(help_window)
@help_window = help_window
# Update help text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_help
end
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
# If cursor position is less than 0
if @index < 0
self.cursor_rect.empty
return
end
# Get current row
row = @index / @column_max
# If current row is before top row
if row < self.top_row
# Scroll so that current row becomes top row
self.top_row = row
end
# If current row is more to back than back row
if row > self.top_row + (self.page_row_max - 1)
# Scroll so that current row becomes back row
self.top_row = row - (self.page_row_max - 1)
end
# Calculate cursor width
cursor_width = self.width / @column_max - 32
# Calculate cursor coordinates
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
# Update cursor rectangle
self.cursor_rect.set(x, y, cursor_width, 32)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
# If cursor is movable
if self.active and @item_max > 0 and @index >= 0
# If the right directional button was pressed
if Input.repeat?(Input::RIGHT)
if (@column_max == 1 and Input.trigger?(Input::RIGHT)) or
@index < @item_max - @column_max
# Move cursor down
$game_system.se_play($data_system.cursor_se)
@index = (@index + @column_max) % @item_max
end
end
# If the left directional button was pressed
if Input.repeat?(Input::LEFT)
if (@column_max == 1 and Input.trigger?(Input::LEFT)) or
@index >= @column_max
# Move cursor up
$game_system.se_play($data_system.cursor_se)
@index = (@index - @column_max + @item_max) % @item_max
end
end
end
# Update help text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_help
end
# Update cursor rectangle
update_cursor_rect
end
end[/spoiler]
Well, I would suggest making your classes subclasses of Window_Selectable or Window_Command rather than Window_Base. That way you'll have all of the methods you need and only have to change a few things. For the refresh, you might just want to keep track of the old index with a variable. Say, initialize the variable @old_index in the initialize method. Then you can use this check to see if index has changed:
if @old_index != self.index
refresh
@old_index = self.index
end
in the update method.