Menú de Opciones por Páginas

Descripción

A partir de La Base de Sky v1.2.0, el menú de opciones utiliza un sistema de páginas que organiza las opciones en pestañas navegables. Este nuevo sistema reemplaza la pantalla de opciones de una sola lista que existía en Pokémon Essentials v21.1.

El sistema está implementado en 048_UI/020_UI_Options_v22.rb y emplea PageHandlers para registrar cada página y OptionHandlers para registrar las opciones individuales dentro de ellas. Está diseñado con compatibilidad con Essentials v22 en mente.

Cada opción tiene un campo "page" que determina en qué página aparece. El jugador puede navegar entre las páginas usando los botones laterales o las teclas de dirección.

Páginas por defecto

La Base de Sky v1.2.0 incluye cuatro páginas predefinidas:

Identificador Nombre Orden Contenido
:gameplay Juego 10 Velocidad del texto, estilo de combate, escena de batalla, etc.
:audio Audio 20 Volumen de música (BGM), volumen de efectos de sonido (SE), etc.
:graphics Gráficos 30 Tamaño de pantalla, VSync, etc.
:plugins Plugins 40 Opciones específicas de plugins (velocidad turbo, texto instantáneo, etc.)

El valor de orden determina la posición de la página en el menú. Las páginas con un orden menor aparecen primero.

Cómo agregar una nueva página

Para registrar una nueva página en el menú de opciones, usa PageHandlers.add con el menú :options_menu, un identificador único y un hash de configuración:

PageHandlers.add(:options_menu, :mi_pagina, {
  "name"  => _INTL("Mi Página"),
  "order" => 50
})
Campo Tipo Descripción
"name" String Nombre visible de la página, envuelto en _INTL para soporte de idiomas.
"order" Integer Posición de la página en el menú. Valores más bajos aparecen primero.
Nota: El identificador de la página (ej: :mi_pagina) es el valor que usarás en el campo "page" de cada opción para asignarla a esta página.

Cómo agregar opciones a una página

Cada opción se registra con MenuHandlers.add (u OptionHandlers) e incluye un campo "page" que indica en qué página debe aparecer:

Ejemplo: Opción en la página de Juego

MenuHandlers.add(:options_menu, :dificultad, {
  "name"         => _INTL("Dificultad"),
  "order"        => 50,
  "page"         => :gameplay,
  "type"         => NumberOption,
  "parameters"   => [0, 2],
  "descriptions" => [
    _INTL("Fácil"), _INTL("Normal"), _INTL("Difícil")
  ],
  "get_proc"     => proc { next $PokemonSystem.dificultad },
  "set_proc"     => proc { |value|
    $PokemonSystem.dificultad = value
  }
})

Ejemplo: Opción en una página personalizada

Si ya creaste la página :mi_pagina como se mostró arriba, puedes añadir opciones a ella indicando su identificador en el campo "page":

MenuHandlers.add(:options_menu, :opcion_custom, {
  "name"     => _INTL("Mi Opción"),
  "order"    => 10,
  "page"     => :mi_pagina,
  "type"     => BooleanOption,
  "get_proc" => proc { next $PokemonSystem.opcion_custom },
  "set_proc" => proc { |value|
    $PokemonSystem.opcion_custom = value
  }
})
Nota: Si no se especifica el campo "page", la opción aparecerá en la primera página (:gameplay) por defecto.

Recuerda añadir la propiedad a PokemonSystem

Toda opción personalizada necesita una propiedad correspondiente en PokemonSystem:

class PokemonSystem
  attr_accessor :opcion_custom

  alias _init_opcion_custom initialize
  def initialize
    _init_opcion_custom
    @opcion_custom = false
  end
end
Nota: Las partidas guardadas anteriormente no tendrán las propiedades nuevas. Usa ||= o valores por defecto en el getter para evitar errores al cargar partidas antiguas.

Abrir el menú por script

Puedes abrir la pantalla de opciones paginada directamente desde un evento o script:

pbFadeOutIn {
  scene = PokemonOption_Scene.new
  screen = PokemonOptionScreen.new(scene)
  screen.pbStartScreen
}

Artículos relacionados