*/
static bool boundary_floor(grid_type *g_ptr, TerrainType *f_ptr, TerrainType *mimic_f_ptr)
{
- bool is_boundary_floor = g_ptr->mimic > 0;
- is_boundary_floor &= permanent_wall(f_ptr);
+ auto is_boundary_floor = g_ptr->mimic > 0;
+ is_boundary_floor &= f_ptr->is_permanent_wall();
is_boundary_floor &= mimic_f_ptr->flags.has_any_of({ TerrainCharacteristics::MOVE, TerrainCharacteristics::CAN_FLY });
is_boundary_floor &= mimic_f_ptr->flags.has(TerrainCharacteristics::PROJECT);
is_boundary_floor &= mimic_f_ptr->flags.has_not(TerrainCharacteristics::OPEN);
return (x & 0x80) == 0;
}
-/*
- * Determine if a "feature" is "permanent wall"
- */
-bool permanent_wall(TerrainType *f_ptr)
-{
- return f_ptr->flags.has_all_of({ TerrainCharacteristics::WALL, TerrainCharacteristics::PERMANENT });
-}
-
FEAT_IDX feat_locked_door_random(int door_type)
{
const auto &door = feat_door[door_type];
class FloorType;
class PlayerType;
-class TerrainType;
bool is_closed_door(PlayerType *player_ptr, FEAT_IDX feat);
bool is_trap(PlayerType *player_ptr, FEAT_IDX feat);
void apply_default_feat_lighting(TERM_COLOR *f_attr, char *f_char);
bool is_ascii_graphics(char x);
-bool permanent_wall(TerrainType *f_ptr);
FEAT_IDX feat_locked_door_random(int door_type);
FEAT_IDX feat_jammed_door_random(int door_type);
void cave_set_feat(PlayerType *player_ptr, POSITION y, POSITION x, FEAT_IDX feat);
}
case GB_OUTER_NOPERM: {
auto *f_ptr = &terrains_info[feat_wall_outer];
- if (permanent_wall(f_ptr)) {
+ if (f_ptr->is_permanent_wall()) {
g_ptr->feat = (int16_t)feat_state(player_ptr->current_floor_ptr, feat_wall_outer, TerrainCharacteristics::UNPERM);
} else {
g_ptr->feat = feat_wall_outer;
}
case GB_SOLID_NOPERM: {
auto *f_ptr = &terrains_info[feat_wall_solid];
- if ((g_ptr->info & CAVE_VAULT) && permanent_wall(f_ptr)) {
+ if ((g_ptr->info & CAVE_VAULT) && f_ptr->is_permanent_wall()) {
g_ptr->feat = (int16_t)feat_state(player_ptr->current_floor_ptr, feat_wall_solid, TerrainCharacteristics::UNPERM);
} else {
g_ptr->feat = feat_wall_solid;
return;
}
- if (permanent_wall(f_ptr)) {
+ if (f_ptr->is_permanent_wall()) {
if (light) {
g_ptr->info |= CAVE_GLOW;
}
auto *g_ptr = &floor_ptr->grid_array[player_ptr->y + ddy_ddd[i]][player_ptr->x + ddx_ddd[i]];
if (!g_ptr->cave_has_flag(TerrainCharacteristics::PROJECT)) {
- if (!g_ptr->mimic || terrains_info[g_ptr->mimic].flags.has_not(TerrainCharacteristics::PROJECT) || !permanent_wall(&terrains_info[g_ptr->feat])) {
+ if (!g_ptr->mimic || terrains_info[g_ptr->mimic].flags.has_not(TerrainCharacteristics::PROJECT) || !terrains_info[g_ptr->feat].is_permanent_wall()) {
do_call = false;
break;
}
std::vector<TerrainType> terrains_info;
+bool TerrainType::is_permanent_wall() const
+{
+ return this->flags.has_all_of({ TerrainCharacteristics::WALL, TerrainCharacteristics::PERMANENT });
+}
+
TerrainList TerrainList::instance{};
TerrainList &TerrainList::get_instance()
char d_char[F_LIT_MAX]{}; /*!< デフォルトの地形シンボルアルファベット / Default feature character */
TERM_COLOR x_attr[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルカラー / Desired feature attribute */
char x_char[F_LIT_MAX]{}; /*!< 設定変更後の地形シンボルアルファベット / Desired feature character */
+
+ bool is_permanent_wall() const;
};
extern std::vector<TerrainType> terrains_info;