Advertisement
neutale

BaseScript: Enhanced Image Sprites

Jan 4th, 2020
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 26.70 KB | None | 0 0
  1. #encoding:utf-8
  2.  
  3. =begin
  4. *******************************************************************************************
  5.  
  6.    * BaseScript: Enhanced Image Sprites *
  7.  
  8.                        for RGSS3
  9.  
  10.         Ver 1.00   2014.09.24
  11.  
  12.    Authot:魂(Lctseng),Bahamut forum ID:play123
  13.    
  14.  
  15.    For redistribution, please keep this label
  16.  
  17.    Website:http://home.gamer.com.tw/homeindex.php?owner=play123
  18.  
  19.    Function:
  20.    Most scripts related to images published by Lctseng-
  21.    need to have this script as a base-script
  22.                        
  23.  
  24.    Update log:
  25.     Ver 1.00 :
  26.     Date:2014.09.24
  27.     Summary:■、First release
  28.  
  29.  
  30.     This script modifies:
  31.                            ■ Sprite
  32.                          
  33.     This script adds the following categories and modules:
  34.                            ■ SpriteDrawer
  35.                            ■ SpriteFader
  36.                            ■ SpriteSlider
  37.                            ■ SpriteSensor
  38.                            ■ SpriteZoomer
  39.                          
  40.  
  41. *******************************************************************************************
  42. =end
  43.  
  44.  
  45. #*******************************************************************************************
  46. #
  47. #   DO NOT MODIFY UNLESS YOU KNOW WHAT TO DO !
  48. #
  49. #*******************************************************************************************
  50.  
  51. #--------------------------------------------------------------------------
  52. # ★ Script version information
  53. #--------------------------------------------------------------------------
  54. if !$lctseng_scripts  
  55.   $lctseng_scripts = {}
  56. end
  57.  
  58.  
  59. $lctseng_scripts[:sprite_ex] = "1.00"
  60.  
  61. puts "Load Script: Lctseng-Image Sprite Enhancement, Version:#{$lctseng_scripts[:sprite_ex]}"
  62.  
  63.  
  64.  
  65. #encoding:utf-8
  66. #==============================================================================
  67. # ■ Sprite
  68. #------------------------------------------------------------------------------
  69. #  Area
  70. #==============================================================================
  71.  
  72. class  Sprite
  73.   #--------------------------------------------------------------------------
  74.   # ● Perform sprite centering
  75.   #--------------------------------------------------------------------------
  76.   def center_sprite
  77.     center_origin
  78.     self.x = Graphics.width / 2
  79.     self.y = Graphics.height / 2
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● Centering the origin of the sprite
  83.   #--------------------------------------------------------------------------
  84.   def center_origin
  85.     if self.bitmap
  86.       self.ox = self.bitmap.width / 2
  87.       self.oy = self.bitmap.height / 2
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● Is the mouse inside area?
  92.   #--------------------------------------------------------------------------
  93.   def mouse_in_area?
  94.     if self.bitmap
  95.       Mouse.area?(self.x - self.ox,self.y - self.oy,self.bitmap.width,self.bitmap.height)
  96.     else
  97.       false
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● Current position
  102.   #--------------------------------------------------------------------------
  103.   def current_pos
  104.     [self.x , self.y]
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● Set position
  108.   #--------------------------------------------------------------------------
  109.   def set_pos(pos)
  110.     self.x = pos[0]
  111.     self.y = pos[1]
  112.   end
  113. end
  114.  
  115.  
  116. #encoding:utf-8
  117. #==============================================================================
  118. # ■ SpriteDrawer
  119. #------------------------------------------------------------------------------
  120. #  Module that allows sprites to draw text like Window
  121. # UPDATE:14008062248 Ver 1.3
  122. #==============================================================================
  123. module SpriteDrawer
  124.   #--------------------------------------------------------------------------
  125.   # ● Get window frame bitmap
  126.   #--------------------------------------------------------------------------
  127.   def windowskin
  128.     Cache.system("Window")
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● Get content size
  132.   #--------------------------------------------------------------------------
  133.   def text_size(str)
  134.     self.bitmap.text_size(str)
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● Get the drawn rectangle of the item
  138.   #--------------------------------------------------------------------------
  139.   def item_rect(index)
  140.     rect = Rect.new
  141.     rect.width = item_width
  142.     rect.height = item_height
  143.     rect.x = index % col_max * (item_width + spacing)
  144.     rect.y = index / col_max * item_height
  145.     rect
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● Get item width
  149.   #--------------------------------------------------------------------------
  150.   def item_width
  151.     192
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● Get item height
  155.   #--------------------------------------------------------------------------
  156.   def item_height
  157.     line_height
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● Get the number of columns
  161.   #--------------------------------------------------------------------------
  162.   def col_max
  163.     return 1
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● Get the width of the line spacing
  167.   #--------------------------------------------------------------------------
  168.   def spacing
  169.     return 32
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● Get text color
  173.   #     n : Text color number(0..31)
  174.   #--------------------------------------------------------------------------
  175.   def text_color(n)
  176.     windowskin.get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● Draw text
  180.   #--------------------------------------------------------------------------
  181.   def draw_text(*args,&block)
  182.     self.bitmap.draw_text(*args,&block)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● Draw icon
  186.   #     enabled : Valid sign. Draw with translucency when false
  187.   #--------------------------------------------------------------------------
  188.   def draw_icon(icon_index, x, y, enabled = true)
  189.     temp_bitmap = Cache.system("Iconset")
  190.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  191.     self.bitmap.blt(x, y, temp_bitmap, rect, enabled ? 255 : translucent_alpha)
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● Draw icon, specify target rectangle
  195.   #     enabled : Valid sign. Draw with translucency when false
  196.   #--------------------------------------------------------------------------
  197.   def draw_icon_with_rect(icon_index,  target_rect ,enabled = true)
  198.     temp_bitmap = Cache.system("Iconset")
  199.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  200.     self.bitmap.stretch_blt(target_rect, temp_bitmap, rect, enabled ? 255 : translucent_alpha)
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● Get transparency for translucent drawing
  204.   #--------------------------------------------------------------------------
  205.   def translucent_alpha
  206.     return 160
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● Draw Item Name
  210.   #     enabled : Valid sign. Draw with translucency when false
  211.   #--------------------------------------------------------------------------
  212.   def draw_item_name(item, x, y, enabled = true, width = 172)
  213.     return unless item
  214.     draw_icon(item.icon_index, x, y, enabled)
  215.     change_color(normal_color, enabled)
  216.     draw_text(x + 24, y, width, line_height, item.name)
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● Draw Item Detail Name
  220.   #--------------------------------------------------------------------------
  221.   def draw_detail_name(item, x, y, enabled = true, width = 172)
  222.     return unless item.is_a?(Game_Equip_Details)
  223.     color = item.fmts[1]
  224.     match_item = item.get_match
  225.     return unless match_item
  226.     item_name = sprintf(item.fmts[0],match_item.name)
  227.     item_icon_index = match_item.icon_index
  228.     if enabled
  229.       change_color(text_color(color),true)
  230.     else
  231.       change_color(normal_color, false)
  232.     end
  233.     draw_icon(item_icon_index, x, y, enabled)
  234.     draw_text(x + 24, y, width, line_height, item_name)
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● Draw name
  238.   #--------------------------------------------------------------------------
  239.   def draw_actor_name(actor, x, y, width = 112,align = 0)
  240.     # change_color(hp_color(actor))
  241.     draw_text(x, y, width, line_height, actor.name,align)
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● Change content drawing color
  245.   #     enabled : Valid sign. Draw with translucent when false
  246.   #--------------------------------------------------------------------------
  247.   def change_color(color, enabled = true)
  248.     self.bitmap.font.color.set(color)
  249.     self.bitmap.font.color.alpha = translucent_alpha unless enabled
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● Change font
  253.   #--------------------------------------------------------------------------
  254.   def change_font(font)
  255.     self.bitmap.font = font if self.bitmap
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● Get line height
  259.   #--------------------------------------------------------------------------
  260.   def line_height
  261.     return 24
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● Change font size
  265.   #--------------------------------------------------------------------------
  266.   def change_font_size(sz)
  267.     self.bitmap.font.size = sz
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● Draw value bar content
  271.   # Given: coordinates, maximum value, current value, file name
  272.   #--------------------------------------------------------------------------
  273.   def draw_gauge_content(dx,dy,current,max,filename)
  274.     bitmap = Cache.battle(filename)
  275.     rect = bitmap.rect.clone
  276.     if max <= 0
  277.       rate = 0
  278.     else
  279.       rate = (current.to_f/max)
  280.     end
  281.     rect.width = (rect.width * rate + 0.5).round
  282.     self.bitmap.blt(dx,dy,bitmap,rect)
  283.     change_color(normal_color)
  284.     draw_text(dx,dy-3,bitmap.rect.width - 3,16,sprintf("%d / %d",current,max),2)
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● Draw bullet information
  288.   #--------------------------------------------------------------------------
  289.   def draw_bullet_info_by_detail(detail,x,y,dw = 115 , dh = 18)
  290.     # Font size setting: bullet type
  291.     change_font(Lctseng.bullet_font)
  292.    
  293.     item = nil
  294.     if detail
  295.       item = detail.get_match
  296.     end
  297.     if item && item.need_bullet?
  298.       ammo = detail.ammo
  299.       bullet_item = ammo.item
  300.       if detail.has_loaded_bullet_id? && bullet_item
  301.         draw_bullet(ammo,x,y,dw,dh)
  302.       else
  303.         change_color(system_color)
  304.         draw_text(x,y,dw,dh,"Not equipped with any bullets")
  305.       end
  306.     else
  307.       # Bullet does not exist or is not needed
  308.       change_color(system_color)
  309.       draw_text(x,y,dw,dh,"No need to use bullets")
  310.     end
  311.    
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● Draw bullet
  315.   #--------------------------------------------------------------------------
  316.   def draw_bullet(ammo,x,y,total_dw,dh)
  317.     amount_dw = 40
  318.     dw = total_dw - amount_dw
  319.     item = ammo.item
  320.     bullet = ammo.bullet_obj
  321.     # Draw icon
  322.     draw_icon_with_rect(item.icon_index,Rect.new(x,y,dh,dh))
  323.     # coordinate displacement
  324.     diff = (dh + 1)
  325.     x += diff
  326.     dw -= diff
  327.     # Draw text
  328.    
  329.     change_color(text_color(6))
  330.     name = bullet.display_name
  331.     text_w = text_size(name).width
  332.     #contents.fill_rect(Rect.new(x,y,dw,dh),Color.new(255,0,0))
  333.     draw_text(x,y,dw,dh,name)
  334.    
  335.     # coordinate displacement
  336.     x += ( text_w + 1 )
  337.     # Drawing quantity
  338.     amount = ammo.bullet_remain
  339.     if amount > 0
  340.       change_color(Color.new(0,255,0))
  341.     else
  342.       change_color(Color.new(255,0,0))
  343.     end
  344.     str = sprintf("(%d)",amount)
  345.     #contents.fill_rect(Rect.new(x,y,amount_dw,dh),Color.new(255,255,0))
  346.     draw_text(x,y,amount_dw,dh,str)
  347.    
  348.   end
  349.  
  350.   #--------------------------------------------------------------------------
  351.   # ● Get various text colors
  352.   #--------------------------------------------------------------------------
  353.   def normal_color;      text_color(0);   end;    # default
  354.   def system_color;      text_color(16);  end;    # system
  355.   def crisis_color;      text_color(17);  end;    # danger
  356.   def knockout_color;    text_color(18);  end;    # unable to fight
  357.   def gauge_back_color;  text_color(19);  end;    # gauge bg color
  358.   def hp_gauge_color1;   text_color(20);  end;    # HP gauge 1
  359.   def hp_gauge_color2;   text_color(21);  end;    # HP gauge 2
  360.   def mp_gauge_color1;   text_color(22);  end;    # MP gauge 1
  361.   def mp_gauge_color2;   text_color(23);  end;    # MP gauge 2
  362.   def mp_cost_color;     text_color(23);  end;    # use TP
  363.   def power_up_color;    text_color(24);  end;    # capacity (changing equipment)
  364.   def power_down_color;  text_color(25);  end;    # capacity (changing equipment)
  365.   def tp_gauge_color1;   text_color(28);  end;    # TP gauge 1
  366.   def tp_gauge_color2;   text_color(29);  end;    # TP gauge 2
  367.   def tp_cost_color;     text_color(29);  end;    # use TP
  368.   end
  369.  
  370.  
  371.  
  372.   #encoding:utf-8
  373. #==============================================================================
  374. # ■ SpriteFader
  375. #------------------------------------------------------------------------------
  376. #  Allow sprites to fade in and out of the originals
  377. #==============================================================================
  378. module SpriteFader
  379.   #--------------------------------------------------------------------------
  380.   # ● Initial Fade Module
  381.   #--------------------------------------------------------------------------
  382.   def fader_init
  383.     @fade_count = 0
  384.     @fade_to = 0
  385.     @fade_real_opacity = 0.0
  386.     @fade_speed = 0.0
  387.     @fade_post_handler = nil
  388.     @fade_init = true
  389.     @fade_processing = false
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● Set fade in (set destination transparency and time)
  393.   #--------------------------------------------------------------------------
  394.   def fader_set_fade(to,time)
  395.     @fade_count = time
  396.     @fade_to = to.to_f
  397.     @fade_real_opacity = self.opacity.to_f
  398.     @fade_speed = ( @fade_to - @fade_real_opacity ) / @fade_count + 0.001
  399.     @fade_processing = true
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● Update fade
  403.   #--------------------------------------------------------------------------
  404.   def fader_update
  405.     return if !@fade_init
  406.     if @fade_count > 0
  407.       @fade_count -= 1
  408.       self.opacity = @fade_real_opacity += @fade_speed
  409.     else
  410.       if @fade_processing
  411.         @fade_processing = false
  412.         fader_post_fade
  413.       end
  414.     end
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● Does it fade in or out?
  418.   #--------------------------------------------------------------------------
  419.   def fader_fading?
  420.     @fade_init && @fade_count > 0
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● Set post-fade processing
  424.   #--------------------------------------------------------------------------
  425.   def fader_set_post_handler(handler)
  426.     @fade_post_handler = handler
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ● Call fade after call fade in
  430.   #--------------------------------------------------------------------------
  431.   def fader_post_fade
  432.     if @fade_post_handler
  433.       @fade_post_handler.call
  434.     end
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● Clear handler after call fade in
  438.   #--------------------------------------------------------------------------
  439.   def fader_clear_handler
  440.     @fade_post_handler = nil
  441.   end
  442. end
  443.  
  444.  
  445. #encoding:utf-8
  446. #==============================================================================
  447. # ■ SpriteSlider
  448. #------------------------------------------------------------------------------
  449. #  Allow sprites to move components
  450. #  UPDATE:1407091114
  451. #==============================================================================
  452. module SpriteSlider
  453.   #--------------------------------------------------------------------------
  454.   # ● Initialize the mobile module
  455.   #--------------------------------------------------------------------------
  456.   def slider_init
  457.     @slide_count = 0
  458.     @slide_real_pos = [0.0,0.0]
  459.     @slide_from = [0,0]
  460.     @slide_to = [0,0]
  461.     @slide_speed = [0.0,0.0]
  462.     @slide_init = true
  463.     @slide_post_handler = nil
  464.     @slide_processing = false
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ● Set up mobile
  468.   #--------------------------------------------------------------------------
  469.   def slider_set_move(from,to,time)
  470.     @slide_count = time
  471.     @slide_from = from.collect {|i| i.to_f}
  472.     @slide_to = to.collect {|i| i.to_f}
  473.     @slide_real_pos = @slide_from.clone
  474.     # 設置速度
  475.     2.times do |i|
  476.       @slide_speed[i] = (@slide_to[i] - @slide_from[i]) / @slide_count
  477.     end
  478.     @slide_processing = true
  479.    
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● Update move
  483.   #--------------------------------------------------------------------------
  484.   def slider_update
  485.     return if !@slide_init
  486.     if @slide_count > 0
  487.       @slide_count -= 1
  488.       2.times do |i|
  489.         @slide_real_pos[i] = @slide_real_pos[i] + @slide_speed[i]
  490.       end
  491.       self.x = @slide_real_pos[0]
  492.       self.y = @slide_real_pos[1]
  493.     else
  494.       if @slide_processing
  495.         slider_adjust_pos
  496.         @slide_processing = false
  497.         slider_post_method
  498.       end
  499.     end
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ● Fix last position
  503.   #--------------------------------------------------------------------------
  504.   def slider_adjust_pos
  505.     self.x , self.y = @slide_to
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● Does it move?
  509.   #--------------------------------------------------------------------------
  510.   def slider_sliding?
  511.     @slide_init && @slide_count > 0
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● Call after mobile method
  515.   #--------------------------------------------------------------------------
  516.   def slider_post_method
  517.     if @slide_post_handler
  518.       @slide_post_handler.call
  519.     end
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● Set up post-movement processing
  523.   #--------------------------------------------------------------------------
  524.   def slider_set_post_handler(handler)
  525.     @slide_post_handler = handler
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # ● Clear the handler after the call moves out
  529.   #--------------------------------------------------------------------------
  530.   def slider_clear_handler
  531.     @slide_post_handler = nil
  532.   end
  533.   #--------------------------------------------------------------------------
  534.   # ● Clear the handler after the call moves out
  535.   #--------------------------------------------------------------------------
  536.   def slider_clear_post_handler
  537.     @slide_post_handler = nil
  538.   end
  539. end
  540.  
  541. #encoding:utf-8
  542. #==============================================================================
  543. # ■ SpriteSensor
  544. # Update:1408061703 Ver 1.1
  545. #------------------------------------------------------------------------------
  546. #  Let the sprite sense the originals needed for mouse placement
  547. #==============================================================================
  548. module SpriteSensor
  549.   #--------------------------------------------------------------------------
  550.   # ● Initialize the sensor module
  551.   #--------------------------------------------------------------------------
  552.   def sensor_init
  553.     @sensor_init = true
  554.     @sensor_hover_handler = nil
  555.     @sensor_input_handler = nil
  556.     @sensor_set_hover = false
  557.     @sensor_set_input = false
  558.     @active = false
  559.   end
  560.   #--------------------------------------------------------------------------
  561.   # ● Other starting conditions
  562.   #--------------------------------------------------------------------------
  563.   def sensor_other_active_condition
  564.     true
  565.   end
  566.   #--------------------------------------------------------------------------
  567.   # ● Enable sensor
  568.   #--------------------------------------------------------------------------
  569.   def sensor_activate
  570.     @active = true
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # ● Disable sensor
  574.   #--------------------------------------------------------------------------
  575.   def sensor_deactivate
  576.     @active = false
  577.   end
  578.   #--------------------------------------------------------------------------
  579.   # ● Set up hovering handler
  580.   #--------------------------------------------------------------------------
  581.   def sensor_set_sense_hover(handler)
  582.     @sensor_set_hover = true
  583.     @sensor_hover_handler = handler
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● Set up button induction handler
  587.   #--------------------------------------------------------------------------
  588.   def sensor_set_sense_input(handler)
  589.     @sensor_set_input = true
  590.     @sensor_input_handler = handler
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ● Is the mouse inside area?
  594.   #--------------------------------------------------------------------------
  595.   def sensor_mouse_in_area?
  596.     if self.bitmap
  597.       Mouse.area?(self.x - self.ox,self.y - self.oy,self.bitmap.width,self.bitmap.height)
  598.     else
  599.       false
  600.     end
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● How to check the call sensor
  604.   #--------------------------------------------------------------------------
  605.   def sensor_call_input
  606.     if Input.trigger?(:C)
  607.       @sensor_input_handler.call(:C)
  608.     end
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● Is the mouse inside the elf? Contains startup tests
  612.   #--------------------------------------------------------------------------
  613.   def sensor_mouse_in_area_safe?
  614.     @sensor_init  && @active && sensor_mouse_in_area?
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● Update induction
  618.   #--------------------------------------------------------------------------
  619.   def sensor_update
  620.     return if !@sensor_init
  621.     return if !@active
  622.     return if !sensor_other_active_condition
  623.     if @sensor_hover_handler
  624.       if sensor_mouse_in_area?
  625.         if @sensor_set_hover && @sensor_hover_handler
  626.           @sensor_hover_handler.call(true)
  627.         end
  628.         if @sensor_set_input && @sensor_input_handler
  629.           sensor_call_input
  630.         end
  631.       else
  632.         if @sensor_set_hover && @sensor_hover_handler
  633.           @sensor_hover_handler.call(false)
  634.         end
  635.       end
  636.     end
  637.   end
  638. end
  639.  
  640. #encoding:utf-8
  641. #==============================================================================
  642. # ■ SpriteZoomer
  643. #------------------------------------------------------------------------------
  644. #  The original required for the sprite to zoom in and out.
  645. #  Instance variables begin with "_" and the public methods begin with "zoomer".
  646. #==============================================================================
  647. module SpriteZoomer
  648.   #--------------------------------------------------------------------------
  649.   # ● Initialize the zoom module
  650.   #--------------------------------------------------------------------------
  651.   def zoomer_init
  652.     @_zoom_count = 0
  653.     @_zoom_from = [0.0,0.0]
  654.     @_zoom_to = [0.0,0.0]
  655.     @_zoom_speed = [0.0,0.0]
  656.     @_zoom_init = true
  657.     @_zoom_post_handler = nil
  658.     @_zoom_processing = false
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● Set zoom
  662.   #--------------------------------------------------------------------------
  663.   def zoomer_set_effect(from,to,time)
  664.     self.zoom_x , self.zoom_y = from
  665.     @_zoom_count = time
  666.     @_zoom_from = from
  667.     @_zoom_to = to
  668.     # 設置速度
  669.     2.times do |i|
  670.       @_zoom_speed[i] = (@_zoom_to[i] - @_zoom_from[i]) / @_zoom_count
  671.     end
  672.     @_zoom_processing = true
  673.    
  674.   end
  675.   #--------------------------------------------------------------------------
  676.   # ● Update zoom
  677.   #--------------------------------------------------------------------------
  678.   def zoomer_update
  679.     return if !@_zoom_init
  680.     if @_zoom_count > 0
  681.       @_zoom_count -= 1
  682.       self.zoom_x += @_zoom_speed[0]
  683.       self.zoom_y += @_zoom_speed[1]
  684.     else
  685.       if @_zoom_processing
  686.         @_zoom_processing = false
  687.         zoomer_post_method
  688.       end
  689.     end
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● Is it working?
  693.   #--------------------------------------------------------------------------
  694.   def zoomer_effect?
  695.     @_zoom_init && @_zoom_count > 0
  696.   end
  697.   #--------------------------------------------------------------------------
  698.   # ● Call the zoomed method
  699.   #--------------------------------------------------------------------------
  700.   def zoomer_post_method
  701.     if @_zoom_post_handler
  702.       @_zoom_post_handler.call
  703.     end
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● Set post-scaling processing
  707.   #--------------------------------------------------------------------------
  708.   def zoomer_set_post_handler(handler)
  709.     @_zoom_post_handler = handler
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● Clear call handler after zoom out
  713.   #--------------------------------------------------------------------------
  714.   def zoomer_clear_handler
  715.     @_zoom_post_handler = nil
  716.   end
  717. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement