Mercurial > wow > breuesk
comparison State.lua @ 72:9e5b0a2368ad
Big progress towards GUI usefulness and communication between clients
author | John@Yosemite-PC |
---|---|
date | Sat, 07 Apr 2012 13:35:57 -0400 |
parents | d5e2dfe0c269 |
children | 7eb2963eea7d |
comparison
equal
deleted
inserted
replaced
71:d5e2dfe0c269 | 72:9e5b0a2368ad |
---|---|
35 -- person B goes into bidding state, their button activates | 35 -- person B goes into bidding state, their button activates |
36 -- person B clicks the button. button changes state. | 36 -- person B clicks the button. button changes state. |
37 -- person B broadcasts their bid. if a bid, everyone just accepts it. | 37 -- person B broadcasts their bid. if a bid, everyone just accepts it. |
38 -- - if a roll, then the master does the roll and rebroadcasts | 38 -- - if a roll, then the master does the roll and rebroadcasts |
39 | 39 |
40 state = "neutral" | 40 state = "neutral" -- states that are possible: neutral, looting, bidding |
41 local looting = false | 41 local looting = false |
42 stateactive = nil | 42 stateactive = nil |
43 stateitem = nil | 43 stateitem = nil |
44 statebids = {} | 44 statebids = {} |
45 staterolls = {} | 45 staterolls = {} |
46 stateactivelist = nil | |
46 | 47 |
47 local rollListeners = {} | 48 local rollListeners = {} |
48 function RegisterListenerRolls(listener) | 49 function RegisterListenerRolls(listener) |
49 table.insert(rollListeners,listener) | 50 table.insert(rollListeners,listener) |
50 end | 51 end |
51 function AlertRollListeners() | 52 function AlertRollListeners() |
52 for i,v in pairs(rollListeners) do | 53 for i,v in pairs(rollListeners) do |
53 print("roll out") | 54 print("roll out") |
54 v["RollEvent"](v) | 55 v["RollEvent"](v) |
56 end | |
57 end | |
58 | |
59 local listChangeListeners = {} | |
60 function RegisterListenerActiveListChanged(listener) | |
61 table.insert(listChangeListeners,listener) | |
62 end | |
63 function AlertActiveListChangedListeners() | |
64 for i,v in pairs(listChangeListeners) do | |
65 print("list out") | |
66 v["ActiveListEvent"](v) | |
67 end | |
68 end | |
69 | |
70 local stateChangeListeners = {} | |
71 function RegisterListenerStateChange(listener) | |
72 table.insert(stateChangeListeners,listener) | |
73 end | |
74 function AlertStateChangeListeners() | |
75 for i,v in pairs(stateChangeListeners) do | |
76 print("state out") | |
77 v["StateEvent"](v) | |
55 end | 78 end |
56 end | 79 end |
57 | 80 |
58 function BeginLoot(listValue) | 81 function BeginLoot(listValue) |
59 if state == "neutral" then | 82 if state == "neutral" then |
63 else | 86 else |
64 _G.error("Bad state transition", state, "looting") | 87 _G.error("Bad state transition", state, "looting") |
65 end | 88 end |
66 end | 89 end |
67 | 90 |
68 function ActivateList(value) -- doesn't cause a transition, but we only enforce a list selection during certain times | 91 |
92 -- Activate List {{{ | |
93 function ActivateList(packet) -- doesn't cause a transition, but we only enforce a list selection during certain times | |
94 local list = unpack(packet) | |
69 if state == "looting" then | 95 if state == "looting" then |
70 active = value | 96 stateactivelist = list |
71 end | 97 AlertActiveListChangedListeners() |
72 end | 98 end |
73 | 99 end |
100 | |
101 function InitiateActivateList(list) | |
102 if state == "looting" then | |
103 Comm:SendStateChange("AL",list) | |
104 end | |
105 end | |
106 --}}} | |
107 -- Open Bidding {{{ | |
74 function OpenBid(packet) | 108 function OpenBid(packet) |
75 local item = unpack(packet) | 109 local item = unpack(packet) |
76 --if state == "looting" then | 110 --if state == "looting" then |
77 state = "bidding" | 111 state = "bidding" |
78 item = value | 112 item = value |
81 | 115 |
82 function InitiateOpenBid(item) | 116 function InitiateOpenBid(item) |
83 --if state == "looting" then | 117 --if state == "looting" then |
84 Comm:SendStateChange("OB",item) | 118 Comm:SendStateChange("OB",item) |
85 --end | 119 --end |
120 end | |
121 --}}} | |
122 -- Bid {{{ | |
123 function ReceivedBid(packet) -- no state transition, but only matters during one state | |
124 local person, roll = unpack(packet) | |
125 | |
126 if state == "bidding" then | |
127 if roll then | |
128 table.insert(statebids,person) -- todo: | |
129 else | |
130 table.insert(statebids,person) -- todo: keep sorted | |
131 end | |
132 AlertRollListeners() | |
133 end | |
134 | |
135 -- else ignore ... | |
136 end | |
137 | |
138 function InitiateBid(person,roll) | |
139 if state == "bidding" then | |
140 for i,v in pairs(statebids) do | |
141 if person.value == v.value then | |
142 print(person.value .. " is already on the list") | |
143 return -- no double adds please | |
144 end | |
145 end | |
146 Comm:SendStateChange("RB",person,roll) | |
147 end | |
148 end | |
149 --}}} | |
150 -- Retration {{{ | |
151 function ReceivedRetraction(packet) | |
152 local person = unpack(packet) | |
153 if state == "bidding" then | |
154 for i,v in pairs(statebids) do | |
155 if v.value == person.value then | |
156 table.remove(statebids,i) | |
157 AlertRollListeners() | |
158 return | |
159 end | |
160 end | |
161 end | |
162 end | |
163 | |
164 function InitiateRetract(person) | |
165 if state == "bidding" then | |
166 Comm:SendStateChange("RR",person,roll) | |
167 end | |
168 end | |
169 --}}} | |
170 -- Close Bidding {{{ | |
171 function CloseBidding(packet) | |
172 local awardedTo = unpack(packet) | |
173 state = "looting" | |
174 -- remove the item from the window, record history | |
175 end | |
176 | |
177 function InitiateCloseBidding(awardedTo) | |
178 Comm:SendStateChange("CB",awardedTo) | |
179 end | |
180 --}}} | |
181 | |
182 function CloseLooting(packet) | |
183 state = "neutral" | |
184 active = nil | |
185 item = nil | |
186 bids = {} | |
187 rolls = {} | |
188 end | |
189 | |
190 function InitiateCloseLooting() | |
191 Comm:SendStateChange("CL") | |
86 end | 192 end |
87 | 193 |
88 function DispatchState(packet) | 194 function DispatchState(packet) |
89 local state = table.remove(packet,1) | 195 local state = table.remove(packet,1) |
90 print("Dispatching", state) | 196 print("Dispatching", state) |
92 ReceivedBid(packet) | 198 ReceivedBid(packet) |
93 elseif state == "RR" then | 199 elseif state == "RR" then |
94 ReceivedRetraction(packet) | 200 ReceivedRetraction(packet) |
95 elseif state == "OB" then | 201 elseif state == "OB" then |
96 OpenBid(packet) | 202 OpenBid(packet) |
203 elseif state == "CB" then | |
204 CloseBidding(packet) | |
205 elseif state == "CB" then | |
206 CloseLooting(packet) | |
207 elseif state == "AL" then | |
208 ActivateList(packet) | |
97 else -- todo ... | 209 else -- todo ... |
98 | 210 |
99 end | 211 end |
100 end | 212 end |
101 | 213 |
102 function ReceivedBid(packet) -- no state transition, but only matters during one state | |
103 local person, roll = unpack(packet) | |
104 | |
105 if state == "bidding" then | |
106 if roll then | |
107 table.insert(statebids,person) -- todo: | |
108 else | |
109 table.insert(statebids,person) -- todo: keep sorted | |
110 end | |
111 AlertRollListeners() | |
112 end | |
113 | |
114 -- else ignore ... | |
115 end | |
116 | |
117 function InitiateBid(person,roll) | |
118 if state == "bidding" then | |
119 for i,v in pairs(statebids) do | |
120 if person.value == v.value then | |
121 print(person.value .. " is already on the list") | |
122 return -- no double adds please | |
123 end | |
124 end | |
125 Comm:SendStateChange("RB",person,roll) | |
126 end | |
127 end | |
128 | |
129 | |
130 function ReceivedRetraction(packet) | |
131 local person = unpack(packet) | |
132 if state == "bidding" then | |
133 for i,v in pairs(statebids) do | |
134 if v.value == person.value then | |
135 table.remove(statebids,i) | |
136 AlertRollListeners() | |
137 return | |
138 end | |
139 end | |
140 end | |
141 end | |
142 | |
143 function InitiateRetract(person) | |
144 if state == "bidding" then | |
145 Comm:SendStateChange("RR",person,roll) | |
146 end | |
147 end | |
148 | |
149 function CloseBidding(awardedTo) | |
150 state = "looting" | |
151 -- remove the item, record history | |
152 end | |
153 | |
154 function CloseLooting() | |
155 state = "neutral" | |
156 active = nil | |
157 item = nil | |
158 bids = {} | |
159 rolls = {} | |
160 end |