[bb] Loading Screen with Progress Bar by Rogue Vector [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:40

Previous topic - Next topic

BlitzBot

Title : Loading Screen with Progress Bar
Author : Rogue Vector
Posted : 1+ years ago

Description :

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 :
Code (blitzbasic) Select
.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.