114 lines
4.5 KiB
Ruby
114 lines
4.5 KiB
Ruby
|
|
# -*- coding: utf-8 -*-
|
||
|
|
#==============================================================================
|
||
|
|
# ** Game_Followers
|
||
|
|
#------------------------------------------------------------------------------
|
||
|
|
# This is a wrapper for a follower array. This class is used internally for
|
||
|
|
# the Game_Player class.
|
||
|
|
#==============================================================================
|
||
|
|
|
||
|
|
class Game_Followers
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Public Instance Variables
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
attr_accessor :visible # Player Followers ON?
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Object Initialization
|
||
|
|
# leader: Lead character
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def initialize(leader)
|
||
|
|
@visible = $data_system.opt_followers
|
||
|
|
@gathering = false # Gathering processing underway flag
|
||
|
|
@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
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Get Followers
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def [](index)
|
||
|
|
@data[index]
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Iterator
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def each
|
||
|
|
@data.each {|follower| yield follower } if block_given?
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Iterator (Reverse)
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def reverse_each
|
||
|
|
@data.reverse.each {|follower| yield follower } if block_given?
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Refresh
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def refresh
|
||
|
|
each {|follower| follower.refresh }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Frame Update
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def update
|
||
|
|
if gathering?
|
||
|
|
move unless moving? || moving?
|
||
|
|
@gathering = false if gather?
|
||
|
|
end
|
||
|
|
each {|follower| follower.update }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Movement
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def move
|
||
|
|
reverse_each {|follower| follower.chase_preceding_character }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Synchronize
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def synchronize(x, y, d)
|
||
|
|
each do |follower|
|
||
|
|
follower.moveto(x, y)
|
||
|
|
follower.set_direction(d)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Gather
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def gather
|
||
|
|
@gathering = true
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Determine if Gathering
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def gathering?
|
||
|
|
@gathering
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Get Array of Displayed Followers
|
||
|
|
# "folloers" is typo, but retained because of the compatibility.
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def visible_folloers
|
||
|
|
@data.select {|follower| follower.visible? }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Determine if Moving
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def moving?
|
||
|
|
visible_folloers.any? {|follower| follower.moving? }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Determine if Gathered
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def gather?
|
||
|
|
visible_folloers.all? {|follower| follower.gather? }
|
||
|
|
end
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
# * Detect Collision
|
||
|
|
#--------------------------------------------------------------------------
|
||
|
|
def collide?(x, y)
|
||
|
|
visible_folloers.any? {|follower| follower.pos?(x, y) }
|
||
|
|
end
|
||
|
|
end
|