• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Violet Vreath is Shooter Game for Windows XP+(個人制作シューティングゲーム)


Commit MetaInfo

Revision0c4c49bf1b50cdb83f8552fdf0f61dc85da81f04 (tree)
Time2023-08-25 00:51:00
Authorgecchi <gecchi@boch...>
Commitergecchi

Log Message

Configちょっと修正

Change Summary

Incremental Difference

--- a/GgafCore/include/jp/ggaf/core/Config.h
+++ b/GgafCore/include/jp/ggaf/core/Config.h
@@ -19,23 +19,6 @@
1919 /** ミリ秒 → フレーム数 変換 */
2020 #define MSEC_F(X) ( (frame)(((X) * 0.001) * (CONFIG::FPS)) )
2121
22-
23-/** 共通遅延解放フレーム数(≒エフェクト最大再生時間) */
24-#define GGAF_END_DELAY (SEC_F(90))
25-//GGAF_END_DELAYは全Element共通の解放遅延フレーム数で、
26-//アクター消失後、直ぐに不正ポインタになるのではなく、しばらく参照が可能とするための仕組み。
27-//少し長めに設定しないと、いろいろ不都合が多い。
28-//例えば、消滅後の爆発SE等で、3D効果のためSE発声元座標情報がしばらく必要とか、
29-//消滅後の消滅アクター配下に属する発射弾(子アクター)が、親アクターの座標を参照しているなど、
30-//消滅しても、しばらくは残存させなければいけない場合が多々ある。
31-//GGAF_END_DELAYには、基本的に、画面から消滅確定→完全にdeleteまでのフレームの最大フレームを指定する。
32-//現在は90秒。
33-//もし、GGAF_END_DELAYを短めに設定すると、
34-//消滅後の子の発射弾については、残された発射弾が突然消えるので少し不自然。という程度で問題はない。
35-//しかし、SEの3D効果は、エラーになるため、SE再生時間の最大フレーム数を設定しなければいけない。
36-//例えば効果音が90秒以上かかるようなWAVEが一つでもあるならば、90秒以上を設定しなければならない。
37-
38-
3922 namespace GgafCore {
4023
4124 /**
@@ -52,9 +35,10 @@ public:
5235 static frame FPS;
5336 /** [r] 1フレームの秒数 */
5437 static double FRAME_SEC;
55-
38+ /** [r/w] 共通遅延解放フレーム数。*/
39+ static frame END_DELAY_FRAME;
5640 /** [r/w] 最高フレームスキップ数。つまりどんなに重くも最低描画するフレーム間隔。*/
57- static uint32_t MAX_SKIP_FRAME;
41+ static frame MAX_SKIP_FRAME;
5842 /** [r/w] 処理落ち演出を行うかどうかの第一段階の境界。1フレームあたりのアクティブなアクター数設定 */
5943 static uint32_t OBJNUM_TO_SLOWDOWN1;
6044 /** [r/w] 処理落ち演出を行うかどうかの第二段階の境界。1フレームあたりのアクティブなアクター数設定 */
@@ -110,4 +94,19 @@ public:
11094
11195 }
11296 #endif /*GGAF_CORE_CONFIG_H_*/
97+//END_DELAY_FRAME について
98+//共通遅延解放フレーム数(≒エフェクト最大再生時間)
99+//END_DELAY_FRAMEは全Element共通の解放遅延フレーム数で、
100+//アクター消失後、直ぐに不正ポインタになるのではなく、しばらく参照が可能とするための仕組み。
101+//少し長めに設定しないと、いろいろ不都合が多い。
102+//例えば、消滅後の爆発SE等で、3D効果のためSE発声元座標情報がしばらく必要とか、
103+//消滅後の消滅アクター配下に属する発射弾(子アクター)が、親アクターの座標を参照しているなど、
104+//消滅しても、しばらくは残存させなければいけない場合が多々ある。
105+//CONFIG::END_DELAY_FRAMEには、基本的に、画面から消滅確定→完全にdeleteまでの最小時間を指定する。
106+//現在は90秒分のフレーム。
107+//もし、CONFIG::END_DELAY_FRAMEを短めに設定すると、
108+//消滅後の子の発射弾については、残された発射弾が突然消えるので少し不自然。という程度で問題はない。
109+//しかし、SEの3D効果は、エラーになるため、SE再生時間の最大フレーム数を設定しなければいけない。
110+//例えば効果音が90秒以上かかるようなWAVEが一つでもあるならば、90秒以上を設定しなければならない。
111+
113112
--- a/GgafCore/include/jp/ggaf/core/Element.hpp
+++ b/GgafCore/include/jp/ggaf/core/Element.hpp
@@ -631,7 +631,7 @@ public:
631631 * end(frame) 実行後、ゴミ箱(GarbageBox) に取り込まれる直前に呼び出される。<BR>
632632 * つまり、_can_live_flg が false から true になった時に呼び出される。<BR>
633633 * ですが、まだツリーに所属していおり、自身のノードの鎖はまだ切れていない状態です。<BR>
634- * 最速で、end(frame) で指定したフレーム + GGAF_END_DELAY 後に発生する。<BR>
634+ * 最速で、end(frame) で指定したフレーム +END_DELAY_FRAME 後に発生する。<BR>
635635 * 処理がもたつくと、それ以上の先のフレームで発生する。<BR>
636636 * 直前に処理が必要な場合は、オーバーライドして実装可能。<BR>
637637 */
@@ -1332,13 +1332,13 @@ void Element<T>::inactivateTreeImmed() {
13321332 template<class T>
13331333 void Element<T>::end(frame prm_offset_frames) {
13341334 if (_frame_of_life < _frame_of_life_when_end &&
1335- _frame_of_life_when_end < _frame_of_life + prm_offset_frames + GGAF_END_DELAY) {
1335+ _frame_of_life_when_end < _frame_of_life + prm_offset_frames + GgafCore::Config::END_DELAY_FRAME) {
13361336 //既にend()実行済みであり、さらに今回指定のよりも早く _frame_of_life_when_end に到達するため無視する。
13371337 return;
13381338 }
1339- _frame_of_life_when_end = _frame_of_life + prm_offset_frames + GGAF_END_DELAY;
1339+ _frame_of_life_when_end = _frame_of_life + prm_offset_frames + GgafCore::Config::END_DELAY_FRAME;
13401340 inactivateDelay(prm_offset_frames);
1341- //指定フレーム時には、まずinactivateが行われ、+GGAF_END_DELAY フレーム後 _can_live_flg = falseになる。
1341+ //指定フレーム時には、まずinactivateが行われ、+END_DELAY_FRAME フレーム後 _can_live_flg = falseになる。
13421342 //onEnd()は _can_live_flg = false 時発生
13431343 T* pElementTemp = Node<T>::_pChildFirst;
13441344 while (pElementTemp) {
--- a/GgafCore/src/jp/ggaf/core/Config.cpp
+++ b/GgafCore/src/jp/ggaf/core/Config.cpp
@@ -11,7 +11,8 @@ std::string Config::_load_properties_filename = "";
1111 Properties Config::_properties;
1212 frame Config::FPS = 60;
1313 double Config::FRAME_SEC = 1.0 / Config::FPS;
14-uint32_t Config::MAX_SKIP_FRAME = 20;
14+frame Config::END_DELAY_FRAME = 5400;
15+frame Config::MAX_SKIP_FRAME = 20;
1516 uint32_t Config::OBJNUM_TO_SLOWDOWN1 = 99999;
1617 uint32_t Config::OBJNUM_TO_SLOWDOWN2 = 99999;
1718 double Config::RATE_OF_SLOWDOWN1 = 1.0;
@@ -49,7 +50,9 @@ void Config::loadProperties(std::string prm_properties_filename) {
4950 Config::FPS = _properties.getUInt("FPS");
5051 }
5152 Config::FRAME_SEC = 1.0 / CONFIG::FPS;
52-
53+ if (_properties.isExistKey("END_DELAY_FRAME")) {
54+ Config::END_DELAY_FRAME = _properties.getUInt("END_DELAY_FRAME");
55+ }
5356 if (_properties.isExistKey("MAX_SKIP_FRAME")) {
5457 Config::MAX_SKIP_FRAME = _properties.getUInt("MAX_SKIP_FRAME");
5558 }
@@ -116,6 +119,7 @@ void Config::loadProperties(std::string prm_properties_filename) {
116119 }
117120 Config::_is_lock = false;
118121 _TRACE_("Config::FPS="<<Config::FPS);
122+ _TRACE_("Config::END_DELAY_FRAME="<<Config::END_DELAY_FRAME);
119123 _TRACE_("Config::MAX_SKIP_FRAME="<<Config::MAX_SKIP_FRAME);
120124 _TRACE_("Config::OBJNUM_TO_SLOWDOWN1="<<Config::OBJNUM_TO_SLOWDOWN1);
121125 _TRACE_("Config::OBJNUM_TO_SLOWDOWN2="<<Config::OBJNUM_TO_SLOWDOWN2);
--- a/GgafCore/src/jp/ggaf/core/actor/ex/ActorDepository.cpp
+++ b/GgafCore/src/jp/ggaf/core/actor/ex/ActorDepository.cpp
@@ -61,11 +61,11 @@ void ActorDepository::end(frame prm_offset_frames) {
6161 frame end_frame_delay = prm_offset_frames + (_child_num*2) + 1; //メンバーを順に少し遅らせる。
6262 //既にend()実行済みの場合、より早くend()するならば有効とする
6363 if (_frame_of_life < _frame_of_life_when_end &&
64- _frame_of_life_when_end < _frame_of_life + end_frame_delay + GGAF_END_DELAY) {
64+ _frame_of_life_when_end < _frame_of_life + end_frame_delay + GgafCore::Config::END_DELAY_FRAME) {
6565 //既にend()実行済みであり、さらに今回指定のよりも早く _frame_of_life_when_end に到達するため無視する。
6666 return;
6767 }
68- _frame_of_life_when_end = _frame_of_life + end_frame_delay + GGAF_END_DELAY;
68+ _frame_of_life_when_end = _frame_of_life + end_frame_delay + GgafCore::Config::END_DELAY_FRAME;
6969 inactivateDelay(prm_offset_frames); //指定フレームにはinactivateが行われるのは同じ
7070
7171 Actor* pElementTemp = _pChildFirst;
--- a/GgafDx/include/jp/ggaf/dx/Config.h
+++ b/GgafDx/include/jp/ggaf/dx/Config.h
@@ -84,7 +84,7 @@ public:
8484 /** [r/w] SE最大同時発声数(1〜64) */
8585 static int MAX_SE_AT_ONCE;
8686 /** [r/w] ゲーム空間でカメラからの最遠距離(zf)のに位置したアクターのSE発声遅延ミリ秒数 */
87- static int FRAME_OF_SE_DELAY_MAX_DEPTH;
87+ static uint32_t MILLISEC_OF_SE_DELAY_MAX_DEPTH;
8888 /** [r/w] ゲーム空間でカメラからの最遠距離(zf)のに位置したアクターのSE発声ボリュームの減衰割合 */
8989 static double SE_VOLUME_RATE_MAX_DEPTH;
9090
--- a/GgafDx/include/jp/ggaf/dx/actor/supporter/SeTransmitterForActor.h
+++ b/GgafDx/include/jp/ggaf/dx/actor/supporter/SeTransmitterForActor.h
@@ -45,7 +45,7 @@ public:
4545
4646 /**
4747 * SEの設定を行う .
48- * SEの再生時間は GGAF_END_DELAY+(最大距離遅延) フレーム以内でなければいけない。
48+ * SEの再生時間は CONFIG::END_DELAY_FRAME+(最大距離遅延) フレーム以内でなければいけない。
4949 * チャンネル数は、引数の prm_se_key+"_CH" というプロパティ値が参照される。
5050 * 存在しない場合、再生チャンネル番号は0固定(∴チャンネル数は1)
5151 * 設定済みIDに、上書き再設定可能。
@@ -56,7 +56,7 @@ public:
5656
5757 /**
5858 * SEの設定を行う .
59- * 但し、SEの再生時間は GGAF_END_DELAY+(最大距離遅延) フレーム以内でなければいけない。
59+ * 但し、SEの再生時間は CONFIG::END_DELAY_FRAME+(最大距離遅延) フレーム以内でなければいけない。
6060 * 上書き再設定可能。
6161 * @param se_no SE登録番号 ( 0 〜 SE数-1 )
6262 * @param prm_se_key SE定義名(プロパティファイルのキー)
--- a/GgafDx/include/jp/ggaf/dx/sound/SeTransmitter.h
+++ b/GgafDx/include/jp/ggaf/dx/sound/SeTransmitter.h
@@ -37,7 +37,7 @@ public:
3737 * SEの設定を行う .
3838 * 引数のチャンネル番号が異なれば、同じSE定義名のWaveでも、複数同時発声ができる。
3939 * 引数のチャンネル番号が同じであれば、一つの発声しかできない。
40- * 但し、SEの再生時間は GGAF_END_DELAY+(最大距離遅延) フレーム以内でなければいけない。
40+ * 但し、SEの再生時間は CONFIG::END_DELAY_FRAME+(最大距離遅延) フレーム以内でなければいけない。
4141 * 上書き再設定可能。
4242 * @param prm_se_no SE登録番号 ( 0 〜 SE数-1 )
4343 * @param prm_se_key SE定義名(プロパティファイルのwaveファイル指定のキー)
--- a/GgafDx/src/jp/ggaf/dx/Config.cpp
+++ b/GgafDx/src/jp/ggaf/dx/Config.cpp
@@ -36,7 +36,7 @@ int Config::MASTER_VOLUME = 800;
3636 int Config::BGM_VOLUME = 800;
3737 int Config::SE_VOLUME = 800;
3838 int Config::MAX_SE_AT_ONCE = 16;
39-int Config::FRAME_OF_SE_DELAY_MAX_DEPTH = 3000;
39+uint32_t Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH = 3000;
4040 double Config::SE_VOLUME_RATE_MAX_DEPTH=0.2;
4141
4242 std::string Config::DIRNAME_RESOURCE_SKINXXX_MODEL = "model";
@@ -403,13 +403,13 @@ void Config::loadProperties(std::string prm_properties_filename) {
403403 if (GgafCore::Config::_properties.isExistKey("MAX_SE_AT_ONCE")) {
404404 Config::MAX_SE_AT_ONCE = GgafCore::Config::_properties.getInt("MAX_SE_AT_ONCE");
405405 }
406- if (GgafCore::Config::_properties.isExistKey("FRAME_OF_SE_DELAY_MAX_DEPTH")) {
407- Config::FRAME_OF_SE_DELAY_MAX_DEPTH = GgafCore::Config::_properties.getInt("FRAME_OF_SE_DELAY_MAX_DEPTH");
406+ if (GgafCore::Config::_properties.isExistKey("MILLISEC_OF_SE_DELAY_MAX_DEPTH")) {
407+ Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH = GgafCore::Config::_properties.getUInt("MILLISEC_OF_SE_DELAY_MAX_DEPTH");
408408 }
409409
410- if (Config::FRAME_OF_SE_DELAY_MAX_DEPTH*2 > GGAF_END_DELAY*1000) {
411- throwCriticalException("Config::FRAME_OF_SE_DELAY_MAX_DEPTH("<<Config::FRAME_OF_SE_DELAY_MAX_DEPTH<<")は、GGAF_END_DELAY*1000("<<(GGAF_END_DELAY*1000)<<")の半分以下である必要があります。\n"<<
412- "FRAME_OF_SE_DELAY_MAX_DEPTH の設定値をもっと下げてください。");
410+ if (MSEC_F(Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH)*2 > GgafCore::Config::END_DELAY_FRAME) {
411+ throwCriticalException("Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH("<<Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH<<")="<<MSEC_F(Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH)<<"frameは、END_DELAY_FRAME("<<(GgafCore::Config::END_DELAY_FRAME)<<")フレームの半分以下の時間である必要があります。\n"<<
412+ "MILLISEC_OF_SE_DELAY_MAX_DEPTH の設定値をもっと下げてください。");
413413 }
414414
415415 if (GgafCore::Config::_properties.isExistKey("SE_VOLUME_RATE_MAX_DEPTH")) {
@@ -625,7 +625,7 @@ void Config::loadProperties(std::string prm_properties_filename) {
625625 _TRACE_("Config::BGM_VOLUME=" << Config::BGM_VOLUME);
626626 _TRACE_("Config::SE_VOLUME=" << Config::SE_VOLUME);
627627 _TRACE_("Config::MAX_SE_AT_ONCE=" << Config::MAX_SE_AT_ONCE);
628- _TRACE_("Config::FRAME_OF_SE_DELAY_MAX_DEPTH=" << Config::FRAME_OF_SE_DELAY_MAX_DEPTH);
628+ _TRACE_("Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH=" << Config::MILLISEC_OF_SE_DELAY_MAX_DEPTH);
629629 _TRACE_("Config::SE_VOLUME_RATE_MAX_DEPTH=" << Config::SE_VOLUME_RATE_MAX_DEPTH);
630630
631631 _TRACE_("Config::DIRNAME_RESOURCE_SKINXXX_MODEL=" << Config::DIRNAME_RESOURCE_SKINXXX_MODEL);
--- a/GgafDx/src/jp/ggaf/dx/actor/supporter/SeTransmitterForActor.cpp
+++ b/GgafDx/src/jp/ggaf/dx/actor/supporter/SeTransmitterForActor.cpp
@@ -13,7 +13,7 @@
1313
1414 using namespace GgafDx;
1515
16-frame SeTransmitterForActor::_se_delay_max_depth = MSEC_F(CONFIG::FRAME_OF_SE_DELAY_MAX_DEPTH);
16+frame SeTransmitterForActor::_se_delay_max_depth = MSEC_F(CONFIG::MILLISEC_OF_SE_DELAY_MAX_DEPTH);
1717
1818 SeTransmitterForActor::SeTransmitterForActor(GeometricActor* prm_pActor) : SeTransmitter() ,
1919 _pActor(prm_pActor),
@@ -160,7 +160,7 @@ void SeTransmitterForActor::updatePanVolume3D() {
160160
161161 //備忘録
162162 //例えば消滅時の爆発だった場合、_pActor->_x みたいに、消滅後も値を参照したい。
163- //そこで GGAF_END_DELAY が重要になっている
163+ //そこで CONFIG::END_DELAY_FRAME が重要になっている
164164
165165 //リアルタイムの音量を計算
166166 const double px_d = sqrt(DX*DX + DY*DY + DZ*DZ); //dはピクセル
--- a/GgafDx/src/jp/ggaf/dx/scene/Spacetime.cpp
+++ b/GgafDx/src/jp/ggaf/dx/scene/Spacetime.cpp
@@ -122,7 +122,7 @@ _y_bound_top_b (-_y_bound_top + PX_C(CONFIG::GAME_BUFFER_HEIGHT / 2))
122122 getSceneChief()->appendGroupChild(_pCamera);
123123
124124 _pRing_pSeArray = NEW GgafCore::RingLinkedList<SeArray>();
125- for (int i = 0; i < SeTransmitterForActor::_se_delay_max_depth; i++) { //GGAF_END_DELAYは最大解放遅れフレームだが、遠方SEの遅延の最高フレーム数としても使う
125+ for (int i = 0; i < SeTransmitterForActor::_se_delay_max_depth; i++) { //CONFIG::END_DELAY_FRAMEは最大解放遅れフレームだが、遠方SEの遅延の最高フレーム数としても使う
126126 _pRing_pSeArray->addLast(NEW SeArray(), true);
127127 }
128128 _pRing_pSeArray->createIndex();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/effect/Blink/EffectBlink.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/effect/Blink/EffectBlink.cpp
@@ -2,7 +2,7 @@
22
33 #include "jp/ggaf/dx/actor/supporter/LocoVehicle.h"
44 #include "jp/ggaf/dx/actor/supporter/Scaler.h"
5-
5+#include "jp/gecchi/VioletVreath/Config.h"
66
77
88 using namespace GgafLib;
@@ -41,7 +41,7 @@ void EffectBlink::processBehavior() {
4141 setPositionAt(pTarget_);
4242 }
4343 }
44- if (getActiveFrame() >= GGAF_END_DELAY) {
44+ if (getActiveFrame() >= CONFIG::END_DELAY_FRAME) {
4545 pTarget_ = nullptr;
4646 if (sayonara_end_) {
4747 sayonara();
--- a/VioletVreath_launcher/default_config.properties
+++ b/VioletVreath_launcher/default_config.properties
@@ -4,6 +4,8 @@
44
55 #ゲームのFPS
66 FPS=60.606060
7+#共通遅延解放フレーム数。
8+END_DELAY_FRAME=5400
79 #最高フレームスキップ数。つまりどんなに重くも最低描画するフレーム間隔。(少なくとも MAX_SKIP_FRAME に 1 回は強制描画)
810 MAX_SKIP_FRAME=20
911 #60fps→40fpsの処理落ち演出を行うかどうかの境界。1フレームあたり内部描画回数で設定。
@@ -134,8 +136,8 @@ BGM_VOLUME=800
134136 SE_VOLUME=800
135137 #SE最大同時発声数(1~64)
136138 MAX_SE_AT_ONCE=16
137-#ゲーム空間でカメラからの最遠距離(zf)のに位置したアクターのSE発声遅延レーム数
138-FRAME_OF_SE_DELAY_MAX_DEPTH=3000
139+#ゲーム空間でカメラからの最遠距離(zf)のに位置したアクターのSE発声遅延ミリ秒数
140+MILLISEC_OF_SE_DELAY_MAX_DEPTH=3000
139141 #ゲーム空間でカメラからの最遠距離(zf)のに位置したアクターのSE発声ボリュームの減衰割合
140142 SE_VOLUME_RATE_MAX_DEPTH=0.2
141143
--- a/VioletVreath_launcher/vv_test_config.properties
+++ b/VioletVreath_launcher/vv_test_config.properties
@@ -4,6 +4,8 @@
44
55 #ゲームのFPS
66 FPS=60.606060
7+#共通遅延解放フレーム数。
8+END_DELAY_FRAME=5400
79 #最高フレームスキップ数。つまりどんなに重くも最低描画するフレーム間隔。(少なくとも MAX_SKIP_FRAME に 1 回は強制描画)
810 MAX_SKIP_FRAME=20
911 #60fps→40fpsの処理落ち演出を行うかどうかの境界。1フレームあたり内部描画回数で設定。