Files
LoopzRemix/Menu_old.pbi
2025-07-17 20:36:20 +02:00

161 lines
4.8 KiB
Plaintext

Declare InitGameMode(Mode.l)
Structure MenuOption
X.f
Y.f
Width.l
*ChoiceIndex
ChoiceIndexType.l
String.s
Choices.s
GoToMode.l
SendGUIEvent.l
EndStructure
Structure Menu
MenuTitle.s
*Obj
X.f
Y.f
Width.l
OptionIndex.l
List MenuOption.MenuOption()
EndStructure
Global Menu.Menu
Procedure NewMenu(MenuTitle.s,DefaultOptionIndex.l=0)
Menu\MenuTitle=MenuTitle
Menu\OptionIndex=DefaultOptionIndex
ClearList(Menu\MenuOption())
Menu\Obj=NewSprite(-1,0,0,0,0,255,1)
EndProcedure
Procedure AddMenuOption(String.s,GoToMode.l=-1,SendGUIEvent.l=-1,Choices.s="",*ChoiceIndex=-1,ChoiceIndexType.l=#PB_Long)
Protected *MenuOption=AddElement(Menu\MenuOption())
Menu\MenuOption()\String=String
Menu\MenuOption()\Choices=Choices
Menu\MenuOption()\ChoiceIndex=*ChoiceIndex
Menu\MenuOption()\ChoiceIndexType=ChoiceIndexType
Menu\MenuOption()\GoToMode=GoToMode
Menu\MenuOption()\SendGUIEvent=SendGUIEvent
ProcedureReturn *MenuOption
EndProcedure
Procedure StartMenu()
Addmove(Menu\Obj,0,@Menu\Y,ScreenHeight(),GUI\BlockSize*2,2000,#Easing_ElasticEaseOut)
Protected Spacing.l,StartY.l
Spacing=((GUI\ScreenHeight-5)/ListSize(Menu\MenuOption()))*GUI\BlockSize
If Spacing>GUI\BlockSize:Spacing=GUI\BlockSize:EndIf
StartY=(ScreenHeight()-5*GUI\BlockSize-ListSize(Menu\MenuOption())*Spacing)/2
Protected ChoiceIndex.l
ForEach Menu\MenuOption()
ChoiceIndex=1
DrawingBitmapFont(0)
Protected String.s=Menu\MenuOption()\String
If Menu\MenuOption()\Choices<>""
String=String+" : "+StringField(Menu\MenuOption()\Choices,ChoiceIndex+1,"|")
EndIf
Menu\MenuOption()\Width=TextBitmapWidth(String)
Menu\MenuOption()\X=(ScreenWidth()-Menu\MenuOption()\Width)/2
Menu\MenuOption()\Y=3*GUI\BlockSize+StartY+ListIndex(Menu\MenuOption())*Spacing
If ListIndex(Menu\MenuOption())%2
Addmove(Menu\Obj,0,@Menu\MenuOption()\X,ScreenWidth(),Menu\MenuOption()\X,2000,#Easing_ElasticEaseOut)
Else
Addmove(Menu\Obj,0,@Menu\MenuOption()\X,-Menu\MenuOption()\Width,Menu\MenuOption()\X,2000,#Easing_ElasticEaseOut)
EndIf
Next
StartMove(Menu\Obj)
EndProcedure
Procedure FinalizeMenu()
DrawingBitmapFont(1)
Menu\Width=TextBitmapWidth(Menu\MenuTitle)
Menu\X=(ScreenWidth()-Menu\Width)/2
DrawingBitmapFont(0)
StartMenu()
EndProcedure
Procedure EndMenu(Mode.l=-1)
If Mode<>-1
Mode=1000+Mode
EndIf
Addmove(Menu\Obj,0,@Menu\Y,GUI\BlockSize*2,ScreenHeight(),2000,#Easing_ElasticEaseOut,Mode)
ForEach Menu\MenuOption()
If ListIndex(Menu\MenuOption())%2
Addmove(Menu\Obj,0,@Menu\MenuOption()\X,Menu\MenuOption()\X,ScreenWidth(),2000,#Easing_ElasticEaseOut)
Else
Addmove(Menu\Obj,0,@Menu\MenuOption()\X,Menu\MenuOption()\X,-Menu\MenuOption()\Width,2000,#Easing_ElasticEaseOut)
EndIf
Next
StartMove(Menu\Obj)
EndProcedure
Procedure DrawMenu()
Protected.l X,Y,Width,Alpha,ChoiceIndex
Protected String.s
DrawingBitmapFont(1)
DrawBitmapText(Menu\X,Menu\Y,Menu\MenuTitle)
DrawingBitmapFont(0)
ForEach Menu\MenuOption()
String=Menu\MenuOption()\String
ChoiceIndex=1;ChoiceIndex
If Menu\MenuOption()\Choices<>""
String=String+" : "+StringField(Menu\MenuOption()\Choices,ChoiceIndex+1,"|")
EndIf
If Menu\OptionIndex=ListIndex(Menu\MenuOption())
Alpha=255
If KeyboardReleased(#PB_Key_Space)
If Menu\MenuOption()\Choices<>""
ChoiceIndex=ChoiceIndex+1
If ChoiceIndex>CountString(Menu\MenuOption()\Choices,"|")
ChoiceIndex=0
EndIf
ElseIf Menu\MenuOption()\GoToMode>0
EndMenu(Menu\MenuOption()\GoToMode)
EndIf
If Menu\MenuOption()\SendGUIEvent>-1
PostEventGUI(Menu\MenuOption()\SendGUIEvent)
EndIf
EndIf
If Menu\MenuOption()\Choices<>""
If KeyboardReleased(#PB_Key_Left) ;And ChoiceIndex>0
;TODO
ChoiceIndex=ChoiceIndex-1
If Menu\MenuOption()\SendGUIEvent>-1
PostEventGUI(Menu\MenuOption()\SendGUIEvent)
EndIf
EndIf
If KeyboardReleased(#PB_Key_Right) ;And ChoiceIndex<CountString(Menu\MenuOption()\Choices,"|")
ChoiceIndex=ChoiceIndex+1
If Menu\MenuOption()\SendGUIEvent>-1
PostEventGUI(Menu\MenuOption()\SendGUIEvent)
EndIf
EndIf
EndIf
Else
Alpha=100
EndIf
DrawBitmapText(Menu\MenuOption()\X,Menu\MenuOption()\Y,String,Alpha)
Next
If KeyboardReleased(#PB_Key_Up) And Menu\OptionIndex>0
Menu\OptionIndex=Menu\OptionIndex-1
EndIf
If KeyboardReleased(#PB_Key_Down) And Menu\OptionIndex<ListSize(Menu\MenuOption())-1
Menu\OptionIndex=Menu\OptionIndex+1
EndIf
EndProcedure
; IDE Options = PureBasic 6.00 Beta 6 (Windows - x64)
; CursorPosition = 50
; FirstLine = 39
; Folding = --
; EnableXP