OSDN Git Service
(root)
/
hengbandforosx
/
hengbandosx.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[Refactor] Grid::has_monster()の定義
[hengbandforosx/hengbandosx.git]
/
src
/
grid
/
grid.cpp
diff --git
a/src/grid/grid.cpp
b/src/grid/grid.cpp
index
c737043
..
7ee06ef
100644
(file)
--- a/
src/grid/grid.cpp
+++ b/
src/grid/grid.cpp
@@
-34,8
+34,6
@@
#include "io/screen-util.h"
#include "monster-floor/monster-remover.h"
#include "monster-race/monster-race.h"
#include "io/screen-util.h"
#include "monster-floor/monster-remover.h"
#include "monster-race/monster-race.h"
-#include "monster-race/race-flags2.h"
-#include "monster-race/race-flags7.h"
#include "monster/monster-info.h"
#include "monster/monster-status.h"
#include "monster/monster-update.h"
#include "monster/monster-info.h"
#include "monster/monster-status.h"
#include "monster/monster-update.h"
@@
-86,11
+84,11
@@
bool new_player_spot(PlayerType *player_ptr)
const auto &grid = player_ptr->current_floor_ptr->get_grid({ y, x });
/* Must be a "naked" floor grid */
const auto &grid = player_ptr->current_floor_ptr->get_grid({ y, x });
/* Must be a "naked" floor grid */
- if (grid.
m_idx
) {
+ if (grid.
has_monster()
) {
continue;
}
if (floor.is_in_dungeon()) {
continue;
}
if (floor.is_in_dungeon()) {
- const auto &terrain =
terrains_info[grid.feat]
;
+ const auto &terrain =
grid.get_terrain()
;
if (max_attempts > 5000) /* Rule 1 */
{
if (max_attempts > 5000) /* Rule 1 */
{
@@
-141,7
+139,7
@@
bool new_player_spot(PlayerType *player_ptr)
/*!
* @brief マスに隠されたドアがあるかの判定を行う。 / Return TRUE if the given grid is a hidden closed door
* @param player_ptr プレイヤーへの参照ポインタ
/*!
* @brief マスに隠されたドアがあるかの判定を行う。 / Return TRUE if the given grid is a hidden closed door
* @param player_ptr プレイヤーへの参照ポインタ
- * @param g
_ptr
マス構造体の参照ポインタ
+ * @param g
rid
マス構造体の参照ポインタ
* @return 隠されたドアがあるならTRUEを返す。
*/
bool is_hidden_door(PlayerType *player_ptr, const Grid &grid)
* @return 隠されたドアがあるならTRUEを返す。
*/
bool is_hidden_door(PlayerType *player_ptr, const Grid &grid)
@@
-186,7
+184,7
@@
static void update_local_illumination_aux(PlayerType *player_ptr, int y, int x)
return;
}
return;
}
- if (grid.
m_idx > 0
) {
+ if (grid.
has_monster()
) {
update_monster(player_ptr, grid.m_idx, false);
}
update_monster(player_ptr, grid.m_idx, false);
}
@@
-327,7
+325,9
@@
void print_bolt_pict(PlayerType *player_ptr, POSITION y, POSITION x, POSITION ny
*/
void note_spot(PlayerType *player_ptr, POSITION y, POSITION x)
{
*/
void note_spot(PlayerType *player_ptr, POSITION y, POSITION x)
{
- auto *g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
+ const Pos2D pos(y, x);
+ auto &floor = *player_ptr->current_floor_ptr;
+ auto &grid = floor.get_grid(pos);
/* Blind players see nothing */
if (player_ptr->effects()->blindness()->is_blind()) {
/* Blind players see nothing */
if (player_ptr->effects()->blindness()->is_blind()) {
@@
-335,14
+335,14
@@
void note_spot(PlayerType *player_ptr, POSITION y, POSITION x)
}
/* Analyze non-torch-lit grids */
}
/* Analyze non-torch-lit grids */
- if (!(g
_ptr->
info & (CAVE_LITE | CAVE_MNLT))) {
+ if (!(g
rid.
info & (CAVE_LITE | CAVE_MNLT))) {
/* Require line of sight to the grid */
/* Require line of sight to the grid */
- if (!(g
_ptr->
info & (CAVE_VIEW))) {
+ if (!(g
rid.
info & (CAVE_VIEW))) {
return;
}
/* Require "perma-lite" of the grid */
return;
}
/* Require "perma-lite" of the grid */
- if ((g
_ptr->
info & (CAVE_GLOW | CAVE_MNDK)) != CAVE_GLOW) {
+ if ((g
rid.
info & (CAVE_GLOW | CAVE_MNDK)) != CAVE_GLOW) {
/* Not Ninja */
if (!player_ptr->see_nocto) {
return;
/* Not Ninja */
if (!player_ptr->see_nocto) {
return;
@@
-351,55
+351,53
@@
void note_spot(PlayerType *player_ptr, POSITION y, POSITION x)
}
/* Hack -- memorize objects */
}
/* Hack -- memorize objects */
- for (const auto this_o_idx : g_ptr->o_idx_list) {
- auto *o_ptr = &player_ptr->current_floor_ptr->o_list[this_o_idx];
-
- /* Memorize objects */
- o_ptr->marked.set(OmType::FOUND);
+ for (const auto this_o_idx : grid.o_idx_list) {
+ auto &item = floor.o_list[this_o_idx];
+ item.marked.set(OmType::FOUND);
RedrawingFlagsUpdater::get_instance().set_flag(SubWindowRedrawingFlag::FOUND_ITEMS);
}
/* Hack -- memorize grids */
RedrawingFlagsUpdater::get_instance().set_flag(SubWindowRedrawingFlag::FOUND_ITEMS);
}
/* Hack -- memorize grids */
- if (!g
_ptr->
is_mark()) {
+ if (!g
rid.
is_mark()) {
/* Feature code (applying "mimic" field) */
/* Feature code (applying "mimic" field) */
-
auto *f_ptr = &terrains_info[g_ptr->get_feat_mimic()]
;
+
const auto &terrain = grid.get_terrain_mimic()
;
/* Memorize some "boring" grids */
/* Memorize some "boring" grids */
- if (
f_ptr->
flags.has_not(TerrainCharacteristics::REMEMBER)) {
+ if (
terrain.
flags.has_not(TerrainCharacteristics::REMEMBER)) {
/* Option -- memorize all torch-lit floors */
/* Option -- memorize all torch-lit floors */
- if (view_torch_grids && ((g
_ptr->
info & (CAVE_LITE | CAVE_MNLT)) || player_ptr->see_nocto)) {
- g
_ptr->
info |= (CAVE_MARK);
+ if (view_torch_grids && ((g
rid.
info & (CAVE_LITE | CAVE_MNLT)) || player_ptr->see_nocto)) {
+ g
rid.
info |= (CAVE_MARK);
}
/* Option -- memorize all perma-lit floors */
}
/* Option -- memorize all perma-lit floors */
- else if (view_perma_grids && ((g
_ptr->
info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)) {
- g
_ptr->
info |= (CAVE_MARK);
+ else if (view_perma_grids && ((g
rid.
info & (CAVE_GLOW | CAVE_MNDK)) == CAVE_GLOW)) {
+ g
rid.
info |= (CAVE_MARK);
}
}
/* Memorize normal grids */
}
}
/* Memorize normal grids */
- else if (
f_ptr->
flags.has(TerrainCharacteristics::LOS)) {
- g
_ptr->
info |= (CAVE_MARK);
+ else if (
terrain.
flags.has(TerrainCharacteristics::LOS)) {
+ g
rid.
info |= (CAVE_MARK);
}
/* Memorize torch-lit walls */
}
/* Memorize torch-lit walls */
- else if (g
_ptr->
info & (CAVE_LITE | CAVE_MNLT)) {
- g
_ptr->
info |= (CAVE_MARK);
+ else if (g
rid.
info & (CAVE_LITE | CAVE_MNLT)) {
+ g
rid.
info |= (CAVE_MARK);
}
/* Memorize walls seen by noctovision of Ninja */
else if (player_ptr->see_nocto) {
}
/* Memorize walls seen by noctovision of Ninja */
else if (player_ptr->see_nocto) {
- g
_ptr->
info |= (CAVE_MARK);
+ g
rid.
info |= (CAVE_MARK);
}
/* Memorize certain non-torch-lit wall grids */
else if (check_local_illumination(player_ptr, y, x)) {
}
/* Memorize certain non-torch-lit wall grids */
else if (check_local_illumination(player_ptr, y, x)) {
- g
_ptr->
info |= (CAVE_MARK);
+ g
rid.
info |= (CAVE_MARK);
}
}
/* Memorize terrain of the grid */
}
}
/* Memorize terrain of the grid */
- g
_ptr->
info |= (CAVE_KNOWN);
+ g
rid.
info |= (CAVE_KNOWN);
}
/*
}
/*
@@
-844,14
+842,14
@@
bool cave_monster_teleportable_bold(PlayerType *player_ptr, MONSTER_IDX m_idx, P
const Pos2D pos(y, x);
const auto &floor = *player_ptr->current_floor_ptr;
const auto &grid = floor.get_grid(pos);
const Pos2D pos(y, x);
const auto &floor = *player_ptr->current_floor_ptr;
const auto &grid = floor.get_grid(pos);
- const auto &terrain =
terrains_info[grid.feat]
;
+ const auto &terrain =
grid.get_terrain()
;
/* Require "teleportable" space */
if (terrain.flags.has_not(TerrainCharacteristics::TELEPORTABLE)) {
return false;
}
/* Require "teleportable" space */
if (terrain.flags.has_not(TerrainCharacteristics::TELEPORTABLE)) {
return false;
}
- if (grid.
m_idx
&& (grid.m_idx != m_idx)) {
+ if (grid.
has_monster()
&& (grid.m_idx != m_idx)) {
return false;
}
if (player_ptr->is_located_at(pos)) {
return false;
}
if (player_ptr->is_located_at(pos)) {
@@
-886,7
+884,7
@@
bool cave_player_teleportable_bold(PlayerType *player_ptr, POSITION y, POSITION
{
const Pos2D pos(y, x);
const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
{
const Pos2D pos(y, x);
const auto &grid = player_ptr->current_floor_ptr->get_grid(pos);
- const auto &terrain =
terrains_info[grid.feat]
;
+ const auto &terrain =
grid.get_terrain()
;
/* Require "teleportable" space */
if (terrain.flags.has_not(TerrainCharacteristics::TELEPORTABLE)) {
/* Require "teleportable" space */
if (terrain.flags.has_not(TerrainCharacteristics::TELEPORTABLE)) {
@@
-898,7
+896,7
@@
bool cave_player_teleportable_bold(PlayerType *player_ptr, POSITION y, POSITION
return false;
}
return false;
}
- if (grid.
m_idx
&& (grid.m_idx != player_ptr->riding)) {
+ if (grid.
has_monster()
&& (grid.m_idx != player_ptr->riding)) {
return false;
}
return false;
}
@@
-1062,7
+1060,7
@@
void place_grid(PlayerType *player_ptr, Grid *g_ptr, grid_bold_type gb_type)
return;
}
return;
}
- if (g_ptr->
m_idx > 0
) {
+ if (g_ptr->
has_monster()
) {
delete_monster_idx(player_ptr, g_ptr->m_idx);
}
}
delete_monster_idx(player_ptr, g_ptr->m_idx);
}
}
@@
-1070,7
+1068,7
@@
void place_grid(PlayerType *player_ptr, Grid *g_ptr, grid_bold_type gb_type)
/*!
* モンスターにより照明が消されている地形か否かを判定する。 / Is this grid "darkened" by monster?
* @param player_ptr プレイヤーへの参照ポインタ
/*!
* モンスターにより照明が消されている地形か否かを判定する。 / Is this grid "darkened" by monster?
* @param player_ptr プレイヤーへの参照ポインタ
- * @param g
_ptr
グリッドへの参照ポインタ
+ * @param g
rid
グリッドへの参照ポインタ
* @return 照明が消されている地形ならばTRUE
*/
bool darkened_grid(PlayerType *player_ptr, Grid *g_ptr)
* @return 照明が消されている地形ならばTRUE
*/
bool darkened_grid(PlayerType *player_ptr, Grid *g_ptr)
@@
-1090,44
+1088,37
@@
void set_cave_feat(FloorType *floor_ptr, POSITION y, POSITION x, FEAT_IDX featur
}
/*!
}
/*!
- * @brief プレイヤーの周辺9マスに該当する地形がいくつあるかを返す /
- * Attempt to open the given chest at the given location
- * @param y 該当する地形の中から1つのY座標を返す参照ポインタ
- * @param x 該当する地形の中から1つのX座標を返す参照ポインタ
+ * @brief プレイヤーの周辺9マスに該当する地形がいくつあるかを返す
+ * @param player_ptr プレイヤーへの参照ポインタ
* @param test 地形条件を判定するための関数ポインタ
* @param under TRUEならばプレイヤーの直下の座標も走査対象にする
* @param test 地形条件を判定するための関数ポインタ
* @param under TRUEならばプレイヤーの直下の座標も走査対象にする
- * @return 該当する地形の数
- * @details Return the number of features around (or under) the character.
- * Usually look for doors and floor traps.
+ * @return 該当する地形の数と、該当する地形の中から1つの座標
*/
*/
-
int count_dt(PlayerType *player_ptr, POSITION *y, POSITION *x, bool (*test)(PlayerType *, FEAT_IDX
), bool under)
+
std::pair<int, Pos2D> count_dt(PlayerType *player_ptr, bool (*test)(PlayerType *, short
), bool under)
{
{
- int count = 0;
- for (DIRECTION d = 0; d < 9; d++) {
- Grid *g_ptr;
- FEAT_IDX feat;
+ auto count = 0;
+ Pos2D pos(0, 0);
+ for (auto d = 0; d < 9; d++) {
if ((d == 8) && !under) {
continue;
}
if ((d == 8) && !under) {
continue;
}
- POSITION yy = player_ptr->y + ddy_ddd[d];
- POSITION xx = player_ptr->x + ddx_ddd[d];
- g_ptr = &player_ptr->current_floor_ptr->grid_array[yy][xx];
- if (!g_ptr->is_mark()) {
+ Pos2D pos_neighbor(player_ptr->y + ddy_ddd[d], player_ptr->x + ddx_ddd[d]);
+ const auto &grid = player_ptr->current_floor_ptr->get_grid(pos_neighbor);
+ if (!grid.is_mark()) {
continue;
}
continue;
}
-
feat = g_ptr->
get_feat_mimic();
+
const auto feat = grid.
get_feat_mimic();
if (!((*test)(player_ptr, feat))) {
continue;
}
++count;
if (!((*test)(player_ptr, feat))) {
continue;
}
++count;
- *y = yy;
- *x = xx;
+ pos = pos_neighbor;
}
}
- return
count
;
+ return
{ count, pos }
;
}
/*!
}
/*!
@@
-1135,7
+1126,7
@@
int count_dt(PlayerType *player_ptr, POSITION *y, POSITION *x, bool (*test)(Play
*/
bool feat_uses_special(FEAT_IDX f_idx)
{
*/
bool feat_uses_special(FEAT_IDX f_idx)
{
- return
terrains_info
[(f_idx)].flags.has(TerrainCharacteristics::SPECIAL);
+ return
TerrainList::get_instance()
[(f_idx)].flags.has(TerrainCharacteristics::SPECIAL);
}
/*
}
/*