MCPcopy Create free account
hub / github.com/diasurgical/devilution / FindTrigger

Function FindTrigger

SourceX/controls/plrctrls.cpp:364–426  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

362int pcursquest;
363
364void FindTrigger()
365{
366 int distance, rotations;
367
368 if (pcursitem != -1 || pcursobj != -1)
369 return; // Prefer showing items/objects over triggers (use of cursm* conflicts)
370
371 for (int i = 0; i < nummissiles; i++) {
372 int mi = missileactive[i];
373 if (missile[mi]._mitype == MIS_TOWN || missile[mi]._mitype == MIS_RPORTAL) {
374 int mix = missile[mi]._mix;
375 int miy = missile[mi]._miy;
376 const int newDdistance = GetDistance(mix, miy, 2);
377 if (newDdistance == 0)
378 continue;
379 if (pcursmissile != -1 && distance < newDdistance)
380 continue;
381 const int newRotations = GetRotaryDistance(mix, miy);
382 if (pcursmissile != -1 && distance == newDdistance && rotations < newRotations)
383 continue;
384 cursmx = mix;
385 cursmy = miy;
386 pcursmissile = mi;
387 distance = newDdistance;
388 rotations = newRotations;
389 }
390 }
391
392 if (pcursmissile == -1) {
393 for (int i = 0; i < numtrigs; i++) {
394 int tx = trigs[i]._tx;
395 int ty = trigs[i]._ty;
396 if (trigs[i]._tlvl == 13)
397 ty -= 1;
398 const int newDdistance = GetDistance(tx, ty, 2);
399 if (newDdistance == 0)
400 continue;
401 cursmx = tx;
402 cursmy = ty;
403 pcurstrig = i;
404 }
405
406 if (pcurstrig == -1) {
407 for (int i = 0; i < MAXQUESTS; i++) {
408 if (i == QTYPE_VB || currlevel != quests[i]._qlevel || quests[i]._qslvl == 0)
409 continue;
410 const int newDdistance = GetDistance(quests[i]._qtx, quests[i]._qty, 2);
411 if (newDdistance == 0)
412 continue;
413 cursmx = quests[i]._qtx;
414 cursmy = quests[i]._qty;
415 pcursquest = i;
416 }
417 }
418 }
419
420 if (pcursmonst != -1 || pcursplr != -1 || cursmx == -1 || cursmy == -1)
421 return; // Prefer monster/player info text

Callers 1

Calls 5

GetDistanceFunction · 0.85
GetRotaryDistanceFunction · 0.85
CheckTrigForceFunction · 0.85
CheckTownFunction · 0.85
CheckRportalFunction · 0.85

Tested by

no test coverage detected