Advertisement
luckdemon

TerminalGlassesMonopoly

Apr 29th, 2016
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.04 KB | None | 0 0
  1. --Terminal Glasses Program for Monopoly
  2.  
  3. --Wrap peripherals
  4. glass = peripheral.wrap("right")
  5. mon = peripheral.wrap("left")
  6. glass.clear()
  7. glass.sync()
  8.  
  9. if mon == nil then
  10.     print("Monitor not found")
  11.     return
  12. elseif glass == nil then
  13.     print("Terminal Glasses Bridge not found")
  14.     return
  15. end
  16.  
  17. --Format Tags
  18. FORMAT_CHAR = "\194\167"
  19. FORMAT_BOLD = FORMAT_CHAR .. 'l'
  20. FORMAT_UNDER = FORMAT_CHAR .. 'n'
  21.  
  22. --Variables and Containers
  23. local textColor1 = 0x006600
  24. local boxColor1 = 0xffffff
  25. local game = {stats = {},players = {},properties = {}}
  26. --for text shown to everyone in a game
  27. local text = {}
  28. local gameState = "Waiting..." --"Waiting..." "Your Turn" "blank's Turn" "Saving" "Loading"
  29.  
  30. --Functions
  31. local function clearScreen()
  32.     glass.clear()
  33.     glass.sync()
  34. end
  35.  
  36. local function shuffle(deck)
  37.     --Shuffles a deck and returns a randomized order for the cards in a table
  38.     return 0
  39. end
  40.  
  41. local function initGame()
  42. game.stats.totalHouses = 0
  43. game.stats.totalHotels = 0
  44. --temporary
  45. deck = 0
  46. game.stats.communDeck = shuffle(deck)
  47. game.stats.chanceDeck = shuffle(deck)
  48. end
  49.  
  50. local function refreshGameState()
  51.     local playerListTitle = glass.addText(0,15,FORMAT_UNDER .. gameState,textColor1)
  52.     playerListTitle.setAlignment("middle","top")
  53.     playerListTitle.setZ(10)
  54.     if text.playerListTitle ~= nil then text.playerListTitle = nil end
  55.     text.playerListTitle = playerListTitle
  56. end
  57.  
  58. --Refreshing everyone's player list --Everything below "current users" shows up here
  59. --[[local function displayAllUsers(name,Uuid)
  60.     local playerData = players[Uuid]
  61.     local surface = playerData.surface
  62.     local userList = {}
  63.     for i,user in pairs(glass.getUsers()) do
  64.         userList[i] = surface.addText(0,18+(8*i),user.name,textColor1)
  65.         userList[i].setAlignment("middle","top")
  66.         userList[i].setZ(10)
  67.     end
  68.     local userListBox = surface.addBox(0,0,95,25+(10*#glass.getUsers()),boxColor1,0.5)
  69.     userListBox.setAlignment("middle","top")
  70.     userListBox.setZ(1)
  71.     playerData.userList = userList
  72.     playerData.userListBox = userListBox
  73.     players[playerData.uuid] = playerData
  74. end--]]
  75.  
  76. --Initializing a new player with the Hello on top
  77. local function initializePlayer(name,uuid)
  78.     local playerData = {name = name, uuid = uuid}
  79.     playerData.surface = glass.getSurfaceByUUID(playerData.uuid)
  80.     playerData.rolling = 0
  81.     --[[labelPlayer = playerData.surface.addText(0,5,"Hello " .. playerData.name,textColor1)
  82.     labelPlayer.setAlignment("middle","top")
  83.     labelPlayer.setZ(10)]]
  84.     game.players[uuid] = playerData
  85. end
  86.  
  87. local function makeScreen(name,PlayerUuid)
  88.     local playerData = game.players[PlayerUuid]
  89.     local surface = playerData.surface
  90.     labelPlayer = playerData.surface.addText(0,5,"Hello " .. playerData.name,textColor1)
  91.     labelPlayer.setAlignment("middle","top")
  92.     labelPlayer.setZ(10)
  93. end
  94.  
  95. function makeScreenWireless(name,PlayerUuid)
  96.     local playerData = game.players[PlayerUuid]
  97.     local surface = playerData.surface
  98.     if playerData.rolling == 1 then
  99.     --put in table for clearing later during re-rolls
  100.         diceval1 = math.random(1,6)
  101.         diceval2 = math.random(1,6)
  102.         rollText = surface.addText(0,90,"You rolled "..diceval1.." and "..diceval2,textColor1)
  103.         rollText.setScreenAnchor("middle","middle")
  104.         rollText.setObjectAnchor("middle","middle")
  105.        
  106.         dice1bg = surface.addBox(-10,100, 25, 25, boxColor1)
  107.         dice2bg = surface.addBox(10,100, 25, 25, boxColor1)
  108.         dice1bg.setScreenAnchor("middle","middle")
  109.         dice2bg.setScreenAnchor("middle","middle")
  110.         dice1bg.setZ(10)
  111.         dice2bg.setZ(10)
  112.         dice1bg.setUserdata("dice1")
  113.         dice2bg.setUserdata("dice2")
  114.         dice1bg.setObjectAnchor("right","top")
  115.         dice2bg.setObjectAnchor("left","top")
  116.        
  117.     elseif playerData.rolling == 0 then
  118.         rollText = surface.addText(0,90,"Click roll below!",textColor1)
  119.         rollText.setScreenAnchor("middle","middle")
  120.         rollText.setObjectAnchor("middle","middle")
  121.        
  122.         dice1bg = surface.addBox(-10,100, 25, 25, boxColor1)
  123.         dice2bg = surface.addBox(10,100, 25, 25, boxColor1)
  124.         dice1bg.setScreenAnchor("middle","middle")
  125.         dice2bg.setScreenAnchor("middle","middle")
  126.         dice1bg.setZ(10)
  127.         dice2bg.setZ(10)
  128.         dice1bg.setUserdata("dice1")
  129.         dice2bg.setUserdata("dice2")
  130.         dice1bg.setObjectAnchor("right","top")
  131.         dice2bg.setObjectAnchor("left","top")
  132.        
  133.         rollButtonbg = surface.addBox(0,140, 20, 20, boxColor1)
  134.         rollButtonbg.setScreenAnchor("middle","middle")
  135.         rollButtonbg.setObjectAnchor("middle","top")
  136.         rollButtonText = surface.addText(0,150,"Roll",textColor1)
  137.         rollButtonText.setScreenAnchor("middle","middle")
  138.         rollButtonText.setObjectAnchor("middle","middle")
  139.         rollButtonText.setUserdata("rollbutton")
  140.         rollButtonbg.setUserdata("rollbutton")
  141.     end
  142. end
  143.  
  144. -- initialize already attached players
  145. for _, user in pairs(glass.getUsers()) do
  146.     initializePlayer(user.name, user.uuid)
  147. end
  148. print("finished init")
  149. --[[for _, user in pairs(glass.getUsers()) do
  150.     displayAllUsers(user.name, user.uuid)
  151. end
  152. print("finished display")--]]
  153. glass.sync()
  154.  
  155. --helper function
  156. function pack(...)
  157.     return {...}
  158. end
  159.  
  160. local timerCallbacks = {}
  161.  
  162. while true do
  163.     evt = pack(os.pullEvent())
  164.     print(evt[1])
  165.    
  166.     if evt[1] == "glasses_chat_command" then
  167.         local playerUuid = evt[4]
  168.         local playerData = game.players[playerUuid]
  169.         if playerData then
  170.             local surface = playerData.surface
  171.             if evt[5] == "roll" then
  172.                 playerData.rolling = 1
  173.             elseif evt[5] == "users" then
  174.                 displayAllUsers()
  175.             elseif evt[5] == "clear" then
  176.                 clearScreen()
  177.             elseif evt[5] == "quit" then
  178.                 return
  179.             elseif evt[5] == "reboot" then
  180.                 os.reboot()
  181.             end
  182.         end
  183.        
  184.     elseif evt[1] == "key" then
  185.         if evt[2] == 16 then
  186.             os.reboot()
  187.         end
  188.        
  189.     --player put on glasses
  190.     elseif evt[1] == "glasses_attach" then
  191.         local name = evt[3]
  192.         local PlayerUuid = evt[4]
  193.         initializePlayer(name,PlayerUuid)
  194.        
  195.     -- player logged out or took off glasses
  196.     elseif evt[1] == "glasses_detach" then
  197.         -- components on private surface are automatically cleared when player removes glasses
  198.         local name = evt[3]
  199.         local PlayerUuid = evt[4]
  200.         game.players[PlayerUuid] = nil
  201.         for _,user in pairs(glass.getUsers()) do
  202.         end
  203.    
  204.     -- player used wireless keyboard - computer will now start getting keyboard and mouse events
  205.     elseif evt[1] == "glasses_capture" then
  206.         local name = evt[3]
  207.         local playerUuid = evt[4]
  208.         local playerData = game.players[playerUuid]
  209.         if playerData then
  210.             makeScreenWireless(name,playerUuid)
  211.         end
  212.        
  213.     -- player exited from keyboard GUI
  214.     elseif evt[1] == "glasses_release" then
  215.         local name = evt[3]
  216.         local playerUuid = evt[4]
  217.         local playerData = game.players[playerUuid]
  218.  
  219.         if playerData then
  220.             -- recreate display to initial state
  221.             playerData.surface.clear()
  222.             playerData.rolling = 0
  223.             makeScreen(name,playerUuid)
  224.             --initializePlayer(playerData.name, playerData.uuid)
  225.         end
  226.        
  227.     -- player clicked on component (if you got this event, then you won't get glasses_mouse_down. Same for glasses_component_mouse_up and glasses_mouse_up)
  228.     elseif evt[1] == "glasses_component_mouse_down" then
  229.         local isPrivate = evt[6]
  230.         if isPrivate then
  231.             local playerUuid = evt[4]
  232.             local playerData = game.players[playerUuid]
  233.             if playerData then
  234.                 local objectId = evt[5]
  235.                 print(objectId)
  236.                 local component = playerData.surface.getObjectById(objectId)
  237.                 local userdata = component.getUserdata()
  238.                 if userdata then -- only rectangles in middle have that value filled
  239.                     -- capture control is special object used to control few properties of keyboard GUI
  240.                     --local capture = glass.getCaptureControl(playerUuid)
  241.                     --capture.setBackground(userdata)
  242.                     if userdata == "rollbutton" then
  243.                         playerData.rolling = 1
  244.                         playerData.surface.clear()
  245.                         makeScreenWireless(name,playerUuid)
  246.                     elseif userdata == "dice1" or "dice2" then
  247.                         playerData.rolling = 0
  248.                         playerData.surface.clear()
  249.                         makeScreenWireless(name,playerUuid)
  250.                     end
  251.                 end
  252.             end
  253.         end
  254.        
  255.     elseif evt[1] == "timer" then
  256.         local timerId = evt[2]
  257.         callback = timerCallbacks[timerId]
  258.         if callback then callback() end
  259.         timerCallbacks[timerId] = nil
  260.     end
  261.     glass.sync()
  262. end
  263. clearScreen()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement