Window_Selectable

Publié le par chindan

#============================================
# ¡ Window_Selectable
#----------------------------------------------
# @ƒJ[ƒƒ‹‚̈ړ®‚âƒXƒNƒ[ƒ‹‚Ì‹@”‚ðŽ‚ÂƒEƒBƒ“ƒhƒEƒNƒ‰ƒX‚Å‚·B
#============================================

class Window_Selectable < Window_Base
#------------------------------------------
# œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
#------------------------------------------
attr_reader :index # ƒJ[ƒƒ‹ˆÊ’u
attr_reader :help_window # ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE
#------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
# x : ƒEƒBƒ“ƒhƒE‚Ì X À•W
# y : ƒEƒBƒ“ƒhƒE‚Ì Y À•W
# width : ƒEƒBƒ“ƒhƒE‚Ì•
# height : ƒEƒBƒ“ƒhƒE‚̍‚‚³
#------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@item_max = 1
@column_max = 1
@index = -1
end
#------------------------------------------
# œ ƒJ[ƒƒ‹ˆÊ’u‚̐ݒè
# index : V‚µ‚¢ƒJ[ƒƒ‹ˆÊ’u
#------------------------------------------
def index=(index)
@index = index
# ƒwƒ‹ƒvƒeƒLƒXƒg‚ðXV (update_help ‚ÍŒp³æ‚Å’è‹`‚³‚ê‚é)
if self.active and @help_window != nil
update_help
end
# ƒJ[ƒƒ‹‚Ì‹éŒ`‚ðXV
update_cursor_rect
end
#------------------------------------------
# œ s”‚̎擾
#------------------------------------------
def row_max
# €–ڐ”‚Æ—ñ”‚©‚çs”‚ðŽZo
return (@item_max + @column_max - 1) / @column_max
end
#------------------------------------------
# œ æ“ª‚̍s‚̎擾
#------------------------------------------
def top_row
# ƒEƒBƒ“ƒhƒE“à—e‚Ì“]‘—Œ³ Y À•W‚ðA1 s‚̍‚‚³ 32 ‚ÅŠ„‚é
return self.oy / 32
end
#------------------------------------------
# œ æ“ª‚̍s‚̐ݒè
# row : æ“ª‚É•Ž¦‚·‚és
#------------------------------------------
def top_row=(row)
# row ‚ª 0 –¢–ž‚̏ꍇ‚Í 0 ‚ɏC³
if row < 0
row = 0
end
# row ‚ª row_max - 1 ’´‚̏ꍇ‚Í row_max - 1 ‚ɏC³
if row > row_max - 1
row = row_max - 1
end
# row ‚É 1 s‚̍‚‚³ 32 ‚ðŠ|‚¯AƒEƒBƒ“ƒhƒE“à—e‚Ì“]‘—Œ³ Y À•W‚Æ‚·‚é
self.oy = row * 32
end
#------------------------------------------
# œ 1 ƒy[ƒW‚É•Ž¦‚Å‚«‚és”‚̎擾
#------------------------------------------
def page_row_max
# ƒEƒBƒ“ƒhƒE‚̍‚‚³‚©‚çAƒtƒŒ[ƒ€‚̍‚‚³ 32 ‚ðˆø‚«A1 s‚̍‚‚³ 32 ‚ÅŠ„‚é
return (self.height - 32) / 32
end
#------------------------------------------
# œ 1 ƒy[ƒW‚É•Ž¦‚Å‚«‚鍀–ڐ”‚̎擾
#------------------------------------------
def page_item_max
# s” page_row_max ‚É —ñ” @column_max ‚ðŠ|‚¯‚é
return page_row_max * @column_max
end
#------------------------------------------
# œ ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE‚̐ݒè
# help_window : V‚µ‚¢ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE
#------------------------------------------
def help_window=(help_window)
@help_window = help_window
# ƒwƒ‹ƒvƒeƒLƒXƒg‚ðXV (update_help ‚ÍŒp³æ‚Å’è‹`‚³‚ê‚é)
if self.active and @help_window != nil
update_help
end
end
#------------------------------------------
# œ ƒJ[ƒƒ‹‚Ì‹éŒ`XV
#------------------------------------------
def update_cursor_rect
# ƒJ[ƒƒ‹ˆÊ’u‚ª 0 –¢–ž‚̏ꍇ
if @index < 0
self.cursor_rect.empty
return
end
# Œ»Ý‚̍s‚ðŽæ“¾
row = @index / @column_max
# Œ»Ý‚̍s‚ªA•Ž¦‚³‚ê‚Ä‚¢‚éæ“ª‚̍s‚æ‚è‘O‚̏ꍇ
if row < self.top_row
# Œ»Ý‚̍s‚ªæ“ª‚É‚È‚é‚悤‚ɃXƒNƒ[ƒ‹
self.top_row = row
end
# Œ»Ý‚̍s‚ªA•Ž¦‚³‚ê‚Ä‚¢‚éÅŒã”ö‚̍s‚æ‚èŒã‚ë‚̏ꍇ
if row > self.top_row + (self.page_row_max - 1)
# Œ»Ý‚̍s‚ªÅŒã”ö‚É‚È‚é‚悤‚ɃXƒNƒ[ƒ‹
self.top_row = row - (self.page_row_max - 1)
end
# ƒJ[ƒƒ‹‚Ì•‚ðŒvŽZ
cursor_width = self.width / @column_max - 32
# ƒJ[ƒƒ‹‚̍À•W‚ðŒvŽZ
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
# ƒJ[ƒƒ‹‚Ì‹éŒ`‚ðXV
self.cursor_rect.set(x, y, cursor_width, 32)
end
#------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#------------------------------------------
def update
super
# ƒJ[ƒƒ‹‚̈ړ®‚ª‰Â”‚ȏó‘Ԃ̏ꍇ
if self.active and @item_max > 0 and @index >= 0
# •ûŒüƒ{ƒ^ƒ“‚̉º‚ª‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::DOWN)
# —ñ”‚ª 1 ‚©‚ •ûŒüƒ{ƒ^ƒ“‚̉º‚̉Ÿ‰ºó‘Ô‚ªƒŠƒs[ƒg‚Å‚È‚¢ê‡‚©A
# ‚Ü‚½‚̓J[ƒƒ‹ˆÊ’u‚ª(€–ڐ” - —ñ”)‚æ‚è‘O‚̏ꍇ
if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
@index < @item_max - @column_max
# ƒJ[ƒƒ‹‚ð‰º‚ÉˆÚ“®
$game_system.se_play($data_system.cursor_se)
@index = (@index + @column_max) % @item_max
end
end
# •ûŒüƒ{ƒ^ƒ“‚̏オ‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::UP)
# —ñ”‚ª 1 ‚©‚ •ûŒüƒ{ƒ^ƒ“‚̏ã‚̉Ÿ‰ºó‘Ô‚ªƒŠƒs[ƒg‚Å‚È‚¢ê‡‚©A
# ‚Ü‚½‚̓J[ƒƒ‹ˆÊ’u‚ª—ñ”‚æ‚èŒã‚ë‚̏ꍇ
if (@column_max == 1 and Input.trigger?(Input::UP)) or
@index >= @column_max
# ƒJ[ƒƒ‹‚ðã‚Ɉړ®
$game_system.se_play($data_system.cursor_se)
@index = (@index - @column_max + @item_max) % @item_max
end
end
# •ûŒüƒ{ƒ^ƒ“‚̉E‚ª‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::RIGHT)
# —ñ”‚ª 2 ˆÈã‚ŁAƒJ[ƒƒ‹ˆÊ’u‚ª(€–ڐ” - 1)‚æ‚è‘O‚̏ꍇ
if @column_max >= 2 and @index < @item_max - 1
# ƒJ[ƒƒ‹‚ð‰E‚Ɉړ®
$game_system.se_play($data_system.cursor_se)
@index += 1
end
end
# •ûŒüƒ{ƒ^ƒ“‚̍¶‚ª‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::LEFT)
# —ñ”‚ª 2 ˆÈã‚ŁAƒJ[ƒƒ‹ˆÊ’u‚ª 0 ‚æ‚èŒã‚ë‚̏ꍇ
if @column_max >= 2 and @index > 0
# ƒJ[ƒƒ‹‚ð¶‚ÉˆÚ“®
$game_system.se_play($data_system.cursor_se)
@index -= 1
end
end
# R ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::R)
# •Ž¦‚³‚ê‚Ä‚¢‚éÅŒã”ö‚̍s‚ªAƒf[ƒ^ã‚̍Ōã‚̍s‚æ‚è‚à‘O‚̏ꍇ
if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
# ƒJ[ƒƒ‹‚ð 1 ƒy[ƒWŒã‚ë‚Ɉړ®
$game_system.se_play($data_system.cursor_se)
@index = [@index + self.page_item_max, @item_max - 1].min
self.top_row += self.page_row_max
end
end
# L ƒ{ƒ^ƒ“‚ª‰Ÿ‚³‚ꂽê‡
if Input.repeat?(Input::L)
# •Ž¦‚³‚ê‚Ä‚¢‚éæ“ª‚̍s‚ª 0 ‚æ‚èŒã‚ë‚̏ꍇ
if self.top_row > 0
# ƒJ[ƒƒ‹‚ð 1 ƒy[ƒW‘O‚Ɉړ®
$game_system.se_play($data_system.cursor_se)
@index = [@index - self.page_item_max, 0].max
self.top_row -= self.page_row_max
end
end
end
# ƒwƒ‹ƒvƒeƒLƒXƒg‚ðXV (update_help ‚ÍŒp³æ‚Å’è‹`‚³‚ê‚é)
if self.active and @help_window != nil
update_help
end
# ƒJ[ƒƒ‹‚Ì‹éŒ`‚ðXV
update_cursor_rect
end
end

Publié dans poubelle

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article