#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8,10)
# ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
# self_event : 自己 (判定事件可以通行的情况下)
#--------------------------------------------------------------------------
def passable?(x, y, d, self_event = nil)
# 被给予的坐标地图外的情况下
unless valid?(x, y)
# 不能通行
return false
end
# 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
bit = (1 << (d / 2 - 1)) & 0x0f
# 循环全部的事件
for event in events.values
# 自己以外的元件与坐标相同的情况
if event.tile_id >= 0 and event != self_event and
event.x == x and event.y == y and not event.through
# 如果障碍物的接触被设置的情况下
if @passages[event.tile_id] & bit != 0
# 不能通行
return false
# 如果全方向的障碍物的接触被设置的情况下
elsif @passages[event.tile_id] & 0x0f == 0x0f
# 不能通行
return false
# 这以外的优先度为 0 的情况下
elsif @priorities[event.tile_id] == 0
# 可以通行
return true
end
end
end
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8,10)
# ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
# self_event : 自己 (判定事件可以通行的情况下)
#--------------------------------------------------------------------------
def passable?(x, y, d, self_event = nil)
# 被给予的坐标地图外的情况下
unless valid?(x, y)
# 不能通行
return false
end
# 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
bit = (1 << (d / 2 - 1)) & 0x0f
# 循环全部的事件
for event in events.values
# 自己以外的元件与坐标相同的情况
if event.tile_id >= 0 and event != self_event and
event.x == x and event.y == y and not event.through
# 如果障碍物的接触被设置的情况下
if @passages[event.tile_id] & bit != 0
# 不能通行
return false
# 如果全方向的障碍物的接触被设置的情况下
elsif @passages[event.tile_id] & 0x0f == 0x0f
# 不能通行
return false
# 这以外的优先度为 0 的情况下
elsif @priorities[event.tile_id] == 0
# 可以通行
return true
end
end
end