Holy87

Smooth Movement

Feb 27th, 2015
462
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. =begin
  2.  ==============================================================================
  3.   ■ Movimenti fluidi di Holy87
  4.       versione 1.1
  5.       Difficoltà utente: ★
  6.       Licenza: CC. Chiunque può scaricare, modificare, distribuire e utilizzare
  7.       lo script nei propri progetti, sia amatoriali che commerciali. Vietata
  8.       l'attribuzione impropria.
  9.  ==============================================================================
  10.     Questo script aggiunge a finestre e sprite un movimento automatico e
  11.     fluido che
  12.  ==============================================================================
  13.   ■ Compatibilità
  14.     Window_Base -> alias update
  15.     Sprite -> alias update
  16.  ==============================================================================
  17.   ■ Installazione e istruzioni
  18.     Installare questo script sotto Materials e prima del Main. Per muovere
  19.     finestre e sprite usa i seguenti metodi:
  20.    
  21.     ● oggetto.smooth_move(x, y[, speed])
  22.       per muovere l'oggetto alle coordinate x, y.
  23.       speed ha un valore tra 1 e 5, e può essere omesso. Rappresenta la velocità
  24.       di movimento.
  25.      
  26.     ● oggetto.move_speed = x
  27.       imposta la velocità di movimento ad un valore compreso tra 1 e 5 della x
  28.      
  29.     ● oggetto.move_end?
  30.       restituisce true se ha completato il movimento, false altrimenti
  31.  ==============================================================================
  32. =end
  33. $imported = {} if $imported == nil
  34. $imported["H87_SmoothMovements"] = true
  35. #==============================================================================
  36. # ** Modulo Smooth_Movements
  37. #------------------------------------------------------------------------------
  38. #  Questo modulo, se integrato in finestre e sprite, aggiunge nuovi tipi di
  39. #  animazioni in movimento.
  40. #==============================================================================
  41. module Smooth_Movements
  42.   #--------------------------------------------------------------------------
  43.   # * Avvia il movimento fluido
  44.   #     new_x: nuova x
  45.   #     new_y: nuova y
  46.   #--------------------------------------------------------------------------
  47.   def smooth_move(new_x, new_y, speed = nil)
  48.     self.move_speed = speed unless speed.nil?
  49.     @new_x = new_x
  50.     @new_y = new_y
  51.     @start_move = true
  52.     @move_end = false
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # * Aggiorna il movimento fluido
  56.   #--------------------------------------------------------------------------
  57.   def update_smooth_movements
  58.     return unless @start_move
  59.     update_smooth_x
  60.     update_smooth_y
  61.     check_move_end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # * Restituisce la velocità di movimento preconfigurata
  65.   #--------------------------------------------------------------------------
  66.   def move_speed
  67.     @speed = 2 if @speed.nil?
  68.     return @speed
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # * Imposta la velocità di movimento
  72.   #     new_speed: valore da 1 a 5
  73.   #--------------------------------------------------------------------------
  74.   def move_speed=(new_speed)
  75.     @speed = 20/([[new_speed,1].max,5].min*2)
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # * Aggiorna la posizione X del movimento
  79.   #     speed: velocità di movimento
  80.   #--------------------------------------------------------------------------
  81.   def update_smooth_x(speed = move_speed)
  82.     return if @new_x.nil?
  83.     dist = @new_x - self.x
  84.     if (dist.abs < speed)
  85.       self.x = update_smooth_x(speed/2)
  86.     else
  87.       self.x += dist / speed rescue self.x += dist
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # * Aggiorna la posizione Y del movimento
  92.   #     speed: velocità di movimento
  93.   #--------------------------------------------------------------------------
  94.   def update_smooth_y(speed = move_speed)
  95.     return if @new_y.nil?
  96.     dist = @new_y - self.y
  97.     if (dist.abs < speed)
  98.       self.y = update_smooth_y(speed/2)
  99.     else
  100.       self.y += dist / speed rescue self.y += dist
  101.     end
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # * Controlla se il movimento è terminato
  105.   #--------------------------------------------------------------------------
  106.   def check_move_end
  107.     if self.x == @new_x && self.y == @new_y
  108.       @move_end = true
  109.       @start_move = false
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # * Restituisce true se l'oggetto ha compiuto il suo movimento
  114.   #--------------------------------------------------------------------------
  115.   def move_end?
  116.     return @move_end || !@start_move
  117.   end
  118. end #modulo smooth
  119.  
  120. #==============================================================================
  121. # ** Classe Window_Base
  122. #------------------------------------------------------------------------------
  123. #  Inclusione del modulo smooth_movement
  124. #==============================================================================
  125. class Window_Base < Window
  126.   include Smooth_Movements  #incusione del modulo del movimento fluido
  127.   #--------------------------------------------------------------------------
  128.   # * Aggiornamento
  129.   #--------------------------------------------------------------------------
  130.   alias smooth_udpate update unless $@
  131.   def update
  132.     smooth_udpate
  133.     update_smooth_movements
  134.   end
  135. end #window_base
  136.  
  137. #==============================================================================
  138. # ** Classe Sprite
  139. #------------------------------------------------------------------------------
  140. #  Inclusione del modulo smooth_movement
  141. #==============================================================================
  142. class Sprite
  143.   include Smooth_Movements  #incusione del modulo del movimento fluido
  144.   #--------------------------------------------------------------------------
  145.   # * Aggiornamento
  146.   #--------------------------------------------------------------------------
  147.   alias smooth_udpate update unless $@
  148.   def update
  149.     smooth_udpate
  150.     update_smooth_movements
  151.   end
  152. end #sprite
  153.  
  154. #==============================================================================
  155. # ** Classe Viewport
  156. #------------------------------------------------------------------------------
  157. #  Inclusione del modulo smooth_movement
  158. #==============================================================================
  159. class Viewport
  160.   include Smooth_Movements  #incusione del modulo del movimento fluido
  161.   #--------------------------------------------------------------------------
  162.   # * Aggiornamento
  163.   #--------------------------------------------------------------------------
  164.   alias smooth_udpate update unless $@
  165.   def update
  166.     smooth_udpate
  167.     update_smooth_movements
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # * Restituisce la posizione X
  171.   #--------------------------------------------------------------------------
  172.   def x
  173.     return rect.x
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # * Restituisce la posizione Y
  177.   #--------------------------------------------------------------------------
  178.   def y
  179.     return rect.y
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # * Modifica la posizione X
  183.   #--------------------------------------------------------------------------
  184.   def x=(value)
  185.     rect.x = value
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # * Modifica la posizione Y
  189.   #--------------------------------------------------------------------------
  190.   def y=(value)
  191.     rect.y = value
  192.   end
  193. end #fine dello script
RAW Paste Data