Ticket #744: free_worker-28-02-2011.diff
File free_worker-28-02-2011.diff, 4.5 KB (added by , 13 years ago) |
---|
-
binaries/data/mods/public/gui/session/session.xml
15 15 <script file="gui/session/unit_commands.js"/> 16 16 <script file="gui/session/messages.js"/> 17 17 <script file="gui/session/utility_functions.js"/> 18 <script file="gui/session/freeworker.js"/> 18 19 19 20 <object name="sn" hotkey="session.gui.toggle"> 20 21 <action on="Tick"> … … 387 388 </object> <!-- END OF TOP PANEL --> 388 389 389 390 <!-- ================================ ================================ --> 391 <!-- Free Worker Button --> 392 <!-- ================================ ================================ --> 393 <object name="freeWorkerPanel" 394 size="50%-544 100%-32 50%-512 100%" 395 type="image" 396 sprite="mapPanel" 397 hidden="false" 398 ghost="false" 399 > 400 <object type="button" 401 name="freeWorkerButton" 402 size="0 0 100% 100%" 403 tooltip_style="sessionToolTipBold" 404 tooltip="Find idle worker" 405 > 406 <object size="0 0 100% 100%" type="image" sprite="freeWorker" name="freeWorkerButtonImage" ghost="true" /> 407 <action on="Press">findFreeWorker();</action> 408 </object> 409 </object> 410 411 <!-- ================================ ================================ --> 390 412 <!-- START of BOTTOM PANEL --> 391 413 <!-- ================================ ================================ --> 392 414 <object size="50%-512 100%-180 50%+512 100%"> -
binaries/data/mods/public/gui/session/freeworker.js
1 function findFreeWorker() 2 { 3 var ent, pos; 4 5 [ent, pos] = Engine.GuiInterfaceCall("FindFreeWorker"); 6 7 if (ent) 8 { 9 g_Selection.reset() 10 g_Selection.addList([ent]); 11 Engine.SetCameraTarget(pos.x, pos.y, pos.z); 12 } 13 } 14 No newline at end of file -
binaries/data/mods/public/gui/session/sprites.xml
9 9 /> 10 10 </sprite> 11 11 12 <sprite name="freeWorker"> 13 <image 14 texture="session/icons/single/repair.png" 15 cell_size="32 32" 16 size="0 0 100% 100%" 17 /> 18 </sprite> 19 12 20 <!-- ================================ ================================ --> 13 21 <!-- Unit Command Icons --> 14 22 <!-- ================================ ================================ --> -
binaries/data/mods/public/simulation/components/GuiInterface.js
473 473 cmpRangeManager.SetDebugOverlay(enabled); 474 474 }; 475 475 476 var _prevWorker = -1; 477 478 function isFreeWorker(ent) 479 { 480 var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); 481 var cmpIdentity = Engine.QueryInterface(ent, IID_Identity); 482 483 if (cmpIdentity && cmpUnitAI && cmpUnitAI.IsIdle()) 484 { 485 var classes = cmpIdentity.GetClassesList(); 486 487 if (classes.indexOf("Worker") != -1) 488 { 489 return true; 490 } 491 } 492 return false; 493 } 494 495 GuiInterface.prototype.FindFreeWorker = function(player) 496 { 497 var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 498 var playerEntities = rangeMan.GetEntitiesByPlayer(player); 499 500 var worker = null; 501 502 for each (var ent in playerEntities) 503 { 504 if ((worker == null || ent > _prevWorker) && isFreeWorker(ent)) 505 { 506 worker = ent; 507 508 if (ent > _prevWorker) 509 { 510 break; 511 } 512 } 513 } 514 515 if (worker == null) 516 { 517 return [null, null] 518 } 519 520 var cmpPosition = Engine.QueryInterface(worker, IID_Position); 521 522 if (cmpPosition) 523 { 524 _prevWorker = worker; 525 return [worker, cmpPosition.GetPosition()]; 526 } 527 else 528 { 529 return [null, null]; 530 } 531 }; 532 476 533 // List the GuiInterface functions that can be safely called by GUI scripts. 477 534 // (GUI scripts are non-deterministic and untrusted, so these functions must be 478 535 // appropriately careful. They are called with a first argument "player", which is … … 495 552 "SetPathfinderDebugOverlay": 1, 496 553 "SetObstructionDebugOverlay": 1, 497 554 "SetMotionDebugOverlay": 1, 498 "SetRangeDebugOverlay": 1 555 "SetRangeDebugOverlay": 1, 556 557 "FindFreeWorker": 1 499 558 }; 500 559 501 560 GuiInterface.prototype.ScriptCall = function(player, name, args)