DaxSoft

Add-on Mouse Core 0.6

Feb 18th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.38 KB | None | 0 0
  1. #==============================================================================
  2. # • Dax Mouse Update
  3. #==============================================================================
  4. # Autor: Dax
  5. # Versão: 0.6
  6. # Site: www.dax-soft.weebly.com
  7. # Requerimento: Dax Core
  8. #==============================================================================
  9. # • Descrição:
  10. #------------------------------------------------------------------------------
  11. # Atualização do Mouse do Dax Core, permitindo a integração do mouse com o menu,
  12. # e a criação facilitada de integração do mouse.
  13. #==============================================================================
  14. # • Comandos:
  15. #------------------------------------------------------------------------------
  16. #==============================================================================
  17. # • Versões:
  18. #------------------------------------------------------------------------------
  19. # 0.5 :
  20. # - Integração com a janela padrão.
  21. # 0.6 :
  22. # - Facilidade para integrar o Mouse com os Sprites.
  23. # - Explicações no final do script.
  24. #==============================================================================
  25. Dax.register(:mouse_system_update, "Dax", 0.6)
  26. #==============================================================================
  27. # • Window Selectable
  28. #==============================================================================
  29. class Window_Selectable < Window_Base
  30. #----------------------------------------------------------------------------
  31. # • Definição de controle de confirmação e cancelamento
  32. #----------------------------------------------------------------------------
  33. def process_handling
  34. return unless open? && active
  35. return process_ok if ok_enabled? && trigger?(:C) or trigger?(0x01)
  36. return process_cancel if cancel_enabled? && trigger?(:B) or trigger?(0x02)
  37. return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  38. return process_pageup if handle?(:pageup) && Input.trigger?(:L)
  39. end
  40. #----------------------------------------------------------------------------
  41. # • Atualização dos objetos.
  42. #----------------------------------------------------------------------------
  43. alias :mouse_update_core :update
  44. def update(*args, &block)
  45. mouse_update_core(*args, &block)
  46. update_mouse if self.active && self.visible
  47. end
  48. #----------------------------------------------------------------------------
  49. # • Atualização do mouse.
  50. #----------------------------------------------------------------------------
  51. def update_mouse
  52. old_index = @index
  53. rect_cursors = Array.new
  54. add_x, add_y = self.x + 16 - self.ox, self.y + 16 - self.oy
  55. unless self.viewport.nil?
  56. add_x += self.viewport.rect.x - self.viewport.ox
  57. add_y += self.viewport.rect.y - self.viewport.oy
  58. end
  59. self.item_max.times { |i|
  60. @index = i
  61. update_mouse_cursor
  62. rect_cursors << cursor_rect.dup
  63. }
  64. @index = old_index
  65. 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))}
  66. update_cursor
  67. call_update_help
  68. end
  69. #----------------------------------------------------------------------------
  70. # • Atualização do cursor do mouse.
  71. #----------------------------------------------------------------------------
  72. def update_mouse_cursor
  73. if @cursor_all
  74. cursor_rect.set(0, 0, contents.width, row_max * item_height)
  75. elsif @index < 0
  76. cursor_rect.empty
  77. else
  78. cursor_rect.set(item_rect(@index))
  79. end
  80. end
  81. end
  82. #==============================================================================
  83. # • Object | Explicações no FINAL.
  84. #==============================================================================
  85. class Object
  86. #----------------------------------------------------------------------------
  87. # • O que irá ocorrer caso o mouse esteja sobre uma sprite.
  88. # Tem que ser um objeto Sprite.
  89. #----------------------------------------------------------------------------
  90. def if_mouse_over(&block)
  91. return unless self.is_a?(Sprite) or block_given?
  92. over ||= false
  93. if Mouse.in_area?(self)
  94. block.call
  95. over = true
  96. else
  97. over = false
  98. end
  99. yield over
  100. end
  101. #----------------------------------------------------------------------------
  102. # • O que irá ocorrer caso o mouse esteja sobre uma sprite, e ao clicar.
  103. # Tem que ser um objeto Sprite.
  104. # * button : Button : (:right - botão direito do mouse | :left - botão esq.)
  105. #----------------------------------------------------------------------------
  106. def if_mouse_click(button=:left, &block)
  107. return unless self.is_a?(Sprite) or block_given?
  108. button = button == :left ? 0x01 : button == :right ? 0x02 : 0x01
  109. block.call if Mouse.in_area?(self) and trigger?(button)
  110. end
  111. end
  112. #==============================================================================
  113. # • Explicações e Exemplos:
  114. #==============================================================================
  115. __END__
  116.  
  117. ==============================================================================
  118. **** Método : 'if_mouse_over'
  119. O que esse método trata? Trata-se de que quando o Mouse estiver por cima de
  120. determinado objeto.. algo irá acontecer.
  121. Como eu configuro a ação que irá ocorrer caso o Mouse esteja por cima de
  122. determinado objeto?
  123. Bom, o método só irá funcionar com objetos que são da classe [Sprite], e ele
  124. retorna a um bloco(somente se definir)! Exemplo:
  125. sprite.if_mouse_over # Chamou o método.. Mais agora para definir o bloco basta
  126. usar as {chaves} e dentro da chave o bloco que irá ser executado. Ex:
  127. sprite.if_mouse_over {
  128. Comando que irá se executar caso o Mouse esteja por cima do determinado objeto.
  129. }
  130. Certo, mais agora como faço uma condição para fazer uma ação de que.. Se
  131. o Mouse esteja por cima de determinado objeto acontece algo, e quando ele não
  132. estiver ele executa outra coisa?
  133. Simples basta chamar a variável 'over', como chamar? Após o '{' usa-se
  134. |over| .. Essa variável retorna caso o Mouse esteja por cima ou não de um objeto
  135. com os valores true or false.. Um exemplo abaixo.
  136. sprite.if_mouse_over { |over|
  137. sprite.opacity = over ? 255 : 128
  138. }
  139. # O Exemplo acima.. Quando o Mouse estiver por cima.. a opacidade ficará com o
  140. valor de '255'.. e quando não estiver ficará em '128'.
  141. ==============================================================================
  142. *** Método : 'if_mouse_click'
  143. O que esse método trata? Trata-se de que quando o Mouse estiver por cima de
  144. determinado objeto e a clicar nele(com o botão direito/esquerdo). algo irá acontecer
  145. Como eu configuro a ação que irá ocorrer caso o Mouse esteja por cima de
  146. determinado objeto ao ser clicado? O mesmo método do de cima.
  147. Bom, o método só irá funcionar com objetos que são da classe [Sprite], e ele
  148. retorna a um bloco(somente se definir)! Exemplo:
  149. sprite.if_mouse_click(button) {
  150. Comando que irá se executar caso o sprite seja clicado com o Mouse.
  151. }
  152. * button * O button naturalmente e o botão esquerdo.. Então se quiser não
  153. precisa o configurar.. Mais caso queira olhe abaixo os valores a por em ()
  154. button : Button : (:right - botão direito do mouse | :left - botão esq.)
  155. Um Exemplo abaixo :
  156. sprite.if_mouse_click { msgbox("Você clicou em mim!") }
Advertisement
Add Comment
Please, Sign In to add comment