#==============================================================================
# ■ 码头系统
#------------------------------------------------------------------------------
# By:图灵
# 使用方法:将事件命名为码头即可。
# 码头影响范围默认为2 在下方 WHARTDIS 更改
#==============================================================================
#==============================================================================
# ■ Vector2
#------------------------------------------------------------------------------
# 处理二维向量的类。
#==============================================================================
class Vector2
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :x
attr_accessor :y
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize(x = 0, y = 0)
@x = x
@y = y
end
#--------------------------------------------------------------------------
# ● 计算距离
#--------------------------------------------------------------------------
def self.dis(x,y)
return Math.hypot(x,y)
end
end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# 处理地图的类。包含卷动以及可以通行的判断功能。本类的实例请参考 $game_map 。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :wharts
alias old_setup setup
def setup(map_id)
old_setup(map_id)
set_whart
end
#--------------------------------------------------------------------------
# ● 设置码头
#--------------------------------------------------------------------------
def set_whart
@wharts = []
@map.events.each_value do |event|
if event.name == "码头"
port = Vector2.new(event.x,event.y)
@wharts.push(port)
end
end
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 常量
# WHARTDIS = 码头影响范围
#--------------------------------------------------------------------------
WHARTDIS = 2
#--------------------------------------------------------------------------
# ● 上下交通工具
#--------------------------------------------------------------------------
def get_on_off_vehicle
return false unless movable?
can = false
$game_map.wharts.each do |i|
can = true if Vector2.dis(i.x-x,i.y-y)<WHARTDIS
end
if can
if in_vehicle?
return get_off_vehicle
else
return get_on_vehicle
end
end
end
end