131 lines
5.7 KiB
Ruby
131 lines
5.7 KiB
Ruby
#==============================================================================
|
|
# ■ Game_Unit
|
|
#------------------------------------------------------------------------------
|
|
# ユニットを扱うクラスです。このクラスは Game_Party クラスと Game_Troop クラ
|
|
# スのスーパークラスとして使用されます。
|
|
#==============================================================================
|
|
|
|
class Game_Unit
|
|
#--------------------------------------------------------------------------
|
|
# ● 公開インスタンス変数
|
|
#--------------------------------------------------------------------------
|
|
attr_reader :in_battle # 戦闘中フラグ
|
|
#--------------------------------------------------------------------------
|
|
# ● オブジェクト初期化
|
|
#--------------------------------------------------------------------------
|
|
def initialize
|
|
@in_battle = false
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● メンバーの取得
|
|
#--------------------------------------------------------------------------
|
|
def members
|
|
return []
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 生存しているメンバーの配列取得
|
|
#--------------------------------------------------------------------------
|
|
def alive_members
|
|
members.select {|member| member.alive? }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘不能のメンバーの配列取得
|
|
#--------------------------------------------------------------------------
|
|
def dead_members
|
|
members.select {|member| member.dead? }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 行動可能なメンバーの配列取得
|
|
#--------------------------------------------------------------------------
|
|
def movable_members
|
|
members.select {|member| member.movable? }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 全員の戦闘行動クリア
|
|
#--------------------------------------------------------------------------
|
|
def clear_actions
|
|
members.each {|member| member.clear_actions }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 敏捷性の平均値を計算
|
|
#--------------------------------------------------------------------------
|
|
def agi
|
|
return 1 if members.size == 0
|
|
members.inject(0) {|r, member| r += member.agi } / members.size
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 狙われ率の合計を計算
|
|
#--------------------------------------------------------------------------
|
|
def tgr_sum
|
|
alive_members.inject(0) {|r, member| r + member.tgr }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ターゲットのランダムな決定
|
|
#--------------------------------------------------------------------------
|
|
def random_target
|
|
tgr_rand = rand * tgr_sum
|
|
alive_members.each do |member|
|
|
tgr_rand -= member.tgr
|
|
return member if tgr_rand < 0
|
|
end
|
|
alive_members[0]
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ターゲットのランダムな決定(戦闘不能)
|
|
#--------------------------------------------------------------------------
|
|
def random_dead_target
|
|
dead_members.empty? ? nil : dead_members[rand(dead_members.size)]
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ターゲットのスムーズな決定
|
|
#--------------------------------------------------------------------------
|
|
def smooth_target(index)
|
|
member = members[index]
|
|
(member && member.alive?) ? member : alive_members[0]
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● ターゲットのスムーズな決定(戦闘不能)
|
|
#--------------------------------------------------------------------------
|
|
def smooth_dead_target(index)
|
|
member = members[index]
|
|
(member && member.dead?) ? member : dead_members[0]
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 行動結果のクリア
|
|
#--------------------------------------------------------------------------
|
|
def clear_results
|
|
members.select {|member| member.result.clear }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘開始処理
|
|
#--------------------------------------------------------------------------
|
|
def on_battle_start
|
|
members.each {|member| member.on_battle_start }
|
|
@in_battle = true
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘終了処理
|
|
#--------------------------------------------------------------------------
|
|
def on_battle_end
|
|
@in_battle = false
|
|
members.each {|member| member.on_battle_end }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 戦闘行動の作成
|
|
#--------------------------------------------------------------------------
|
|
def make_actions
|
|
members.each {|member| member.make_actions }
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 全滅判定
|
|
#--------------------------------------------------------------------------
|
|
def all_dead?
|
|
alive_members.empty?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 身代わりバトラーの取得
|
|
#--------------------------------------------------------------------------
|
|
def substitute_battler
|
|
members.find {|member| member.substitute? }
|
|
end
|
|
end
|