#encoding:utf-8
#==============================================================================
# ■ Game_Followers
#------------------------------------------------------------------------------
# 包装跟随角色的数组的外壳。本类在 Game_Player 类的内部使用。
#==============================================================================
class Game_Followers
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :visible # 可视状态 (true 则开启人物跟随)
#--------------------------------------------------------------------------
# ● 初始化对象
# leader : 带队的角色
#--------------------------------------------------------------------------
def initialize(leader)
@visible = $data_system.opt_followers
@gathering = false # 集合处理中的标志
@data = []
@data.push(Game_Follower.new(1, leader))
(2...$game_party.max_battle_members).each do |index|
@data.push(Game_Follower.new(index, @data[-1]))
end
end
#--------------------------------------------------------------------------
# ● 获取跟随角色
#--------------------------------------------------------------------------
def [](index)
@data[index]
end
#--------------------------------------------------------------------------
# ● 迭代
#--------------------------------------------------------------------------
def each
@data.each {|follower| yield follower } if block_given?
end
#--------------------------------------------------------------------------
# ● 迭代(逆向)
#--------------------------------------------------------------------------
def reverse_each
@data.reverse.each {|follower| yield follower } if block_given?
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
each {|follower| follower.refresh }
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
if gathering?
move unless moving? || moving?
@gathering = false if gather?
end
each {|follower| follower.update }
end
#--------------------------------------------------------------------------
# ● 移动
#--------------------------------------------------------------------------
def move
reverse_each {|follower| follower.chase_preceding_character }
end
#--------------------------------------------------------------------------
# ● 同步
#--------------------------------------------------------------------------
def synchronize(x, y, d)
each do |follower|
follower.moveto(x, y)
follower.set_direction(d)
end
end
#--------------------------------------------------------------------------
# ● 集合
#--------------------------------------------------------------------------
def gather
@gathering = true
end
#--------------------------------------------------------------------------
# ● 判定是否集合当中
#--------------------------------------------------------------------------
def gathering?
@gathering
end
#--------------------------------------------------------------------------
# ● 获取显示中的跟随角色的数组
#--------------------------------------------------------------------------
def visible_folloers
@data.select {|follower| follower.visible? }
end
#--------------------------------------------------------------------------
# ● 判定是否移动中
#--------------------------------------------------------------------------
def moving?
visible_folloers.any? {|follower| follower.moving? }
end
#--------------------------------------------------------------------------
# ● 判定是否集合完毕
#--------------------------------------------------------------------------
def gather?
visible_folloers.all? {|follower| follower.gather? }
end
#--------------------------------------------------------------------------
# ● 碰撞的判定
#--------------------------------------------------------------------------
def collide?(x, y)
visible_folloers.any? {|follower| follower.pos?(x, y) }
end
end