Advertisement
Raizen

Akea Battle Camera

Apr 18th, 2015
534
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 13.17 KB | None | 0 0
  1. #=======================================================
  2. #        Akea Battle Camera
  3. # Author: Raizen
  4. # Community: http://www.centrorpg.com/
  5. # Compatibility: RMVXAce
  6. #
  7. #=======================================================
  8. # =========================Don't Modify==============================
  9. $included ||= Hash.new
  10. $included[:akea_battlecamera] = true
  11. module Akea_BattleCamera
  12. Camera_Config = []
  13. # =========================Don't Modify==============================
  14. # Instruções:
  15. # O sistema de camera permite zoom e movimentação da camera, você pode ajustar
  16. # os alvos e o local que a camera se moverá durante a ação.
  17. # Para realizar a chamada de uma das configurações de camera
  18.  
  19. # Chamar Script: akea_camera(n), aonde n é o id das configurações logo abaixo.
  20.  
  21. # Esse chamar script pode ser usado na aba de eventos das tropas, ou
  22. # caso o sistema de batalha que use permita utilizar chamar script.
  23.  
  24. # Abaixo é configurado o movimento da camera, siga as instruções de cada
  25. # variável para ter o melhor resultado.
  26.  
  27. #:focus é o local aonde a camera será movida, ela pode ser uma posição absoluta,
  28. # do inimigo, da tela ou do usuário.
  29.  
  30. # Para posição absoluta é utilizado o seguinte.
  31.  
  32. # :focus => [x, y, type]
  33. # Aonde x é a quantidade de pixels que vai mover horizontalmente,
  34. # y verticalmente e type o tipo de movimento
  35. # O type tem 2 tipos, 0 => move para a posição exata, 1 => move para a posição
  36. # relativa.
  37.  
  38. # Por exemplo se eu quero que a camera se mova para a posição exata 300, 200
  39. # eu colocaria [300, 200, 0]
  40.  
  41. # Se eu quero que se mova 300 pixels para a esquerda e 200 para baixo.
  42. # eu colocaria [300, 200, 1]
  43.  
  44.  
  45. # As outras tags para :focus são
  46. # 'none' é que não haverá movimentação de camera
  47. # 'target' a camera centraliza o alvo (SÓ FUNCIONA SE USAR O AKEA ANIMATED BATTLE SYSTEM).
  48. # 'user' a camera centraliza o usuário
  49. # 'center' a camera retorna a posição de origem.
  50.  
  51. # :zoom_x/:zoom_y é o zoom da camera, sendo que 1 seria 100%, para colocar
  52. # números quebrados, como por exemplo 50% da tela, basta.. :zoom_x => 0.5,
  53. # (lembre-se que é a notação americana, logo é ponto que divide os decimais)
  54.  
  55. # :time em frames que ocorrera o movimento da camera
  56. # :time => 20, isso seriam 20 frames 1/3 de segundo
  57.  
  58. # :offset_x/:offset_y seriam simplesmente caso queira fazer algum ajuste,
  59. # por exemplo escolhi a tag 'user' mas a camera ficou alguns pixels descentralizado
  60. # basta alterar esses valores para achar o melhor posicionamento da camera
  61.  
  62. #==============================================================================
  63. # Camera_Config[0] => camera move 300 para a esquerda e
  64. # da um zoom de 200%
  65. #==============================================================================
  66. Camera_Config[0] = {
  67. :focus => [-300, 0, 1],
  68. :zoom_x => 2,
  69. :zoom_y => 2,
  70. :time => 20,
  71. :offset_x => 0,
  72. :offset_y => 0,
  73. }
  74. #==============================================================================
  75. # Camera_Config[1] => camera retorna a posição inicial com
  76. # zooms de 1 e 1
  77. #==============================================================================
  78. Camera_Config[1] = {
  79. :focus => 'center',
  80. :zoom_x => 1,
  81. :zoom_y => 1,
  82. :time => 20,
  83. :offset_x => 0,
  84. :offset_y => 0,
  85. }
  86. #==============================================================================
  87. # Camera_Config[2] => camera vai em direção ao alvo com um leve zoom
  88. #==============================================================================
  89. Camera_Config[2] = {
  90. :focus => 'target',
  91. :zoom_x => 1.2,
  92. :zoom_y => 1.2,
  93. :time => 20,
  94. :offset_x => 0,
  95. :offset_y => 0,
  96. }
  97. #==============================================================================
  98. # Camera_Config[3] => camera apenas da um zoom sem se movimentar
  99. #==============================================================================
  100. Camera_Config[3] = {
  101. :focus => 'none',
  102. :zoom_x => 2,
  103. :zoom_y => 2,
  104. :time => 60,
  105. :offset_x => 0,
  106. :offset_y => 0,
  107. }
  108. #==============================================================================
  109. # Camera_Config[3] => camera vai em direção ao usuário com um zoom de 200%
  110. #==============================================================================
  111. Camera_Config[4] = {
  112. :focus => 'user',
  113. :zoom_x => 2,
  114. :zoom_y => 2,
  115. :time => 20,
  116. :offset_x => 0,
  117. :offset_y => 0,
  118. }
  119. end
  120. #==============================================================================
  121. #==============================================================================
  122. # Aqui começa o script!
  123. #==============================================================================
  124. #==============================================================================
  125. #==============================================================================
  126. # ** Scene_Battle
  127. #------------------------------------------------------------------------------
  128. #  Esta classe executa o processamento da tela de batalha.
  129. #==============================================================================
  130.  
  131. class Scene_Battle < Scene_Base
  132. alias :akea_bcamera_update_basic :update_basic
  133. alias :akea_bcamera_start :start
  134.   #--------------------------------------------------------------------------
  135.   # * Inicialização do processo
  136.   #--------------------------------------------------------------------------
  137.   def start
  138.     @akea_camera_time = 0
  139.     @akea_camera_config = Hash.new
  140.     akea_bcamera_start
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # * Atualização das animações de camera
  144.   #--------------------------------------------------------------------------
  145.   def update_akea_camera
  146.     @akea_camera_time -= 1
  147.     time = @akea_camera_config[:time] - @akea_camera_time
  148.     @spriteset.move_camera(@akea_camera_config[:final_x] * time/@akea_camera_config[:time], @akea_camera_config[:final_y] * time/@akea_camera_config[:time])
  149.     @spriteset.make_zoom(@akea_camera_config[:speed_zoom_x], @akea_camera_config[:speed_zoom_y])
  150.     if @akea_camera_time == 0
  151.       @spriteset.set_zoom(@akea_camera_config[:zoom_x], @akea_camera_config[:zoom_y])
  152.     end
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # * Atualização
  156.   #--------------------------------------------------------------------------
  157.   def update_basic
  158.     akea_bcamera_update_basic
  159.     update_akea_camera if @akea_camera_time > 0
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # * Método de definição da configuração
  163.   #--------------------------------------------------------------------------
  164.   def akea_camera(n)
  165.     @akea_camera_config = Akea_BattleCamera::Camera_Config[n].dup
  166.     @akea_camera_time = @akea_camera_config[:time]
  167.     get_akea_camera_speed
  168.     get_akea_camera_zoom
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # * Método que obtém a velocidade da camera
  172.   #--------------------------------------------------------------------------
  173.   def get_akea_camera_speed
  174.     @akea_camera_config[:final_y] = @akea_camera_config[:offset_y] + camera_akea_position_y(@akea_camera_config[:focus])
  175.     @akea_camera_config[:final_x] = @akea_camera_config[:offset_x] + camera_akea_position_x(@akea_camera_config[:focus])
  176.     @spriteset.set_ox_oy_camera
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # * Método que obtem o zoom da camera
  180.   #--------------------------------------------------------------------------
  181.   def get_akea_camera_zoom
  182.     @akea_camera_config[:speed_zoom_y] = (@akea_camera_config[:zoom_y] - @spriteset.zoom_sprites_y).to_f/@akea_camera_time.to_f
  183.     @akea_camera_config[:speed_zoom_x] = (@akea_camera_config[:zoom_x] - @spriteset.zoom_sprites_x).to_f/@akea_camera_time.to_f
  184.     @spriteset.set_ox_oy_zoom
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # * Método de verificação da posição y
  188.   #--------------------------------------------------------------------------
  189.   def camera_akea_position_y(type)
  190.     if type.is_a?(Array)
  191.       if type[2] == 0
  192.         return type[1] - @spriteset.get_viewport1_oy
  193.       else
  194.         return type[1]
  195.       end
  196.     end
  197.     case type
  198.     when 'none'
  199.       return 0
  200.     when 'target'
  201.       return @reuse_targets[0].screen_y - Graphics.height/2 - @spriteset.get_viewport1_ox
  202.     when 'user'
  203.       return @subject.screen_y - Graphics.height/2 - @spriteset.get_viewport1_ox
  204.     when 'center'
  205.       return -@spriteset.get_viewport1_oy
  206.     end
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # * Método de verificação da posição x
  210.   #--------------------------------------------------------------------------
  211.   def camera_akea_position_x(type)
  212.     if type.is_a?(Array)
  213.       if type[2] == 0
  214.         return type[0] - @spriteset.get_viewport1_ox
  215.       else
  216.         return type[0]
  217.       end
  218.     end
  219.     case type
  220.     when 'none'
  221.       return 0
  222.     when 'target'
  223.       return @reuse_targets[0].screen_x - Graphics.width/2 - @spriteset.get_viewport1_oy
  224.     when 'user'
  225.       return @subject.screen_x - Graphics.width/2 - @spriteset.get_viewport1_oy
  226.     when 'center'
  227.       return -@spriteset.get_viewport1_ox
  228.     end
  229.   end
  230.  
  231. end
  232.  
  233.  
  234.  
  235. #==============================================================================
  236. # ** Spriteset_Battle
  237. #------------------------------------------------------------------------------
  238. #  Esta classe reune os sprites da tela de batalha. Esta classe é usada
  239. # internamente pela classe Scene_Battle.
  240. #==============================================================================
  241.  
  242. class Spriteset_Battle
  243. alias :akea_bcamera_initialize :initialize
  244. attr_reader :zoom_sprites_x
  245. attr_reader :zoom_sprites_y
  246.   #--------------------------------------------------------------------------
  247.   # * Inicialização do objeto
  248.   #--------------------------------------------------------------------------
  249.   def initialize
  250.     @akea_bcamera_x = 0
  251.     @akea_bcamera_y = 0
  252.     @zoom_sprites_x = 1
  253.     @zoom_sprites_y = 1
  254.     akea_bcamera_initialize
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # * Método que retem os valores de camera
  258.   #--------------------------------------------------------------------------
  259.   def move_camera(x, y)
  260.     @akea_bcamera_x = x + @viewport_cam_1_ox
  261.     @akea_bcamera_y = y + @viewport_cam_1_oy
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # * Método que realiza os zooms
  265.   #--------------------------------------------------------------------------
  266.   def make_zoom(x, y)
  267.     @actor_sprites.each{|sprt| sprt.zoom_x += x; sprt.zoom_y += y}
  268.     @enemy_sprites.each{|sprt| sprt.zoom_x += x; sprt.zoom_y += y}
  269.     @back1_sprite.zoom_x += x
  270.     @back1_sprite.zoom_y += y
  271.     @back2_sprite.zoom_x += x
  272.     @back2_sprite.zoom_y += y
  273.     @zoom_sprites_x += x
  274.     @zoom_sprites_y += y
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # * Método quue seta os valores de zoom(correção de bug)
  278.   #--------------------------------------------------------------------------
  279.   def set_zoom(x, y)
  280.     @actor_sprites.each{|sprt| sprt.zoom_x = x; sprt.zoom_y = y}
  281.     @enemy_sprites.each{|sprt| sprt.zoom_x = x; sprt.zoom_y = y}
  282.     @back1_sprite.zoom_x = x
  283.     @back1_sprite.zoom_y = y
  284.     @back2_sprite.zoom_x = x
  285.     @back2_sprite.zoom_y = y
  286.     @zoom_sprites_x = x
  287.     @zoom_sprites_y = y
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # * Obtenção do ox do viewport1
  291.   #--------------------------------------------------------------------------
  292.   def get_viewport1_ox
  293.     @viewport1.ox
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # * Obtenção do oy do viewport1
  297.   #--------------------------------------------------------------------------
  298.   def get_viewport1_oy
  299.     @viewport1.oy
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # * Setar os valores iniciais de zoom
  303.   #--------------------------------------------------------------------------
  304.   def set_ox_oy_zoom
  305.     @zoom_sprites_x = @back1_sprite.zoom_x
  306.     @zoom_sprites_y = @back1_sprite.zoom_y
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # * Setar a posção inicial da camera
  310.   #--------------------------------------------------------------------------
  311.   def set_ox_oy_camera
  312.     @viewport_cam_1_ox = @viewport1.ox
  313.     @viewport_cam_1_oy = @viewport1.oy
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # * Atualização do viewports
  317.   #--------------------------------------------------------------------------
  318.   def update_viewports
  319.     @viewport1.tone.set($game_troop.screen.tone)
  320.     @viewport1.ox = $game_troop.screen.shake
  321.     @viewport1.ox += @akea_bcamera_x
  322.     @viewport1.oy = @akea_bcamera_y
  323.     @viewport2.color.set($game_troop.screen.flash_color)
  324.     @viewport3.color.set(0, 0, 0, 255 - $game_troop.screen.brightness)
  325.     @viewport1.update
  326.     @viewport2.update
  327.     @viewport3.update
  328.   end
  329. end
  330.  
  331. class Game_Interpreter
  332.   def akea_camera(n)
  333.     SceneManager.scene.akea_camera(n)
  334.   end
  335. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement