Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # • Dax Mouse Update
- #==============================================================================
- # Autor: Dax
- # Versão: 0.6
- # Site: www.dax-soft.weebly.com
- # Requerimento: Dax Core
- #==============================================================================
- # • Descrição:
- #------------------------------------------------------------------------------
- # Atualização do Mouse do Dax Core, permitindo a integração do mouse com o menu,
- # e a criação facilitada de integração do mouse.
- #==============================================================================
- # • Comandos:
- #------------------------------------------------------------------------------
- #==============================================================================
- # • Versões:
- #------------------------------------------------------------------------------
- # 0.5 :
- # - Integração com a janela padrão.
- # 0.6 :
- # - Facilidade para integrar o Mouse com os Sprites.
- # - Explicações no final do script.
- #==============================================================================
- Dax.register(:mouse_system_update, "Dax", 0.6)
- #==============================================================================
- # • Window Selectable
- #==============================================================================
- class Window_Selectable < Window_Base
- #----------------------------------------------------------------------------
- # • Definição de controle de confirmação e cancelamento
- #----------------------------------------------------------------------------
- def process_handling
- return unless open? && active
- return process_ok if ok_enabled? && trigger?(:C) or trigger?(0x01)
- return process_cancel if cancel_enabled? && trigger?(:B) or trigger?(0x02)
- return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
- return process_pageup if handle?(:pageup) && Input.trigger?(:L)
- end
- #----------------------------------------------------------------------------
- # • Atualização dos objetos.
- #----------------------------------------------------------------------------
- alias :mouse_update_core :update
- def update(*args, &block)
- mouse_update_core(*args, &block)
- update_mouse if self.active && self.visible
- end
- #----------------------------------------------------------------------------
- # • Atualização do mouse.
- #----------------------------------------------------------------------------
- def update_mouse
- old_index = @index
- rect_cursors = Array.new
- add_x, add_y = self.x + 16 - self.ox, self.y + 16 - self.oy
- unless self.viewport.nil?
- add_x += self.viewport.rect.x - self.viewport.ox
- add_y += self.viewport.rect.y - self.viewport.oy
- end
- self.item_max.times { |i|
- @index = i
- update_mouse_cursor
- rect_cursors << cursor_rect.dup
- }
- @index = old_index
- rect_cursors.each_with_index { |rect, _index| @index = _index if Mouse.in_area?(Rect.new(rect.x + add_x, rect.y + add_y, rect.width, rect.height))}
- update_cursor
- call_update_help
- end
- #----------------------------------------------------------------------------
- # • Atualização do cursor do mouse.
- #----------------------------------------------------------------------------
- def update_mouse_cursor
- if @cursor_all
- cursor_rect.set(0, 0, contents.width, row_max * item_height)
- elsif @index < 0
- cursor_rect.empty
- else
- cursor_rect.set(item_rect(@index))
- end
- end
- end
- #==============================================================================
- # • Object | Explicações no FINAL.
- #==============================================================================
- class Object
- #----------------------------------------------------------------------------
- # • O que irá ocorrer caso o mouse esteja sobre uma sprite.
- # Tem que ser um objeto Sprite.
- #----------------------------------------------------------------------------
- def if_mouse_over(&block)
- return unless self.is_a?(Sprite) or block_given?
- over ||= false
- if Mouse.in_area?(self)
- block.call
- over = true
- else
- over = false
- end
- yield over
- end
- #----------------------------------------------------------------------------
- # • O que irá ocorrer caso o mouse esteja sobre uma sprite, e ao clicar.
- # Tem que ser um objeto Sprite.
- # * button : Button : (:right - botão direito do mouse | :left - botão esq.)
- #----------------------------------------------------------------------------
- def if_mouse_click(button=:left, &block)
- return unless self.is_a?(Sprite) or block_given?
- button = button == :left ? 0x01 : button == :right ? 0x02 : 0x01
- block.call if Mouse.in_area?(self) and trigger?(button)
- end
- end
- #==============================================================================
- # • Explicações e Exemplos:
- #==============================================================================
- __END__
- ==============================================================================
- **** Método : 'if_mouse_over'
- O que esse método trata? Trata-se de que quando o Mouse estiver por cima de
- determinado objeto.. algo irá acontecer.
- Como eu configuro a ação que irá ocorrer caso o Mouse esteja por cima de
- determinado objeto?
- Bom, o método só irá funcionar com objetos que são da classe [Sprite], e ele
- retorna a um bloco(somente se definir)! Exemplo:
- sprite.if_mouse_over # Chamou o método.. Mais agora para definir o bloco basta
- usar as {chaves} e dentro da chave o bloco que irá ser executado. Ex:
- sprite.if_mouse_over {
- Comando que irá se executar caso o Mouse esteja por cima do determinado objeto.
- }
- Certo, mais agora como faço uma condição para fazer uma ação de que.. Se
- o Mouse esteja por cima de determinado objeto acontece algo, e quando ele não
- estiver ele executa outra coisa?
- Simples basta chamar a variável 'over', como chamar? Após o '{' usa-se
- |over| .. Essa variável retorna caso o Mouse esteja por cima ou não de um objeto
- com os valores true or false.. Um exemplo abaixo.
- sprite.if_mouse_over { |over|
- sprite.opacity = over ? 255 : 128
- }
- # O Exemplo acima.. Quando o Mouse estiver por cima.. a opacidade ficará com o
- valor de '255'.. e quando não estiver ficará em '128'.
- ==============================================================================
- *** Método : 'if_mouse_click'
- O que esse método trata? Trata-se de que quando o Mouse estiver por cima de
- determinado objeto e a clicar nele(com o botão direito/esquerdo). algo irá acontecer
- Como eu configuro a ação que irá ocorrer caso o Mouse esteja por cima de
- determinado objeto ao ser clicado? O mesmo método do de cima.
- Bom, o método só irá funcionar com objetos que são da classe [Sprite], e ele
- retorna a um bloco(somente se definir)! Exemplo:
- sprite.if_mouse_click(button) {
- Comando que irá se executar caso o sprite seja clicado com o Mouse.
- }
- * button * O button naturalmente e o botão esquerdo.. Então se quiser não
- precisa o configurar.. Mais caso queira olhe abaixo os valores a por em ()
- button : Button : (:right - botão direito do mouse | :left - botão esq.)
- Um Exemplo abaixo :
- sprite.if_mouse_click { msgbox("Você clicou em mim!") }
Advertisement
Add Comment
Please, Sign In to add comment