Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/data/gui/scripts/MultiplayerMenu.lua @ 11688

Last change on this file since 11688 was 10622, checked in by landauf, 9 years ago

merged branch presentationFS15merge back to trunk

  • Property svn:eol-style set to native
File size: 5.1 KB
RevLine 
[6363]1-- MultiplayerMenu.lua
2
[6746]3local P = createMenuSheet("MultiplayerMenu")
[6363]4
[7732]5--joinMode is 1 for choice "LAN" and 2 for "Internet"
[7801]6--initial status 1
7P.joinMode = 1
[7732]8
[6746]9function P.onLoad()
[8079]10    P.multiplayerMode = "startClient"
[7689]11
[8079]12    --button are arranged in a 3x2 matrix, Join and Host buttons are in the upper left and middle, the back button in the lower right of the table
13    P:setButton(1, 1, {
[7689]14            ["button"] = winMgr:getWindow("orxonox/MultiplayerJoinButton"),
[8079]15            ["callback"]  = P.MultiplayerJoinButton_clicked
16    })
[7689]17
[8079]18    P:setButton(1, 2, {
[7689]19            ["button"] = winMgr:getWindow("orxonox/MultiplayerHostButton"),
[8079]20            ["callback"]  = P.MultiplayerHostButton_clicked
21    })
[7689]22
[8079]23    P:setButton(2, 3, {
[7689]24            ["button"] = winMgr:getWindow("orxonox/MultiplayerBackButton"),
[8079]25            ["callback"]  = P.MultiplayerBackButton_clicked
26    })
[7163]27end
28
29function P.onShow()
[7801]30    --P.showServerList()
[7163]31
[7801]32    if P.joinMode == 1 then
33        local window = winMgr:getWindow("orxonox/MultiplayerLanButton")
34        local button = tolua.cast(window,"CEGUI::RadioButton")
35        button:setSelected(true)
36    end
37    if P.joinMode == 2 then
38        local window = winMgr:getWindow("orxonox/MultiplayerInternetButton")
39        local button = tolua.cast(window,"CEGUI::RadioButton")
40        button:setSelected(true)
41    end
[7163]42end
43
[7732]44function P.LanButton_clicked(e)
[7801]45    local we = CEGUI.toWindowEventArgs(e)
46    local button = tolua.cast(we.window,"CEGUI::RadioButton")
[7732]47    P.joinMode = 1
[7801]48    if button:isSelected() == true then
[8079]49        P.showServerList()
[7801]50    end
[7732]51end
52
53function P.InternetButton_clicked(e)
[7801]54    local we = CEGUI.toWindowEventArgs(e)
55    local button = tolua.cast(we.window,"CEGUI::RadioButton")
[7732]56    P.joinMode = 2
[7801]57    if button:isSelected() == true then
[8079]58        P.showServerList()
59    end
[7732]60end
61
[7163]62function P.MultiplayerHostButton_clicked(e)
[7689]63    showMenuSheet("HostMenu", true)
[7163]64end
65
66
[7689]67function P.MultiplayerJoinButton_clicked(e)
[7876]68    local choice = winMgr:getWindow("orxonox/MultiplayerListbox"):getFirstSelectedItem()
69    local destination = nil
[7801]70    if choice then
71        local index = tolua.cast(choice, "CEGUI::ListboxItem"):getID()
[10622]72        destination = P.serverList[index][1]
[7163]73    else
[7801]74        return
[7163]75    end
[7876]76    orxonox.execute("startClient " .. destination)
[7801]77    hideAllMenuSheets()
[7163]78end
79
80function P.MultiplayerBackButton_clicked(e)
81    hideMenuSheet(P.name)
82end
83
84function P.showServerList()
[8079]85    -- LAN Discovery
86    if P.joinMode == 1 then
87        local listbox = winMgr:getWindow("orxonox/MultiplayerListbox")
88        CEGUI.toListbox(listbox):resetList()
89        local discovery = orxonox.LANDiscovery:getInstance()
90        discovery:discover()
91        P.serverList = {}
92        local index = 0
93        local servername = ""
94        local serverip = ""
[10622]95        local serverrtt = ""
96        local playernumber = ""
[8079]97        while true do
98            servername = discovery:getServerListItemName(index)
99            if servername == "" then
100                break
101            end
102            serverip = discovery:getServerListItemIP(index)
103            if serverip == "" then
104                break
105            end
[10622]106            --serverrtt = discovery:getServerListItemRTT(index)
107            playernumber = discovery:getServerListItemPlayerNumber(index)
108
109            table.insert(P.serverList, {serverip, servername, playernumber})
[8079]110            index = index + 1
111        end
112        index = 1
113        for k,v in pairs(P.serverList) do
[10622]114            local item = CEGUI.createListboxTextItem("IP: " .. v[1] .. " Name: " .. v[2] .. " Players: " .. v[3])
[8079]115            item:setID(index)
116            index = index + 1
117            item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
118            CEGUI.toListbox(listbox):addItem(item)
119        end
120    -- WAN Discovery
121    elseif P.joinMode == 2 then
122        local listbox = winMgr:getWindow("orxonox/MultiplayerListbox")
123        CEGUI.toListbox(listbox):resetList()
[8858]124        local discovery = orxonox.WANDiscovery()
125        orxout("discovering." )
[8079]126        discovery:discover()
[8858]127        orxout("discovered." )
[8079]128        P.serverList = {}
129        local index = 0
130        local servername = ""
131        local serverip = ""
[10622]132        local serverrtt = ""
133        local playernumber = ""
[8079]134        while true do
135            servername = discovery:getServerListItemName(index)
136            if servername == "" then
137                break
138            end
139            serverip = discovery:getServerListItemIP(index)
140            if serverip == "" then
141                break
142            end
[10622]143            --serverrtt = discovery:getServerListItemRTT(index)
144            playernumber = discovery:getServerListItemPlayerNumber(index)
145
146            table.insert(P.serverList, {serverip, servername, playernumber})
[8079]147            index = index + 1
148        end
149        index = 1
150        for k,v in pairs(P.serverList) do
[10622]151            local item = CEGUI.createListboxTextItem("IP: " .. v[1] .. " Name: " .. v[2] .. " Players: " .. v[3])
[8079]152            item:setID(index)
153            index = index + 1
154            item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
155            CEGUI.toListbox(listbox):addItem(item)
156        end
157    end
[6363]158
[7689]159end
160
[6363]161return P
Note: See TracBrowser for help on using the repository browser.