DaxSoft

Opacity Menu

Feb 8th, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.31 KB | None | 0 0
  1. #==============================================================================
  2. # • Opacity Menu
  3. #==============================================================================
  4. # Autor: Dax
  5. # Versão: 1.0
  6. # Site: www.dax-soft.weebly.com
  7. # Requerimento: N/A
  8. #==============================================================================
  9. # • Descrição:
  10. #------------------------------------------------------------------------------
  11. # Um menu que não requer imagens e que tem um efeito opaco.
  12. #==============================================================================
  13. #==============================================================================
  14. # • Módulo de configuração.
  15. #==============================================================================
  16. module ColiseuSM
  17. extend self
  18. #----------------------------------------------------------------------------
  19. # • Configurações:
  20. #----------------------------------------------------------------------------
  21. def [](setting_key)
  22. case setting_key
  23. # Velocidade do slide
  24. when :slide then 8 # Deixe em números pares;
  25. # Configuração das cores
  26. when :color then [
  27. "db4242", # Cor primária ativa do status do personagem.
  28. "dad7d7", # Cor primária desativa do status do personagem.
  29. "f69a9a", # Cor secundária ativa do status do personagem.
  30. "f3f3f3", # Cor secundária desativa do status do personagem.
  31. "000000", # Cor da barra que ficará o hp e o mp.
  32. "737373", # Cor do círculo das opções.
  33. ]
  34. # Configuração das cores das barras.
  35. when :bar_color then [
  36. "eeba7c", # HP,
  37. "7cacee", # MP
  38. ]
  39. # Define logo abaixo os ícones das opções e a descrição das opções;
  40. when :item then [
  41. [192, "Abre o inventário de itens."],
  42. [232, "Opção para ver as habilidades dos heróis."],
  43. [270, "Opção para ver os equipamentos dos heróis."],
  44. [233, "Opção para ver a condição dos heróis."],
  45. [230, "Opção para salvar o progresso do jogo."],
  46. [121, "Opção para sair do jogo."]
  47. ]
  48. # Define logo abaixo a configuração da fonte.
  49. when :font then {
  50. name: "Arial",
  51. size: 20,
  52. bold: false,
  53. italic: false,
  54. shadow: true,
  55. outline: false,
  56. color: Color.new(255, 255, 255),
  57. out_color: Color.new(0, 0, 0),
  58. }
  59. end
  60. end
  61. end
  62. #==============================================================================
  63. # • Complementos retirados do Dax Core.
  64. #==============================================================================
  65. # Integer
  66. class Integer
  67. #----------------------------------------------------------------------------
  68. # * Transformar o valor em porcentagem : Útil para fazer barras como por exemplo
  69. # barras de HP.
  70. # a : Valor atual.
  71. # b : Valor máximo.
  72. #----------------------------------------------------------------------------
  73. def to_p(a, b)
  74. self * a / b
  75. end
  76. end
  77. # Cores em hexadécimal
  78. module ColorBasic
  79. def self.hex(value)
  80. Color.new(*value.scan(/../).map { |color| color.to_i(16)})
  81. end
  82. end
  83. # Opacidade na cor.
  84. class Color
  85. def opacity(alpha=96)
  86. self.set(self.red, self.green, self.blue, alpha)
  87. end
  88. end
  89. # Opacity
  90. module Opacity
  91. extend self
  92. @key ||= {}
  93. #----------------------------------------------------------------------------
  94. # • Efeito de opacidade + e -.
  95. #----------------------------------------------------------------------------
  96. def sprite_opacity(sprite, speed, max, min, hash=nil)
  97. hash = hash.nil? ? sprite.__id__ : hash
  98. unless @key[hash]
  99. sprite.opacity += speed unless sprite.opacity >= max
  100. @key[hash] = sprite.opacity >= max
  101. else
  102. sprite.opacity -= speed unless sprite.opacity <= min
  103. @key[hash] = false if sprite.opacity <= min
  104. end
  105. end
  106. end
  107. # Add-ons Sprite
  108. class Sprite
  109. #----------------------------------------------------------------------------
  110. # • Slide pela direita.
  111. # * speed : Velocidade | point : Ponto da coordenada X que irá chegar.
  112. #----------------------------------------------------------------------------
  113. def slide_right(speed, point)
  114. self.x += speed unless self.x >= point
  115. end
  116. end
  117. # add-on Bitmap.
  118. class Bitmap
  119. #----------------------------------------------------------------------------
  120. # • draw_icon(icon_index, x, y, enabled)
  121. # icon_index : ID do ícone.
  122. # x : Coordenadas X.
  123. # y : Coordenadas Y.
  124. # enabled : Habilitar flag, translucido quando false
  125. #----------------------------------------------------------------------------
  126. #----------------------------------------------------------------------------
  127. def draw_icon(icon_index, x, y, enabled = true)
  128. icon_index = icon_index.nil? ? 0 : icon_index
  129. bitmap = Cache.system("Iconset")
  130. rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  131. self.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  132. end
  133. #--------------------------------------------------------------------------
  134. # • Desenho do gráfico de rosto
  135. # face_name : nome do gráfico de face
  136. # face_index : índice do gráfico de face
  137. # x : coordenada X
  138. # y : coordenada Y
  139. # enabled : habilitar flag, translucido quando false
  140. #--------------------------------------------------------------------------
  141. def draw_face(face_name, face_index, x, y, enabled = true)
  142. bitmap = Cache.face(face_name)
  143. rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  144. self.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  145. end
  146. #--------------------------------------------------------------------------
  147. # • Desenho do gráfico de face do herói
  148. # actor : herói
  149. # x : coordenada X
  150. # y : coordenada Y
  151. # enabled : habilitar flag, translucido quando false
  152. #--------------------------------------------------------------------------
  153. def draw_actor_face(actor, x, y, enabled = true)
  154. draw_face(actor.face_name, actor.face_index, x, y, enabled)
  155. end
  156. #----------------------------------------------------------------------------
  157. # • Para o menu..
  158. #----------------------------------------------------------------------------
  159. def fill_status_menu(id, active=false)
  160. b = []
  161. actor = $game_party.members[id]
  162. (0...128).each { |i|
  163. self.gradient_fill_rect(self.rect, ColorBasic.hex(ColiseuSM[:color][active ? 0 : 1]).opacity(i),
  164. ColorBasic.hex(ColiseuSM[:color][active ? 2 : 3]).opacity(i-255), 1)
  165. }
  166. ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
  167. eval("self.font.#{i} = ColiseuSM[:font][:#{i}]")}
  168. self.draw_text(0, 10, self.width, 20, actor.name, 1)
  169. self.draw_text(0, 30, self.width, 20, actor.class.name, 1)
  170. self.draw_actor_face(actor, (self.width - 96)/2, 60)
  171. [170, 200].each_with_index { |y,i|
  172. self.fill_rect((self.width-96)/2, y, 96, 20, ColorBasic.hex(ColiseuSM[:color][4]).opacity(186))
  173. b[i] = Bitmap.new(96, 20)
  174. b[i].fill_rect(1, 1, b[i].width-2, b[i].height-2, ColorBasic.hex(ColiseuSM[:bar_color][i]))
  175. eval("self.blt((self.width-96)/2, y, b[i], Rect.new(0,0,
  176. b[i].width.to_p(actor.#{["hp", "mp"][i]}, actor.m#{["hp", "mp"][i]}), b[i].height))
  177. self.draw_text((self.width-96)/2, y+1, 96, 20,
  178. actor.#{["hp", "mp"][i]}.to_s + '/' + actor.m#{["hp", "mp"][i]}.to_s, 1)")
  179. }
  180. end
  181. #----------------------------------------------------------------------------
  182. # • Desenhar um círuclo preenchido.
  183. #----------------------------------------------------------------------------
  184. def fill_circle(x, y, r, c)
  185. rr = r*r
  186. for i in 0...r
  187. adj = Math.sqrt(rr - (i*i)).ceil
  188. xd = x - adj
  189. wd = 2 * adj
  190. self.fill_rect(xd, y-i, wd, 1, c)
  191. self.fill_rect(xd, y+i, wd, 1, c)
  192. end
  193. end
  194. end
  195. #==============================================================================
  196. # • Descrição das opções do menu.
  197. #==============================================================================
  198. class Sprite_Desc_Option_Menu < Sprite
  199. attr_accessor :text
  200. def initialize text
  201. super(nil)
  202. self.bitmap = Bitmap.new(544, 20)
  203. self.y = Graphics.height - 21
  204. ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
  205. eval("self.bitmap.font.#{i} = ColiseuSM[:font][:#{i}]")}
  206. self.bitmap.draw_text(self.bitmap.rect, @text, 1)
  207. self.z = 500
  208. end
  209. #----------------------------------------------------------------------------
  210. # • Renovação dos objetos.
  211. #----------------------------------------------------------------------------
  212. def dispose
  213. self.bitmap.dispose
  214. super
  215. end
  216. #----------------------------------------------------------------------------
  217. # • Atualização dos objetos.
  218. #----------------------------------------------------------------------------
  219. def update
  220. self.bitmap.clear
  221. super
  222. Opacity.sprite_opacity(self, 2, 255, 128)
  223. ["name", "size", "bold", "italic", "shadow", "outline", "color"].each { |i|
  224. eval("self.bitmap.font.#{i} = ColiseuSM[:font][:#{i}]")}
  225. self.bitmap.draw_text(self.bitmap.rect, @text, 1)
  226. end
  227. end
  228. #==============================================================================
  229. # • Status dos do personagens do menu....
  230. #==============================================================================
  231. class Sprite_Status_Menu < Sprite
  232. #----------------------------------------------------------------------------
  233. # • Variáveis...
  234. #----------------------------------------------------------------------------
  235. attr_accessor :active
  236. #----------------------------------------------------------------------------
  237. # • Inicialização dos objetos.
  238. #----------------------------------------------------------------------------
  239. def initialize(actor_id)
  240. super(nil)
  241. self.bitmap = Bitmap.new(112, Graphics.height)
  242. @old_active = @active = false
  243. self.bitmap.fill_status_menu(actor_id, @active)
  244. @id = actor_id
  245. end
  246. #----------------------------------------------------------------------------
  247. # • Renovação dos objetos.
  248. #----------------------------------------------------------------------------
  249. def dispose
  250. self.bitmap.dispose
  251. super
  252. end
  253. #----------------------------------------------------------------------------
  254. # • Atualização dos objetos.
  255. #----------------------------------------------------------------------------
  256. def update
  257. super
  258. self.slide_right(ColiseuSM[:slide], @id == 0 ? 45 : (112 * @id) + 45)
  259. unless @old_active == @active
  260. self.bitmap.clear
  261. self.bitmap.fill_status_menu(@id, @active)
  262. @old_active = @active
  263. end
  264. end
  265. end
  266. #==============================================================================
  267. # • Sprite_Circle_Icon_Menu
  268. #==============================================================================
  269. class Sprite_Circle_Icon_Menu < Sprite
  270. #----------------------------------------------------------------------------
  271. # • Variáveis...
  272. #----------------------------------------------------------------------------
  273. attr_accessor :active
  274. #----------------------------------------------------------------------------
  275. # • Inicialização dos objetos.
  276. #----------------------------------------------------------------------------
  277. def initialize(x, y, icon_id)
  278. super(nil)
  279. self.x, self.y, self.z = x - 32, y - 32, 250
  280. @y = self.y
  281. @active = false
  282. self.bitmap = Bitmap.new(128, 128)
  283. self.bitmap.fill_circle(32, 32, 32, ColorBasic.hex(ColiseuSM[:color][5]).opacity(224))
  284. self.bitmap.draw_icon(icon_id, 20, 20)
  285. end
  286. #----------------------------------------------------------------------------
  287. # • Renovação dos objetos.
  288. #----------------------------------------------------------------------------
  289. def dispose
  290. self.bitmap.dispose
  291. super
  292. end
  293. #----------------------------------------------------------------------------
  294. # • Atualização dos objetos.
  295. #----------------------------------------------------------------------------
  296. def update
  297. super
  298. unless @active
  299. self.opacity = 255
  300. self.y = @y
  301. else
  302. Opacity.sprite_opacity(self, 3, 255, 128)
  303. self.y = @y - 16
  304. end
  305. end
  306. end
  307. #==============================================================================
  308. # • Scene Menu
  309. #==============================================================================
  310. Object.send(:remove_const, :Scene_Menu)
  311. class Scene_Menu < Scene_Base
  312. #----------------------------------------------------------------------------
  313. # • Inicialização dos objetos.
  314. #----------------------------------------------------------------------------
  315. def start
  316. super
  317. @s = []
  318. @i = []
  319. @index = 0
  320. @sindex = 0
  321. @background_sprite = Sprite.new
  322. @background_sprite.bitmap = SceneManager.background_bitmap
  323. @background_sprite.color.set(16, 16, 16, 128)
  324. $game_party.members.size.times { |i|
  325. @s[i] = Sprite_Status_Menu.new(i) unless i > 3
  326. }
  327. ColiseuSM[:item].size.times { |i|
  328. @i[i] = Sprite_Circle_Icon_Menu.new(96 + (70 * i), Graphics.height - 64,
  329. ColiseuSM[:item][i][0])
  330. }
  331. @text = Sprite_Desc_Option_Menu.new(ColiseuSM[:item][@index][1])
  332. @status = false
  333. end
  334. #----------------------------------------------------------------------------
  335. # • Renovação dos objetos.
  336. #----------------------------------------------------------------------------
  337. def terminate
  338. super
  339. @s.each(&:dispose)
  340. @i.each(&:dispose)
  341. @text.dispose
  342. end
  343. #----------------------------------------------------------------------------
  344. # • Atualização dos objetos.
  345. #----------------------------------------------------------------------------
  346. def update
  347. super
  348. return_scene if Input.trigger?(:B) and !@status
  349. @s.each(&:update)
  350. @i.each(&:update)
  351. @text.update
  352. @text.text = ColiseuSM[:item][@index][1]
  353. Sound.play_cursor if Input.trigger?(:RIGHT) or Input.trigger?(:LEFT)
  354. unless @status
  355. @s.each{|i|i.active=false}
  356. @index = @index >= 5 ? 0 : @index.next if Input.trigger?(:RIGHT)
  357. @index = @index <= 0 ? 5 : @index - 1 if Input.trigger?(:LEFT)
  358. @i[@index].active = true
  359. @i.size.times { |o|
  360. next if @index == o
  361. @i[o].active = false
  362. }
  363. case @index
  364. when 0 then SceneManager.call(Scene_Item) if Input.trigger?(:C)
  365. when 1..3 then @status = Input.trigger?(:C)
  366. when 4 then SceneManager.call(Scene_Save) if Input.trigger?(:C)
  367. when 5 then SceneManager.call(Scene_End) if Input.trigger?(:C)
  368. end
  369. else
  370. @status = false if Input.trigger?(:B)
  371. @sindex = @sindex >= @s.size-1 ? 0 : @sindex.next if Input.trigger?(:RIGHT)
  372. @sindex = @sindex <= 0 ? @s.size-1 : @sindex - 1 if Input.trigger?(:LEFT)
  373. @s[@sindex].active = true
  374. @s.size.times { |o|
  375. next if @sindex == o
  376. @s[o].active = false
  377. }
  378. $game_party.menu_actor = $game_party.members[@sindex]
  379. SceneManager.call(Scene_Equip) if @index == 1 and Input.trigger?(:C)
  380. SceneManager.call(Scene_Skill) if @index == 2 and Input.trigger?(:C)
  381. SceneManager.call(Scene_Status) if @index == 3 and Input.trigger?(:C)
  382. end
  383. end
  384. end
Advertisement
Add Comment
Please, Sign In to add comment