2 * @file scene-table.cpp
3 * @brief BGM選曲の基本処理部分実装
6 #include "main/scene-table.h"
7 #include "main/scene-table-floor.h"
8 #include "main/scene-table-monster.h"
9 #include "system/floor-type-definition.h"
10 #include "term/z-term.h"
12 int interrupt_scene_type;
13 int interrupt_scene_val;
15 scene_type_list scene_list;
17 static void resize_scene_list()
19 const int monster_def_count = get_scene_monster_count();
20 const int interrupt_def_count = 1;
21 const int floor_def_count = get_scene_floor_count();
22 scene_list.resize(monster_def_count + interrupt_def_count + floor_def_count);
27 * @details 選曲テーブル外の曲(クエストクリア等)の再生を取得しておく。
28 * モンスターBGMを含む選曲テーブルを構築する場合に、
33 * 街の施設等で、コマンド実行→視界内モンスターリスト更新(空のリスト:再生なし)→割り込みBGMに戻るようにする。
34 * 選曲テーブルでは割り込みBGMは2番目だが、
35 * 一時的に優先するためにBGM対象のモンスターを忘れ、モンスターBGMに制限期間を設定する。
36 * @param type action-type
37 * @param val action-val
39 void interrupt_scene(int type, int val)
41 interrupt_scene_type = type;
42 interrupt_scene_val = val;
44 // forget BGM-target monster
45 clear_scene_target_monster();
46 // モンスターBGMの再生を一時的に抑制する
47 set_temp_mute_scene_monster(2);
51 * @brief 現在のフロアに合ったBGM選曲
52 * @param player_ptr プレイヤーへの参照ポインタ
54 void refresh_scene_table(PlayerType *player_ptr)
56 // clear interrupt_scene
57 interrupt_scene(0, 0);
60 refresh_scene_floor(player_ptr, scene_list, 0);
64 * @brief 見かけたモンスターを含め、現在のフロアに合ったBGM選曲
65 * @param player_ptr プレイヤーへの参照ポインタ
66 * @param monster_list 視界内モンスターリスト
68 void refresh_scene_table(PlayerType *player_ptr, const std::vector<MONSTER_IDX> &monster_list)
73 refresh_scene_monster(player_ptr, monster_list, scene_list, index);
74 index += get_scene_monster_count();
77 scene_type &item = scene_list[index];
78 item.type = interrupt_scene_type;
79 item.val = interrupt_scene_val;
82 refresh_scene_floor(player_ptr, scene_list, index);
89 scene_type_list &get_scene_type_list(int type)