SHOW:
|
|
- or go back to the newest paste.
| 1 | - | --[[ |
| 1 | + | local function newmenu(tList,x,y,height) |
| 2 | - | call newmenu with a table as the first parameter, the table is a list of all options in the menu, if you like you can specify a table as one/more of the options, it will then show the first value in that table as the choice and will call the second value as a function if you select that option, it will call the function with the option as a parameter and the newmenu function will return whatever your choice returns. if the choice is not a table then it will simply return the string that is the choice. example: |
| 2 | + | local function maxlen(t) |
| 3 | - | |
| 3 | + | local len=0 |
| 4 | - | newmenu({1,2,3,4},2,2)
|
| 4 | + | for i=1,#t do |
| 5 | - | |
| 5 | + | local curlen=string.len(type(t[i])=='table' and t[i][1] or t[i]) |
| 6 | - | would generate a menu where you can choose 1; 2; 3 or 4 and if you choose 2 it will return 2. the menu will start at CDS 2,2 |
| 6 | + | if curlen>len then len=curlen end |
| 7 | - | |
| 7 | + | |
| 8 | - | newmenu({1,{2,function(param) return print('you selected '..param) end},3,4},2,2)
|
| 8 | + | return len |
| 9 | - | |
| 9 | + | |
| 10 | - | would generate an identical looking menu but this time if you select 2 it will call the function there with param=2 and the newmenu function will return whatever the function returns |
| 10 | + | |
| 11 | - | ]] |
| 11 | + | local max=maxlen(tList) |
| 12 | - | |
| 12 | + | |
| 13 | - | local function newmenu(tList,x,y) |
| 13 | + | |
| 14 | y=y-1 | |
| 15 | height=height or #tList | |
| 16 | height=height+1 | |
| 17 | local selected=1 | |
| 18 | local scrolled=0 | |
| 19 | local function render() | |
| 20 | - | term.setCursorPos(x,y+num) |
| 20 | + | |
| 21 | - | write((num==selected and '[' or ' ')..(type(item)=='table' and item[1] or item)..(num==selected and ']' or ' ')) |
| 21 | + | if num>scrolled and num<scrolled+height then |
| 22 | term.setCursorPos(x,y+num-scrolled) | |
| 23 | local current=(type(item)=='table' and item[1] or item) | |
| 24 | write((num==selected and '[' or ' ')..current..(num==selected and ']' or ' ')..(max-#current>0 and string.rep(' ',max-#current) or ''))
| |
| 25 | end | |
| 26 | end | |
| 27 | end | |
| 28 | while true do | |
| 29 | render() | |
| 30 | local evts={os.pullEvent('key')}
| |
| 31 | if evts[1]=="key" and evts[2]==200 and selected>1 then | |
| 32 | if selected-1<=scrolled then scrolled=scrolled-1 end | |
| 33 | selected=selected-1 | |
| 34 | elseif evts[1]=="key" and evts[2]==208 and selected<#tList then | |
| 35 | selected=selected+1 | |
| 36 | if selected>=height+scrolled then scrolled=scrolled+1 end | |
| 37 | elseif evts[1]=="key" and evts[2]==28 or evts[2]==156 then | |
| 38 | return (type(tList[selected])=='table' and tList[selected][2](tList[selected][1]) or tList[selected]) | |
| 39 | end | |
| 40 | end | |
| 41 | end |