#==============================================================================
# ** Window_RingCommand
#------------------------------------------------------------------------------
# Original Script By XRXS
# Rewrote By SephirothSpawn
# 2005-11-11
# Version 1
#==============================================================================
class Window_RingCommand < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(commands, icons, radius = 64, center_x = nil,
center_y = nil, width = 640, height = 480)
# Sets Up Window
super(0, 0, width, height)
# Sets Center Coordinates to player Center by Default
center_x = $game_player.screen_x - 30 if center_x == nil
center_y = $game_player.screen_y - 48 if center_y == nil
self.contents = Bitmap.new(width-32, height-32)
# Select Font Type, Size and Color
self.contents.font.name = "Arial"
self.contents.font.size = 22
self.contents.font.color = Color.new(255, 255, 255, 255)
# Sets up Window Border and Window Background Opacity
self.opacity, self.back_opacity = 0, 0
# Sets Up Commands & Icons
@commands = commands
@item_max = commands.size
@index = 0
@items = icons
# Sets Up Radius
@radius = radius
# Sets Up Disabled Items
@disabled = Array.new(@item_max, false)
# Sets Up Center of Ring
@cx = center_x
@cy = center_y
# Disabled Icon
@icon_disable = RPG::Cache.icon("")
# Frame Setup
@startup_frames = 20
@moving_frames = 5
setup_move_start
refresh
end
#--------------------------------------------------------------------------
# * Setup Move Start
#--------------------------------------------------------------------------
def setup_move_start
@mode = 1
@steps = @startup_frames
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
case @mode
when 1; refresh_start
when 2; refresh_wait
when 3; refresh_move(1)
when 4; refresh_move(0)
end
rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
self.contents.draw_text(rect, @commands[@index], 1)
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
super
refresh
end
#--------------------------------------------------------------------------
# * Refresh Start
#--------------------------------------------------------------------------
def refresh_start
d1 = 2.0 * Math::PI / @item_max
d2 = 1.0 * Math::PI / @startup_frames
r = @radius - 1.0 * @radius * @steps / @startup_frames
for i in 0...@item_max
j = i - @index + 1
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = 2
end
end
#--------------------------------------------------------------------------
# * Refresh Wait
#--------------------------------------------------------------------------
def refresh_wait
d = 2.0 * Math::PI / @item_max
for i in 0...@item_max
j = i - @index + 1
x = @cx + ( @radius * Math.sin( d * j ) ).to_i
y = @cy - ( @radius * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
#--------------------------------------------------------------------------
# * Refresh Move
#--------------------------------------------------------------------------
def refresh_move( mode )
d1 = 2.0 * Math::PI / @item_max
d2 = d1 / @moving_frames
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index + 1
d = d1 * j + d2 * @steps
x = @cx + ( @radius * Math.sin( d ) ).to_i
y = @cy - ( @radius * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = 2
end
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(x, y, i)
rect = Rect.new(0, 0, @items[i].width, @items[i].height)
if @index == i
self.contents.blt( x, y, @items[i], rect )
if @disabled[@index]
self.contents.blt( x, y, @icon_disable, rect )
end
else
self.contents.blt( x, y, @items[i], rect, 128 )
if @disabled[@index]
self.contents.blt( x, y, @icon_disable, rect, 128 )
end
end
end
#--------------------------------------------------------------------------
# * Disable Item
#--------------------------------------------------------------------------
def disable_item(index)
@disabled[index] = true
end
#--------------------------------------------------------------------------
# * Setup Move Move
#--------------------------------------------------------------------------
def setup_move_move(mode)
if mode == 3
@index -= 1
@index = @items.size - 1 if @index < 0
elsif mode == 4
@index += 1
@index = 0 if @index >= @items.size
else
return
end
@mode = mode
@steps = @moving_frames
end
#--------------------------------------------------------------------------
# * Animation
#--------------------------------------------------------------------------
def animation?
return @mode != 2
end
end