#============================================================================== # [ZTBS] -Zenith Tactical Battle System- タクティカルバトルシステム #  〜+9:CPメーター表示〜   by 水夜 #  ver1.01  Zenith Creation (http://zenith.ifdef.jp/) #------------------------------------------------------------------------------ # マップ上での戦略的なバトルを実現。 #  ※「CP制御ターンシステム」・・・スクリプトシェルフ(桜雅在土氏) #                   http://scriptshelf.jpn.org/x/ #============================================================================== class CP_TMeters < CP_Meters SKIN = "CPSkin" # スキンファイル名(Graphics/Windowskinsフォルダ) LINE_HEIGHT = 6 # スキンの"一行"の縦幅[単位:ピクセル] #============================================================================== # # ※「CP対応版」でのみ有効です。 # # ※動作環境によってはかなり重くなるかもしれません。 # # ※メーターの横幅は人数に応じて自動調整されます。 # # ※10人くらいまでが限界かと思われます。 # #============================================================================== #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize # メーター群の生成 @meters = [] for i in 0...$game_system.tactics_actors.values.size make_meter(i) end refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh data = $game_system.tactics_actors.keys.sort # 戦闘メンバー数の変更を判別 if @meters.size != data.size @meters.each{|i| i.dispose i = nil} for i in 0..data.size make_meter(i) end end # 表示更新 for i in 0...data.size actor = $game_system.tactics_actors[data[i]] if !@meters[i].disposed? @meters[i].line = actor.cp_linetype @meters[i].amount = actor.cp_lineamount @meters[i].name = actor.name end end end #-------------------------------------------------------------------------- # ● メーターひとつの生成 #-------------------------------------------------------------------------- def make_meter(i) data = $game_system.tactics_actors.keys.dup data.sort! # スキンの取得 skin = RPG::Cache.windowskin(SKIN) # space = 640 / data.size actor_x = i * space + 4 meter = MeterTSprite.new(skin, LINE_HEIGHT) meter.width = [space - 8, skin.width].min meter.x = actor_x meter.y = 464 @meters[i] = meter end #-------------------------------------------------------------------------- # ● Y 座標の設定 #-------------------------------------------------------------------------- def y=(n) @meters.each{|meter| meter.y = n if !meter.disposed?} end end class MeterTSprite < MeterSprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(skin, line_height) super(skin, line_height) @name_sprite = Sprite.new @name_sprite.bitmap = Bitmap.new(@width-4, 32) @name_sprite.z = 602 self.name = "" end #-------------------------------------------------------------------------- # ● 名前の設定 #-------------------------------------------------------------------------- def name=(n) if n != @actor @name_sprite.bitmap.clear @name_sprite.bitmap.font.size = 16 @name_sprite.bitmap.font.color = Color.new(0,0,0) @name_sprite.bitmap.draw_text(0,0,@width,32,n) @name_sprite.bitmap.draw_text(2,0,@width,32,n) @name_sprite.bitmap.draw_text(0,2,@width,32,n) @name_sprite.bitmap.draw_text(2,2,@width,32,n) @name_sprite.bitmap.font.color = Color.new(255,255,255) @name_sprite.bitmap.draw_text(1,1,@width,32,n) end @actor = n end #-------------------------------------------------------------------------- # ● 座標の設定 #-------------------------------------------------------------------------- def x=(n) super @name_sprite.x = n end def y=(n) super @name_sprite.y = n - 22 end #-------------------------------------------------------------------------- # ● 幅の設定 #-------------------------------------------------------------------------- def width=(n) @width = n @base_sprite.src_rect.width = n end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose super @name_sprite.dispose end end class Scene_Map #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- alias ztbscp_main main def main if $game_system.in_tactics and $game_system.tactics_setup and @cp_meters == nil # CP メーターの作成 @cp_meters = CP_TMeters.new end # 呼び戻す ztbscp_main # CP メーターの解放 if @cp_meters != nil @cp_meters.dispose @cp_meters = nil end end #-------------------------------------------------------------------------- # ● タクティクス初期セットアップ #-------------------------------------------------------------------------- alias ztbs_setup setup def setup ztbs_setup # CP メーターの作成 @cp_meters = CP_TMeters.new end #-------------------------------------------------------------------------- # ● タクティクス終了処理 #-------------------------------------------------------------------------- alias ztbs_end_tactics end_tactics def end_tactics ztbs_end_tactics # CP メーターの解放 if @cp_meters != nil @cp_meters.dispose @cp_meters = nil end end #-------------------------------------------------------------------------- # ● コマンドウィンドウ作成 #-------------------------------------------------------------------------- alias ztbs_make_command_window make_command_window def make_command_window(index = 0) ztbs_make_command_window(index) if @command_window != nil @command_window.z = 700 end end #-------------------------------------------------------------------------- # ● セレクトウィンドウ作成 #-------------------------------------------------------------------------- alias ztbs_make_select_window make_select_window def make_select_window(type, actor = nil, index = 0) ztbs_make_select_window(type, actor, index) if @select_window != nil @select_window.z = 700 end end #-------------------------------------------------------------------------- # ● ウィンドウ位置調整 #-------------------------------------------------------------------------- alias ztbs_move_window move_window def move_window ztbs_move_window if $game_player.y < 4 and @help_window.visible @cp_meters.y = 400 else @cp_meters.y = 464 end end #-------------------------------------------------------------------------- # ● フレーム更新 (CP 監視フェーズ) #-------------------------------------------------------------------------- alias ztbs_update_phase4 update_phase4 def update_phase4 # CP メーターの更新 @cp_meters.refresh ztbs_update_phase4 end end