Title : Loading Screen with Progress Bar
Author : Rogue Vector
Posted : 1+ years ago
Description : (//www.octanedigitalstudios.com/downloads/loading)
This is a modular implementation of a Loading Screen program, which incorporates a progress bar.
It also demonstrates how you can implement a pseudo-object oriented class system. I've also included a small test program at the end of the main code.
The full zipped archive, with sound and background image is found at: <a href="http://www.octanedigitalstudios.com/downloads/Loadscreen.zip" target="_blank">http://www.OctaneDigitalStudios.com/downloads/Loadscreen.zip</a>
The code and the resources are completely freeware.
Regards,
Rogue Vector
<a href="http://www.octanedigitalstudios.com/" target="_blank">http://www.OctaneDigitalStudios.com</a>
Code :
.CLASS_LoadScreen
.INFO
;<Graphics mode and buffer must be set before using this class>
;<Open Source Code>
;<By Rogue Vector 2004>
.CONSTANTS
Const LOADING_SCR=0
Const SHUTDOWN_SCR=1
Const FAILURE=0
Const SUCCESS=1
.PUBLIC
;<NONE>
.PROTECTED
Type TLoadScreen
Field Protected_mImg%
Field Protected_mImgPosX#
Field Protected_mImgPosY#
Field Protected_mImgWidth#
Field Protected_mImgHeight#
Field Protected_mSnd%
Field Protected_mSndVol#
Field Protected_mSndChn%
Field Protected_mScrMidX#
Field Protected_mScrMidY#
Field Protected_mBarPosX#
Field Protected_mBarPosY#
Field Protected_mBarWidth#
Field Protected_mBarHeight#
Field Protected_mFrameWidth#
Field Protected_mFrameHeight#
Field Protected_mCurrentProgress%
Field Protected_mPercentage%
Field Protected_mFont%
Field Protected_mMaxObjects%
Field Protected_mBarMaxWidth#
Field Protected_mBarMaxHeight#
Field Protected_mBarVertOffset#
Field Protected_mTextVertOffset#
Field Protected_mTextHorizOffset#
End Type
.CONSTRUCTORS
Function LoadScreen_Create.TLoadScreen(v_maxobjects%, v_maxbarheight#, v_maxbarwidth#, v_barvertoffset#, v_textvertoffset#)
Local l_object.TLoadScreen = New TLoadScreen
l_objectProtected_mImg=0
l_objectProtected_mImgPosX=0.0
l_objectProtected_mImgPosY=0.0
l_objectProtected_mImgWidth#=0.0
l_objectProtected_mImgHeight#=0.0
l_objectProtected_mSnd=0
l_objectProtected_mSndVol=0.0
l_objectProtected_mSndChn=0
l_objectProtected_mScrMidX = Float(GraphicsWidth()) / 2
l_objectProtected_mScrMidY = Float(GraphicsHeight()) / 2
l_objectProtected_mBarPosX = l_objectProtected_mScrMidX - Float(v_maxbarwidth) / 2
l_objectProtected_mBarPosY = GraphicsHeight() - Float(GraphicsHeight() * v_barvertoffset)
l_objectProtected_mBarWidth = v_maxbarwidth
l_objectProtected_mBarHeight = v_maxbarheight
l_objectProtected_mFrameWidth = v_maxbarwidth + 4
l_objectProtected_mFrameHeight= v_maxbarheight + 4
l_objectProtected_mCurrentProgress=0
l_objectProtected_mPercentage=0
l_objectProtected_mFont=0
l_objectProtected_mMaxObjects = v_maxobjects
l_objectProtected_mBarMaxWidth = v_maxbarwidth
l_objectProtected_mBarMaxHeight = v_maxbarheight
l_objectProtected_mBarVertOffset = Float( GraphicsHeight() * v_barvertoffset)
l_objectProtected_mTextVertOffset = GraphicsHeight() - Float(GraphicsHeight() * v_textvertoffset)
l_objectProtected_mTextHorizOffset = Float(GraphicsWidth()/2)
Return l_object
End Function
.DESTRUCTORS
Function LoadScreen_Destroy(v_object.TLoadScreen)
If (Handle v_object)
If (v_objectProtected_mImg) Then FreeImage v_objectProtected_mImg
If (v_objectProtected_mSnd) Then FreeSound v_objectProtected_mSnd
If (v_objectProtected_mFont) Then FreeFont v_objectProtected_mFont
Delete v_object
Return SUCCESS
EndIf
Return FAILURE
End Function
Function LoadScreen_DestroyAll()
Local l_tmp.TLoadScreen
For l_tmp = Each TLoadScreen
If (l_tmpProtected_mImg) Then FreeImage l_tmpProtected_mImg
If (l_tmpProtected_mSnd) Then FreeSound l_tmpProtected_mSnd
If (l_tmpProtected_mFont) Then FreeFont l_tmpProtected_mFont
Delete l_tmp
Next
Return SUCCESS
End Function
.METHODS
Function LoadScreen_SetImage(v_object.TLoadScreen, v_file$)
If (Handle v_object)
v_objectProtected_mImg = LoadImage(v_file)
v_objectProtected_mImgWidth = ImageWidth(v_objectProtected_mImg)
v_objectProtected_mImgHeight = ImageHeight(v_objectProtected_mImg)
v_objectProtected_mImgPosX = v_objectProtected_mScrMidX - v_objectProtected_mImgWidth / 2
v_objectProtected_mImgPosY = v_objectProtected_mScrMidY - v_objectProtected_mImgHeight / 2
Return SUCCESS
EndIf
Return FAILURE
End Function
Function LoadScreen_Update(v_object.TLoadScreen, v_showPercentage%=False, v_red%=255, v_green%=255, v_blue%=255)
If (Handle v_object)
Cls
DrawImage v_objectProtected_mImg, v_objectProtected_mImgPosX, v_objectProtected_mImgPosY
v_objectProtected_mCurrentProgress = v_objectProtected_mCurrentProgress + 1
v_objectProtected_mPercentage = Int(v_objectProtected_mCurrentProgress*100 / v_objectProtected_mMaxObjects)
v_objectProtected_mBarWidth = Float(v_objectProtected_mBarMaxWidth * v_objectProtected_mPercentage) / 100
Color v_red, v_green, v_blue
Rect v_objectProtected_mBarPosX-2, v_objectProtected_mBarPosY-2, v_objectProtected_mFrameWidth, v_objectProtected_mFrameHeight, 0
Rect v_objectProtected_mBarPosX, v_objectProtected_mBarPosY, v_objectProtected_mBarWidth, v_objectProtected_mBarHeight, 1
If (v_showPercentage) Text v_objectProtected_mTextHorizOffset, v_objectProtected_mTextVertOffset, Str(v_objectProtected_mPercentage) + "%", True
Flip
Return SUCCESS
End If
Return FAILURE
End Function
Function LoadScreen_SetFont(v_object.TLoadScreen, v_TrueTypeFont$, v_height%, v_bold%=False, v_italic%=False, v_underline%=False)
If (Handle v_object)
v_objectProtected_mFont = LoadFont(v_TrueTypeFont, v_height, v_bold, v_italic, v_underline)
SetFont v_objectProtected_mFont
Return SUCCESS
EndIf
Return FAILURE
End Function
Function LoadScreen_SetText(v_object.TLoadScreen, v_textvertoffset#, v_texthorizoffset#, v_default%=True)
If (Handle v_object)
If (v_default)
v_objectProtected_mTextHorizOffset = Float(GraphicsWidth()/2)
Else
v_objectProtected_mTextVertOffset = GraphicsHeight() - Float(GraphicsHeight() * v_textvertoffset)
v_objectProtected_mTextHorizOffset = GraphicsWidth() - Float(GraphicsWidth() * v_texthorizoffset)
EndIf
Return SUCCESS
EndIf
Return FAILURE
End Function
Function LoadScreen_SetSound(v_object.TLoadScreen, v_file$="", v_vol#=0.3)
If (Handle v_object) And (v_file<>"")
v_objectProtected_mSnd = LoadSound(v_file)
v_objectProtected_mSndVol = v_vol
v_objectProtected_mSndChn = PlaySound(v_objectProtected_mSnd)
ChannelVolume v_objectProtected_mSndChn, 0.0
PauseChannel v_objectProtected_mSndChn
Return SUCCESS
EndIf
Return FAILURE
End Function
Function LoadScreen_PlaySound(v_object.TLoadScreen)
If (Handle v_object) And (v_objectProtected_mSnd<>0)
ChannelVolume v_objectProtected_mSndChn, v_objectProtected_mSndVol
ResumeChannel v_objectProtected_mSndChn
Return SUCCESS
EndIf
Return FAILURE
End Function
.ENDCLASS_LoadScreen
;Test program for the LoadScreen Class
;By Rogue Vector 2004
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer()
Include "LoadScreen.bb"
;Create a new load screen
Global myLoadScreen.TLoadScreen = LoadScreen_Create(10, 8, 150, 0.38, 0.35 )
If (LoadScreen_SetImage(myLoadScreen, "loading.jpg")) Then DebugLog "LoadScreen_SetImage was a SUCCESS" Else DebugLog "LoadScreen_SetImage was a FAILURE"
If (LoadScreen_SetFont(myLoadScreen, "Arial", 20, True)) Then DebugLog "LoadScreen_SetFont was a SUCCESS" Else DebugLog "LoadScreen_SetFont was a FAILURE"
If (LoadScreen_SetSound(myLoadScreen, "freewaresnd.mp3" )) Then DebugLog "LoadScreen_SetSound was a SUCCESS" Else DebugLog "LoadScreen_SetSound was a FAILURE"
If (LoadScreen_PlaySound(myLoadScreen)) Then DebugLog "LoadScreen_PlaySound was a SUCCESS" Else DebugLog "LoadScreen_PlaySound was a FAILURE"
;Simulate a loading sequence - Maximum of 10 objects to load
LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;1
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;2
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;3
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;4
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;5
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;6
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;7
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;8
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;9
Delay 1000 : LoadScreen_Update(myLoadScreen, True, 0, 98, 39) ;10
Delay 1000
Color 155,155,155
Text GraphicsWidth()/2, GraphicsHeight() - 160, "Hit the <space> bar to continue",True : Flip
While Not KeyHit(57) : Wend
If (LoadScreen_Destroy(myLoadScreen)) Then DebugLog "Load screen object was destroyed..."
;Delay 1000
EndGraphics
End
Comments :
chwaga(Posted 1+ years ago)
nice work, very useful
CASO(Posted 1+ years ago)
The link took me to <a href="http://landing.trafficz.com/index.php?domain=octanedigitalstudios.com" target="_blank">http://landing.trafficz.com/index.php?domain=octanedigitalstudios.com</a>Something tells me that isn't supposed to happen.
Rabies(Posted 1+ years ago)
Cool, works great.However CASO has a pointbad link.