Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Terminal Glasses Program for Monopoly
- --Wrap peripherals
- glass = peripheral.wrap("right")
- mon = peripheral.wrap("left")
- glass.clear()
- glass.sync()
- if mon == nil then
- print("Monitor not found")
- return
- elseif glass == nil then
- print("Terminal Glasses Bridge not found")
- return
- end
- --Format Tags
- FORMAT_CHAR = "\194\167"
- FORMAT_BOLD = FORMAT_CHAR .. 'l'
- FORMAT_UNDER = FORMAT_CHAR .. 'n'
- --Variables and Containers
- local textColor1 = 0x006600
- local boxColor1 = 0xffffff
- local game = {stats = {},players = {},properties = {}}
- --for text shown to everyone in a game
- local text = {}
- local gameState = "Waiting..." --"Waiting..." "Your Turn" "blank's Turn" "Saving" "Loading"
- --Functions
- local function clearScreen()
- glass.clear()
- glass.sync()
- end
- local function shuffle(deck)
- --Shuffles a deck and returns a randomized order for the cards in a table
- return 0
- end
- local function initGame()
- game.stats.totalHouses = 0
- game.stats.totalHotels = 0
- --temporary
- deck = 0
- game.stats.communDeck = shuffle(deck)
- game.stats.chanceDeck = shuffle(deck)
- end
- local function refreshGameState()
- local playerListTitle = glass.addText(0,15,FORMAT_UNDER .. gameState,textColor1)
- playerListTitle.setAlignment("middle","top")
- playerListTitle.setZ(10)
- if text.playerListTitle ~= nil then text.playerListTitle = nil end
- text.playerListTitle = playerListTitle
- end
- --Refreshing everyone's player list --Everything below "current users" shows up here
- --[[local function displayAllUsers(name,Uuid)
- local playerData = players[Uuid]
- local surface = playerData.surface
- local userList = {}
- for i,user in pairs(glass.getUsers()) do
- userList[i] = surface.addText(0,18+(8*i),user.name,textColor1)
- userList[i].setAlignment("middle","top")
- userList[i].setZ(10)
- end
- local userListBox = surface.addBox(0,0,95,25+(10*#glass.getUsers()),boxColor1,0.5)
- userListBox.setAlignment("middle","top")
- userListBox.setZ(1)
- playerData.userList = userList
- playerData.userListBox = userListBox
- players[playerData.uuid] = playerData
- end--]]
- --Initializing a new player with the Hello on top
- local function initializePlayer(name,uuid)
- local playerData = {name = name, uuid = uuid}
- playerData.surface = glass.getSurfaceByUUID(playerData.uuid)
- playerData.rolling = 0
- --[[labelPlayer = playerData.surface.addText(0,5,"Hello " .. playerData.name,textColor1)
- labelPlayer.setAlignment("middle","top")
- labelPlayer.setZ(10)]]
- game.players[uuid] = playerData
- end
- local function makeScreen(name,PlayerUuid)
- local playerData = game.players[PlayerUuid]
- local surface = playerData.surface
- labelPlayer = playerData.surface.addText(0,5,"Hello " .. playerData.name,textColor1)
- labelPlayer.setAlignment("middle","top")
- labelPlayer.setZ(10)
- end
- function makeScreenWireless(name,PlayerUuid)
- local playerData = game.players[PlayerUuid]
- local surface = playerData.surface
- if playerData.rolling == 1 then
- --put in table for clearing later during re-rolls
- diceval1 = math.random(1,6)
- diceval2 = math.random(1,6)
- rollText = surface.addText(0,90,"You rolled "..diceval1.." and "..diceval2,textColor1)
- rollText.setScreenAnchor("middle","middle")
- rollText.setObjectAnchor("middle","middle")
- dice1bg = surface.addBox(-10,100, 25, 25, boxColor1)
- dice2bg = surface.addBox(10,100, 25, 25, boxColor1)
- dice1bg.setScreenAnchor("middle","middle")
- dice2bg.setScreenAnchor("middle","middle")
- dice1bg.setZ(10)
- dice2bg.setZ(10)
- dice1bg.setUserdata("dice1")
- dice2bg.setUserdata("dice2")
- dice1bg.setObjectAnchor("right","top")
- dice2bg.setObjectAnchor("left","top")
- elseif playerData.rolling == 0 then
- rollText = surface.addText(0,90,"Click roll below!",textColor1)
- rollText.setScreenAnchor("middle","middle")
- rollText.setObjectAnchor("middle","middle")
- dice1bg = surface.addBox(-10,100, 25, 25, boxColor1)
- dice2bg = surface.addBox(10,100, 25, 25, boxColor1)
- dice1bg.setScreenAnchor("middle","middle")
- dice2bg.setScreenAnchor("middle","middle")
- dice1bg.setZ(10)
- dice2bg.setZ(10)
- dice1bg.setUserdata("dice1")
- dice2bg.setUserdata("dice2")
- dice1bg.setObjectAnchor("right","top")
- dice2bg.setObjectAnchor("left","top")
- rollButtonbg = surface.addBox(0,140, 20, 20, boxColor1)
- rollButtonbg.setScreenAnchor("middle","middle")
- rollButtonbg.setObjectAnchor("middle","top")
- rollButtonText = surface.addText(0,150,"Roll",textColor1)
- rollButtonText.setScreenAnchor("middle","middle")
- rollButtonText.setObjectAnchor("middle","middle")
- rollButtonText.setUserdata("rollbutton")
- rollButtonbg.setUserdata("rollbutton")
- end
- end
- -- initialize already attached players
- for _, user in pairs(glass.getUsers()) do
- initializePlayer(user.name, user.uuid)
- end
- print("finished init")
- --[[for _, user in pairs(glass.getUsers()) do
- displayAllUsers(user.name, user.uuid)
- end
- print("finished display")--]]
- glass.sync()
- --helper function
- function pack(...)
- return {...}
- end
- local timerCallbacks = {}
- while true do
- evt = pack(os.pullEvent())
- print(evt[1])
- if evt[1] == "glasses_chat_command" then
- local playerUuid = evt[4]
- local playerData = game.players[playerUuid]
- if playerData then
- local surface = playerData.surface
- if evt[5] == "roll" then
- playerData.rolling = 1
- elseif evt[5] == "users" then
- displayAllUsers()
- elseif evt[5] == "clear" then
- clearScreen()
- elseif evt[5] == "quit" then
- return
- elseif evt[5] == "reboot" then
- os.reboot()
- end
- end
- elseif evt[1] == "key" then
- if evt[2] == 16 then
- os.reboot()
- end
- --player put on glasses
- elseif evt[1] == "glasses_attach" then
- local name = evt[3]
- local PlayerUuid = evt[4]
- initializePlayer(name,PlayerUuid)
- -- player logged out or took off glasses
- elseif evt[1] == "glasses_detach" then
- -- components on private surface are automatically cleared when player removes glasses
- local name = evt[3]
- local PlayerUuid = evt[4]
- game.players[PlayerUuid] = nil
- for _,user in pairs(glass.getUsers()) do
- end
- -- player used wireless keyboard - computer will now start getting keyboard and mouse events
- elseif evt[1] == "glasses_capture" then
- local name = evt[3]
- local playerUuid = evt[4]
- local playerData = game.players[playerUuid]
- if playerData then
- makeScreenWireless(name,playerUuid)
- end
- -- player exited from keyboard GUI
- elseif evt[1] == "glasses_release" then
- local name = evt[3]
- local playerUuid = evt[4]
- local playerData = game.players[playerUuid]
- if playerData then
- -- recreate display to initial state
- playerData.surface.clear()
- playerData.rolling = 0
- makeScreen(name,playerUuid)
- --initializePlayer(playerData.name, playerData.uuid)
- end
- -- 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)
- elseif evt[1] == "glasses_component_mouse_down" then
- local isPrivate = evt[6]
- if isPrivate then
- local playerUuid = evt[4]
- local playerData = game.players[playerUuid]
- if playerData then
- local objectId = evt[5]
- print(objectId)
- local component = playerData.surface.getObjectById(objectId)
- local userdata = component.getUserdata()
- if userdata then -- only rectangles in middle have that value filled
- -- capture control is special object used to control few properties of keyboard GUI
- --local capture = glass.getCaptureControl(playerUuid)
- --capture.setBackground(userdata)
- if userdata == "rollbutton" then
- playerData.rolling = 1
- playerData.surface.clear()
- makeScreenWireless(name,playerUuid)
- elseif userdata == "dice1" or "dice2" then
- playerData.rolling = 0
- playerData.surface.clear()
- makeScreenWireless(name,playerUuid)
- end
- end
- end
- end
- elseif evt[1] == "timer" then
- local timerId = evt[2]
- callback = timerCallbacks[timerId]
- if callback then callback() end
- timerCallbacks[timerId] = nil
- end
- glass.sync()
- end
- clearScreen()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement