From: Hourier Date: Wed, 3 Jun 2020 10:51:13 +0000 (+0900) Subject: [Refactor] #40399 Separarted object-sort.c/h from object2.c/h X-Git-Tag: vmacos3.0.0-alpha52~932^2~40 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=6664a07a782202415913876a553881f207319b69;p=hengbandforosx%2Fhengbandosx.git [Refactor] #40399 Separarted object-sort.c/h from object2.c/h --- diff --git a/Hengband/Hengband/Hengband.vcxproj b/Hengband/Hengband/Hengband.vcxproj index 802e8faa1..ea1a15723 100644 --- a/Hengband/Hengband/Hengband.vcxproj +++ b/Hengband/Hengband/Hengband.vcxproj @@ -703,6 +703,7 @@ + @@ -767,6 +768,7 @@ + diff --git a/Hengband/Hengband/Hengband.vcxproj.filters b/Hengband/Hengband/Hengband.vcxproj.filters index 857be39e8..4903bbd86 100644 --- a/Hengband/Hengband/Hengband.vcxproj.filters +++ b/Hengband/Hengband/Hengband.vcxproj.filters @@ -1109,6 +1109,9 @@ object + + util + @@ -2368,6 +2371,9 @@ object + + util + diff --git a/src/Makefile.am b/src/Makefile.am index 05851227e..e1c134d1c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -422,6 +422,7 @@ hengband_SOURCES = \ term/z-term.c term/z-term.h term/z-util.c term/z-util.h \ term/z-virt.c term/z-virt.h \ \ + util/object-sort.c util/object-sort.h \ util/util.c util/util.h \ \ view/display-characteristic.c view/display-characteristic.h \ diff --git a/src/inventory/inventory-object.c b/src/inventory/inventory-object.c index b7e43091a..153d4f915 100644 --- a/src/inventory/inventory-object.c +++ b/src/inventory/inventory-object.c @@ -7,6 +7,7 @@ #include "object/object-value.h" #include "object/object2.h" #include "player/player-effects.h" // 暫定、相互参照している. +#include "util/object-sort.h" #include "view/object-describer.h" void vary_item(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num) diff --git a/src/io/load.c b/src/io/load.c index ee9eed95a..fd4cf126e 100644 --- a/src/io/load.c +++ b/src/io/load.c @@ -91,6 +91,7 @@ #include "store/store.h" #include "system/angband-version.h" #include "system/system-variables.h" // 暫定、init_flags の扱いを決めた上で消す. +#include "util/object-sort.h" #include "util/util.h" #include "world/world-object.h" #include "world/world.h" diff --git a/src/object/object2.c b/src/object/object2.c index b498b9811..50d735fa8 100644 --- a/src/object/object2.c +++ b/src/object/object2.c @@ -295,77 +295,3 @@ void object_absorb(object_type *o_ptr, object_type *j_ptr) } } - -/*! - * @brief オブジェクトを定義された基準に従いソートするための関数 / - * Check if we have space for an item in the pack without overflow - * @param o_ptr 比較対象オブジェクトの構造体参照ポインタ1 - * @param o_value o_ptrのアイテム価値(手動であらかじめ代入する必要がある?) - * @param j_ptr 比較対象オブジェクトの構造体参照ポインタ2 - * @return o_ptrの方が上位ならばTRUEを返す。 - */ -bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr) -{ - int o_type, j_type; - if (!j_ptr->k_idx) return TRUE; - - if ((o_ptr->tval == REALM1_BOOK) && - (j_ptr->tval != REALM1_BOOK)) return TRUE; - if ((j_ptr->tval == REALM1_BOOK) && - (o_ptr->tval != REALM1_BOOK)) return FALSE; - - if ((o_ptr->tval == REALM2_BOOK) && - (j_ptr->tval != REALM2_BOOK)) return TRUE; - if ((j_ptr->tval == REALM2_BOOK) && - (o_ptr->tval != REALM2_BOOK)) return FALSE; - - if (o_ptr->tval > j_ptr->tval) return TRUE; - if (o_ptr->tval < j_ptr->tval) return FALSE; - - if (!object_is_aware(o_ptr)) return FALSE; - if (!object_is_aware(j_ptr)) return TRUE; - - if (o_ptr->sval < j_ptr->sval) return TRUE; - if (o_ptr->sval > j_ptr->sval) return FALSE; - - if (!object_is_known(o_ptr)) return FALSE; - if (!object_is_known(j_ptr)) return TRUE; - - if (object_is_fixed_artifact(o_ptr)) o_type = 3; - else if (o_ptr->art_name) o_type = 2; - else if (object_is_ego(o_ptr)) o_type = 1; - else o_type = 0; - - if (object_is_fixed_artifact(j_ptr)) j_type = 3; - else if (j_ptr->art_name) j_type = 2; - else if (object_is_ego(j_ptr)) j_type = 1; - else j_type = 0; - - if (o_type < j_type) return TRUE; - if (o_type > j_type) return FALSE; - - switch (o_ptr->tval) - { - case TV_FIGURINE: - case TV_STATUE: - case TV_CORPSE: - case TV_CAPTURE: - if (r_info[o_ptr->pval].level < r_info[j_ptr->pval].level) return TRUE; - if ((r_info[o_ptr->pval].level == r_info[j_ptr->pval].level) && (o_ptr->pval < j_ptr->pval)) return TRUE; - return FALSE; - - case TV_SHOT: - case TV_ARROW: - case TV_BOLT: - if (o_ptr->to_h + o_ptr->to_d < j_ptr->to_h + j_ptr->to_d) return TRUE; - if (o_ptr->to_h + o_ptr->to_d > j_ptr->to_h + j_ptr->to_d) return FALSE; - break; - - case TV_ROD: - if (o_ptr->pval < j_ptr->pval) return TRUE; - if (o_ptr->pval > j_ptr->pval) return FALSE; - break; - } - - return o_value > object_value(j_ptr); -} diff --git a/src/object/object2.h b/src/object/object2.h index f021309e9..8da6215f1 100644 --- a/src/object/object2.h +++ b/src/object/object2.h @@ -12,4 +12,3 @@ void reduce_charges(object_type *o_ptr, int amt); int object_similar_part(object_type *o_ptr, object_type *j_ptr); bool object_similar(object_type *o_ptr, object_type *j_ptr); void object_absorb(object_type *o_ptr, object_type *j_ptr); -bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr); diff --git a/src/store/store.c b/src/store/store.c index 1b5ff10ce..cf91f1559 100644 --- a/src/store/store.c +++ b/src/store/store.c @@ -65,6 +65,7 @@ #include "store/store-util.h" #include "system/angband.h" #include "term/gameterm.h" +#include "util/object-sort.h" #include "util/util.h" #include "view/display-main-window.h" #include "view/object-describer.h" diff --git a/src/util/object-sort.c b/src/util/object-sort.c new file mode 100644 index 000000000..2308a0af4 --- /dev/null +++ b/src/util/object-sort.c @@ -0,0 +1,108 @@ +/*! + * @brief オブジェクトのソート処理 + * @date 2020/06/03 + * @author Hourier + */ + +#include "util/object-sort.h" +#include "object/object-hook.h" +#include "object/object-value.h" +#include "perception/object-perception.h" + +/*! + * @brief オブジェクトを定義された基準に従いソートするための関数 / + * Check if we have space for an item in the pack without overflow + * @param o_ptr 比較対象オブジェクトの構造体参照ポインタ1 + * @param o_value o_ptrのアイテム価値(手動であらかじめ代入する必要がある?) + * @param j_ptr 比較対象オブジェクトの構造体参照ポインタ2 + * @return o_ptrの方が上位ならばTRUEを返す。 + */ +bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr) +{ + int o_type, j_type; + if (!j_ptr->k_idx) + return TRUE; + + if ((o_ptr->tval == REALM1_BOOK) && (j_ptr->tval != REALM1_BOOK)) + return TRUE; + if ((j_ptr->tval == REALM1_BOOK) && (o_ptr->tval != REALM1_BOOK)) + return FALSE; + + if ((o_ptr->tval == REALM2_BOOK) && (j_ptr->tval != REALM2_BOOK)) + return TRUE; + if ((j_ptr->tval == REALM2_BOOK) && (o_ptr->tval != REALM2_BOOK)) + return FALSE; + + if (o_ptr->tval > j_ptr->tval) + return TRUE; + if (o_ptr->tval < j_ptr->tval) + return FALSE; + + if (!object_is_aware(o_ptr)) + return FALSE; + if (!object_is_aware(j_ptr)) + return TRUE; + + if (o_ptr->sval < j_ptr->sval) + return TRUE; + if (o_ptr->sval > j_ptr->sval) + return FALSE; + + if (!object_is_known(o_ptr)) + return FALSE; + if (!object_is_known(j_ptr)) + return TRUE; + + if (object_is_fixed_artifact(o_ptr)) + o_type = 3; + else if (o_ptr->art_name) + o_type = 2; + else if (object_is_ego(o_ptr)) + o_type = 1; + else + o_type = 0; + + if (object_is_fixed_artifact(j_ptr)) + j_type = 3; + else if (j_ptr->art_name) + j_type = 2; + else if (object_is_ego(j_ptr)) + j_type = 1; + else + j_type = 0; + + if (o_type < j_type) + return TRUE; + if (o_type > j_type) + return FALSE; + + switch (o_ptr->tval) { + case TV_FIGURINE: + case TV_STATUE: + case TV_CORPSE: + case TV_CAPTURE: + if (r_info[o_ptr->pval].level < r_info[j_ptr->pval].level) + return TRUE; + if ((r_info[o_ptr->pval].level == r_info[j_ptr->pval].level) && (o_ptr->pval < j_ptr->pval)) + return TRUE; + return FALSE; + + case TV_SHOT: + case TV_ARROW: + case TV_BOLT: + if (o_ptr->to_h + o_ptr->to_d < j_ptr->to_h + j_ptr->to_d) + return TRUE; + if (o_ptr->to_h + o_ptr->to_d > j_ptr->to_h + j_ptr->to_d) + return FALSE; + break; + + case TV_ROD: + if (o_ptr->pval < j_ptr->pval) + return TRUE; + if (o_ptr->pval > j_ptr->pval) + return FALSE; + break; + } + + return o_value > object_value(j_ptr); +} diff --git a/src/util/object-sort.h b/src/util/object-sort.h new file mode 100644 index 000000000..44ffd7974 --- /dev/null +++ b/src/util/object-sort.h @@ -0,0 +1,5 @@ +#pragma once + +#include "system/angband.h" + +bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr);