Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/tutoriallevel/data/gui/scripts/MultiplayerMenu.lua @ 8043

Last change on this file since 8043 was 7801, checked in by dafrick, 14 years ago

Merging presentation2 branch back to trunk.

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