OSDN Git Service

[Refactor] #3649 TerrainType::is_permanent_wall() を定義してグローバル関数を繰り込んだ
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 14 Oct 2023 12:37:54 +0000 (21:37 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sun, 15 Oct 2023 11:52:39 +0000 (20:52 +0900)
src/action/movement-execution.cpp
src/grid/feature.cpp
src/grid/feature.h
src/grid/grid.cpp
src/room/rooms-builder.cpp
src/spell-realm/spells-chaos.cpp
src/system/terrain-type-definition.cpp
src/system/terrain-type-definition.h

index ecc7001..f231a73 100644 (file)
@@ -62,8 +62,8 @@
  */
 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);
index 52940cb..6495f7f 100644 (file)
@@ -175,14 +175,6 @@ bool is_ascii_graphics(char x)
     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];
index 18b2d30..1469462 100644 (file)
@@ -71,12 +71,10 @@ extern FEAT_IDX feat_wall_type[100];
 
 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);
index 854d34e..b099696 100644 (file)
@@ -1037,7 +1037,7 @@ void place_grid(PlayerType *player_ptr, grid_type *g_ptr, grid_bold_type gb_type
     }
     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;
@@ -1061,7 +1061,7 @@ void place_grid(PlayerType *player_ptr, grid_type *g_ptr, grid_bold_type gb_type
     }
     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;
index 46e17c5..e3e421d 100644 (file)
@@ -383,7 +383,7 @@ void add_outer_wall(PlayerType *player_ptr, POSITION x, POSITION y, int light, P
         return;
     }
 
-    if (permanent_wall(f_ptr)) {
+    if (f_ptr->is_permanent_wall()) {
         if (light) {
             g_ptr->info |= CAVE_GLOW;
         }
index cc2b072..8d08e9f 100644 (file)
@@ -39,7 +39,7 @@ void call_the_void(PlayerType *player_ptr)
         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;
             }
index e37d654..e8dc643 100644 (file)
@@ -8,6 +8,11 @@
 
 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()
index b27122a..978d44d 100644 (file)
@@ -43,6 +43,8 @@ public:
     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;