This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
rpgskeleton/Scripts/RPG/Window_NameInput.rb
2014-04-23 21:59:50 -07:00

255 lines
10 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
#==============================================================================
# ** Window_NameInput
#------------------------------------------------------------------------------
# This window is used to select text characters on the name input screen.
#==============================================================================
class Window_NameInput < Window_Selectable
#--------------------------------------------------------------------------
# * Character Tables (Latin)
#--------------------------------------------------------------------------
LATIN1 = [ 'A','B','C','D','E', 'a','b','c','d','e',
'F','G','H','I','J', 'f','g','h','i','j',
'K','L','M','N','O', 'k','l','m','n','o',
'P','Q','R','S','T', 'p','q','r','s','t',
'U','V','W','X','Y', 'u','v','w','x','y',
'Z','[',']','^','_', 'z','{','}','|','~',
'0','1','2','3','4', '!','#','$','%','&',
'5','6','7','8','9', '(',')','*','+','-',
'/','=','@','<','>', ':',';',' ','Page','OK']
LATIN2 = [ 'Á','É','Í','Ó','Ú', 'á','é','í','ó','ú',
'À','È','Ì','Ò','Ù', 'à','è','ì','ò','ù',
'Â','Ê','Î','Ô','Û', 'â','ê','î','ô','û',
'Ä','Ë','Ï','Ö','Ü', 'ä','ë','ï','ö','ü',
'Ā','Ē','Ī','Ō','Ū', 'ā','ē','ī','ō','ū',
'Ã','Å','Æ','Ç','Ð', 'ã','å','æ','ç','ð',
'Ñ','Õ','Ø','Š','Ŵ', 'ñ','õ','ø','š','ŵ',
'Ý','Ŷ','Ÿ','Ž','Þ', 'ý','ÿ','ŷ','ž','þ',
'IJ','Œ','ij','œ','ß', '«','»',' ','Page','OK']
#--------------------------------------------------------------------------
# * Character Tables (Japanese)
#--------------------------------------------------------------------------
JAPAN1 = [ 'あ','い','う','え','お', 'が','ぎ','ぐ','げ','ご',
'か','き','く','け','こ', 'ざ','じ','ず','ぜ','ぞ',
'さ','し','す','せ','そ', 'だ','ぢ','づ','で','ど',
'た','ち','つ','て','と', 'ば','び','ぶ','べ','ぼ',
'な','に','ぬ','ね','の', 'ぱ','ぴ','ぷ','ぺ','ぽ',
'は','ひ','ふ','へ','ほ', 'ぁ','ぃ','ぅ','ぇ','ぉ',
'ま','み','む','め','も', 'っ','ゃ','ゅ','ょ','ゎ',
'や','ゆ','よ','わ','ん', 'ー','','・','','☆',
'ら','り','る','れ','ろ', 'ゔ','を',' ','カナ','決定']
JAPAN2 = [ 'ア','イ','ウ','エ','オ', 'ガ','ギ','グ','ゲ','ゴ',
'カ','キ','ク','ケ','コ', 'ザ','ジ','ズ','ゼ','ゾ',
'サ','シ','ス','セ','ソ', 'ダ','ヂ','ヅ','デ','ド',
'タ','チ','ツ','テ','ト', 'バ','ビ','ブ','ベ','ボ',
'ナ','ニ','ヌ','ネ','', 'パ','ピ','プ','ペ','ポ',
'ハ','ヒ','フ','ヘ','ホ', 'ァ','ィ','ゥ','ェ','ォ',
'マ','ミ','ム','メ','モ', 'ッ','ャ','ュ','ョ','ヮ',
'ヤ','ユ','ヨ','ワ','ン', 'ー','','・','','☆',
'ラ','リ','ル','レ','ロ', 'ヴ','ヲ',' ','英数','決定']
JAPAN3 = [ '','','','','', '','','','','',
'','','','','', '','','','','',
'','','','','', '','','','','',
'','','','','', '','','','','',
'','','','','', '','','','','',
'','','','','_', '','','','','',
'','','','','', '','','','','',
'','','','','', '','','','','',
'','','','','', '','',' ','かな','決定']
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(edit_window)
super(edit_window.x, edit_window.y + edit_window.height + 8,
edit_window.width, fitting_height(9))
@edit_window = edit_window
@page = 0
@index = 0
refresh
update_cursor
activate
end
#--------------------------------------------------------------------------
# * Get Text Table
#--------------------------------------------------------------------------
def table
return [JAPAN1, JAPAN2, JAPAN3] if $game_system.japanese?
return [LATIN1, LATIN2]
end
#--------------------------------------------------------------------------
# * Get Text Character
#--------------------------------------------------------------------------
def character
@index < 88 ? table[@page][@index] : ""
end
#--------------------------------------------------------------------------
# * Determining if Page Changed and Cursor Location
#--------------------------------------------------------------------------
def is_page_change?
@index == 88
end
#--------------------------------------------------------------------------
# * Determine Cursor Location: Confirmation
#--------------------------------------------------------------------------
def is_ok?
@index == 89
end
#--------------------------------------------------------------------------
# * Get Rectangle for Displaying Item
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new
rect.x = index % 10 * 32 + index % 10 / 5 * 16
rect.y = index / 10 * line_height
rect.width = 32
rect.height = line_height
rect
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
change_color(normal_color)
90.times {|i| draw_text(item_rect(i), table[@page][i], 1) }
end
#--------------------------------------------------------------------------
# * Update Cursor
#--------------------------------------------------------------------------
def update_cursor
cursor_rect.set(item_rect(@index))
end
#--------------------------------------------------------------------------
# * Determine if Cursor is Moveable
#--------------------------------------------------------------------------
def cursor_movable?
active
end
#--------------------------------------------------------------------------
# * Move Cursor Down
# wrap : Wraparound allowed
#--------------------------------------------------------------------------
def cursor_down(wrap)
if @index < 80 or wrap
@index = (index + 10) % 90
end
end
#--------------------------------------------------------------------------
# * Move Cursor Up
# wrap : Wraparound allowed
#--------------------------------------------------------------------------
def cursor_up(wrap)
if @index >= 10 or wrap
@index = (index + 80) % 90
end
end
#--------------------------------------------------------------------------
# * Move Cursor Right
# wrap : Wraparound allowed
#--------------------------------------------------------------------------
def cursor_right(wrap)
if @index % 10 < 9
@index += 1
elsif wrap
@index -= 9
end
end
#--------------------------------------------------------------------------
# * Move Cursor Left
# wrap : Wraparound allowed
#--------------------------------------------------------------------------
def cursor_left(wrap)
if @index % 10 > 0
@index -= 1
elsif wrap
@index += 9
end
end
#--------------------------------------------------------------------------
# * Move to Next Page
#--------------------------------------------------------------------------
def cursor_pagedown
@page = (@page + 1) % table.size
refresh
end
#--------------------------------------------------------------------------
# * Move to Previous Page
#--------------------------------------------------------------------------
def cursor_pageup
@page = (@page + table.size - 1) % table.size
refresh
end
#--------------------------------------------------------------------------
# * Cursor Movement Processing
#--------------------------------------------------------------------------
def process_cursor_move
last_page = @page
super
update_cursor
Sound.play_cursor if @page != last_page
end
#--------------------------------------------------------------------------
# * Handling Processing for OK and Cancel Etc.
#--------------------------------------------------------------------------
def process_handling
return unless open? && active
process_jump if Input.trigger?(:A)
process_back if Input.repeat?(:B)
process_ok if Input.trigger?(:C)
end
#--------------------------------------------------------------------------
# * Jump to OK
#--------------------------------------------------------------------------
def process_jump
if @index != 89
@index = 89
Sound.play_cursor
end
end
#--------------------------------------------------------------------------
# * Go Back One Character
#--------------------------------------------------------------------------
def process_back
Sound.play_cancel if @edit_window.back
end
#--------------------------------------------------------------------------
# * Processing When OK Button Is Pressed
#--------------------------------------------------------------------------
def process_ok
if !character.empty?
on_name_add
elsif is_page_change?
Sound.play_ok
cursor_pagedown
elsif is_ok?
on_name_ok
end
end
#--------------------------------------------------------------------------
# * Add Text to Name
#--------------------------------------------------------------------------
def on_name_add
if @edit_window.add(character)
Sound.play_ok
else
Sound.play_buzzer
end
end
#--------------------------------------------------------------------------
# * Decide Name
#--------------------------------------------------------------------------
def on_name_ok
if @edit_window.name.empty?
if @edit_window.restore_default
Sound.play_ok
else
Sound.play_buzzer
end
else
Sound.play_ok
call_ok_handler
end
end
end