[XP] Animated Control Timer Meter

Started by Shalaren, February 24, 2011, 10:06:28 pm

Previous topic - Next topic

Shalaren

February 24, 2011, 10:06:28 pm Last Edit: March 14, 2011, 11:27:11 am by Blizzard
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


  • Uses pictures to show a Controlled Timer

  • Animations involved,

  • Requires 4 pictures in Graphics / Windowskins

  • Location can be easily edited (even by noobs)




Screenshots

Spoiler: ShowHide



Demo

XP_Animated_Control_timer_meter


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






Compatibility

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


Credits and Thanks


  • Moghunter




Author's Notes

i bet this scripit can be very useful :P

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

SBR*

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.

Shalaren

February 25, 2011, 09:45:51 am #3 Last Edit: February 25, 2011, 09:47:29 am by shalaren metropolis
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.

LiTTleDRAgo

You can post someone script here?
Not just our script?

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

mcgluszak


AliveDrive

Pictures are so underrated in my opinion. Looks great. Thanks....Moghunter? lol
Quote from: Blizzard on September 09, 2011, 02:26:33 am
The permanent solution for your problem would be to stop hanging out with stupid people.

Shalaren

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:

Taiine

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.

G_G

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.

Spaceman McConaughey

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.

Shalaren

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"