10-31-2005, 01:00 PM
This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given.
No support is given.
This Code allows you to make Customizable Ring Menu's as you would Command Windows.
Insert this Below Window_Command
Code:
#==============================================================================
# Window_RingMenu
#-----------------------------------------------------------------
# Created By SephirothSpawn (10.29.05)
# Last Updated: (11.11.05)
#==============================================================================
#==============================================================================
# Class Window Ring Menu
#==============================================================================
class Window_RingMenu < 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
Now, just call it like this:
Code:
blah = Window_RingMenu.new(commands, icons, radius, center_x, center_y, width, height)
Example calling:
Code:
# Window Commands
commands = [ "Item", "Skill", "Equip", "Status", "Save", "Quit" ]
# Window Icons
icons = [ RPG::Cache.icon("034-Item03"), RPG::Cache.icon("044-Skill01"),
RPG::Cache.icon("001-Weapon01"), RPG::Cache.icon("050-Skill07"),
RPG::Cache.icon("038-Item07"), RPG::Cache.icon("046-Skill03")]
@command_window = Window_RingMenu.new(commands, icons,128)
Credits to the Orginal Ring Menu Creator for getting me started.