mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
368 lines
11 KiB
Ruby
368 lines
11 KiB
Ruby
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class Window_PokemonItemStorage < Window_DrawableCommand
|
|
attr_reader :bag
|
|
attr_reader :pocket
|
|
attr_reader :sortIndex
|
|
|
|
def sortIndex=(value)
|
|
@sortIndex = value
|
|
refresh
|
|
end
|
|
|
|
def initialize(bag, x, y, width, height)
|
|
@bag = bag
|
|
@sortIndex = -1
|
|
@adapter = PokemonMartAdapter.new
|
|
super(x, y, width, height)
|
|
self.windowskin = nil
|
|
end
|
|
|
|
def item
|
|
item = @bag[self.index]
|
|
return item ? item[0] : nil
|
|
end
|
|
|
|
def itemCount
|
|
return @bag.length + 1
|
|
end
|
|
|
|
def drawItem(index, _count, rect)
|
|
rect = drawCursor(index, rect)
|
|
textpos = []
|
|
if index == @bag.length
|
|
textpos.push([_INTL("CANCEL"), rect.x, rect.y - 6, false, self.baseColor, self.shadowColor])
|
|
else
|
|
item = @bag[index][0]
|
|
itemname = @adapter.getDisplayName(item)
|
|
baseColor = (index == @sortIndex) ? Color.new(248, 24, 24) : self.baseColor
|
|
textpos.push([itemname, rect.x, rect.y - 6, false, self.baseColor, self.shadowColor])
|
|
if !GameData::Item.get(item).is_important? # Not a Key item/HM/TM
|
|
qty = _ISPRINTF("x{1: 2d}", @bag[index][1])
|
|
sizeQty = self.contents.text_size(qty).width
|
|
xQty = rect.x + rect.width - sizeQty - 2
|
|
textpos.push([qty, xQty, rect.y - 6, false, baseColor, self.shadowColor])
|
|
end
|
|
end
|
|
pbDrawTextPositions(self.contents, textpos)
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class ItemStorage_Scene
|
|
ITEMLISTBASECOLOR = Color.new(88, 88, 80)
|
|
ITEMLISTSHADOWCOLOR = Color.new(168, 184, 184)
|
|
ITEMTEXTBASECOLOR = Color.new(248, 248, 248)
|
|
ITEMTEXTSHADOWCOLOR = Color.new(0, 0, 0)
|
|
TITLEBASECOLOR = Color.new(248, 248, 248)
|
|
TITLESHADOWCOLOR = Color.new(0, 0, 0)
|
|
ITEMSVISIBLE = 7
|
|
|
|
def initialize(title)
|
|
@title = title
|
|
end
|
|
|
|
def update
|
|
pbUpdateSpriteHash(@sprites)
|
|
end
|
|
|
|
def pbStartScene(bag)
|
|
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
|
@viewport.z = 99999
|
|
@bag = bag
|
|
@sprites = {}
|
|
@sprites["background"] = IconSprite.new(0, 0, @viewport)
|
|
@sprites["background"].setBitmap("Graphics/Pictures/pcItembg")
|
|
@sprites["icon"] = ItemIconSprite.new(50, 334, nil, @viewport)
|
|
# Item list
|
|
@sprites["itemwindow"] = Window_PokemonItemStorage.new(@bag, 98, 14, 334, 32 + (ITEMSVISIBLE * 32))
|
|
@sprites["itemwindow"].viewport = @viewport
|
|
@sprites["itemwindow"].index = 0
|
|
@sprites["itemwindow"].baseColor = ITEMLISTBASECOLOR
|
|
@sprites["itemwindow"].shadowColor = ITEMLISTSHADOWCOLOR
|
|
@sprites["itemwindow"].refresh
|
|
# Title
|
|
@sprites["pocketwindow"] = BitmapSprite.new(88, 64, @viewport)
|
|
@sprites["pocketwindow"].x = 14
|
|
@sprites["pocketwindow"].y = 16
|
|
pbSetNarrowFont(@sprites["pocketwindow"].bitmap)
|
|
# Item description
|
|
@sprites["itemtextwindow"] = Window_UnformattedTextPokemon.newWithSize("", 84, 270, Graphics.width - 84, 128, @viewport)
|
|
@sprites["itemtextwindow"].baseColor = ITEMTEXTBASECOLOR
|
|
@sprites["itemtextwindow"].shadowColor = ITEMTEXTSHADOWCOLOR
|
|
@sprites["itemtextwindow"].windowskin = nil
|
|
@sprites["helpwindow"] = Window_UnformattedTextPokemon.new("")
|
|
@sprites["helpwindow"].visible = false
|
|
@sprites["helpwindow"].viewport = @viewport
|
|
# Letter-by-letter message window
|
|
@sprites["msgwindow"] = Window_AdvancedTextPokemon.new("")
|
|
@sprites["msgwindow"].visible = false
|
|
@sprites["msgwindow"].viewport = @viewport
|
|
pbBottomLeftLines(@sprites["helpwindow"], 1)
|
|
pbDeactivateWindows(@sprites)
|
|
pbRefresh
|
|
pbFadeInAndShow(@sprites)
|
|
end
|
|
|
|
def pbEndScene
|
|
pbFadeOutAndHide(@sprites)
|
|
pbDisposeSpriteHash(@sprites)
|
|
@viewport.dispose
|
|
end
|
|
|
|
def pbChooseNumber(helptext, maximum)
|
|
return UIHelper.pbChooseNumber(@sprites["helpwindow"], helptext, maximum) { update }
|
|
end
|
|
|
|
def pbDisplay(msg, brief = false)
|
|
UIHelper.pbDisplay(@sprites["msgwindow"], msg, brief) { update }
|
|
end
|
|
|
|
def pbConfirm(msg)
|
|
UIHelper.pbConfirm(@sprites["msgwindow"], msg) { update }
|
|
end
|
|
|
|
def pbShowCommands(helptext, commands)
|
|
return UIHelper.pbShowCommands(@sprites["helpwindow"], helptext, commands) { update }
|
|
end
|
|
|
|
def pbRefresh
|
|
bm = @sprites["pocketwindow"].bitmap
|
|
# Draw title at upper left corner ("Toss Item/Withdraw Item")
|
|
drawTextEx(bm, 0, 4, bm.width, 2, @title, TITLEBASECOLOR, TITLESHADOWCOLOR)
|
|
itemwindow = @sprites["itemwindow"]
|
|
# Draw item icon
|
|
@sprites["icon"].item = itemwindow.item
|
|
# Get item description
|
|
if itemwindow.item
|
|
@sprites["itemtextwindow"].text = GameData::Item.get(itemwindow.item).description
|
|
else
|
|
@sprites["itemtextwindow"].text = _INTL("Close storage.")
|
|
end
|
|
itemwindow.refresh
|
|
end
|
|
|
|
def pbChooseItem
|
|
pbRefresh
|
|
@sprites["helpwindow"].visible = false
|
|
itemwindow = @sprites["itemwindow"]
|
|
itemwindow.refresh
|
|
pbActivateWindow(@sprites, "itemwindow") {
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
olditem = itemwindow.item
|
|
self.update
|
|
pbRefresh if itemwindow.item != olditem
|
|
if Input.trigger?(Input::BACK)
|
|
return nil
|
|
elsif Input.trigger?(Input::USE)
|
|
if itemwindow.index < @bag.length
|
|
pbRefresh
|
|
return @bag[itemwindow.index][0]
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
}
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class WithdrawItemScene < ItemStorage_Scene
|
|
def initialize
|
|
super(_INTL("Withdraw\nItem"))
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
class TossItemScene < ItemStorage_Scene
|
|
def initialize
|
|
super(_INTL("Toss\nItem"))
|
|
end
|
|
end
|
|
|
|
#===============================================================================
|
|
# Common UI functions used in both the Bag and item storage screens.
|
|
# Displays messages and allows the user to choose a number/command.
|
|
# The window _helpwindow_ will display the _helptext_.
|
|
#===============================================================================
|
|
module UIHelper
|
|
# Letter by letter display of the message _msg_ by the window _helpwindow_.
|
|
def self.pbDisplay(helpwindow, msg, brief)
|
|
cw = helpwindow
|
|
oldvisible = cw.visible
|
|
cw.letterbyletter = true
|
|
cw.text = msg + "\1"
|
|
cw.visible = true
|
|
pbBottomLeftLines(cw, 2)
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
(block_given?) ? yield : cw.update
|
|
if !cw.busy? && (brief || (Input.trigger?(Input::USE) && cw.resume))
|
|
break
|
|
end
|
|
end
|
|
cw.visible = oldvisible
|
|
end
|
|
|
|
def self.pbDisplayStatic(msgwindow, message)
|
|
oldvisible = msgwindow.visible
|
|
msgwindow.visible = true
|
|
msgwindow.letterbyletter = false
|
|
msgwindow.width = Graphics.width
|
|
msgwindow.resizeHeightToFit(message, Graphics.width)
|
|
msgwindow.text = message
|
|
pbBottomRight(msgwindow)
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
(block_given?) ? yield : msgwindow.update
|
|
if Input.trigger?(Input::BACK) || Input.trigger?(Input::USE)
|
|
break
|
|
end
|
|
end
|
|
msgwindow.visible = oldvisible
|
|
Input.update
|
|
end
|
|
|
|
# Letter by letter display of the message _msg_ by the window _helpwindow_,
|
|
# used to ask questions. Returns true if the user chose yes, false if no.
|
|
def self.pbConfirm(helpwindow, msg)
|
|
dw = helpwindow
|
|
oldvisible = dw.visible
|
|
dw.letterbyletter = true
|
|
dw.text = msg
|
|
dw.visible = true
|
|
pbBottomLeftLines(dw, 2)
|
|
commands = [_INTL("Yes"), _INTL("No")]
|
|
cw = Window_CommandPokemon.new(commands)
|
|
cw.index = 0
|
|
cw.viewport = helpwindow.viewport
|
|
pbBottomRight(cw)
|
|
cw.y -= dw.height
|
|
ret = false
|
|
loop do
|
|
cw.visible = (!dw.busy?)
|
|
Graphics.update
|
|
Input.update
|
|
cw.update
|
|
(block_given?) ? yield : dw.update
|
|
if !dw.busy? && dw.resume
|
|
if Input.trigger?(Input::BACK)
|
|
pbPlayCancelSE
|
|
break
|
|
elsif Input.trigger?(Input::USE)
|
|
pbPlayDecisionSE
|
|
ret = (cw.index == 0)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
cw.dispose
|
|
dw.visible = oldvisible
|
|
return ret
|
|
end
|
|
|
|
def self.pbChooseNumber(helpwindow, helptext, maximum, initnum = 1)
|
|
oldvisible = helpwindow.visible
|
|
helpwindow.visible = true
|
|
helpwindow.text = helptext
|
|
helpwindow.letterbyletter = false
|
|
curnumber = initnum
|
|
ret = 0
|
|
numwindow = Window_UnformattedTextPokemon.new("x000")
|
|
numwindow.viewport = helpwindow.viewport
|
|
numwindow.letterbyletter = false
|
|
numwindow.text = _ISPRINTF("x{1:03d}", curnumber)
|
|
numwindow.resizeToFit(numwindow.text, Graphics.width)
|
|
pbBottomRight(numwindow)
|
|
helpwindow.resizeHeightToFit(helpwindow.text, Graphics.width - numwindow.width)
|
|
pbBottomLeft(helpwindow)
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
numwindow.update
|
|
helpwindow.update
|
|
yield if block_given?
|
|
if Input.trigger?(Input::BACK)
|
|
ret = 0
|
|
pbPlayCancelSE
|
|
break
|
|
elsif Input.trigger?(Input::USE)
|
|
ret = curnumber
|
|
pbPlayDecisionSE
|
|
break
|
|
elsif Input.repeat?(Input::UP)
|
|
curnumber += 1
|
|
curnumber = 1 if curnumber > maximum
|
|
numwindow.text = _ISPRINTF("x{1:03d}", curnumber)
|
|
pbPlayCursorSE
|
|
elsif Input.repeat?(Input::DOWN)
|
|
curnumber -= 1
|
|
curnumber = maximum if curnumber < 1
|
|
numwindow.text = _ISPRINTF("x{1:03d}", curnumber)
|
|
pbPlayCursorSE
|
|
elsif Input.repeat?(Input::LEFT)
|
|
curnumber -= 10
|
|
curnumber = 1 if curnumber < 1
|
|
numwindow.text = _ISPRINTF("x{1:03d}", curnumber)
|
|
pbPlayCursorSE
|
|
elsif Input.repeat?(Input::RIGHT)
|
|
curnumber += 10
|
|
curnumber = maximum if curnumber > maximum
|
|
numwindow.text = _ISPRINTF("x{1:03d}", curnumber)
|
|
pbPlayCursorSE
|
|
end
|
|
end
|
|
numwindow.dispose
|
|
helpwindow.visible = oldvisible
|
|
return ret
|
|
end
|
|
|
|
def self.pbShowCommands(helpwindow, helptext, commands, initcmd = 0)
|
|
ret = -1
|
|
oldvisible = helpwindow.visible
|
|
helpwindow.visible = helptext ? true : false
|
|
helpwindow.letterbyletter = false
|
|
helpwindow.text = helptext || ""
|
|
cmdwindow = Window_CommandPokemon.new(commands)
|
|
cmdwindow.index = initcmd
|
|
begin
|
|
cmdwindow.viewport = helpwindow.viewport
|
|
pbBottomRight(cmdwindow)
|
|
helpwindow.resizeHeightToFit(helpwindow.text, Graphics.width - cmdwindow.width)
|
|
pbBottomLeft(helpwindow)
|
|
loop do
|
|
Graphics.update
|
|
Input.update
|
|
yield
|
|
cmdwindow.update
|
|
if Input.trigger?(Input::BACK)
|
|
ret = -1
|
|
pbPlayCancelSE
|
|
break
|
|
end
|
|
if Input.trigger?(Input::USE)
|
|
ret = cmdwindow.index
|
|
pbPlayDecisionSE
|
|
break
|
|
end
|
|
end
|
|
ensure
|
|
cmdwindow&.dispose
|
|
end
|
|
helpwindow.visible = oldvisible
|
|
return ret
|
|
end
|
|
end
|