static void Grid_SetMoveData (pathing_t *path, const pos3_t toPos, const int c, const byte length, const int dir, const int oz, const int oc, priorityQueue_t *pqueue) { pos4_t dummy; RT_AREA_TEST_POS(path, toPos, c); RT_AREA_POS(path, toPos, c) = length; /**< Store TUs for this square. */ RT_AREA_FROM_POS(path, toPos, c) = makeDV(dir, oz); /**< Store origination information for this square. */ Vector4Set(dummy, toPos[0], toPos[1], toPos[2], c); /** @todo add heuristic for A* algorithm */ PQueuePush(pqueue, dummy, length); }
/** * @brief Get the direction to use to move to a position (used to reconstruct the path) * @param[in] path Pointer to client or server side pathing table (le->PathMap, svPathMap) * @param[in] toPos The desired location * @param[in] crouchingState Whether the actor is currently crouching, 1 is yes, 0 is no. * @return a direction vector (see dvecs and DIRECTIONS) * @sa Grid_MoveCheck */ int Grid_MoveNext (const pathing_t *path, const pos3_t toPos, byte crouchingState) { const pos_t l = RT_AREA_POS(path, toPos, crouchingState); /**< Get TUs for this square */ /* Check to see if the TUs needed to move here are greater than 0 and less then ROUTING_NOT_REACHABLE */ if (!l || l == ROUTING_NOT_REACHABLE) { /* ROUTING_UNREACHABLE means, not possible/reachable */ return ROUTING_UNREACHABLE; } /* Return the information indicating how the actor got to this cell */ return RT_AREA_FROM_POS(path, toPos, crouchingState); }
static void Grid_SetMoveData (pathing_t *path, const pos3_t toPos, const int crouch, const byte length, const int dir, const int oldZ) { RT_AREA_TEST_POS(path, toPos, crouch); RT_AREA_POS(path, toPos, crouch) = length; /**< Store TUs for this square. */ RT_AREA_FROM_POS(path, toPos, crouch) = makeDV(dir, oldZ); /**< Store origination information for this square. */ }