Jump to content




working gui arrow keys help


  • You cannot reply to this topic
5 replies to this topic

#1 sleawnis

  • Members
  • 29 posts

Posted 25 October 2012 - 11:42 AM

Please help me ive made a simple gui i need like it to output a different bundled wire each time any color will do this is what ive got:

http://imgur.com/w8QwJ

i need one of those cool menues using arrow keeys to like move up and down with a [ ] around it and also i need to make it output redstone bundled from the back on each 1 when u click enter

#2 KaoS

    Diabolical Coder

  • Members
  • 1,510 posts
  • LocationThat dark shadow under your bed...

Posted 25 October 2012 - 12:30 PM

here is a basic alpha try, I have not included the actual key events in the listen function, you need to do that and sort out the code, just an example as I am in a hurry

local function addcol(colour,side)
side=side or 'back'
rs.setBundledOutput(side,colors.combine(rs.getBundledOutput(side),colour))
end
local function remcol(colour,side)
side=side or 'back'
rs.setBundledOutput(side,colors.subtract(rs.getBundledOutput(side),colour))
end
local function togglecol(colour,side)
side=side or 'back'
if colors.test(rs.getBundledOutput(side),colour) then
  remcol(colour,side)
else
  addcol(colour,side)
end
end
local sSide='left'
local tMenu=setmetatable({},{__index=tOptions;__call=function(tMe,param1,param2) togglecol(tColours[param1][param2],sSide) end})
local tOptions={{'one','six'},{'two',seven'},{'three','eight'},{'four','nine'},{'five'},{'all on','all off'}}
local tColours={{colors.red,colors.white},{colors.orange,colors.magenta},{colors.blue,colors.lightBlue},{colors.yellow,colors.purple},{colors.black},{colors.combine(colors.red,colors.white,colors.orange,colors.magenta,colors.blue,colors.lightBlue,colors.yellow,colors.purple,colors.black),0}}
local function display()
for row=1,#tOptions do
  for num=1,#tOptions[row] do
   if sy==row and sx==num then
    term.setCursorPos(num*5,row)
    write('['..tMenu[row][num]..']')
   else
    term.setCursorPos(num*5+1,row)
    write(tMenu[row][num])
   end
  end
end
end
local function listen()
local evt={os.pullEvent()}
if evt[1]=='key' then
  if evt[2]==uparrow and sy>1 then sy=sy-1
  elseif evt[2]==leftarrow and sx>1 then sx=sx-1
  elseif evt[2]==rightarrow and sx<#tOptions[sy] then sx=sx+1
  elseif evt[2]==downarrow and sy<#tOptions then sy=sy+1
  elseif evt[2]==return then tMenu(sy,sx)
  end
end
end
local sx=1
local sy=1
while true do
display()
listen()
end


#3 Kingdaro

    The Doctor

  • Members
  • 1,636 posts
  • Location'MURICA

Posted 25 October 2012 - 12:34 PM

Here's a menu implementation that I whipped up:
local function foo()
  term.clear()
  term.setCursorPos(4,4)
  print 'foo'
  sleep(1)
end

local function bar()
  term.clear()
  term.setCursorPos(4,4)
  print 'bar'
  sleep(1)
end

local w,h = term.getSize()
local options = {
  {'foo',4,4,foo};
  {'bar',4,5,bar};
}

local selection = 1

while true do
  term.clear()

  for i, option in pairs(options) do
    if selection == i then
      term.setCursorPos(option[2] - 2, option[3])
      write '['
      term.setCursorPos(option[2] + #option[1] + 1, option[3])
      write ']'
    end

    term.setCursorPos(option[2], option[3])
    write(option[1])
  end

  local _, k = os.pullEvent('key')
  if k == keys.down then
    selection = (selection < #options)
    and selection + 1
    or 1
  elseif k == keys.up then
    selection = (selection > 1)
    and selection - 1
    or #options
  elseif k == keys.enter then
    local o = options[selection]
    local res = o[4] and o[4]() or true
    if res == false then
      break
    end
  end
end

This is the part where you put your menu options:
local options = {
  {'foo',4,4,foo};
  {'bar',4,5,bar};
}

The first value is what you want that option to say. The second and third values are the x and y of where you want it to appear on the screen. The last one is the function you want to run when you press enter.

You can have one one of your functions return false to exit the menu. So if I wanted an exit option, I would add
  {'Exit',4,10,function() return false end}


#4 sleawnis

  • Members
  • 29 posts

Posted 25 October 2012 - 12:45 PM

View PostKingdaro, on 25 October 2012 - 12:34 PM, said:

Here's a menu implementation that I whipped up:
local function foo()
  term.clear()
  term.setCursorPos(4,4)
  print 'foo'
  sleep(1)
end

local function bar()
  term.clear()
  term.setCursorPos(4,4)
  print 'bar'
  sleep(1)
end

local w,h = term.getSize()
local options = {
  {'foo',4,4,foo};
  {'bar',4,5,bar};
}

local selection = 1

while true do
  term.clear()

  for i, option in pairs(options) do
	if selection == i then
	  term.setCursorPos(option[2] - 2, option[3])
	  write '['
	  term.setCursorPos(option[2] + #option[1] + 1, option[3])
	  write ']'
	end

	term.setCursorPos(option[2], option[3])
	write(option[1])
  end

  local _, k = os.pullEvent('key')
  if k == keys.down then
	selection = (selection < #options)
	and selection + 1
	or 1
  elseif k == keys.up then
	selection = (selection > 1)
	and selection - 1
	or #options
  elseif k == keys.enter then
	local o = options[selection]
	local res = o[4] and o[4]() or true
	if res == false then
	  break
	end
  end
end

This is the part where you put your menu options:
local options = {
  {'foo',4,4,foo};
  {'bar',4,5,bar};
}

The first value is what you want that option to say. The second and third values are the x and y of where you want it to appear on the screen. The last one is the function you want to run when you press enter.

You can have one one of your functions return false to exit the menu. So if I wanted an exit option, I would add
  {'Exit',4,10,function() return false end}

Im getting lots of errors :P/> can u code it like so all i do is copy and paste? sorry im only on vidio 3 of a computer craft tutorial ^_^/>

#5 jag

  • Members
  • 533 posts
  • LocationStockholm, Sweden

Posted 25 October 2012 - 03:44 PM

View PostKaoS, on 25 October 2012 - 12:30 PM, said:

here is a basic alpha try, I have not included the actual key events in the listen function, you need to do that and sort out the code, just an example as I am in a hurry

--spilled code--
I'm usually not this picky, but you missed a ' here:
                                     ↓ here
local tOptions={{'one','six'},{'two',seven'},{'three','eight'},{'four','nine'},{'five'},{'all on','all off'}}


#6 KaoS

    Diabolical Coder

  • Members
  • 1,510 posts
  • LocationThat dark shadow under your bed...

Posted 25 October 2012 - 07:07 PM

I noticed after posting, it inverts and messes up the whole syntax highlighting lol. but I was late so didn't change it. I literally churned it out in about 3 minutes





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users