Code archives/3D Graphics - Misc/Day To Night Function

This code has been declared by its author to be Public Domain code.

Download source code

Day To Night Function by David8192004
This code changes 2 sky boxes around one being day and the other being night and allows them to switch using alpha on them.
;You will need to change this to the sky boxes you are using!
Const 	Sky_Day$ = "sky17/sky17.3ds"
Const 	Sky_Night$ = "sky08/sky08.3ds"

Type Sky
Field SKY_AT_DAY
Field SKY_AT_NIGHT
Field Size
Field DAV#
Field NAV#
Field TS#
End Type

Function DTN( SBD$, SBN$, SIZE#, DAV#, NAV# )

D.Sky = New sky
D\SKY_AT_DAY = SBD$
D\SKY_AT_NIGHT = SBN$
D\SIZE = SIZE#
D\DAV# = DAV#
D\NAV# = NAV#

;Loads The Sky Boxes
D\SKY_AT_DAY = LoadMesh(SBD$)
D\SKY_AT_NIGHT = LoadMesh(SBN$)

;Scale The Sky Boxes To Chosen Size
ScaleEntity D\SKY_AT_DAY, D\SIZE, D\SIZE, D\SIZE
ScaleEntity D\SKY_AT_NIGHT, D\SIZE, D\SIZE, D\SIZE

End Function

Function DTNU()
For D.Sky=Each Sky
;Turns The Sky Boxes Around
TurnEntity D\Sky_At_Day, 0, 0.001, 0
TurnEntity D\Sky_At_Night, 0, 0.001, 0

;Set The Alpha Values
EntityAlpha D\Sky_At_Day, D\DAV#
EntityAlpha D\Sky_At_Night, D\NAV#
Next
End Function

Function Basic_Con()
For D.Sky=Each Sky
If MilliSecs()- Time < 28000 Then ; 7000 means 7:00 hours
      Status$="Night"
   ElseIf MilliSecs() - Time < 76000 Then ; 19000 means 19:00 hours
      Status$="Day"
   Else ; the else is because it isn't day time, so it must be night time
      Status$="Night"
   End If

If status$="Day" Then
If D\DAV#<=0 Then D\DAV#=D\DAV#+0.0005
If D\DAV#<1 And  D\DAV#>0 Then D\DAV#=D\DAV#+0.0005
If D\DAV#=>1 Then D\DAV#=1
If D\NAV#=>1 Then D\NAV#=D\NAV#-0.0005
If D\NAV#>0 And D\NAV#<1 Then D\NAV#=D\NAV#-.0005
If D\NAV#<=0 Then D\NAV#=0
EndIf

If status$="Night" Then 
If D\DAV#=>1 Then D\DAV#=D\DAV#-0.0005
If D\DAV#>0 And D\DAV#<1 Then D\DAV#=D\DAV#-.0005
If D\DAV#<=0 Then D\DAV#=0
If D\NAV#<=0 Then D\NAV#=D\NAV#+0.0005
If D\NAV#<1 And  D\NAV#>0 Then D\NAV#=D\NAV#+0.0005
If D\NAV#=>1 Then D\NAV#=1
EndIf

   If MilliSecs() - Time > 96000 Then ; check to see if 24 hours has past, and if so, start a new day.
      Time = Time + 96000 ; wrap the day back round to midnight again
   End If


Next
End Function

;Example You may need to change the screen's width and height
Include "DTN FUNCTION Final test.bb"

;Example Of Use
Global Time = MilliSecs()
Global Status$

;Costants
Const 	Width		=		1280
Const 	Height		=		1024
Const 	Depth		=		32
Const 	SType		=		1
Const 	EndKey		=		1

;Set Graphics mode
Graphics3D 	Width, Height, Depth, SType
SetBuffer	BackBuffer()

;Create Camera
CHAR_Cam	=	CreateCamera()
CameraRange 	CHAR_Cam, 1, 2000
PositionEntity 	CHAR_Cam, 0, 1, 0

;Day And Night Values
D#=0
N#=1

;Main Part
DTN( Sky_Day$, Sky_Night$, 100, D#, N# )

;Main Loop
While Not KeyHit (EndKey)
Basic_Con()
DTNU()
UpdateWorld
RenderWorld
   Text 0,0, " Day or Night:"+status$
   Text 0,10," Hour:"+((MilliSecs()-Time)/1000/4)
Flip False
Wend
End

Comments

David8192004
oh, just in case you dont wish to wait long just goto the Basic_Con() function and change :
D\DAV#+0.0005
and
D\NAV#-0.0005

D\DAV#-0.0005
and
D\NAV#+0.0005

to

D\DAV#+0.05
and
D\NAV#-0.05

D\DAV#-0.05
and
D\NAV#+0.05

enjoy!


puki2004
And use pretextured skyboxes or else you end up watching a grey and black screen.


Code Archives Forum