Files
infinitefusion-e18/Data/Scripts/020_Debug/003_Debug menus/001_Debug_Menus.rb
2021-04-17 23:45:42 +01:00

186 lines
4.9 KiB
Ruby

#===============================================================================
#
#===============================================================================
class CommandMenuList
attr_accessor :currentList
def initialize
@commands = []
@currentList = "main"
end
def add(option, hash)
@commands.push([option, hash["parent"], hash["name"], hash["description"]])
end
def list
ret = []
@commands.each { |cmd| ret.push(cmd[2]) if cmd[1] == @currentList }
return ret
end
def getCommand(index)
count = 0
@commands.each do |cmd|
next if cmd[1] != @currentList
return cmd[0] if count == index
count += 1
end
return nil
end
def getDesc(index)
count = 0
@commands.each do |cmd|
next if cmd[1] != @currentList
return cmd[3] if count == index && cmd[3]
break if count == index
count += 1
end
return "<No description available>"
end
def hasSubMenu?(check_cmd)
@commands.each { |cmd| return true if cmd[1] == check_cmd }
return false
end
def getParent
ret = nil
@commands.each do |cmd|
next if cmd[0] != @currentList
ret = cmd[1]
break
end
return nil if !ret
count = 0
@commands.each do |cmd|
next if cmd[1] != ret
return [ret, count] if cmd[0] == @currentList
count += 1
end
return [ret, 0]
end
end
#===============================================================================
#
#===============================================================================
def pbDebugMenu(show_all = true)
commands = CommandMenuList.new
DebugMenuCommands.each do |option, hash|
commands.add(option, hash) if show_all || hash["always_show"]
end
viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
viewport.z = 99999
sprites = {}
sprites["textbox"] = pbCreateMessageWindow
sprites["textbox"].letterbyletter = false
sprites["cmdwindow"] = Window_CommandPokemonEx.new(commands.list)
cmdwindow = sprites["cmdwindow"]
cmdwindow.x = 0
cmdwindow.y = 0
cmdwindow.width = Graphics.width
cmdwindow.height = Graphics.height - sprites["textbox"].height
cmdwindow.viewport = viewport
cmdwindow.visible = true
sprites["textbox"].text = commands.getDesc(cmdwindow.index)
pbFadeInAndShow(sprites)
ret = -1
refresh = true
loop do
loop do
oldindex = cmdwindow.index
cmdwindow.update
if refresh || cmdwindow.index != oldindex
sprites["textbox"].text = commands.getDesc(cmdwindow.index)
refresh = false
end
Graphics.update
Input.update
if Input.trigger?(Input::BACK)
parent = commands.getParent
if parent
pbPlayCancelSE
commands.currentList = parent[0]
cmdwindow.commands = commands.list
cmdwindow.index = parent[1]
refresh = true
else
ret = -1
break
end
elsif Input.trigger?(Input::USE)
ret = cmdwindow.index
break
end
end
break if ret < 0
cmd = commands.getCommand(ret)
if commands.hasSubMenu?(cmd)
pbPlayDecisionSE
commands.currentList = cmd
cmdwindow.commands = commands.list
cmdwindow.index = 0
refresh = true
elsif cmd == "warp"
return if DebugMenuCommands.call("effect", cmd, sprites, viewport)
else
DebugMenuCommands.call("effect", cmd)
end
end
pbPlayCloseMenuSE
pbFadeOutAndHide(sprites)
pbDisposeMessageWindow(sprites["textbox"])
pbDisposeSpriteHash(sprites)
viewport.dispose
end
#===============================================================================
#
#===============================================================================
module PokemonDebugMixin
def pbPokemonDebug(pkmn, pkmnid, heldpoke = nil, settingUpBattle = false)
command = 0
commands = CommandMenuList.new
PokemonDebugMenuCommands.each do |option, hash|
commands.add(option, hash) if !settingUpBattle || hash["always_show"]
end
loop do
command = pbShowCommands(_INTL("Do what with {1}?", pkmn.name), commands.list, command)
if command < 0
parent = commands.getParent
if parent
commands.currentList = parent[0]
command = parent[1]
else
break
end
else
cmd = commands.getCommand(command)
if commands.hasSubMenu?(cmd)
commands.currentList = cmd
command = 0
elsif PokemonDebugMenuCommands.call("effect", cmd, pkmn, pkmnid, heldpoke, settingUpBattle, self)
break
end
end
end
end
end
#===============================================================================
#
#===============================================================================
class PokemonPartyScreen
include PokemonDebugMixin
end
class PokemonStorageScreen
include PokemonDebugMixin
end
class PokemonDebugPartyScreen
include PokemonDebugMixin
end