Код:
#==============================================================================
# ** Модификация камеры v1.0 (07.2.12) by shun / Перевод: Arnon
#------------------------------------------------------------------------------
# Модифицирует пермещение камеры, замедляя её.
# Также добавляет возможность свободного перемещения камеры.
#==============================================================================
module SIMP
#--------------------------------------------------------------------------
# * Настройки
#--------------------------------------------------------------------------
#
# Скорость прокрутки
#
CAMERA_MIN_SPEED = 1 # Минимальная скорость прокрутки
CAMERA_DELAY = 2 # Задержка камеры (чем выше тем позднее)
#
# Свободный просмотр
#
CAMERA_SCROLL_SWITCH = 48 # Номер переключателя, запрещающего просмотр
CAMERA_SCROLL_KEY = Input::A # Клавиша активации (Input::<кнопка>)
CAMERA_SCROLL_SPEED = 5 # Скорость свободного перемещения камеры
CAMERA_SCROLL_DIR8 = true # Просмотр в 8 направлениях
end
class Game_Map
#--------------------------------------------------------------------------
# ● Публичные переменные
#--------------------------------------------------------------------------
attr_writer :real_display_x # X координата
attr_writer :real_display_y # Y координата
#--------------------------------------------------------------------------
# ● Инициализация камеры
#--------------------------------------------------------------------------
alias camera_initialize initialize
def initialize
camera_initialize
@real_display_x = 0
@real_display_y = 0
end
#--------------------------------------------------------------------------
# ● Установка камеры
# map_id : ID карты
#--------------------------------------------------------------------------
alias camera_setup setup
def setup(map_id)
camera_setup(map_id)
@real_display_x = 0
@real_display_y = 0
end
#--------------------------------------------------------------------------
# ● Координата X * 128
#--------------------------------------------------------------------------
def display_x
return @real_display_x
end
#--------------------------------------------------------------------------
# ● Координата Y * 128
#--------------------------------------------------------------------------
def display_y
return @real_display_y
end
#--------------------------------------------------------------------------
# ● Обновление кадра
#--------------------------------------------------------------------------
alias camera_update update
def update
camera_update
dx = @display_x - @real_display_x
unless dx == 0
speed = get_speed(dx.abs)
distance = 2 ** speed
if dx > 0
@real_display_x = [@real_display_x + distance, @display_x].min
else
@real_display_x = [@real_display_x - distance, @display_x].max
end
end
dy = @display_y - @real_display_y
unless dy == 0
speed = get_speed(dy.abs)
distance = 2 ** speed
if dy > 0
@real_display_y = [@real_display_y + distance, @display_y].min
else
@real_display_y = [@real_display_y - distance, @display_y].max
end
end
end
#--------------------------------------------------------------------------
# * Получение скорости прокрутки
# distance : дистанция
#--------------------------------------------------------------------------
def get_speed(distance)
return [SIMP::CAMERA_MIN_SPEED, distance / 32 - SIMP::CAMERA_DELAY].max
end
end
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● Обновление кадра
#--------------------------------------------------------------------------
alias camera_update update
def update
# Проверка на движение, запущенные команды события, маршрут движения,
# а так же показанное на экране сообщение
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# Если нажата клавиша свободного просмотра и не активен переключатель
if Input.trigger?(SIMP::CAMERA_SCROLL_KEY) and @scroll != true and
$game_switches[SIMP::CAMERA_SCROLL_SWITCH] != true
# Воспроизведение SE выбора решения
$game_system.se_play($data_system.decision_se)
@scroll = true
Input.update
end
end
# Если активен свободный просмотр
if @scroll
super
update_scroll
else
camera_update
end
end
#--------------------------------------------------------------------------
# * Обнолвление кадра (свободный просмотр)
#--------------------------------------------------------------------------
def update_scroll
# Если была нажата клавиша свободного просмотра
if Input.trigger?(SIMP::CAMERA_SCROLL_KEY)
# Воспроизведение SE отмены
$game_system.se_play($data_system.cancel_se)
# Центрировать карту
center(@x, @y)
# Установка флага прокрутки
@scroll = false
return
end
distance = 2 ** SIMP::CAMERA_SCROLL_SPEED
# Прокрутка в указанном направлении
dir = (SIMP::CAMERA_SCROLL_DIR8 ? Input.dir8 : Input.dir4)
case dir
when 1
$game_map.scroll_down(distance)
$game_map.scroll_left(distance)
when 2
$game_map.scroll_down(distance)
when 3
$game_map.scroll_down(distance)
$game_map.scroll_right(distance)
when 4
$game_map.scroll_left(distance)
when 6
$game_map.scroll_right(distance)
when 7
$game_map.scroll_left(distance)
$game_map.scroll_up(distance)
when 8
$game_map.scroll_up(distance)
when 9
$game_map.scroll_right(distance)
$game_map.scroll_up(distance)
end
end
#--------------------------------------------------------------------------
# ● Центрирование карты
#--------------------------------------------------------------------------
alias camera_center center
def center(x, y)
camera_center(x, y)
$game_map.real_display_x = $game_map.display_x
$game_map.real_display_y = $game_map.display_y
end
end
#--------------------------------------------------------------------------
Социальные закладки