// Run only from path thread PATHRESULT fpathExecute(PATHJOB job) { PATHRESULT result; result.droidID = job.droidID; memset(&result.sMove, 0, sizeof(result.sMove)); result.retval = FPR_FAILED; result.originalDest = Vector2i(job.destX, job.destY); ASR_RETVAL retval = fpathAStarRoute(&result.sMove, &job); ASSERT(retval != ASR_OK || result.sMove.asPath, "Ok result but no path in result"); ASSERT(retval == ASR_FAILED || result.sMove.numPoints > 0, "Ok result but no length of path in result"); switch (retval) { case ASR_NEAREST: if (job.acceptNearest) { objTrace(job.droidID, "** Nearest route -- accepted **"); result.retval = FPR_OK; } else { objTrace(job.droidID, "** Nearest route -- rejected **"); result.retval = FPR_FAILED; } break; case ASR_FAILED: objTrace(job.droidID, "** Failed route **"); // Is this really a good idea? Was in original code. if (job.propulsion == PROPULSION_TYPE_LIFT && (job.droidType != DROID_TRANSPORTER && job.droidType != DROID_SUPERTRANSPORTER)) { objTrace(job.droidID, "Doing fallback for non-transport VTOL"); fpathSetMove(&result.sMove, job.destX, job.destY); result.retval = FPR_OK; } else { result.retval = FPR_FAILED; } break; case ASR_OK: objTrace(job.droidID, "Got route of length %d", result.sMove.numPoints); result.retval = FPR_OK; break; } return result; }
// Run only from path thread static void fpathExecute(PATHJOB *psJob, PATHRESULT *psResult) { ASR_RETVAL retval = fpathAStarRoute(&psResult->sMove, psJob); ASSERT(retval != ASR_OK || psResult->sMove.asPath, "Ok result but no path in result"); ASSERT(retval == ASR_FAILED || psResult->sMove.numPoints > 0, "Ok result but no length of path in result"); switch (retval) { case ASR_NEAREST: if (psJob->acceptNearest) { objTrace(psJob->droidID, "** Nearest route -- accepted **"); psResult->retval = FPR_OK; } else { objTrace(psJob->droidID, "** Nearest route -- rejected **"); psResult->retval = FPR_FAILED; } break; case ASR_FAILED: objTrace(psJob->droidID, "** Failed route **"); // Is this really a good idea? Was in original code. if (psJob->propulsion == PROPULSION_TYPE_LIFT && (psJob->droidType != DROID_TRANSPORTER && psJob->droidType != DROID_SUPERTRANSPORTER)) { objTrace(psJob->droidID, "Doing fallback for non-transport VTOL"); fpathSetMove(&psResult->sMove, psJob->destX, psJob->destY); psResult->retval = FPR_OK; } else { psResult->retval = FPR_FAILED; } break; case ASR_OK: objTrace(psJob->droidID, "Got route of length %d", psResult->sMove.numPoints); psResult->retval = FPR_OK; break; } }