OSDN Git Service

[Refactor] #2769 town_type::stores の型をvector からmap に変えた
authorHourier <66951241+Hourier@users.noreply.github.com>
Sun, 14 May 2023 06:27:39 +0000 (15:27 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sun, 14 May 2023 06:55:43 +0000 (15:55 +0900)
14 files changed:
src/core/turn-compensator.cpp
src/floor/floor-town.h
src/io-dump/character-dump.cpp
src/io-dump/random-art-info-dumper.cpp
src/knowledge/knowledge-inventory.cpp
src/knowledge/knowledge-self.cpp
src/load/store-loader.cpp
src/market/building-initializer.cpp
src/player/process-death.cpp
src/save/save.cpp
src/store/black-market.cpp
src/store/cmd-store.cpp
src/store/home.cpp
src/store/store.cpp

index 5574229..edbf5ef 100644 (file)
@@ -5,6 +5,7 @@
 #include "store/store-util.h"
 #include "store/store.h"
 #include "system/floor-type-definition.h"
+#include "system/item-entity.h"
 #include "system/player-type-definition.h"
 #include "world/world.h"
 
@@ -65,9 +66,8 @@ void prevent_turn_overflow(PlayerType *player_ptr)
     }
 
     for (size_t i = 1; i < towns_info.size(); i++) {
-        for (auto j = 0; j < MAX_STORES; j++) {
-            store_type *store_ptr = &towns_info[i].stores[j];
-
+        for (auto sst : STORE_SALE_TYPE_LIST) {
+            auto *store_ptr = &towns_info[i].stores[sst];
             if (store_ptr->last_visit > -10L * TURNS_PER_TICK * STORE_TICKS) {
                 store_ptr->last_visit -= rollback_turns;
                 if (store_ptr->last_visit < -10L * TURNS_PER_TICK * STORE_TICKS) {
index 1777c06..ba8026a 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "store/store-util.h"
 #include "system/angband.h"
+#include <map>
 #include <string>
 #include <vector>
 
@@ -9,9 +10,10 @@
  * A structure describing a town with
  * stores and buildings
  */
+enum class StoreSaleType : int;
 struct town_type {
     std::string name;
-    std::vector<store_type> stores; /* The stores [MAX_STORES] */
+    std::map<StoreSaleType, store_type> stores; /* The stores [MAX_STORES] */
 };
 
 constexpr short VALID_TOWNS = 6; // @details 旧海底都市クエストのマップを除外する. 有効な町に差し替え完了したら不要になるので注意.
index cd08011..d179f69 100644 (file)
@@ -532,7 +532,7 @@ static void dump_aux_equipment_inventory(PlayerType *player_ptr, FILE *fff)
  */
 static void dump_aux_home_museum(PlayerType *player_ptr, FILE *fff)
 {
-    const auto *store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+    const auto *store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
     if (store_ptr->stock_num) {
         fprintf(fff, _("  [我が家のアイテム]\n", "  [Home Inventory]\n"));
         auto page = 1;
@@ -548,7 +548,7 @@ static void dump_aux_home_museum(PlayerType *player_ptr, FILE *fff)
         fprintf(fff, "\n\n");
     }
 
-    store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::MUSEUM)];
+    store_ptr = &towns_info[1].stores[StoreSaleType::MUSEUM];
 
     if (store_ptr->stock_num == 0) {
         return;
index 07b03cf..6d4e675 100644 (file)
@@ -88,13 +88,13 @@ void spoil_random_artifact(PlayerType *player_ptr, concptr fname)
                 spoil_random_artifact_aux(player_ptr, q_ptr, tval);
             }
 
-            const auto *store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+            const auto *store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
             for (int i = 0; i < store_ptr->stock_num; i++) {
                 auto *q_ptr = &store_ptr->stock[i];
                 spoil_random_artifact_aux(player_ptr, q_ptr, tval);
             }
 
-            store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::MUSEUM)];
+            store_ptr = &towns_info[1].stores[StoreSaleType::MUSEUM];
             for (int i = 0; i < store_ptr->stock_num; i++) {
                 auto *q_ptr = &store_ptr->stock[i];
                 spoil_random_artifact_aux(player_ptr, q_ptr, tval);
index b110f3c..93e5101 100644 (file)
@@ -257,7 +257,7 @@ static void show_holding_equipment_resistances(PlayerType *player_ptr, ItemKindT
 static void show_home_equipment_resistances(PlayerType *player_ptr, ItemKindType tval, int *label_number, FILE *fff)
 {
     store_type *store_ptr;
-    store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+    store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
     char where[32];
     strcpy(where, _("家", "H "));
     for (int i = 0; i < store_ptr->stock_num; i++) {
index 9619421..b12a8d0 100644 (file)
@@ -195,7 +195,7 @@ void do_cmd_knowledge_home(PlayerType *player_ptr)
     }
 
     constexpr auto home_inventory = _("我が家のアイテム", "Home Inventory");
-    const auto &store = towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+    const auto &store = towns_info[1].stores[StoreSaleType::HOME];
     if (store.stock_num == 0) {
         angband_fclose(fff);
         (void)show_file(player_ptr, true, file_name, home_inventory, 0, 0);
index 9e139d8..a5f895b 100644 (file)
@@ -72,12 +72,12 @@ static void rd_store(PlayerType *player_ptr, int town_number, StoreSaleType stor
     store_type *store_ptr;
     auto sort = false;
     if (h_older_than(0, 3, 3) && (store_number == StoreSaleType::HOME)) {
-        store_ptr = &towns_info[1].stores[enum2i(store_number)];
+        store_ptr = &towns_info[1].stores[store_number];
         if (store_ptr->stock_num) {
             sort = true;
         }
     } else {
-        store_ptr = &towns_info[town_number].stores[enum2i(store_number)];
+        store_ptr = &towns_info[town_number].stores[store_number];
     }
 
     store_ptr->store_open = rd_s32b();
index 2c1b305..46972f0 100644 (file)
@@ -48,9 +48,9 @@ void init_towns(void)
     const auto town_numbers = count_town_numbers();
     towns_info = std::vector<town_type>(town_numbers);
     for (auto i = 1; i < town_numbers; i++) {
-        towns_info[i].stores = std::vector<store_type>(MAX_STORES);
+        auto &town = towns_info[i];
         for (auto sst : STORE_SALE_TYPE_LIST) {
-            auto *store_ptr = &towns_info[i].stores[enum2i(sst)];
+            auto *store_ptr = &town.stores[sst];
             if ((i > 1) && (sst == StoreSaleType::MUSEUM || sst == StoreSaleType::HOME)) {
                 continue;
             }
index c235d9b..28d9baf 100644 (file)
@@ -256,7 +256,7 @@ static void inventory_aware(PlayerType *player_ptr)
 static void home_aware(PlayerType *player_ptr)
 {
     for (size_t i = 1; i < towns_info.size(); i++) {
-        auto *store_ptr = &towns_info[i].stores[enum2i(StoreSaleType::HOME)];
+        auto *store_ptr = &towns_info[i].stores[StoreSaleType::HOME];
         for (auto j = 0; j < store_ptr->stock_num; j++) {
             auto *o_ptr = &store_ptr->stock[j];
             if (!o_ptr->is_valid()) {
@@ -305,7 +305,7 @@ static bool show_dead_player_items(PlayerType *player_ptr)
 static void show_dead_home_items(PlayerType *player_ptr)
 {
     for (size_t l = 1; l < towns_info.size(); l++) {
-        const auto *store_ptr = &towns_info[l].stores[enum2i(StoreSaleType::HOME)];
+        const auto *store_ptr = &towns_info[l].stores[StoreSaleType::HOME];
         if (store_ptr->stock_num == 0) {
             continue;
         }
index 7864f6f..157d8b2 100644 (file)
@@ -220,8 +220,8 @@ static bool wr_savefile_new(PlayerType *player_ptr, SaveType type)
     tmp16u = MAX_STORES;
     wr_u16b(tmp16u);
     for (size_t i = 1; i < towns_info.size(); i++) {
-        for (auto j = 0; j < MAX_STORES; j++) {
-            wr_store(&towns_info[i].stores[j]);
+        for (auto sst : STORE_SALE_TYPE_LIST) {
+            wr_store(&towns_info[i].stores[sst]);
         }
     }
 
index d101cc9..8c69b0e 100644 (file)
@@ -40,7 +40,7 @@ bool black_market_crap(PlayerType *player_ptr, ItemEntity *o_ptr)
             continue;
         }
 
-        const auto &store = towns_info[player_ptr->town_num].stores[enum2i(sst)];
+        const auto &store = towns_info[player_ptr->town_num].stores[sst];
         for (auto j = 0; j < store.stock_num; j++) {
             if (o_ptr->bi_id == store.stock[j].bi_id) {
                 return true;
index a8e31dc..04bf072 100644 (file)
@@ -89,7 +89,7 @@ void do_cmd_store(PlayerType *player_ptr)
 
     inner_town_num = player_ptr->town_num;
     auto &town = towns_info[player_ptr->town_num];
-    auto &store = town.stores[enum2i(store_num)];
+    auto &store = town.stores[store_num];
     if ((store.store_open >= w_ptr->game_turn) || ironman_shops) {
         msg_print(_("ドアに鍵がかかっている。", "The doors are locked."));
         player_ptr->town_num = old_town_num;
@@ -114,7 +114,7 @@ void do_cmd_store(PlayerType *player_ptr)
     command_new = 0;
     get_com_no_macros = true;
     cur_store_feat = g_ptr->feat;
-    st_ptr = &towns_info[player_ptr->town_num].stores[enum2i(store_num)];
+    st_ptr = &towns_info[player_ptr->town_num].stores[store_num];
     ot_ptr = &owners.at(store_num)[st_ptr->owner];
     store_top = 0;
     play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
index d6313de..ee2cdcf 100644 (file)
@@ -184,7 +184,7 @@ bool combine_and_reorder_home(PlayerType *player_ptr, const StoreSaleType store_
     bool old_stack_force_notes = stack_force_notes;
     bool old_stack_force_costs = stack_force_costs;
     store_type *old_st_ptr = st_ptr;
-    st_ptr = &towns_info[1].stores[enum2i(store_num)];
+    st_ptr = &towns_info[1].stores[store_num];
     bool flag = false;
     if (store_num != StoreSaleType::HOME) {
         stack_force_notes = false;
index 5006365..cd3d8d5 100644 (file)
@@ -256,7 +256,7 @@ void store_shuffle(PlayerType *player_ptr, StoreSaleType store_num)
         return;
     }
 
-    st_ptr = &towns_info[player_ptr->town_num].stores[enum2i(store_num)];
+    st_ptr = &towns_info[player_ptr->town_num].stores[store_num];
     int j = st_ptr->owner;
     while (true) {
         st_ptr->owner = (byte)randint0(owner_num);
@@ -272,7 +272,7 @@ void store_shuffle(PlayerType *player_ptr, StoreSaleType store_num)
                 continue;
             }
 
-            if (st_ptr->owner == towns_info[i].stores[enum2i(store_num)].owner) {
+            if (st_ptr->owner == towns_info[i].stores[store_num].owner) {
                 break;
             }
         }
@@ -401,7 +401,7 @@ void store_maintenance(PlayerType *player_ptr, int town_num, StoreSaleType store
         return;
     }
 
-    st_ptr = &towns_info[town_num].stores[enum2i(store_num)];
+    st_ptr = &towns_info[town_num].stores[store_num];
     ot_ptr = &owners.at(store_num)[st_ptr->owner];
     st_ptr->insult_cur = 0;
     if (store_num == StoreSaleType::BLACK) {
@@ -475,7 +475,7 @@ void store_maintenance(PlayerType *player_ptr, int town_num, StoreSaleType store
 void store_init(int town_num, StoreSaleType store_num)
 {
     int owner_num = owners.at(store_num).size();
-    st_ptr = &towns_info[town_num].stores[enum2i(store_num)];
+    st_ptr = &towns_info[town_num].stores[store_num];
     const int towns_size = towns_info.size();
     while (true) {
         st_ptr->owner = (byte)randint0(owner_num);
@@ -489,7 +489,7 @@ void store_init(int town_num, StoreSaleType store_num)
             if (i == town_num) {
                 continue;
             }
-            if (st_ptr->owner == towns_info[i].stores[enum2i(store_num)].owner) {
+            if (st_ptr->owner == towns_info[i].stores[store_num].owner) {
                 break;
             }
         }