Chaos Project

RPG Maker => RPG Maker Scripts => RMXP Script Database => Topic started by: Shalaren on February 24, 2011, 10:06:28 pm

Title: [XP] Animated Control Timer Meter
Post by: Shalaren on February 24, 2011, 10:06:28 pm
Animated Control Timer Meter
Authors: Moghunter
Version: 2.0
Type: HUD add-on
Key Term: Misc Add-on



Introduction

Presents an animated count down meter for control timer!


Features




Screenshots

Spoiler: ShowHide
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/XP_SYS08.GIF)



Demo

XP_Animated_Control_timer_meter (http://www.atelier-rgss.com/RGSS/Demos/XP_TIME_METER.exe)


Script

Spoiler: ShowHide

#==============================================================================
# +++ 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



Instructions

easy just insert the script, and set an event to have a control timer started, also turn off switch 001 everytime you start a timer.
You will need the following files in the Graphics / Windowskins
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Fire.PNG)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Layout.PNG)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Meter.png)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Number.PNG)


Compatibility

compatible with anything, at least thats how it looked like after testing it.


Credits and Thanks




Author's Notes

i bet this scripit can be very useful :P
Title: Re: [XP] Animated Control timer meter
Post by: Blizzard on February 25, 2011, 02:27:14 am
http://forum.chaos-project.com/index.php/topic,17.0.html
Title: Re: [XP] Animated Control timer meter
Post by: SBR* on February 25, 2011, 04:21:26 am
Ohhhhhh, that looks nice :D! It can be put to good use when used in combination with Blizz-ABS, I think :D. As this is scripted by Moghunter, I hope you understand I won't really level you up for this.
Title: Re: [XP] Animated Control timer meter
Post by: Shalaren on February 25, 2011, 09:45:51 am
fine blizz Ill edit it in a sec S:,

@SBR* i dont excpect you to lvl me up ^^, I found it and thought it is really nice so I decided to share it with CP
i just translated what ever needed to.
Title: Re: [XP] Animated Control timer meter
Post by: LiTTleDRAgo on February 25, 2011, 10:50:17 am
You can post someone script here?
Not just our script?

btw the script is cut in my browser or it's just mine?
Title: Re: [XP] Animated Control timer meter
Post by: mcgluszak on February 25, 2011, 11:02:56 am
yeah, the script is cut ;/
Title: Re: [XP] Animated Control timer meter
Post by: AliveDrive on February 25, 2011, 11:14:06 am
Pictures are so underrated in my opinion. Looks great. Thanks....Moghunter? lol
Title: Re: [XP] Animated Control timer meter
Post by: Shalaren on February 25, 2011, 11:37:08 am
Quote from: LiTTleDRAgo on February 25, 2011, 10:50:17 am
You can post someone script here?
Not just our script?

btw the script is cut in my browser or it's just mine?


i dont see why not? im not taking any credit for it.
also fixed S:
Title: Re: [XP] Animated Control timer meter
Post by: Taiine on February 25, 2011, 07:36:37 pm
I thought you could only post your own scrips here?
Plus anyone can just go to http://www.atelier-rgss.com/ to find Moghunters scrips.
Title: Re: [XP] Animated Control timer meter
Post by: G_G on February 25, 2011, 08:32:49 pm
You can post anyones script here if the original author is okay with it and it already hasn't been posted along with giving credits to the actual author.
Title: Re: [XP] Animated Control timer meter
Post by: Spaceman McConaughey on February 25, 2011, 08:54:18 pm
Quote from: SBR* on February 25, 2011, 04:21:26 am
As this is scripted by Moghunter, I hope you understand I won't really level you up for this.


Lol, look who takes level ups seriously.
Title: Re: [XP] Animated Control timer meter
Post by: Shalaren on February 25, 2011, 09:03:15 pm
Quote from: game_guy on February 25, 2011, 08:32:49 pm
You can post anyones script here if the original author is okay with it and it already hasn't been posted along with giving credits to the actual author.

"check"