switch (ext) {
case AMMO_SHOT: {
- DIRECTION dir;
+ int dir;
if (!get_rep_dir(player_ptr, &dir)) {
return false;
}
- POSITION y = player_ptr->y + ddy[dir];
- POSITION x = player_ptr->x + ddx[dir];
- auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
- if (terrains_info[g_ptr->get_feat_mimic()].flags.has_not(TerrainCharacteristics::CAN_DIG)) {
+ const Pos2D pos(player_ptr->y + ddy[dir], player_ptr->x + ddx[dir]);
+ const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
+ if (terrains_info[grid.get_feat_mimic()].flags.has_not(TerrainCharacteristics::CAN_DIG)) {
msg_print(_("そこには岩石がない。", "You need a pile of rubble."));
return false;
}
- if (!g_ptr->cave_has_flag(TerrainCharacteristics::CAN_DIG) || !g_ptr->cave_has_flag(TerrainCharacteristics::HURT_ROCK)) {
+ if (!grid.cave_has_flag(TerrainCharacteristics::CAN_DIG) || !grid.cave_has_flag(TerrainCharacteristics::HURT_ROCK)) {
msg_print(_("硬すぎて崩せなかった。", "You failed to make ammo."));
return true;
}
autopick_alter_item(player_ptr, slot, false);
}
- cave_alter_feat(player_ptr, y, x, TerrainCharacteristics::HURT_ROCK);
+ cave_alter_feat(player_ptr, pos.y, pos.x, TerrainCharacteristics::HURT_ROCK);
RedrawingFlagsUpdater::get_instance().set_flag(StatusRecalculatingFlag::FLOW);
return true;
}
/*!
* @brief 指定した座標全てを暗くする。
* @param player_ptr プレイヤーへの参照ポインタ
- * @param points 暗くすべき座標たち
- * @details
- * <pre>
- * This routine clears the entire "temp" set.
- * This routine will "darken" all "temp" grids.
- * In addition, some of these grids will be "unmarked".
- * This routine is used (only) by "unlite_room()"
- * Also, process all affected monsters
- * </pre>
- * @todo この辺、xとyが引数になっているが、player_ptr->xとplayer_ptr->yで全て置き換えが効くはず……
+ * @param points 暗くすべき座標群
*/
static void cave_temp_room_unlite(PlayerType *player_ptr, const std::vector<Pos2D> &points)
{
+ auto &floor = *player_ptr->current_floor_ptr;
for (const auto &point : points) {
- const POSITION y = point.y;
- const POSITION x = point.x;
-
- auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
- bool do_dark = !g_ptr->is_mirror();
- g_ptr->info &= ~(CAVE_TEMP);
+ auto &grid = floor.get_grid(point);
+ auto do_dark = !grid.is_mirror();
+ grid.info &= ~(CAVE_TEMP);
if (!do_dark) {
continue;
}
- if (player_ptr->current_floor_ptr->dun_level || !is_daytime()) {
+ if (floor.dun_level || !is_daytime()) {
for (int j = 0; j < 9; j++) {
- POSITION by = y + ddy_ddd[j];
- POSITION bx = x + ddx_ddd[j];
-
- if (in_bounds2(player_ptr->current_floor_ptr, by, bx)) {
- Grid *cc_ptr = &player_ptr->current_floor_ptr->grid_array[by][bx];
+ const Pos2D pos_neighbor(point.y + ddy_ddd[j], point.x + ddx_ddd[j]);
+ if (!in_bounds2(&floor, pos_neighbor.y, pos_neighbor.x)) {
+ continue;
+ }
- if (terrains_info[cc_ptr->get_feat_mimic()].flags.has(TerrainCharacteristics::GLOW)) {
- do_dark = false;
- break;
- }
+ const auto &grid_neighbor = floor.get_grid(pos_neighbor);
+ if (terrains_info[grid_neighbor.get_feat_mimic()].flags.has(TerrainCharacteristics::GLOW)) {
+ do_dark = false;
+ break;
}
}
}
}
- g_ptr->info &= ~(CAVE_GLOW);
- if (terrains_info[g_ptr->get_feat_mimic()].flags.has_not(TerrainCharacteristics::REMEMBER)) {
+ grid.info &= ~(CAVE_GLOW);
+ if (terrains_info[grid.get_feat_mimic()].flags.has_not(TerrainCharacteristics::REMEMBER)) {
if (!view_torch_grids) {
- g_ptr->info &= ~(CAVE_MARK);
+ grid.info &= ~(CAVE_MARK);
}
- note_spot(player_ptr, y, x);
+ note_spot(player_ptr, point.y, point.x);
}
- if (g_ptr->m_idx) {
- update_monster(player_ptr, g_ptr->m_idx, false);
+ if (grid.m_idx) {
+ update_monster(player_ptr, grid.m_idx, false);
}
- lite_spot(player_ptr, y, x);
- update_local_illumination(player_ptr, y, x);
+ lite_spot(player_ptr, point.y, point.x);
+ update_local_illumination(player_ptr, point.y, point.x);
}
}