Skip to content

Commit

Permalink
[Refactor] #4604 FloorType::check_terrain() を実装してcount_dt() を軽量化した
Browse files Browse the repository at this point in the history
ダンジョン dungeon_type とグリッド Grid の両方に依存できる適切なクラスはここ
  • Loading branch information
Hourier authored and sikabane-works committed Feb 5, 2025
1 parent 61567f3 commit 49b9a51
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 25 deletions.
24 changes: 2 additions & 22 deletions src/grid/grid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1054,7 +1054,6 @@ std::pair<int, Pos2D> count_dt(PlayerType *player_ptr, GridCountKind gck, bool u
auto count = 0;
Pos2D pos(0, 0);
const auto &floor = *player_ptr->current_floor_ptr;
const auto &dungeon = floor.get_dungeon_definition();
for (auto d = 0; d < 9; d++) {
if ((d == 8) && !under) {
continue;
Expand All @@ -1066,27 +1065,8 @@ std::pair<int, Pos2D> count_dt(PlayerType *player_ptr, GridCountKind gck, bool u
continue;
}

switch (gck) {
case GridCountKind::OPEN:
if (!dungeon.is_open(grid.get_feat_mimic())) {
continue;
}

break;
case GridCountKind::CLOSED_DOOR:
if (!grid.get_terrain_mimic().is_closed_door()) {
continue;
}

break;
case GridCountKind::TRAP:
if (!grid.get_terrain_mimic().is_trap()) {
continue;
}

break;
default:
THROW_EXCEPTION(std::logic_error, format("Invalid GridCountKind is Specified! %d", enum2i(gck)));
if (!floor.check_terrain_state(pos_neighbor, gck)) {
continue;
}

++count;
Expand Down
3 changes: 1 addition & 2 deletions src/system/dungeon-info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,5 @@ short dungeon_type::convert_terrain_id(short terrain_id) const
*/
bool dungeon_type::is_open(short terrain_id) const
{
const auto is_open = TerrainList::get_instance().get_terrain(terrain_id).is_open();
return is_open && (terrain_id != this->convert_terrain_id(terrain_id, TerrainCharacteristics::CLOSE));
return terrain_id != this->convert_terrain_id(terrain_id, TerrainCharacteristics::CLOSE);
}
21 changes: 21 additions & 0 deletions src/system/floor-type-definition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
#include "system/angband-system.h"
#include "system/artifact-type-definition.h"
#include "system/dungeon-info.h"
#include "system/enums/grid-count-kind.h"
#include "system/gamevalue.h"
#include "system/grid-type-definition.h"
#include "system/item-entity.h"
#include "system/monster-entity.h"
#include "system/terrain-type-definition.h"
#include "util/bit-flags-calculator.h"
#include "util/enum-range.h"

Expand Down Expand Up @@ -152,6 +155,24 @@ bool FloorType::can_teleport_level(bool to_player) const
return this->is_special() || is_invalid_floor;
}

bool FloorType::check_terrain_state(const Pos2D &pos, GridCountKind gck) const
{
const auto &grid = this->get_grid(pos);
switch (gck) {
case GridCountKind::OPEN: {
const auto is_open_grid = grid.get_terrain_mimic().is_open();
const auto is_open_dungeon = this->get_dungeon_definition().is_open(grid.get_feat_mimic());
return is_open_grid && is_open_dungeon;
}
case GridCountKind::CLOSED_DOOR:
return grid.get_terrain_mimic().is_closed_door();
case GridCountKind::TRAP:
return grid.get_terrain_mimic().is_trap();
default:
THROW_EXCEPTION(std::logic_error, format("Invalid GridCountKind is Specified! %d", enum2i(gck)));
}
}

/*!
* @brief 魔法の笛でペットを呼び寄せる順番を決める
* @param index1 フロア内のモンスターインデックス1
Expand Down
3 changes: 2 additions & 1 deletion src/system/floor-type-definition.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ constexpr auto VIEW_MAX = 1536;
*/
constexpr auto REDRAW_MAX = 2298;

enum class GridCountKind;
enum class MonsterTimedEffect : int;
enum class QuestId : short;
struct dungeon_type;
Expand Down Expand Up @@ -112,7 +113,7 @@ class FloorType {
bool has_los(const Pos2D pos) const;
bool is_special() const;
bool can_teleport_level(bool to_player = false) const;

bool check_terrain_state(const Pos2D &pos, GridCountKind gck) const;
bool order_pet_whistle(short index1, short index2) const;
bool order_pet_dismission(short index1, short index2, short riding_index) const;

Expand Down

0 comments on commit 49b9a51

Please sign in to comment.