Advertisement
TechSkylander1518

Map Zoom

Sep 20th, 2021
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 8.29 KB | None | 0 0
  1. #https://reliccastle.com/resources/810/
  2.  
  3. class ZoomMap
  4.   attr_accessor :goal
  5.   attr_accessor :speed
  6.   attr_accessor :zoom
  7.  
  8.   def initialize(goal,speed,zoom="in")
  9.     @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
  10.     @viewport.z = 99999
  11.     self.goal = goal
  12.     self.speed = speed
  13.     self.zoom = zoom.downcase
  14.     @sprites = {}
  15.     @sprites["map"] = Sprite.new(@viewport)
  16.     @sprites["map"].bitmap =  Graphics.snap_to_bitmap
  17.     @sprites["map"].center_origins
  18.     @sprites["map"].x = Graphics.width/2
  19.     @sprites["map"].y = Graphics.height/2
  20.     Graphics.update
  21.   end
  22.  
  23.  
  24.   def update
  25.     if @sprites
  26.       @sprites["map"].bitmap.clear
  27.       messagewindow = $game_temp.message_window
  28.       cmdwindow = $game_temp.cmd_window
  29.       pausemenu = $game_temp.pause_menu_scene
  30.       messagewindow.visible = false if messagewindow
  31.       cmdwindow.visible = false if cmdwindow
  32.       pausemenu.pbHideMenu if pausemenu
  33.       @sprites["map"].bitmap =  Graphics.snap_to_bitmap
  34.       @sprites["map"].center_origins
  35.       @sprites["map"].x = Graphics.width/2
  36.       @sprites["map"].y = Graphics.height/2
  37.       messagewindow.visible = true if messagewindow
  38.       cmdwindow.visible = true if cmdwindow
  39.       pausemenu.pbShowMenu if pausemenu
  40.       case self.zoom
  41.         when "in"
  42.           if @sprites["map"].zoom < self.goal
  43.             altspeed = self.goal - @sprites["map"].zoom
  44.             @sprites["map"].zoom+=[self.speed,altspeed].min
  45.           end
  46.         when "out"
  47.           if @sprites["map"].zoom > @goal
  48.             altspeed = @sprites["map"].zoom - self.goal
  49.             @sprites["map"].zoom-=[self.speed,altspeed].min
  50.           end
  51.         end
  52.     else
  53.       dispose
  54.     end
  55.   end
  56.  
  57.  
  58.   def dispose
  59.     pbDisposeSpriteHash(@sprites)
  60.     @viewport.dispose
  61.   end
  62.  
  63. end
  64.  
  65.  
  66. def pbZoomMap(goal,speed,zoom="in")
  67.   if !$game_temp.background_zoom
  68.     $game_temp.background_zoom = ZoomMap.new(goal,speed,zoom)
  69.   else
  70.     $game_temp.background_zoom.goal = goal
  71.     $game_temp.background_zoom.speed = speed
  72.     $game_temp.background_zoom.zoom = zoom
  73.   end
  74. end
  75.  
  76.  
  77. def pbDisposeZoomMap
  78.   if $game_temp.background_zoom
  79.     $game_temp.background_zoom.dispose
  80.     $game_temp.background_zoom = nil
  81.   end
  82.       Graphics.update
  83. end
  84.  
  85. Events.onMapUpdate += proc { |_sender,_e|
  86.   next if !$Trainer
  87.   if $game_temp.background_zoom.is_a?(ZoomMap)
  88.   $game_temp.background_zoom.update
  89.   sprites = $game_temp.background_zoom.instance_variable_get(:@sprites)
  90.     if $game_temp.background_zoom.goal == 1 && sprites["map"].zoom == 1
  91.       pbDisposeZoomMap
  92.     end
  93.   end
  94. }
  95.  
  96.  
  97. #===============================================================================
  98. #Pause Menu Rewriting
  99. #===============================================================================
  100. #If you're using an alternate pause UI,
  101. #you should probably delete this whole section.
  102.  
  103.  
  104. class Scene_Map
  105.  
  106.   def call_menu
  107.     $game_temp.menu_calling = false
  108.     $game_temp.in_menu = true
  109.     $game_player.straighten
  110.     $game_map.update
  111.     $game_temp.pause_menu_scene = PokemonPauseMenu_Scene.new
  112.     $game_temp.pause_menu_screen = PokemonPauseMenu.new($game_temp.pause_menu_scene)
  113.     $game_temp.pause_menu_screen.pbStartPokemonMenu
  114.     $game_temp.in_menu = false
  115.   end
  116.  
  117. end
  118.  
  119.  
  120. class PokemonPauseMenu_Scene
  121.   def pbShowMenu
  122.     @sprites["cmdwindow"].visible = true if @sprites["cmdwindow"]
  123.     @sprites["infowindow"].visible = @infostate if @sprites["infowindow"]
  124.     @sprites["helpwindow"].visible = @helpstate if @sprites["helpwindow"]
  125.   end
  126.  
  127.   def pbHideMenu
  128.     @sprites["cmdwindow"].visible = false if @sprites["cmdwindow"]
  129.     @sprites["infowindow"].visible = false if @sprites["infowindow"]
  130.     @sprites["helpwindow"].visible = false if @sprites["helpwindow"]
  131.   end
  132. end
  133.  
  134. #===============================================================================
  135. #Sprite Utilities
  136. #===============================================================================
  137. #If you have these utilities defined elsewhere, you can delete this section.
  138. class Sprite
  139.   #Utility from Marin
  140.   # Centers the sprite by setting the origin points to half the width and height
  141.   def center_origins
  142.     return if !self.bitmap
  143.     self.ox = self.bitmap.width / 2
  144.     self.oy = self.bitmap.height / 2
  145.   end
  146.  
  147.   #Utility from Luka
  148.   #-----------------------------------------------------------------------------
  149.   #  gets zoom
  150.   #-----------------------------------------------------------------------------
  151.   def zoom
  152.     return self.zoom_x
  153.   end
  154.   #-----------------------------------------------------------------------------
  155.   #  sets all zoom values
  156.   #-----------------------------------------------------------------------------
  157.   def zoom=(val)
  158.     self.zoom_x = val
  159.     self.zoom_y = val
  160.   end
  161.  
  162. end
  163.  
  164.  
  165.  
  166. #===============================================================================
  167. #Game Temp and Message Window rewriting
  168. #===============================================================================
  169. #This code is to allow the ZoomMap class to hide these windows
  170. #when taking a screenshot, so that the text won't be zoomed in.
  171. class Game_Temp
  172.   attr_accessor :background_zoom
  173.   attr_accessor :message_window
  174.   attr_accessor :cmd_window
  175.   attr_accessor :pause_menu_scene
  176.   attr_accessor :pause_menu_screen
  177.  
  178. end
  179.  
  180.  
  181.  
  182. def pbCreateMessageWindow(viewport=nil,skin=nil)
  183.   $game_temp.message_window = Window_AdvancedTextPokemon.new("")
  184.   msgwindow=$game_temp.message_window
  185.   if !viewport
  186.     msgwindow.z=99999
  187.   else
  188.     msgwindow.viewport=viewport
  189.   end
  190.   msgwindow.visible=true
  191.   msgwindow.letterbyletter=true
  192.   msgwindow.back_opacity=MessageConfig::WINDOW_OPACITY
  193.   pbBottomLeftLines(msgwindow,2)
  194.   $game_temp.message_window_showing=true if $game_temp
  195.   skin=MessageConfig.pbGetSpeechFrame() if !skin
  196.   msgwindow.setSkin(skin)
  197.   return msgwindow
  198. end
  199.  
  200. def pbDisposeMessageWindow(msgwindow)
  201.   $game_temp.message_window_showing=false if $game_temp
  202.   $game_temp.message_window.dispose if $game_temp.message_window
  203.   msgwindow.dispose
  204. end
  205.  
  206.  
  207.  
  208. def pbShowCommands(msgwindow,commands=nil,cmdIfCancel=0,defaultCmd=0)
  209.   return 0 if !commands
  210.   $game_temp.cmd_window = Window_CommandPokemonEx.new(commands)
  211.   cmdwindow = $game_temp.cmd_window
  212.   cmdwindow.z=99999
  213.   cmdwindow.visible=true
  214.   cmdwindow.resizeToFit(cmdwindow.commands)
  215.   pbPositionNearMsgWindow(cmdwindow,msgwindow,:right)
  216.   cmdwindow.index=defaultCmd
  217.   command=0
  218.   loop do
  219.     Graphics.update
  220.     Input.update
  221.     cmdwindow.update
  222.     msgwindow.update if msgwindow
  223.     yield if block_given?
  224.     if Input.trigger?(Input::BACK)
  225.       if cmdIfCancel>0
  226.         command=cmdIfCancel-1
  227.         break
  228.       elsif cmdIfCancel<0
  229.         command=cmdIfCancel
  230.         break
  231.       end
  232.     end
  233.     if Input.trigger?(Input::USE)
  234.       command=cmdwindow.index
  235.       break
  236.     end
  237.     pbUpdateSceneMap
  238.   end
  239.   ret=command
  240.   cmdwindow.dispose
  241.   Input.update
  242.   return ret
  243. end
  244.  
  245. def pbShowCommandsWithHelp(msgwindow,commands,help,cmdIfCancel=0,defaultCmd=0)
  246.   msgwin=msgwindow
  247.   msgwin=pbCreateMessageWindow(nil) if !msgwindow
  248.   oldlbl=msgwin.letterbyletter
  249.   msgwin.letterbyletter=false
  250.   if commands
  251.     $game_temp.cmd_window = Window_CommandPokemonEx.new(commands)
  252.     cmdwindow = $game_temp.cmd_window
  253.     cmdwindow.z=99999
  254.     cmdwindow.visible=true
  255.     cmdwindow.resizeToFit(cmdwindow.commands)
  256.     cmdwindow.height=msgwin.y if cmdwindow.height>msgwin.y
  257.     cmdwindow.index=defaultCmd
  258.     command=0
  259.     msgwin.text=help[cmdwindow.index]
  260.     msgwin.width=msgwin.width   # Necessary evil to make it use the proper margins
  261.     loop do
  262.       Graphics.update
  263.       Input.update
  264.       oldindex=cmdwindow.index
  265.       cmdwindow.update
  266.       if oldindex!=cmdwindow.index
  267.         msgwin.text=help[cmdwindow.index]
  268.       end
  269.       msgwin.update
  270.       yield if block_given?
  271.       if Input.trigger?(Input::BACK)
  272.         if cmdIfCancel>0
  273.           command=cmdIfCancel-1
  274.           break
  275.         elsif cmdIfCancel<0
  276.           command=cmdIfCancel
  277.           break
  278.         end
  279.       end
  280.       if Input.trigger?(Input::USE)
  281.         command=cmdwindow.index
  282.         break
  283.       end
  284.       pbUpdateSceneMap
  285.     end
  286.     ret=command
  287.     cmdwindow.dispose
  288.     Input.update
  289.   end
  290.   msgwin.letterbyletter=oldlbl
  291.   msgwin.dispose if !msgwindow
  292.   return ret
  293. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement