Mercurial > wow > breuesk
comparison Lists.lua @ 26:4c3140c7a1b4
Lots of folding markers so I can see the API clearly
| author | John@Yosemite-PC |
|---|---|
| date | Sat, 10 Mar 2012 09:05:37 -0500 |
| parents | cd241c70ba6c |
| children | 611808dbc0c0 |
comparison
equal
deleted
inserted
replaced
| 25:cd241c70ba6c | 26:4c3140c7a1b4 |
|---|---|
| 287 -- routines. | 287 -- routines. |
| 288 -- | 288 -- |
| 289 -- Note that "undo" has no special voodoo to it. It's basically a change that | 289 -- Note that "undo" has no special voodoo to it. It's basically a change that |
| 290 -- reverses the prior change on the stack. | 290 -- reverses the prior change on the stack. |
| 291 | 291 |
| 292 -- persons list | 292 function bsk:DoAddPerson(change)--{{{ |
| 293 function bsk:DoAddPerson(change) | |
| 294 assert(change) | 293 assert(change) |
| 295 assert(change.arg.id) | 294 assert(change.arg.id) |
| 296 local arg = change.arg | 295 local arg = change.arg |
| 297 -- require admin | 296 -- require admin |
| 298 local persons = bsk.persons | 297 local persons = bsk.persons |
| 301 assert(persons[id]==nil) | 300 assert(persons[id]==nil) |
| 302 persons[id] = {main=name} | 301 persons[id] = {main=name} |
| 303 persons.time=change.time | 302 persons.time=change.time |
| 304 personName2id[name] = id | 303 personName2id[name] = id |
| 305 return true | 304 return true |
| 306 end | 305 end--}}} |
| 307 | 306 function bsk:AddPerson(name)--{{{ |
| 308 function bsk:AddPerson(name) | |
| 309 local persons = bsk.persons | 307 local persons = bsk.persons |
| 310 local guid = UnitGUID(name) | 308 local guid = UnitGUID(name) |
| 311 -- TODO: check guid to be sure it's a player | 309 -- TODO: check guid to be sure it's a player |
| 312 if not guid then | 310 if not guid then |
| 313 self:Print(sformat("Could not add player %s - they must be in range or group",name)) | 311 self:Print(sformat("Could not add player %s - they must be in range or group",name)) |
| 326 end | 324 end |
| 327 local change = {action="AddPerson",arg={name=name,id=id}} | 325 local change = {action="AddPerson",arg={name=name,id=id}} |
| 328 if bsk:DoAddPerson(change) then | 326 if bsk:DoAddPerson(change) then |
| 329 bsk:CreateChange(change) | 327 bsk:CreateChange(change) |
| 330 end | 328 end |
| 331 end | 329 end--}}} |
| 332 | 330 function bsk:DoCreateList(change)--{{{ |
| 333 function bsk:DoCreateList(change) | |
| 334 --if bsk:GetListIndex(change.arg.name) then | 331 --if bsk:GetListIndex(change.arg.name) then |
| 335 -- self:Print(sformat("List %s already exists",v.name)) | 332 -- self:Print(sformat("List %s already exists",v.name)) |
| 336 -- return false | 333 -- return false |
| 337 --end | 334 --end |
| 338 bsk.lists[change.arg.id]={name=change.arg.name,time=change.time} | 335 bsk.lists[change.arg.id]={name=change.arg.name,time=change.time} |
| 339 return true | 336 return true |
| 340 end | 337 end--}}} |
| 341 | 338 function bsk:CreateList(name)--{{{ |
| 342 function bsk:CreateList(name) | |
| 343 -- require admin | 339 -- require admin |
| 344 local change={action="CreateList",arg={name=name}} | 340 local change={action="CreateList",arg={name=name}} |
| 345 bsk:StartChange(change) | 341 bsk:StartChange(change) |
| 346 change.arg.id=change.time -- use the creation timestamp as the list's index. it's as unique as anything... | 342 change.arg.id=change.time -- use the creation timestamp as the list's index. it's as unique as anything... |
| 347 self:Print("Creating ... " .. name) | 343 self:Print("Creating ... " .. name) |
| 348 if bsk:DoCreateList(change) then | 344 if bsk:DoCreateList(change) then |
| 349 bsk:CommitChange(change) | 345 bsk:CommitChange(change) |
| 350 end | 346 end |
| 351 end | 347 end--}}} |
| 352 | 348 function bsk:DoAddPersonToListEnd(change)--{{{ |
| 353 function bsk:DoAddPersonToListEnd(change) | |
| 354 local list = bsk.lists[change.arg.listIndex] | 349 local list = bsk.lists[change.arg.listIndex] |
| 355 local index | 350 local index |
| 356 if getn(list) > 0 then | 351 if getn(list) > 0 then |
| 357 index = list[#list].index + 0.1 | 352 index = list[#list].index + 0.1 |
| 358 else | 353 else |
| 363 tinsert(list,entry) | 358 tinsert(list,entry) |
| 364 list.time = change.time | 359 list.time = change.time |
| 365 list.closedRandom = true | 360 list.closedRandom = true |
| 366 | 361 |
| 367 return true | 362 return true |
| 368 end | 363 end--}}} |
| 369 | 364 function bsk:AddPersonToListEnd(name,listName)--{{{ |
| 370 function bsk:AddPersonToListEnd(name,listName) | |
| 371 -- require admin | 365 -- require admin |
| 372 local listIndex = bsk:GetListIndex(listName) | 366 local listIndex = bsk:GetListIndex(listName) |
| 373 local id = personName2id[name] | 367 local id = personName2id[name] |
| 374 if bsk:IdIsInList(id,bsk.lists[listIndex]) then | 368 if bsk:IdIsInList(id,bsk.lists[listIndex]) then |
| 375 bsk:Print(sformat("Person %s is already on the reqeuested list",name)) | 369 bsk:Print(sformat("Person %s is already on the reqeuested list",name)) |
| 379 local change = {action="AddToListEnd",arg={id=id,listIndex=listIndex}} | 373 local change = {action="AddToListEnd",arg={id=id,listIndex=listIndex}} |
| 380 bsk:StartChange(change) | 374 bsk:StartChange(change) |
| 381 if bsk:DoAddPersonToListEnd(change) then | 375 if bsk:DoAddPersonToListEnd(change) then |
| 382 bsk:CommitChange(change) | 376 bsk:CommitChange(change) |
| 383 end | 377 end |
| 384 end | 378 end--}}} |
| 385 | 379 function bsk:DoAddPersonToListRandom(change)--{{{ |
| 386 function bsk:DoAddPersonToListRandom(change) | |
| 387 local list = bsk.lists[change.arg.listIndex] | 380 local list = bsk.lists[change.arg.listIndex] |
| 388 local entry = {index=change.arg.roll, id=change.arg.id} | 381 local entry = {index=change.arg.roll, id=change.arg.id} |
| 389 | 382 |
| 390 tinsert(list,entry) | 383 tinsert(list,entry) |
| 391 table.sort(list,function(a,b) return a.index < b.index end) | 384 table.sort(list,function(a,b) return a.index < b.index end) |
| 392 list.time = change.time | 385 list.time = change.time |
| 393 | 386 |
| 394 return true | 387 return true |
| 395 end | 388 end--}}} |
| 396 | 389 function bsk:AddPersonToListRandom(name,listName)--{{{ |
| 397 function bsk:AddPersonToListRandom(name,listName) | |
| 398 -- require admin | 390 -- require admin |
| 399 local listIndex = bsk:GetListIndex(listName) | 391 local listIndex = bsk:GetListIndex(listName) |
| 400 if bsk.lists[listIndex].closedRandom then | 392 if bsk.lists[listIndex].closedRandom then |
| 401 self:Print("Cannot add person to list by random roll because an add-to-end operation has already occurred") | 393 self:Print("Cannot add person to list by random roll because an add-to-end operation has already occurred") |
| 402 return false | 394 return false |
| 411 local change = {action="AddToListRand",arg={id=id,listIndex=listIndex,roll=roll}} | 403 local change = {action="AddToListRand",arg={id=id,listIndex=listIndex,roll=roll}} |
| 412 bsk:StartChange(change) | 404 bsk:StartChange(change) |
| 413 if bsk:DoAddPersonToListRandom(change) then | 405 if bsk:DoAddPersonToListRandom(change) then |
| 414 bsk:CommitChange(change) | 406 bsk:CommitChange(change) |
| 415 end | 407 end |
| 416 end | 408 end--}}} |
| 417 | 409 function bsk:DoRemovePerson(change)--{{{ |
| 418 function bsk:DoRemovePerson(change) | |
| 419 | 410 |
| 420 -- return true | 411 -- return true |
| 421 end | 412 end--}}} |
| 422 | 413 function bsk:RemovePerson(name)--{{{ |
| 423 function bsk:RemovePerson(name) | |
| 424 -- from both persons and lists | 414 -- from both persons and lists |
| 425 end | 415 end--}}} |
| 426 | 416 function bsk:DoSuicidePerson(change)--{{{ |
| 427 function bsk:DoSuicidePerson(change) | |
| 428 local list = bsk.lists[change.arg.listIndex] | 417 local list = bsk.lists[change.arg.listIndex] |
| 429 local affected = shallowCopy(change.arg.affect) | 418 local affected = shallowCopy(change.arg.affect) |
| 430 -- the goal here is to rotate the suicide list by 1 | 419 -- the goal here is to rotate the suicide list by 1 |
| 431 -- then we can just mash it on top of the intersection between the original | 420 -- then we can just mash it on top of the intersection between the original |
| 432 -- list and the working copy | 421 -- list and the working copy |
| 443 table.remove(replacement,1) | 432 table.remove(replacement,1) |
| 444 end | 433 end |
| 445 end | 434 end |
| 446 list.time=change.time | 435 list.time=change.time |
| 447 return true | 436 return true |
| 448 end | 437 end--}}} |
| 449 | 438 function bsk:SuicidePerson(name,listName)--{{{ |
| 450 function bsk:SuicidePerson(name,listName) | |
| 451 -- require admin | 439 -- require admin |
| 452 bsk:PopulateRaidList() | 440 bsk:PopulateRaidList() |
| 453 local listIndex = bsk:GetListIndex(listName) | 441 local listIndex = bsk:GetListIndex(listName) |
| 454 local id = personName2id[name] | 442 local id = personName2id[name] |
| 455 local affect=bsk:GetSuicideList(id,bsk.lists[listIndex]) | 443 local affect=bsk:GetSuicideList(id,bsk.lists[listIndex]) |
| 456 local change = {action="SuicidePerson",arg={affect=affect,listIndex=listIndex}} | 444 local change = {action="SuicidePerson",arg={affect=affect,listIndex=listIndex}} |
| 457 bsk:StartChange(change) | 445 bsk:StartChange(change) |
| 458 if bsk:DoSuicidePerson(change) then | 446 if bsk:DoSuicidePerson(change) then |
| 459 bsk:CommitChange(change) | 447 bsk:CommitChange(change) |
| 460 end | 448 end |
| 461 end | 449 end--}}} |
| 462 | 450 function bsk:DoRenameList(change)--{{{ |
| 463 function bsk:DoRenameList(change) | |
| 464 bsk.lists[change.arg.listIndex].name = change.arg.name | 451 bsk.lists[change.arg.listIndex].name = change.arg.name |
| 465 bsk.lists[change.arg.listIndex].time = change.time | 452 bsk.lists[change.arg.listIndex].time = change.time |
| 466 return true | 453 return true |
| 467 end | 454 end--}}} |
| 468 | 455 function bsk:RenameList(listName,newListName)--{{{ |
| 469 function bsk:RenameList(listName,newListName) | |
| 470 -- require admin | 456 -- require admin |
| 471 local listIndex = bsk:GetListIndex(listName) | 457 local listIndex = bsk:GetListIndex(listName) |
| 472 local change = {action="RenameList",arg={listIndex=listIndex,name=newListName}} | 458 local change = {action="RenameList",arg={listIndex=listIndex,name=newListName}} |
| 473 bsk:StartChange(change) | 459 bsk:StartChange(change) |
| 474 if bsk:DoRenameList(change) then | 460 if bsk:DoRenameList(change) then |
| 475 bsk:CommitChange(change) | 461 bsk:CommitChange(change) |
| 476 end | 462 end |
| 477 end | 463 end--}}} |
| 478 | 464 function bsk:DoDeleteList(change)--{{{ |
| 479 function bsk:DoDeleteList(change) | |
| 480 bsk.lists[change.arg.listIndex] = nil | 465 bsk.lists[change.arg.listIndex] = nil |
| 481 return true | 466 return true |
| 482 end | 467 end--}}} |
| 483 | 468 function bsk:DeleteList(listName)--{{{ |
| 484 function bsk:DeleteList(listName) | |
| 485 local listIndex = bsk:GetListIndex(listName) | 469 local listIndex = bsk:GetListIndex(listName) |
| 486 local change = {action="DeleteList",arg={listIndex=listIndex}} | 470 local change = {action="DeleteList",arg={listIndex=listIndex}} |
| 487 bsk:StartChange(change) | 471 bsk:StartChange(change) |
| 488 if bsk:DoDeleteList(change) then | 472 if bsk:DoDeleteList(change) then |
| 489 bsk:CommitChange(change) | 473 bsk:CommitChange(change) |
| 490 end | 474 end |
| 491 end | 475 end--}}} |
| 492 | 476 function bsk:DoRemovePersonFromList(change)--{{{ |
| 493 function bsk:DoRemovePersonFromList(change) | |
| 494 local list = bsk.lists[change.arg.listIndex] | 477 local list = bsk.lists[change.arg.listIndex] |
| 495 | 478 |
| 496 for i,v in pairs(list) do | 479 for i,v in pairs(list) do |
| 497 if v.id == change.arg.id then | 480 if v.id == change.arg.id then |
| 498 table.remove(list,i) | 481 table.remove(list,i) |
| 500 end | 483 end |
| 501 end | 484 end |
| 502 table.sort(list,function(a,b) return a.index < b.index end) | 485 table.sort(list,function(a,b) return a.index < b.index end) |
| 503 list.time = change.time | 486 list.time = change.time |
| 504 return true | 487 return true |
| 505 end | 488 end--}}} |
| 506 | 489 function bsk:RemovePersonFromList(name,listName)--{{{ |
| 507 function bsk:RemovePersonFromList(name,listName) | |
| 508 local listIndex = bsk:GetListIndex(listName) | 490 local listIndex = bsk:GetListIndex(listName) |
| 509 local pid = personName2id[name] | 491 local pid = personName2id[name] |
| 510 local change = {action="RemovePersonFromList",arg={id=pid,listIndex=listIndex}} | 492 local change = {action="RemovePersonFromList",arg={id=pid,listIndex=listIndex}} |
| 511 bsk:StartChange(change) | 493 bsk:StartChange(change) |
| 512 if bsk:DoRemovePersonFromList(change) then | 494 if bsk:DoRemovePersonFromList(change) then |
| 513 bsk:CommitChange(change) | 495 bsk:CommitChange(change) |
| 514 end | 496 end |
| 515 end | 497 end |
| 498 --}}} | |
| 516 --}}} | 499 --}}} |
| 517 -- Higher order actions (ie calls other standard actions){{{ | 500 -- Higher order actions (ie calls other standard actions){{{ |
| 518 | 501 |
| 519 function bsk:TrimLists(time) | 502 function bsk:TrimLists(time) |
| 520 if not bsk:CheckListCausality() then | 503 if not bsk:CheckListCausality() then |
