DayAndNight.periods.each_with_index do |period, i|
break if DayAndNight.hour(period) > @time.hour
@period = i
end
end
#--------------------------------------------------------------------------
# * Serializa��o do objeto
#--------------------------------------------------------------------------
def marshal_dump
[@time, @period]
end
#--------------------------------------------------------------------------
# * Desserializa��o do objeto
# data : Dados lidos do arquivo
#--------------------------------------------------------------------------
def marshal_load(data)
@time, @period = data
if DayAndNight.real_time?
@time = Time.now
else
@creation_time = Time.now
end
end
#--------------------------------------------------------------------------
# * Atualiza o rel�gio do jogo e a vari�vel ligada a ele
#--------------------------------------------------------------------------
def update
update_time
update_period
update_game_variable unless DayAndNight::HOUR_VARIABLE_ID.zero?
end
#--------------------------------------------------------------------------
# * Atualiza o tempo do jogo
#--------------------------------------------------------------------------
def update_time
if DayAndNight.real_time?
@time = Time.now
else
delta = Time.now - @creation_time
@time = Time.at(delta.to_f * DayAndNight::TIME_MULTIPLIER)
end
end
#--------------------------------------------------------------------------
# * Atualiza a vari�vel do jogo que guarda a hora atual
#--------------------------------------------------------------------------
def update_game_variable
$game_variables[DayAndNight::HOUR_VARIABLE_ID] = @time.hour
end
#--------------------------------------------------------------------------
# * Pr�ximo per�odo do dia
#--------------------------------------------------------------------------
def next_period
(@period + 1) % DayAndNight.periods.size
end
#--------------------------------------------------------------------------
# * Determina se deveria trocar de per�odo
#--------------------------------------------------------------------------
def should_change_periods?
if next_period < @period
return false unless @time.hour < DayAndNight.hour(@period)
return @time.hour >= DayAndNight.hour(next_period)
end
return true if @time.hour < DayAndNight.hour(@period)
return @time.hour >= DayAndNight.hour(next_period)
end
#--------------------------------------------------------------------------
# * Determina o per�odo atual do dia usando o rel�gio
#--------------------------------------------------------------------------
def update_period
return unless should_change_periods?
update_game_switches
@period = next_period
end
#--------------------------------------------------------------------------
# * Atualiza as switches que identificam os per�odos do dia
#--------------------------------------------------------------------------
def update_game_switches
$game_switches[DayAndNight.switch(@period)] = false
$game_switches[DayAndNight.switch(next_period)] = true
end
end
#==============================================================================
# ** DataManager
#------------------------------------------------------------------------------
# Este m�dulo gerencia o jogo e objetos do banco de dados utilizados no jogo.
# Quase todas as vari�veis globais s�o inicializadas no m�dulo.
# Modificado para salvar no arquivo de Save do jogo o rel�gio interno usado
# para controlar o sistema de dia e noite.
#==============================================================================
class << DataManager
#--------------------------------------------------------------------------
# * Cria��o dos objetos do jogo
#--------------------------------------------------------------------------
alias day_and_night_create_game_objects create_game_objects
def create_game_objects(*args, &block)
day_and_night_create_game_objects(*args, &block)
$game_clock = Game_Clock.new
end
#--------------------------------------------------------------------------
# * Salvar a cria��o de conte�do
#--------------------------------------------------------------------------
alias day_and_night_make_save_contents make_save_contents
def make_save_contents(*args, &block)
contents = day_and_night_make_save_contents(*args, &block)
contents[:clock] = $game_clock
contents
end
#--------------------------------------------------------------------------
# * Extrair conte�do salvo
#--------------------------------------------------------------------------
alias day_and_night_extract_save_contents extract_save_contents
def extract_save_contents(contents, *args, &block)
day_and_night_extract_save_contents(contents, *args, &block)
$game_clock = contents[:clock]
end
end
#==============================================================================
# ** Color
#------------------------------------------------------------------------------
# Classe usada para representar uma cor.
# Modificada para possibilitar obter uma cor a partir de um Tone, necess�rio
# para compatibilidade com o Khas Awesome Light Effects
#==============================================================================
class << Color
#--------------------------------------------------------------------------
# * Cria uma cor a partir de um Tone
# tone : Tone a ser usado de refer�ncia para a cor
#--------------------------------------------------------------------------
def from_tone(tone)
red = 0
green = 0
blue = 0
if tone.red < 0
red += tone.red
green -= tone.red
blue -= tone.red
else
red += tone.red * 2
end
if tone.green < 0
red -= tone.green
green += tone.green
blue -= tone.green
else
green += tone.green * 2
end
if tone.blue < 0
red -= tone.blue
green -= tone.blue
blue += tone.blue
else
blue += tone.blue * 2
end
delay = DayAndNight::PERIOD_TRANSITION_DELAY
if defined? $game_map.effect_surface
color = Color.from_tone(map_tone)
r, g, b, a = color.red, color.green, color.blue, color.alpha
$game_map.effect_surface.change_color(delay, r, g, b, a)
else
$game_map.screen.start_tone_change(map_tone, delay)
end
end
#--------------------------------------------------------------------------
# * Determina se deveria atualizar o tom do per�odo
# Por padr�o, atualiza a cada 15 minutos
#--------------------------------------------------------------------------
def should_update_period_tone?
return @period != map_period
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de mapa. Modificado para
# atualizar o rel�gio do jogo.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Atualiza��o da tela
#--------------------------------------------------------------------------
alias day_and_night_update update
def update
day_and_night_update
$game_clock.update
end
end