Ceci est un add-on au script Map Zoom Ace, permettant de zoomer sur une position précise de la carte, ou sur un évènement.
Installation :
Cet add-on nécessite le script Map Zoom Ace en V.1.1, placé
directement au-dessus de ce script.
Utilisation :
Deux commandes en script sont utilisables :
- Zoom sur une position de la carte :
MGC.zoom_on_position(abscisse, ordonnée, nouvelle valeur de zoom, durée de la transition)
L’abscisse (coordonnée horizontale) et l’ordonnée (coordonnée verticale) sont exprimées en carreaux (tiles) - Zoom sur un évènement dans la carte :
MGC.zoom_on_event(identifiant de l'évènement, nouvelle valeur de zoom, durée de la transition)
La commande existante MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition)
recentre systématiquement la carte sur le joueur.
Script :
#====================================================================
# Map Zoom Ace Addon
# v.1.0
# Auteur : MGC
#
# Permet de zoomer sur une position de la carte, ou sur un évènement.
#
# Nécessite :
# - le script "Map Zoom Ace" du même auteur en V.1.1, placé
# directement au-dessus de ce script
#
# Utilisation :
# - au sujet de commande existante :
# MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition)
# Cette commande centre systématiquement la vue sur le joueur.
# - nouvelle commande pour zoomer sur une position de la carte
# MGC.zoom_on_position(abscisse, ordonnée, nouvelle valeur de zoom, durée de la transition)
# L'abscisse (x) et l'ordonnée (y) sont exprimées en tiles.
# - nouvelle commande pour zoomer sur un évènement
# MGC.zoom_on_event(identifiant de l'évènement, nouvelle valeur de zoom, durée de la transition)
#====================================================================
module MGC
#--------------------------------------------------------------------------
# * Pour zoomer sur une position (valeurs en tiles)
#--------------------------------------------------------------------------
def self.zoom_on_position(pos_x, pos_y, new_zoom, duration)
@pos_x = pos_x
@pos_y = pos_y
@free_camera = true
self.process_to_map_zoom(new_zoom, duration)
end
#--------------------------------------------------------------------------
# * Pour zoomer sur un évènement
#--------------------------------------------------------------------------
def self.zoom_on_event(event_id, new_zoom, duration)
event = $game_map.events[event_id]
@pos_x = event.x
@pos_y = event.y
@free_camera = true
self.process_to_map_zoom(new_zoom, duration)
end
#--------------------------------------------------------------------------
# * Pour aller progressivement vers une nouvelle valeur de zoom
#--------------------------------------------------------------------------
def self.to_map_zoom(new_zoom, duration)
if @free_camera
@free_camera = false
if map_zoom == new_zoom
$game_player.center($game_player.x, $game_player.y)
@force_map_update = true
end
end
self.process_to_map_zoom(new_zoom, duration)
end
#--------------------------------------------------------------------------
# * Setter pour l'attribut zoom
#--------------------------------------------------------------------------
def self.map_zoom=(zoom_value)
unless map_zoom == zoom_value
if zoom_value < 0.125 || zoom_value > 8.0 then return end
@zoom = zoom_value
$game_system.map_zoom = @zoom
if @free_camera
$game_map.set_display_pos(@pos_x - (Graphics.width / 32 - 1) / 2.0,
@pos_y - (Graphics.height / 32 - 1) / 2.0)
else
$game_player.center($game_player.x, $game_player.y)
end
end
end
#--------------------------------------------------------------------------
# * Pour aller progressivement vers une nouvelle valeur de zoom,
# sans centrage automatique sur le joueur
#--------------------------------------------------------------------------
def self.process_to_map_zoom(new_zoom, duration)
unless map_zoom == new_zoom
if new_zoom < 0.125 || new_zoom > 8.0 then return end
@map_zoom_duration = duration
target_zoom_incr = Math.log(new_zoom) / Math.log(2)
@map_zoom_step = (target_zoom_incr - @map_zoom_incr) / duration
@target_map_zoom = new_zoom
end
end
#--------------------------------------------------------------------------
# * Setter pour l'attribut force_map_update
#--------------------------------------------------------------------------
def self.force_map_update=(flag)
@force_map_update = flag
end
#--------------------------------------------------------------------------
# * Getter pour l'attribut force_map_update
#--------------------------------------------------------------------------
def self.force_map_update
return @force_map_update
end
#--------------------------------------------------------------------------
# ** Tilemap
#--------------------------------------------------------------------------
class Tilemap
#--------------------------------------------------------------------------
# * Aliased methods
#--------------------------------------------------------------------------
unless @already_aliased_mgc_zoom_addon
alias update_map_zoom_addon update
@already_aliased_mgc_zoom_addon = true
end
#--------------------------------------------------------------------------
# * Mise à jour, appelée normalement à chaque frame
#--------------------------------------------------------------------------
def update
if @visible && MGC.force_map_update
@need_refresh = true
@refresh_all = true
MGC.force_map_update = false
end
update_map_zoom_addon
end
end
end