Ooops
November 25, 2020, 06:09:52 AM

Author Topic: [bmx] Game Menu by ninjarat [ 1+ years ago ]  (Read 593 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] Game Menu by ninjarat [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : Game Menu
Author : ninjarat
Posted : 1+ years ago

Description : Pretty self explanitory...

Code :
Code: BlitzMax
  1. Type MenuStruct
  2.         Field Items$[]
  3.         Field X,Y
  4.         Field SelectedColor[]
  5.         Field DefaultColor[]
  6.         Field IsShadowed
  7. End Type
  8.  
  9. Function CreateMenu_:MenuStruct(items$[],x,y,scr,scg,scb,dcr,dcg,dcb,shadow)
  10.         Local menu:MenuStruct=New MenuStruct
  11.         menu.Items=items
  12.         menu.X=x;menu.Y=y
  13.         menu.SelectedColor=[scr,scg,scb]
  14.         menu.DefaultColor=[dcr,dcg,dcb]
  15.         menu.IsShadowed=shadow
  16.         Return menu
  17. End Function
  18.  
  19. Function RunMenuStruct(menu:MenuStruct)
  20.         Return RunMenu(menu.Items,menu.X,menu.Y,..
  21.          menu.SelectedColor,menu.DefaultColor,menu.IsShadowed)
  22. End Function
  23.  
  24. 'colors use struct {r,g,b}
  25. Function RunMenu(items$[],x,y,selectedcolor[],defaultcolor[],shadow)
  26.         Local itembdt[items.length]
  27.         Local itembdb[items.length]
  28.         Local itembdl[items.length]
  29.         Local itembdr[items.length]
  30.         Local selection[items.length]
  31.         gfxxc=GraphicsWidth()/2
  32.         thght=TextHeight("X")+3
  33.        
  34.         If x<0 Then center=True Else center=False
  35.        
  36.         'logical setup
  37.         itemctr=0
  38.         For ctr=0 To items.length-1
  39.                 If center Then
  40.                         itembdl[ctr]=gfxxc-TextWidth(items[ctr])/2
  41.                 Else
  42.                         itembdl[ctr]=x
  43.                 End If
  44.                 itembdr[ctr]=itembdl[ctr]+TextWidth(items[ctr])
  45.                 itembdt[ctr]=y+ctr*thght
  46.                 itembdb[ctr]=itembdt[ctr]+thght
  47.         Next
  48.        
  49.         'logical check
  50.         msx=MouseX()
  51.         msy=MouseY()
  52.         msh=MouseHit(1)
  53.         btnclicked=-1
  54.         For ctr=0 To items.length-1
  55.                 selection[ctr]=False
  56.                 If msx>itembdl[ctr] And msx<itembdr[ctr] Then
  57.                         If msy>itembdt[ctr] And msy<itembdb[ctr] Then
  58.                                 selection[ctr]=True
  59.                                 If msh Then btnclicked=ctr
  60.                         End If
  61.                 End If
  62.         Next
  63.        
  64.         'get the old color so we can put it back
  65.         GetColor _red,_grn,_blu
  66.        
  67.         'draw based on selection
  68.         For ctr=0 To items.length-1
  69.                 x=itembdl[ctr]
  70.                 y=itembdt[ctr]
  71.                 If shadow Then
  72.                         SetColor 0,0,0
  73.                         SetAlpha .7
  74.                         DrawText items[ctr],x+2,y+2
  75.                         SetAlpha 1
  76.                 End If
  77.                 If selection[ctr] Then
  78.                         SetColor selectedcolor[0],selectedcolor[1],selectedcolor[2]
  79.                 Else
  80.                         SetColor defaultcolor[0],defaultcolor[1],defaultcolor[2]
  81.                 End If
  82.                 DrawText items[ctr],x,y
  83.         Next
  84.        
  85.         'put the old color back
  86.         SetColor _red,_grn,_blu
  87.        
  88.         itembdt=Null
  89.         itembdb=Null
  90.         itembdl=Null
  91.         itembdr=Null
  92.         selection=Null
  93.        
  94.         Return btnclicked
  95. End Function


Comments :


K@li(Posted 1+ years ago)

 ?no test exemple ?


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal