mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Yet more script rearranging
This commit is contained in:
312
Data/Scripts/012_Overworld/003_Overworld_Time.rb
Normal file
312
Data/Scripts/012_Overworld/003_Overworld_Time.rb
Normal file
@@ -0,0 +1,312 @@
|
||||
#===============================================================================
|
||||
# Day and night system
|
||||
#===============================================================================
|
||||
def pbGetTimeNow
|
||||
return Time.now
|
||||
end
|
||||
|
||||
|
||||
|
||||
module PBDayNight
|
||||
HourlyTones = [
|
||||
Tone.new(-70, -90, 15, 55), # Night # Midnight
|
||||
Tone.new(-70, -90, 15, 55), # Night
|
||||
Tone.new(-70, -90, 15, 55), # Night
|
||||
Tone.new(-70, -90, 15, 55), # Night
|
||||
Tone.new(-60, -70, -5, 50), # Night
|
||||
Tone.new(-40, -50, -35, 50), # Day/morning
|
||||
Tone.new(-40, -50, -35, 50), # Day/morning # 6AM
|
||||
Tone.new(-40, -50, -35, 50), # Day/morning
|
||||
Tone.new(-40, -50, -35, 50), # Day/morning
|
||||
Tone.new(-20, -25, -15, 20), # Day/morning
|
||||
Tone.new( 0, 0, 0, 0), # Day
|
||||
Tone.new( 0, 0, 0, 0), # Day
|
||||
Tone.new( 0, 0, 0, 0), # Day # Noon
|
||||
Tone.new( 0, 0, 0, 0), # Day
|
||||
Tone.new( 0, 0, 0, 0), # Day/afternoon
|
||||
Tone.new( 0, 0, 0, 0), # Day/afternoon
|
||||
Tone.new( 0, 0, 0, 0), # Day/afternoon
|
||||
Tone.new( 0, 0, 0, 0), # Day/afternoon
|
||||
Tone.new( -5, -30, -20, 0), # Day/evening # 6PM
|
||||
Tone.new(-15, -60, -10, 20), # Day/evening
|
||||
Tone.new(-15, -60, -10, 20), # Day/evening
|
||||
Tone.new(-40, -75, 5, 40), # Night
|
||||
Tone.new(-70, -90, 15, 55), # Night
|
||||
Tone.new(-70, -90, 15, 55) # Night
|
||||
]
|
||||
@cachedTone = nil
|
||||
@dayNightToneLastUpdate = nil
|
||||
@oneOverSixty = 1/60.0
|
||||
|
||||
# Returns true if it's day.
|
||||
def self.isDay?(time=nil)
|
||||
time = pbGetTimeNow if !time
|
||||
return (time.hour>=5 && time.hour<20)
|
||||
end
|
||||
|
||||
# Returns true if it's night.
|
||||
def self.isNight?(time=nil)
|
||||
time = pbGetTimeNow if !time
|
||||
return (time.hour>=20 || time.hour<5)
|
||||
end
|
||||
|
||||
# Returns true if it's morning.
|
||||
def self.isMorning?(time=nil)
|
||||
time = pbGetTimeNow if !time
|
||||
return (time.hour>=5 && time.hour<10)
|
||||
end
|
||||
|
||||
# Returns true if it's the afternoon.
|
||||
def self.isAfternoon?(time=nil)
|
||||
time = pbGetTimeNow if !time
|
||||
return (time.hour>=14 && time.hour<17)
|
||||
end
|
||||
|
||||
# Returns true if it's the evening.
|
||||
def self.isEvening?(time=nil)
|
||||
time = pbGetTimeNow if !time
|
||||
return (time.hour>=17 && time.hour<20)
|
||||
end
|
||||
|
||||
# Gets a number representing the amount of daylight (0=full night, 255=full day).
|
||||
def self.getShade
|
||||
time = pbGetDayNightMinutes
|
||||
time = (24*60)-time if time>(12*60)
|
||||
return 255*time/(12*60)
|
||||
end
|
||||
|
||||
# Gets a Tone object representing a suggested shading
|
||||
# tone for the current time of day.
|
||||
def self.getTone
|
||||
@cachedTone = Tone.new(0,0,0) if !@cachedTone
|
||||
return @cachedTone if !Settings::TIME_SHADING
|
||||
if !@dayNightToneLastUpdate ||
|
||||
Graphics.frame_count-@dayNightToneLastUpdate>=Graphics.frame_rate*30
|
||||
getToneInternal
|
||||
@dayNightToneLastUpdate = Graphics.frame_count
|
||||
end
|
||||
return @cachedTone
|
||||
end
|
||||
|
||||
def self.pbGetDayNightMinutes
|
||||
now = pbGetTimeNow # Get the current in-game time
|
||||
return (now.hour*60)+now.min
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def self.getToneInternal
|
||||
# Calculates the tone for the current frame, used for day/night effects
|
||||
realMinutes = pbGetDayNightMinutes
|
||||
hour = realMinutes/60
|
||||
minute = realMinutes%60
|
||||
tone = PBDayNight::HourlyTones[hour]
|
||||
nexthourtone = PBDayNight::HourlyTones[(hour+1)%24]
|
||||
# Calculate current tint according to current and next hour's tint and
|
||||
# depending on current minute
|
||||
@cachedTone.red = ((nexthourtone.red-tone.red)*minute*@oneOverSixty)+tone.red
|
||||
@cachedTone.green = ((nexthourtone.green-tone.green)*minute*@oneOverSixty)+tone.green
|
||||
@cachedTone.blue = ((nexthourtone.blue-tone.blue)*minute*@oneOverSixty)+tone.blue
|
||||
@cachedTone.gray = ((nexthourtone.gray-tone.gray)*minute*@oneOverSixty)+tone.gray
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
def pbDayNightTint(object)
|
||||
return if !$scene.is_a?(Scene_Map)
|
||||
if Settings::TIME_SHADING && GameData::MapMetadata.exists?($game_map.map_id) &&
|
||||
GameData::MapMetadata.get($game_map.map_id).outdoor_map
|
||||
tone = PBDayNight.getTone
|
||||
object.tone.set(tone.red,tone.green,tone.blue,tone.gray)
|
||||
else
|
||||
object.tone.set(0,0,0,0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Moon phases and Zodiac
|
||||
#===============================================================================
|
||||
# Calculates the phase of the moon.
|
||||
# 0 - New Moon
|
||||
# 1 - Waxing Crescent
|
||||
# 2 - First Quarter
|
||||
# 3 - Waxing Gibbous
|
||||
# 4 - Full Moon
|
||||
# 5 - Waning Gibbous
|
||||
# 6 - Last Quarter
|
||||
# 7 - Waning Crescent
|
||||
def moonphase(time=nil) # in UTC
|
||||
time = pbGetTimeNow if !time
|
||||
transitions = [
|
||||
1.8456618033125,
|
||||
5.5369854099375,
|
||||
9.2283090165625,
|
||||
12.9196326231875,
|
||||
16.6109562298125,
|
||||
20.3022798364375,
|
||||
23.9936034430625,
|
||||
27.6849270496875]
|
||||
yy = time.year-((12-time.mon)/10.0).floor
|
||||
j = (365.25*(4712+yy)).floor + (((time.mon+9)%12)*30.6+0.5).floor + time.day+59
|
||||
j -= (((yy/100.0)+49).floor*0.75).floor-38 if j>2299160
|
||||
j += (((time.hour*60)+time.min*60)+time.sec)/86400.0
|
||||
v = (j-2451550.1)/29.530588853
|
||||
v = ((v-v.floor)+(v<0 ? 1 : 0))
|
||||
ag = v*29.53
|
||||
for i in 0...transitions.length
|
||||
return i if ag<=transitions[i]
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
# Calculates the zodiac sign based on the given month and day:
|
||||
# 0 is Aries, 11 is Pisces. Month is 1 if January, and so on.
|
||||
def zodiac(month,day)
|
||||
time = [
|
||||
3,21,4,19, # Aries
|
||||
4,20,5,20, # Taurus
|
||||
5,21,6,20, # Gemini
|
||||
6,21,7,20, # Cancer
|
||||
7,23,8,22, # Leo
|
||||
8,23,9,22, # Virgo
|
||||
9,23,10,22, # Libra
|
||||
10,23,11,21, # Scorpio
|
||||
11,22,12,21, # Sagittarius
|
||||
12,22,1,19, # Capricorn
|
||||
1,20,2,18, # Aquarius
|
||||
2,19,3,20 # Pisces
|
||||
]
|
||||
for i in 0...12
|
||||
return i if month==time[i*4] && day>=time[i*4+1]
|
||||
return i if month==time[i*4+2] && day<=time[i*4+3]
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
# Returns the opposite of the given zodiac sign.
|
||||
# 0 is Aries, 11 is Pisces.
|
||||
def zodiacOpposite(sign)
|
||||
return (sign+6)%12
|
||||
end
|
||||
|
||||
# 0 is Aries, 11 is Pisces.
|
||||
def zodiacPartners(sign)
|
||||
return [(sign+4)%12,(sign+8)%12]
|
||||
end
|
||||
|
||||
# 0 is Aries, 11 is Pisces.
|
||||
def zodiacComplements(sign)
|
||||
return [(sign+1)%12,(sign+11)%12]
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Days of the week
|
||||
#===============================================================================
|
||||
def pbIsWeekday(wdayVariable,*arg)
|
||||
timenow = pbGetTimeNow
|
||||
wday = timenow.wday
|
||||
ret = false
|
||||
for wd in arg
|
||||
ret = true if wd==wday
|
||||
end
|
||||
if wdayVariable>0
|
||||
$game_variables[wdayVariable] = [
|
||||
_INTL("Sunday"),
|
||||
_INTL("Monday"),
|
||||
_INTL("Tuesday"),
|
||||
_INTL("Wednesday"),
|
||||
_INTL("Thursday"),
|
||||
_INTL("Friday"),
|
||||
_INTL("Saturday")][wday]
|
||||
$game_map.need_refresh = true if $game_map
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Months
|
||||
#===============================================================================
|
||||
def pbIsMonth(monVariable,*arg)
|
||||
timenow = pbGetTimeNow
|
||||
thismon = timenow.mon
|
||||
ret = false
|
||||
for wd in arg
|
||||
ret = true if wd==thismon
|
||||
end
|
||||
if monVariable>0
|
||||
$game_variables[monVariable] = pbGetMonthName(thismon)
|
||||
$game_map.need_refresh = true if $game_map
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbGetMonthName(month)
|
||||
return [_INTL("January"),
|
||||
_INTL("February"),
|
||||
_INTL("March"),
|
||||
_INTL("April"),
|
||||
_INTL("May"),
|
||||
_INTL("June"),
|
||||
_INTL("July"),
|
||||
_INTL("August"),
|
||||
_INTL("September"),
|
||||
_INTL("October"),
|
||||
_INTL("November"),
|
||||
_INTL("December")][month-1]
|
||||
end
|
||||
|
||||
def pbGetAbbrevMonthName(month)
|
||||
return ["",
|
||||
_INTL("Jan."),
|
||||
_INTL("Feb."),
|
||||
_INTL("Mar."),
|
||||
_INTL("Apr."),
|
||||
_INTL("May"),
|
||||
_INTL("Jun."),
|
||||
_INTL("Jul."),
|
||||
_INTL("Aug."),
|
||||
_INTL("Sep."),
|
||||
_INTL("Oct."),
|
||||
_INTL("Nov."),
|
||||
_INTL("Dec.")][month]
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
# Seasons
|
||||
#===============================================================================
|
||||
def pbGetSeason
|
||||
return (pbGetTimeNow.mon-1)%4
|
||||
end
|
||||
|
||||
def pbIsSeason(seasonVariable,*arg)
|
||||
thisseason = pbGetSeason
|
||||
ret = false
|
||||
for wd in arg
|
||||
ret = true if wd==thisseason
|
||||
end
|
||||
if seasonVariable>0
|
||||
$game_variables[seasonVariable] = [
|
||||
_INTL("Spring"),
|
||||
_INTL("Summer"),
|
||||
_INTL("Autumn"),
|
||||
_INTL("Winter")][thisseason]
|
||||
$game_map.need_refresh = true if $game_map
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbIsSpring; return pbIsSeason(0,0); end # Jan, May, Sep
|
||||
def pbIsSummer; return pbIsSeason(0,1); end # Feb, Jun, Oct
|
||||
def pbIsAutumn; return pbIsSeason(0,2); end # Mar, Jul, Nov
|
||||
def pbIsFall; return pbIsAutumn; end
|
||||
def pbIsWinter; return pbIsSeason(0,3); end # Apr, Aug, Dec
|
||||
|
||||
def pbGetSeasonName(season)
|
||||
return [_INTL("Spring"),
|
||||
_INTL("Summer"),
|
||||
_INTL("Autumn"),
|
||||
_INTL("Winter")][season]
|
||||
end
|
||||
Reference in New Issue
Block a user