#==============================================================================# +++ MOG - Picture Gallery ACE (v1.3) +++#==============================================================================# By Moghunter# [URL="http://www.atelier-rgss.com/#==============================================================================%23"]http://www.atelier-rgss.com/#==============================================================================#[/URL] Sistema de galeria de imagens.#==============================================================================# Para ativar o script use o comando abaixo através de um evento usando o# comando chamar script. (Call Script)## SceneManager.call(Scene_Picture_Gallery)##==============================================================================# Para disponibilizar as imagens na galeria você deverá usar o seguinte # código através do comando chamar script.## $game_system.gallery[ID] = true## EX $game_system.gallery[10] = true##==============================================================================# Você deverá criar uma pasta com o nome "Gallery" onde as imagens deverão# ser gravadas.## Graphics/Gallery/ ## A nomeação das imagens devem ser numéricas. (ID da imagem)# 0.jpg (Imagem não disponível.)# 1.jpg# 2.jpg# 3.jpg# ...## Prefira usar imagens com resoluções igual ou maior a 544x416 pixels.#==============================================================================# Histórico# 1.3 - Movimento da imagem na diagonal.# - Melhoria no sistema de dispose.# 1.2 - Compatibilidade com o sistema de cursor.# 1.1 - Opção de adicionar o command Picture Gallery no Menu principal.##==============================================================================module MOG_PICTURE_GALLERY #Quantidade maxima de imagens na galeria. MAX_PICTURES = 40 #Ativar o Scene Picture Gallery no Menu PICTURE_GALLERY_MENU_COMMAND = true #Nome do comando apresentado no menu. PICTURE_GALLERY_COMMAND_NAME = "Picture Gallery"end #==============================================================================# ■ Game_System#==============================================================================class Game_System attr_accessor :gallery #------------------------------------------------------------------------------ # ● Initialize #------------------------------------------------------------------------------ alias art_picture_initialize initialize def initialize art_picture_initialize @gallery = [] end end#==============================================================================# ■ RPG#==============================================================================module Cache def self.gallery(filename) load_bitmap("Graphics/Gallery/", filename) endend#==============================================================================# ■ Window_Base#==============================================================================class Window_Base < Window #-------------------------------------------------------------------------- # ● Draw_Thumbnail #-------------------------------------------------------------------------- def draw_thumbnail(x,y,id) bitmap = Cache.gallery(id.to_s) rescue nil return if bitmap == nil src_rect = Rect.new(0, 0, bitmap.width , bitmap.height ) src_rect2 = Rect.new(x, y, 118, 59) self.contents.stretch_blt(src_rect2, bitmap, src_rect) bitmap.dispose endend #==============================================================================# ■ Window_Picture#==============================================================================class Window_Picture < Window_Selectable #------------------------------------------------------------------------------ # ● Initialize #------------------------------------------------------------------------------ def initialize(page) super(0, 64, 640, 480) self.opacity = 0 @index = -1 @page = page @pic_max = MOG_PICTURE_GALLERY::MAX_PICTURES @pic_max = 1 if @pic_max <= 0 @pag_max = @pic_max / 9 if @pag_max == page o = @pag_max * 9 o2 = @pic_max - o @item_max = o2 else @item_max = 9 end @i_max = @item_max refresh(page) select(0) activate end #------------------------------------------------------------------------------ # ● Refresh #------------------------------------------------------------------------------ def refresh(page = 0) if self.contents != nil self.contents.dispose self.contents = nil end if @item_max > 0 self.contents = Bitmap.new(width - 32, 6 * 89) for i in 0...@item_max draw_item(i,page) end end end #------------------------------------------------------------------------------ # ● draw_item #------------------------------------------------------------------------------ def draw_item(index,page) np = 9 * page picture_number = index + 1 + np x = 65 + index % 3 * 183 y = 12 + index / 3 * 89 s = picture_number s = 0 if $game_system.gallery[picture_number] == nil draw_thumbnail(x,y,s) self.contents.draw_text(x + 30,y + 49, 64, 32, "N - " + picture_number.to_s,1) end #------------------------------------------------------------------------------ # ● item_rect #------------------------------------------------------------------------------ def item_rect(index) rect = Rect.new(0, 0, 0, 0) rect.width = 150 rect.height = 90 rect.x = @index % col_max * (rect.width + 32) rect.y = @index / col_max * 90 return rect end #------------------------------------------------------------------------------ # ● Col Max #------------------------------------------------------------------------------ def col_max return 3 end #------------------------------------------------------------------------------ # ● Item Max #------------------------------------------------------------------------------ def item_max return @item_max == nil ? 0 : @item_max end end#==============================================================================# ■ Scene_ArtPictures#==============================================================================class Scene_Picture_Gallery include MOG_PICTURE_GALLERY #------------------------------------------------------------------------------ # ● Main #------------------------------------------------------------------------------ def main setup execute_dispose create_image create_background create_loading_text create_window create_cursor create_button execute_loop execute_dispose end #------------------------------------------------------------------------------ # ● Create_Loading #------------------------------------------------------------------------------ def create_loading_text @loading = Sprite.new @loading.bitmap = Bitmap.new(100,32) @loading.z = 300 @loading.bitmap.font.size = 20 @loading.bitmap.font.bold = true @loading.bitmap.font.name = "Georgia" @loading.bitmap.draw_text(0,0, 100, 32, " ",1) @loading.x = (544 / 2) - 50 @loading.y = (416 / 2) Graphics.transition(20) end #------------------------------------------------------------------------------ # ● Setup #------------------------------------------------------------------------------ def setup @max_pictures = MAX_PICTURES @max_pictures = 1 if @max_pictures <= 0 v = (@max_pictures / 9) v2 = (v - 1) * 9 v3 = (@max_pictures - v2) - 9 if v3 != 0 @max_pages = (@max_pictures / 9) + 1 else @max_pages = (@max_pictures / 9) end @max_pages = 1 if @max_pages == 0 @aw_center = 0 @aw_left = 0 @aw_right = 0 @slide_type = 0 @page_old = 0 @picture_id = 0 @image_active = false @old_index = 0 @picures_enabled = 0 @comp = 0 @ex = 0 @ey = 0 @ex_max = 0 @ey_max = 0 @ex_max_zoom = 0 @ey_max_zoom = 0 for i in 0..MAX_PICTURES @picures_enabled += 1 if $game_system.gallery[i] end end #------------------------------------------------------------------------------ # ● create_background #------------------------------------------------------------------------------ def create_background @background = Sprite.new @background.bitmap = Cache.gallery("Background") @background.z = 0 @background2 = Plane.new @background2.bitmap = Cache.gallery("Background2") @background2.z = -1 end #------------------------------------------------------------------------------ # ● Create Window #------------------------------------------------------------------------------ def create_window @info = Window_Help.new @info.y = 360 @info.opacity = 0 @wp_page = 0 @wp_page_old = @wp_page @wp_index = 0 @wp =[] for i in 0...@max_pages @wp[i] = Window_Picture.new(i) end check_active_window(true) refresh_info_window(true) #@wp[@wp_page].x = 0 end #------------------------------------------------------------------------------ # ● Create_image #------------------------------------------------------------------------------ def create_image @picture = Sprite.new @picture.bitmap = Cache.gallery("") @picture.z = 100 @picture.opacity = 0 end #------------------------------------------------------------------------------ # ● Check Active Window #------------------------------------------------------------------------------ def check_active_window(starting = false) for i in 0...@max_pages if i == @wp_page @wp[@wp_page].active = true @wp[@wp_page].visible = true if @slide_type == 0 @wp[@wp_page].x = 640 else @wp[@wp_page].x = -640 end elsif i == @page_old and starting == false @wp[@page_old].active = false @wp[@page_old].visible = true @wp[@page_old].visible = false if starting @wp[@page_old].x = 0 else @wp[i].active = false @wp[i].visible = false end end end #------------------------------------------------------------------------------ # ● Create Button #------------------------------------------------------------------------------ def create_button @button_image = Cache.gallery("Button") @button_bitmap = Bitmap.new(@button_image.width, @button_image.height) @cw = @button_image.width @ch = @button_image.height / 2 src_rect = Rect.new(0, 0, @cw, @ch) @button_bitmap .blt(0,0, @button_image, src_rect) @button = Sprite.new @button.bitmap = @button_bitmap @button.y = 443 @button.z = 250 @button.opacity = 0 @button_fade_time = 0 end #------------------------------------------------------------------------------ # ● Create Cursor #------------------------------------------------------------------------------ def create_cursor @cx1 = 0 @cx2 = 0 @cursor_speed = 0 image = Cache.gallery("Cursor") @bitmap = Bitmap.new(image.width, image.height) cw = image.width / 2 ch = image.height src_rect = Rect.new(cw, 0, cw, ch) @bitmap.blt(0,0, image, src_rect) @cursor1 = Sprite.new @cursor1.bitmap = @bitmap @cursor1.x = 0 + @cx1 @cursor1.y = 190 @cursor1.z = 200 @bitmap2 = Bitmap.new(image.width, image.height) src_rect2 = Rect.new(0, 0, cw, ch) @bitmap2.blt(0,0, image, src_rect2) @cursor2 = Sprite.new @cursor2.bitmap = @bitmap2 @cursor2.x = 513 + @cx2 @cursor2.y = 190 @cursor2.z = 200 image.dispose if @max_pages == 1 @cursor1.visible = false @cursor2.visible = false end end #------------------------------------------------------------------------------ # ● Execute Loop #------------------------------------------------------------------------------ def execute_loop loop do Graphics.update Input.update update if SceneManager.scene != self break end end end #------------------------------------------------------------------------------ # ● Execute Dispose #------------------------------------------------------------------------------ def execute_dispose return if @background == nil Graphics.freeze for i in 0...@max_pages @wp[i].dispose end @info.dispose if @picture.bitmap != nil @picture.bitmap.dispose end @picture.dispose @background.bitmap.dispose @background.dispose @background = nil @background2.bitmap.dispose @background2.dispose @bitmap.dispose @bitmap2.dispose @cursor1.bitmap.dispose @cursor1.dispose @cursor2.bitmap.dispose @cursor2.dispose @button_bitmap.dispose @button.bitmap.dispose @button.dispose @button_image.dispose if @loading != nil @loading.bitmap.dispose @loading.dispose end end #------------------------------------------------------------------------------ # ● Update #------------------------------------------------------------------------------ def update @wp.each {|wid| wid.update} @info.update if @image_active update_command_image else update_command end update_slide update_image_effect update_cursor_animation refresh_info_window end #------------------------------------------------------------------------------ # ● update_cursor_animation #------------------------------------------------------------------------------ def update_cursor_animation @cursor_speed += 1 case @cursor_speed when 1..20 @cx1 += 1 @cx2 -= 1 when 21..40 @cx1 -= 1 @cx2 += 1 else @cursor_speed = 0 @cx1 = 0 @cx2 = 0 end @cursor1.x = 0 + @cx1 @cursor2.x = 514 + @cx2 end #------------------------------------------------------------------------------ # ● Update Image Effect #------------------------------------------------------------------------------ def update_image_effect return if @wp[@wp_page].x != 0 @button_fade_time -= 1 if @button_fade_time > 0 if @image_active @picture.opacity += 15 if @button_fade_time != 0 @button.opacity += 5 else if @button.y < 416 @button.opacity -= 10 @button.y += 1 end end @wp[@wp_page].contents_opacity -= 15 @info.contents_opacity -= 15 @background.opacity -= 15 @cursor1.opacity -= 15 @cursor2.opacity -= 15 else @picture.opacity -= 10 @button.opacity -= 15 @wp[@wp_page].contents_opacity += 15 @info.contents_opacity += 15 @background.opacity += 15 @cursor1.opacity += 15 @cursor2.opacity += 15 end end #------------------------------------------------------------------------------ # ● Refresh Info Window #------------------------------------------------------------------------------ def refresh_info_window(starting = false) return if @image_active return if @wp_page_old == @wp_page and starting == false @wp_page_old = @wp_page page = @wp_page + 1 @picture_id = (9 * @wp_page) + @wp[@wp_page].index + 1 p_pages = "Page - " + page.to_s + " / " + @max_pages.to_s comp = " Completed " + (@picures_enabled.to_f / @max_pictures.to_f * 100).truncate.to_s + "%" p_number = " Documents " + @picures_enabled.to_s + " / " + @max_pictures.to_s @info.set_text(" " + p_pages + comp + p_number) end #------------------------------------------------------------------------------ # ● Update Slide #------------------------------------------------------------------------------ def update_slide @background2.ox += 1 if @loading != nil @loading.opacity -= 5 if @loading.opacity <= 0 @loading.bitmap.dispose @loading.dispose @loading = nil end end return if @wp[@wp_page].x == 0 slide_speed = 25 @picture.opacity = 0 @background.opacity = 255 if @slide_type == 1 if @wp[@wp_page].x < 0 @wp[@wp_page].x += slide_speed if @wp[@wp_page].x >= 0 @wp[@wp_page].x = 0 end end if @wp[@page_old].x < 640 @wp[@page_old].x += slide_speed if @wp[@page_old].x >= 544 @wp[@page_old].x = 544 end end else if @wp[@wp_page].x > 0 @wp[@wp_page].x -= slide_speed if @wp[@wp_page].x <= 0 @wp[@wp_page].x = 0 end end if @wp[@page_old].x > -544 @wp[@page_old].x -= slide_speed if @wp[@page_old].x <= -544 @wp[@page_old].x = -544 end end end if @slide_type == 0 @wp[@wp_page].x = 0 if @wp[@wp_page].x <= 0 else @wp[@wp_page].x = 0 if @wp[@wp_page].x >= 0 end end #------------------------------------------------------------------------------ # ● Check_limite #------------------------------------------------------------------------------ def check_limit if @wp_page < 0 @wp_page = @max_pages - 1 elsif @wp_page >= @max_pages @wp_page = 0 end check_active_window end #------------------------------------------------------------------------------ # ● Update Command Image #------------------------------------------------------------------------------ def update_command_image if Input.trigger?(Input:: or Input.trigger?(Input::C) Sound.play_cursor @image_active = false @wp[@wp_page].active = true return end if Input.trigger?(Input::R) or Input.trigger?(Input::L) Sound.play_cursor execute_zoom end @ex += 4 if Input.press?(Input::RIGHT) @ex -= 4 if Input.press?(Input::LEFT) @ey += 4 if Input.press?(Input::DOWN) @ey -= 4 if Input.press?(Input::UP) @ex = @ex_max + @ex_max_zoom if @ex > @ex_max + @ex_max_zoom @ex = 0 if @ex < 0 @ey = @ey_max + @ey_max_zoom if @ey > @ey_max + @ey_max_zoom @ey = 0 if @ey < 0 @picture.x = -@ex @picture.y = -@ey end #------------------------------------------------------------------------------ # ● Execute Zoom #------------------------------------------------------------------------------ def execute_zoom if @picture.zoom_x == 1.0 @picture.zoom_x = 1.5 @picture.zoom_y = 1.5 refresh_button(1) @ex_max_zoom = (@picture.bitmap.width / 2) if @ex != @ex_max @ex += @ex_max_zoom / 2 else if @ex_max != 0 @ex += @ex_max_zoom else @ex += @ex_max_zoom / 2 end end @ey_max_zoom = (@picture.bitmap.height / 2) if @ey != @ey_max @ey += @ey_max_zoom / 2 else if @ey_max != 0 @ey += @ey_max_zoom else @ey += @ey_max_zoom / 2 end end else if @picture.bitmap.width > 640 or @picture.bitmap.height > 480 refresh_button(1) else refresh_button(0) end @ex -= @ex_max_zoom / 2 @ey -= @ey_max_zoom / 2 @picture.zoom_x = 1.0 @picture.zoom_y = 1.0 @ex_max_zoom = 0 @ey_max_zoom = 0 end end #------------------------------------------------------------------------------ # ● check_avaliable_picture? #------------------------------------------------------------------------------ def check_avaliable_picture? @picture_id = (9 * @wp_page) + @wp[@wp_page].index + 1 return false if $game_system.gallery[@picture_id] == nil return true end #------------------------------------------------------------------------------ # ● create_bitmap #------------------------------------------------------------------------------ def create_bitmap @picture.opacity = 0 @picture.bitmap.dispose @picture.bitmap = Cache.gallery(@picture_id.to_s) rescue nil @ex = 0 @ey = 0 @ex_max_zoom = 0 @ey_max_zoom = 0 @picture.zoom_x = 1.0 @picture.zoom_y = 1.0 if @picture.bitmap == nil @picture.bitmap = Cache.gallery("") refresh_button(0) return end if @picture.bitmap.width > 544 @ex_max = @picture.bitmap.width - 544 else @ex_max = 0 end if @picture.bitmap.height > 416 @ey_max = @picture.bitmap.height - 416 else @ey_max = 0 end if @picture.bitmap.width > 544 or @picture.bitmap.height > 416 refresh_button(1) else refresh_button(0) end end #------------------------------------------------------------------------------ # ● Refresh Button #------------------------------------------------------------------------------ def refresh_button(type = 0) @button.bitmap.clear if type == 0 src_rect = Rect.new(0, 0, @cw, @ch) else src_rect = Rect.new(0, @ch, @cw, @ch) end @button_bitmap .blt(0,0, @button_image, src_rect) @button.y = 379 @button_fade_time = 120 @button.opacity = 0 unless @button.y == 379 end #------------------------------------------------------------------------------ # ● Update Command #------------------------------------------------------------------------------ def update_command return if @wp[@wp_page].x != 0 if Input.trigger?(Input:: Sound.play_cancel SceneManager.return return end if Input.trigger?(Input::C) if check_avaliable_picture? Sound.play_ok @image_active = true @wp[@wp_page].active = false create_bitmap else Sound.play_buzzer end return end if Input.trigger?(Input::L) and @max_pages != 1 Sound.play_cursor @page_old = @wp_page @wp_page -= 1 @slide_type = 1 check_limit return elsif Input.trigger?(Input::R) and @max_pages != 1 Sound.play_cursor @page_old = @wp_page @wp_page += 1 @slide_type = 0 check_limit return end end end if MOG_PICTURE_GALLERY::PICTURE_GALLERY_MENU_COMMAND#==============================================================================# ■ Window Menu Command#==============================================================================class Window_MenuCommand < Window_Command #------------------------------------------------------------------------------ # ● Add Main Commands #------------------------------------------------------------------------------ alias mog_picture_gallery_add_main_commands add_main_commands def add_main_commands mog_picture_gallery_add_main_commands add_command(MOG_PICTURE_GALLERY::PICTURE_GALLERY_COMMAND_NAME, :picture, main_commands_enabled) endend #==============================================================================# ■ Scene Menu#==============================================================================class Scene_Menu < Scene_MenuBase #------------------------------------------------------------------------------ # ● Create Command Windows #------------------------------------------------------------------------------ alias mog_picture_gallery_create_command_window create_command_window def create_command_window mog_picture_gallery_create_command_window @command_window.set_handler(:picture, method(:Picture_Gallery)) end #------------------------------------------------------------------------------ # ● Picture Gallery #------------------------------------------------------------------------------ def Picture_Gallery SceneManager.call(Scene_Picture_Gallery) end end end$mog_rgss3_picture_gallery = true