208 lines
5.9 KiB
Ruby
208 lines
5.9 KiB
Ruby
#==============================================================================
|
|
# ** Window_Item
|
|
#------------------------------------------------------------------------------
|
|
# This window displays items in possession on the item and battle screens.
|
|
#==============================================================================
|
|
|
|
class Window_Item < Window_Selectable
|
|
COLUMN_MAX = 2
|
|
|
|
#--------------------------------------------------------------------------
|
|
# * Object Initialization
|
|
#--------------------------------------------------------------------------
|
|
def initialize
|
|
super(16, 96, 608, 368)
|
|
@column_max = 2
|
|
refresh
|
|
self.index = 0
|
|
self.back_opacity = 230
|
|
self.z = 9998
|
|
self.visible = false
|
|
self.active = false
|
|
|
|
@fade_in = false
|
|
@fade_out = false
|
|
|
|
@help_window = Window_Help.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Get Item
|
|
#--------------------------------------------------------------------------
|
|
def item
|
|
return @data[self.index]
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Refresh
|
|
#--------------------------------------------------------------------------
|
|
def refresh
|
|
if self.contents != nil
|
|
self.contents.dispose
|
|
self.contents = nil
|
|
end
|
|
@data = []
|
|
# Add item
|
|
for i in 1...$data_items.size
|
|
if $game_party.item_number(i) > 0
|
|
@data.push($data_items[i])
|
|
end
|
|
end
|
|
# If item count is not 0, make a bit map and draw all items
|
|
@item_max = @data.size
|
|
if @item_max > 0
|
|
self.index = 0 if self.index == -1
|
|
self.contents = Bitmap.new(width - 32, row_max * 32)
|
|
for i in 0...@item_max
|
|
draw_item(i)
|
|
end
|
|
else
|
|
self.index = -1
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Draw Item
|
|
# index : item number
|
|
#--------------------------------------------------------------------------
|
|
def draw_item(index)
|
|
item = @data[index]
|
|
|
|
# Font color
|
|
if $game_variables[1] == @data[index].id
|
|
self.contents.font.color = active_item_color
|
|
else
|
|
self.contents.font.color = normal_color
|
|
end
|
|
|
|
# Geometry
|
|
x = index % 2 * (self.width / COLUMN_MAX)
|
|
y = index / 2 * 32
|
|
off = index == @index ? 2 : 0
|
|
rect = Rect.new(x, y, self.width / COLUMN_MAX - 32, 32)
|
|
self.contents.draw_text(rect, item.name, 1)
|
|
|
|
bitmap = RPG::Cache.icon(item.icon_name)
|
|
self.contents.blt(x + off, y + off, bitmap, Rect.new(off, off, 32 - off * 2, 32 - off * 2), self.contents.font.color.alpha)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Help Text Update
|
|
#--------------------------------------------------------------------------
|
|
def update_help
|
|
self.contents.clear if self.contents
|
|
(0...@item_max).each { |i| draw_item(i) }
|
|
@help_window.set_text(self.item == nil ? tr("No item selected.") : self.item.description, 1)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Update
|
|
#--------------------------------------------------------------------------
|
|
def update
|
|
super
|
|
|
|
# Handle fade-in effect
|
|
if @fade_in
|
|
if Input.trigger?(Input::MENU)
|
|
@fade_in = false
|
|
@fade_out = true
|
|
else
|
|
self.opacity += 48
|
|
self.contents_opacity += 48
|
|
@help_window.opacity += 48
|
|
@help_window.contents_opacity += 48
|
|
if self.contents_opacity == 255
|
|
@fade_in = false
|
|
end
|
|
return
|
|
end
|
|
end
|
|
|
|
# Handle fade-out effect
|
|
if @fade_out
|
|
self.opacity -= 48
|
|
self.contents_opacity -= 48
|
|
@help_window.opacity -= 48
|
|
@help_window.contents_opacity -= 48
|
|
if self.contents_opacity == 0
|
|
@fade_out = false
|
|
self.visible = false
|
|
self.active = false
|
|
@help_window.visible = false
|
|
end
|
|
return
|
|
end
|
|
|
|
# Don't do anything if not active
|
|
if !self.active
|
|
return
|
|
end
|
|
|
|
# Select menu item
|
|
if Input.trigger?(Input::ACTION)
|
|
if @item_max == 0
|
|
$game_system.se_play($data_system.buzzer_se)
|
|
return
|
|
end
|
|
item_a = $game_variables[1]
|
|
item_b = @data[@index].id
|
|
if item_a == item_b
|
|
$game_variables[1] = 0
|
|
$game_system.se_play($data_system.cancel_se)
|
|
else
|
|
$game_system.se_play($data_system.decision_se)
|
|
if item_a == 0
|
|
$game_variables[1] = item_b
|
|
draw_item(@index)
|
|
else
|
|
# Draw both as active
|
|
$game_variables[1] = item_b
|
|
draw_item(@index)
|
|
# Combine items
|
|
$game_variables[1] = 0
|
|
$game_variables[2] = Item.combine(item_a, item_b)
|
|
$game_switches[1] = true
|
|
end
|
|
end
|
|
end
|
|
|
|
# Close menu
|
|
if Input.trigger?(Input::CANCEL) ||
|
|
Input.trigger?(Input::MENU) ||
|
|
Input.trigger?(Input::ITEMS)
|
|
unless Input.trigger?(Input::MENU)
|
|
$game_system.se_play($data_system.cancel_se)
|
|
end
|
|
@fade_out = true
|
|
return
|
|
end
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Open
|
|
#--------------------------------------------------------------------------
|
|
def open
|
|
refresh
|
|
|
|
# Search for selected item and auto-select
|
|
if $game_variables[1] > 0
|
|
@data.each_with_index do |item, i|
|
|
if $game_variables[1] == item.id
|
|
self.index = i
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
self.opacity = 0
|
|
self.contents_opacity = 0
|
|
self.visible = true
|
|
@help_window.opacity = 0
|
|
@help_window.contents_opacity = 0
|
|
@help_window.visible = true
|
|
self.active = true
|
|
@fade_in = true
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Dispose
|
|
#--------------------------------------------------------------------------
|
|
def dispose
|
|
super
|
|
@help_window.dispose
|
|
end
|
|
end
|