#==============================================================================
# ★ 촬영 기술 var 1.0 (07.2.12) by shun 번역: 인간(jty1025)
#------------------------------------------------------------------------------
# 맵 화면에서 스크롤을 카메라풍으로 늦추거나
# 플레이어와는 독립시켜 스크롤 시키거나 할 수 있습니다.
#==============================================================================
module SIMP
#--------------------------------------------------------------------------
# ○ 설정
#--------------------------------------------------------------------------
#
# 스크롤 속도
#
CAMERA_MIN_SPEED = 1 # 최저한의 스크롤 속도
CAMERA_DELEY = 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_DELEY].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
#--------------------------------------------------------------------------