#============================================================================== # +++ MOG XP - Timer Meter v2.0 +++ #============================================================================== # By Moghunter # http://www.atelier-rgss.com/ #============================================================================== # Apresenta um medidor animado com a contagem de tempo. #============================================================================== # Serão necessários os seguintes arquivos na pasta Graphics/Windowskins # # Timer_Layout.png # Timer_Meter.png # Timer_Number.png # Timer_Fire.png # #============================================================================== # Histórico # 2.0 - Novos efeitos e melhor codificação. #============================================================================== module MOG_TIMER_METER #Posição geral da janela de contagem. (X,Y) TIMER_POS = [180,30] #Posição do medidor. (X,Y) METER_POS = [60,9] #Posição do número. (X,Y) NUMBER_POS = [104,24] #Posição da animação do fogo. (X,Y) FIRE_POS = [60,0] #Velocidade da animação do medidor. METER_FLOW_SPEED = 5 #Velocidade da animação do fogo. FIRE_ANIMATION_SPEED = 3 #Prioridade do medidor. PRIORITY_Z = 200 end #============================================================================== # ** Game_System #============================================================================== class Game_System attr_accessor :timer_prev #-------------------------------------------------------------------------- # * Initialize #-------------------------------------------------------------------------- alias mog_timer_meter_initialize initialize def initialize @timer_prev = 1 mog_timer_meter_initialize end end #============================================================================== # ** Interpreter #============================================================================== class Interpreter #-------------------------------------------------------------------------- # * command_124 #-------------------------------------------------------------------------- alias mog_timer_meter_command_124 command_124 def command_124 mog_timer_meter_command_124 $game_system.timer_prev = $game_system.timer - 40 $game_system.timer_prev = 1 if $game_system.timer == 0 end end #============================================================================== # ** Sprite_Timer #============================================================================== class Sprite_Timer < Sprite include MOG_TIMER_METER #-------------------------------------------------------------------------- # * Initialize #-------------------------------------------------------------------------- def initialize super update_timer create_layout create_meter create_number create_fire end #-------------------------------------------------------------------------- # * create_layout #-------------------------------------------------------------------------- def create_layout @layout = Sprite.new @layout.bitmap = RPG::Cache.windowskin("Timer_Layout") @layout.z = PRIORITY_Z @layout.x = TIMER_POS[0] @layout.y = TIMER_POS[1] end #-------------------------------------------------------------------------- # * create_meter #-------------------------------------------------------------------------- def create_meter @meter_flow = 0 @meter_image = RPG::Cache.windowskin("Timer_Meter") @meter_bitmap = Bitmap.new(@meter_image.width,@meter_image.height) @meter_range = @meter_image.width / 3 @meter_width = @meter_range * ($game_system.timer - 40) / $game_system.timer_prev @meter_width = 0 if $game_system.timer < 40 @meter_height = @meter_image.height @meter_src_rect = Rect.new(@meter_range, 0, @meter_width, @meter_height) @meter_bitmap.blt(0,0, @meter_image, @meter_src_rect) @meter_sprite = Sprite.new @meter_sprite.bitmap = @meter_bitmap @meter_sprite.z = PRIORITY_Z + 1 @meter_sprite.x = TIMER_POS[0] + METER_POS[0] @meter_sprite.y = TIMER_POS[1] + METER_POS[1] update_flow end #-------------------------------------------------------------------------- # * create_number #-------------------------------------------------------------------------- def create_number @number_image = RPG::Cache.windowskin("Timer_Number") @number_bitmap = Bitmap.new(@number_image.width,@number_image.height) @number_sprite = Sprite.new @number_sprite.bitmap = @number_bitmap @number_sprite.z = PRIORITY_Z + 3 @number_sprite.x = TIMER_POS[0] + NUMBER_POS[0] @number_sprite.y = TIMER_POS[1] + NUMBER_POS[1] @number_cw = @number_image.width / 10 @number_ch = @number_image.height refresh_number @number = @total_sec end #-------------------------------------------------------------------------- # * create_fire #-------------------------------------------------------------------------- def create_fire @fire_flow = 0 @fire_flow_speed = 0 @fire_refresh = false @fire_image = RPG::Cache.windowskin("Timer_Fire") @fire_bitmap = Bitmap.new(@fire_image.width,@fire_image.height) @fire_width = @fire_image.width / 4 @fire_src_rect_back = Rect.new(0, 0,@fire_width, @fire_image.height) @fire_bitmap.blt(0,0, @fire_image, @fire_src_rect_back) @fire_sprite = Sprite.new @fire_sprite.bitmap = @fire_bitmap @fire_sprite.z = PRIORITY_Z + 2 @fire_sprite.x = -5 + @meter_width + TIMER_POS[0] + FIRE_POS[0] @fire_sprite.y = TIMER_POS[1] + FIRE_POS[1] update_fire end #-------------------------------------------------------------------------- # * dispose #-------------------------------------------------------------------------- def dispose @layout.bitmap.dispose @layout.dispose @meter_sprite.bitmap.dispose @meter_sprite.dispose @meter_bitmap.dispose @number_sprite.bitmap.dispose @number_sprite.dispose @number_bitmap.dispose @fire_bitmap.dispose @fire_sprite.bitmap.dispose @fire_sprite.dispose super end #-------------------------------------------------------------------------- # * update #-------------------------------------------------------------------------- def update super update_visible update_timer update_flow update_fire refresh_number end #-------------------------------------------------------------------------- # * draw_number #-------------------------------------------------------------------------- def draw_number(x,y,value) @number_text = value.abs.to_s.split(//) plus_x = -@number_cw * @number_text.size for r in 0..@number_text.size - 1 @number_abs = @number_text[r].to_i @number_src_rect = Rect.new(@number_cw * @number_abs, 0, @number_cw, @number_ch) @number_bitmap.blt(plus_x + x + (@number_cw * r), y, @number_image, @number_src_rect) end end #-------------------------------------------------------------------------- # * refresh_number #-------------------------------------------------------------------------- def refresh_number return if @number == @total_sec @number = @total_sec @number_sprite.bitmap.clear draw_number(@number_cw * 1,0,0) if @min < 10 draw_number(@number_cw * 2,0,@min) draw_number(@number_cw * 4,0,0) if @sec < 10 draw_number(@number_cw * 5,0,@sec) end #-------------------------------------------------------------------------- # * update #-------------------------------------------------------------------------- def update_visible @meter_sprite.visible = $game_system.timer_working @number_sprite.visible = $game_system.timer_working @layout.visible = $game_system.timer_working @fire_sprite.visible = $game_system.timer_working end #-------------------------------------------------------------------------- # * update #-------------------------------------------------------------------------- def update_timer @total_sec = $game_system.timer / Graphics.frame_rate @min = @total_sec / 60 @sec = @total_sec % 60 end #-------------------------------------------------------------------------- # * update_flow #-------------------------------------------------------------------------- def update_flow @meter_sprite.bitmap.clear @meter_width = @meter_range * ($game_system.timer - 40) / $game_system.timer_prev @meter_width = 0 if $game_system.timer < 40 @meter_src_rect = Rect.new(@meter_flow, 0,@meter_width, @meter_height) @meter_bitmap.blt(0,0, @meter_image, @meter_src_rect) @meter_flow += METER_FLOW_SPEED @meter_flow = 0 if @meter_flow >= @meter_image.width - @meter_range end #-------------------------------------------------------------------------- # * update_fire #-------------------------------------------------------------------------- def update_fire @fire_flow_speed += 1 if @fire_flow_speed > FIRE_ANIMATION_SPEED @fire_flow += 1 @fire_flow_speed = 0 @fire_flow = 0 if @fire_flow == 4 @fire_refresh = true end @fire_sprite.x = -5 + @meter_width + TIMER_POS[0] + FIRE_POS[0] return if @fire_refresh == false @fire_sprite.bitmap.clear @fire_refresh = false @fire_src_rect_back = Rect.new(@fire_width * @fire_flow, 0,@fire_width, @fire_image.height) @fire_bitmap.blt(0,0, @fire_image, @fire_src_rect_back) end end $mog_rgssxp_timer_meter = true