• 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

Revision5ec882d5c6815549794ba495ddbea080bd819f0e (tree)
Time2023-08-28 23:07:07
Authorgecchi <gecchi@boch...>
Commitergecchi

Log Message

レーザーチップの末尾処理がうまくいったかもー

Change Summary

Incremental Difference

--- a/GgafDx/include/jp/ggaf/dx/util/Util.h
+++ b/GgafDx/include/jp/ggaf/dx/util/Util.h
@@ -239,10 +239,10 @@ public:
239239 * TURN_ANTICLOSE_TO ・・・ ターゲットの回転角と距離が遠回りの方の回転方向で取得、左回りで正、又は、右回りの負の値になる。<BR>
240240 * TURN_COUNTERCLOCKWISE ・・・ 回転方向が左回りで差異角取得、正の値で返る。<BR>
241241 * TURN_CLOCKWISE ・・・ 回転方向が右回りで差異角取得、負の値で返る。<BR>
242- * @param prm_from
243- * @param prm_to
242+ * @param prm_from 基準のアングル値
243+ * @param prm_to 差を取る対象のアングル値
244244 * @param prm_way TURN_CLOSE_TO/TURN_ANTICLOSE_TO/TURN_COUNTERCLOCKWISE/TURN_CLOCKWISE
245- * @return アングル値の差(結果が 反時計周りは正、時計回りは負)
245+ * @return prm_from 〜 prm_to のアングル値の差(結果が 反時計周りは正、時計回りは負を意味する)
246246 */
247247 static angle getAngDiff(angle prm_from, angle prm_to, int prm_way=TURN_CLOSE_TO);
248248
@@ -254,20 +254,26 @@ public:
254254 * @param prm_clearance [in] 'N'way弾の弾と弾との成す角をアングル値で指定
255255 * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ
256256 */
257- static void getWayAngle2D(int prm_vx_Center,
258- int prm_vy_Center,
259- int prm_ways,
260- angle prm_clearance,
261- angle* out_paAngle);
257+ static void getWayAngleArr(int prm_vx_Center, int prm_vy_Center, int prm_ways, angle prm_clearance, angle* out_paAngle);
262258
263259 /**
264260 * 平面上において、'N'way弾(N=整数)の射出アングル値をセット(配列)で取得 .
265261 * @param prm_center [in] 'N'way弾の全体として向いている方向のアングル値
266- * @param prm_ways [in] 'N'way弾の N
262+ * @param prm_ways [in] 'N'way弾の N
267263 * @param prm_clearance [in] 'N'way弾の弾と弾との成す角をアングル値で指定
268- * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ
264+ * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ
265+ */
266+ static void getWayAngleArr(angle prm_center, int prm_ways, angle prm_clearance, angle* out_paAngle);
267+
268+ /**
269+ * 平面上において、'N'way弾(N=整数)の射出アングル値をセット(配列)で取得 .
270+ * @param prm_start [in] 'N'way弾の一番端(開始)の方向のアングル値
271+ * @param prm_end [in] 'N'way弾のもう一方の一番端(終了)の方向のアングル値
272+ * @param prm_ways [in] 'N'way弾の N
273+ * @param prm_way TURN_CLOSE_TO/TURN_ANTICLOSE_TO/TURN_COUNTERCLOCKWISE/TURN_CLOCKWISE
274+ * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ
269275 */
270- static void getWayAngle2D(angle prm_center, int prm_ways, angle prm_clearance, angle* out_paAngle);
276+ static void getWayAngleArr(angle prm_start, angle prm_end, int prm_ways, angle* out_paAngle, int prm_way);
271277
272278 /**
273279 * 平面上において、放射状全方向の'N'way弾(N=整数)のアングル値を配列で取得 .
@@ -277,7 +283,7 @@ public:
277283 * @param prm_ways [in] 'N'way弾の N。
278284 * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ
279285 */
280- static void getRadialAngle2D(angle prm_start, int prm_ways, angle* out_paAngle);
286+ static void getRadialAngleArr(angle prm_start, int prm_ways, angle* out_paAngle);
281287
282288 static void convRzRyToRyRz(angle prm_rz, angle prm_ry, angle& out_ry, angle& out_rz);
283289
@@ -293,9 +299,9 @@ public:
293299 * アングル値の加算 .
294300 * D360ANG を超えた場合、或いは 0 を下回った場合でも、
295301 * 0〜D360ANG に標準化される。
296- * @param prm_angNow アングル値1
297- * @param prm_ang_offset アングル値2
298- * @return 標準化された アングル値1 + アングル値2 のアングル値
302+ * @param prm_angNow アングル値
303+ * @param prm_ang_offset 加えるアングル値(左回りで正、右回りの負の値)
304+ * @return 標準化された アングル値 + 加えるアングル値 のアングル値
299305 */
300306 static angle addAng(angle prm_ang, angle prm_offset);
301307
--- a/GgafDx/src/jp/ggaf/dx/util/Util.cpp
+++ b/GgafDx/src/jp/ggaf/dx/util/Util.cpp
@@ -282,7 +282,6 @@ void Util::init() {
282282 Util::RND_CIRCLE_Y[i] = wk3 * sin_phi;
283283 }
284284 Util::_was_GgafDx_Util_inited_flg = true;
285-
286285 }
287286
288287 void Util::calcVecToAng(double prm_x,
@@ -296,15 +295,15 @@ void Util::calcVecToAng(double prm_x,
296295 //TODO:
297296 }
298297
299-void Util::getWayAngle2D(int prm_vx_Center,
300- int prm_vy_Center,
301- int prm_ways,
302- angle prm_clearance,
303- angle* out_paAngle) {
304- return Util::getWayAngle2D(Util::getAngle2D(prm_vx_Center, prm_vy_Center), prm_ways, prm_clearance, out_paAngle);
298+void Util::getWayAngleArr(int prm_vx_Center,
299+ int prm_vy_Center,
300+ int prm_ways,
301+ angle prm_clearance,
302+ angle* out_paAngle) {
303+ return Util::getWayAngleArr(Util::getAngle2D(prm_vx_Center, prm_vy_Center), prm_ways, prm_clearance, out_paAngle);
305304 }
306305
307-void Util::getWayAngle2D(angle prm_center, int prm_ways, angle prm_clearance, angle* out_paAngle) {
306+void Util::getWayAngleArr(angle prm_center, int prm_ways, angle prm_clearance, angle* out_paAngle) {
308307 int angstart = Util::addAng(prm_center, ((prm_ways - 1) * prm_clearance) / -2);
309308
310309 for (int i = 0; i < prm_ways; i++) {
@@ -312,7 +311,15 @@ void Util::getWayAngle2D(angle prm_center, int prm_ways, angle prm_clearance, an
312311 }
313312 }
314313
315-void Util::getRadialAngle2D(angle prm_start, int prm_ways, angle* out_paAngle) {
314+void Util::getWayAngleArr(angle prm_start, angle prm_end, int prm_ways, angle* out_paAngle, int prm_way) {
315+ angle ang_diff = Util::getAngDiff(prm_start, prm_end, prm_way);
316+ for (int i = 0; i < prm_ways; i++) {
317+ angle ang_add = (ang_diff*i) / (prm_ways-1);
318+ out_paAngle[i] = Util::addAng(prm_start, ang_add);
319+ }
320+}
321+
322+void Util::getRadialAngleArr(angle prm_start, int prm_ways, angle* out_paAngle) {
316323 for (int i = 0; i < prm_ways; i++) {
317324 out_paAngle[i] = Util::addAng(prm_start, (angle)(1.0 * D360ANG / prm_ways * i));
318325 }
@@ -338,7 +345,7 @@ void Util::convRzRyToRyRz(angle prm_rz, angle prm_ry, angle& out_ry, angle& out_
338345 // vy2 = -vz;
339346 // vz2 = vy;
340347 //
341-// getWayAngle2D(prm_ang_center_rz, prm_ways, prm_clearance, out_paAngleRz);
348+// getWayAngleArr(prm_ang_center_rz, prm_ways, prm_clearance, out_paAngleRz);
342349 //
343350 //}
344351
--- a/GgafLib/include/jp/ggaf/lib/actor/laserchip/LaserChip.h
+++ b/GgafLib/include/jp/ggaf/lib/actor/laserchip/LaserChip.h
@@ -75,7 +75,7 @@ public:
7575 float _power;
7676
7777 GgafDx::UvFlipper* _pUvFlipper;
78- /** [r]同時フレーム内で複数 dispatch された場合のdispatch数(1 〜) */
78+ /** [r]同時フレーム内で複数 dispatch された場合のdispatch数(1 〜)、実際dispatchできたかどうかに関わらず、dispatchN(n) の n が設定される */
7979 int _n_dispatch_at_once;
8080 /** [r]同時フレーム内で複数 dispatch された場合の順番 (0 〜 ) */
8181 int _dispatch_index;
--- a/GgafLib/src/jp/ggaf/lib/util/StgUtil.cpp
+++ b/GgafLib/src/jp/ggaf/lib/util/StgUtil.cpp
@@ -1861,7 +1861,7 @@ GgafDx::FigureActor* StgUtil::shotWay002(coord prm_x, coord prm_y, coord prm_z,
18611861 void (*pFunc_call_back_dispatched)(GgafDx::FigureActor*, int, int, int)) {
18621862 if (prm_way_N <= 0 || prm_set_num <= 0) { return nullptr; }
18631863 angle* paAng_way_N = NEW angle[prm_way_N];
1864- GgafDx::Util::getWayAngle2D(0, prm_way_N, prm_ang_clearance_N, paAng_way_N);
1864+ GgafDx::Util::getWayAngleArr(0, prm_way_N, prm_ang_clearance_N, paAng_way_N);
18651865 GgafDx::GeoElem* paGeo = NEW GgafDx::GeoElem[prm_way_N];
18661866 double vx, vy, vz;
18671867 double tx, ty, tz; //最終方向の絶対座標の単位ベクトル
@@ -1942,8 +1942,8 @@ GgafDx::FigureActor* StgUtil::shotWay003(coord prm_x, coord prm_y, coord prm_z,
19421942 angle* paAng_way_N = NEW angle[prm_way_N];
19431943 angle* paAng_way_M = NEW angle[prm_way_M];
19441944 uint32_t* paUint32_dotmat = NEW uint32_t[prm_way_N];
1945- GgafDx::Util::getWayAngle2D(0, prm_way_N, prm_ang_clearance_N, paAng_way_N);
1946- GgafDx::Util::getWayAngle2D(0, prm_way_M, prm_ang_clearance_M, paAng_way_M);
1945+ GgafDx::Util::getWayAngleArr(0, prm_way_N, prm_ang_clearance_N, paAng_way_N);
1946+ GgafDx::Util::getWayAngleArr(0, prm_way_M, prm_ang_clearance_M, paAng_way_M);
19471947 GgafDx::GeoElem** papaGeo = NEW GgafDx::GeoElem*[prm_way_N];
19481948 double vx, vy, vz;
19491949 double tx, ty, tz; //最終方向の絶対座標の単位ベクトル
@@ -2071,7 +2071,7 @@ GgafDx::FigureActor* StgUtil::shotWay004(coord prm_x, coord prm_y, coord prm_z,
20712071 void (*pFunc_call_back_dispatched)(GgafDx::FigureActor*, int, int, int)) {
20722072 if (prm_radial_way_num <= 0 || prm_set_num <= 0) { return nullptr; }
20732073 angle* paAng_way = NEW angle[prm_radial_way_num];
2074- GgafDx::Util::getRadialAngle2D(0, prm_radial_way_num, paAng_way);
2074+ GgafDx::Util::getRadialAngleArr(0, prm_radial_way_num, paAng_way);
20752075 GgafDx::GeoElem* paGeo = NEW GgafDx::GeoElem[prm_radial_way_num];
20762076 angle expanse_rz = (D180ANG - prm_expanse_angle)/2;
20772077
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Allas/EnemyAllas.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Allas/EnemyAllas.cpp
@@ -94,7 +94,7 @@ void EnemyAllas::processBehavior() {
9494 //放射状ショット
9595 int way = RF_EnemyAllas_ShotWay(G_RANK); //ショットWAY数
9696 angle* paAng_way = NEW angle[way];
97- UTIL::getRadialAngle2D(0, way, paAng_way);
97+ UTIL::getRadialAngleArr(0, way, paAng_way);
9898 GgafDx::FigureActor* pActor_shot;
9999 for (int i = 0; i < way; i++) {
100100 pActor_shot = (GgafDx::FigureActor*)pDepo_shot_->dispatch();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Eres/EnemyEres.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Eres/EnemyEres.cpp
@@ -77,8 +77,8 @@ void EnemyEres::processBehavior() {
7777 if (iMovePatternNo_ == 0 && getActiveFrame() == 60*30) {
7878
7979 angle way[32];
80- //UTIL::getWayAngle2D(180000, 8, 10000, way);
81- UTIL::getRadialAngle2D(0, 32, way); //TODO:毎回求めるのは無駄
80+ //UTIL::getWayAngleArr(180000, 8, 10000, way);
81+ UTIL::getRadialAngleArr(0, 32, way); //TODO:毎回求めるのは無駄
8282 GgafDx::FigureActor* pTama;
8383 for (int i = 0; i < 16; i++) {
8484 pTama = (GgafDx::FigureActor*)pDepo_shot001_->dispatch();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Ratislavia/EnemyRatislavia.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Ratislavia/EnemyRatislavia.cpp
@@ -64,7 +64,7 @@ void EnemyRatislavia::appendGroupChildAsFkOnSurface(GgafDx::GeometricActor* prm_
6464
6565 void EnemyRatislavia::addCollisionAreaArea(int prm_nSphere) {
6666 angle* paAngRadial = NEW angle[prm_nSphere];
67- UTIL::getRadialAngle2D(0, prm_nSphere, paAngRadial);
67+ UTIL::getRadialAngleArr(0, prm_nSphere, paAngRadial);
6868 WorldCollisionChecker* pChecker = getWorldCollisionChecker();
6969 pChecker->addCollisionArea(prm_nSphere);
7070 for (int i = 0; i < prm_nSphere; i++) {
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Straea/EnemyStraea.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Straea/EnemyStraea.cpp
@@ -63,7 +63,7 @@ EnemyStraea::EnemyStraea(const char* prm_name) :
6363
6464 papaPosLaser_ = NEW PosLaser*[laser_way_];
6565 angle* paAng_way = NEW angle[laser_way_];
66- UTIL::getWayAngle2D(0, laser_way_, ang_clearance_, paAng_way);
66+ UTIL::getWayAngleArr(0, laser_way_, ang_clearance_, paAng_way);
6767 angle Rz,Ry;
6868 double vx, vy, vz;
6969 for (int i = 0; i < laser_way_; i++) {
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Tamago/EnemyTamago01.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Tamago/EnemyTamago01.cpp
@@ -155,7 +155,7 @@ void EnemyTamago01::processBehavior() {
155155 target_RzRy_Rz, target_RzRy_Ry);
156156 angle target_RyRz_Ry, target_RyRz_Rz;
157157 UTIL::convRzRyToRyRz(target_RzRy_Rz, target_RzRy_Ry, target_RyRz_Ry, target_RyRz_Rz);
158- UTIL::getWayAngle2D(target_RyRz_Ry, way, 10000, paAng_way);
158+ UTIL::getWayAngleArr(target_RyRz_Ry, way, 10000, paAng_way);
159159 GgafDx::FigureActor* pActor;
160160 for (int i = 0; i < way; i++) {
161161 pActor = (GgafDx::FigureActor*)pDepo_shot_->dispatch();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Unomia/EnemyUnomia.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/enemy/Unomia/EnemyUnomia.cpp
@@ -105,7 +105,7 @@ void EnemyUnomia::processBehavior() {
105105 // //放射状ショット
106106 // int way = RF_EnemyUnomia_ShotWay(G_RANK); //ショットWAY数
107107 // angle* paAng_way = NEW angle[way];
108-// UTIL::getRadialAngle2D(0, way, paAng_way);
108+// UTIL::getRadialAngleArr(0, way, paAng_way);
109109 // GgafDx::FigureActor* pActor_shot;
110110 // for (int i = 0; i < way; i++) {
111111 // pActor_shot = (GgafDx::FigureActor*)pDepo_shot_->dispatch();
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshin.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshin.cpp
@@ -97,6 +97,8 @@ MyBunshin::MyBunshin(const char* prm_name, MyBunshinController* prm_pBunshinCont
9797
9898 std::string name2 = std::string(prm_name) + "'s Geo2";
9999 pGeo2_ = NEW GgafLib::DefaultGeometricActor(name2.c_str());
100+ rz_prev_ = _rz;
101+ ry_prev_ = _ry;
100102 }
101103
102104 void MyBunshin::onCreateModel() {
@@ -123,10 +125,11 @@ void MyBunshin::onActive() {
123125 }
124126
125127 void MyBunshin::processBehavior() {
126-
127128 }
128129
129130 void MyBunshin::processSettlementBehavior() {
131+ rz_prev_ = _rz;
132+ ry_prev_ = _ry;
130133
131134 changeGeoLocal(); //ローカル座標の操作とする。
132135 GgafDx::LocoVehicle* pLocoVehicle = getLocoVehicle();
@@ -172,6 +175,10 @@ void MyBunshin::processSettlementBehavior() {
172175 changeGeoFinal();
173176
174177 VvEffectActor<DefaultMeshSetActor>::processSettlementBehavior();
178+
179+ UTIL::getWayAngleArr(_rz, rz_prev_, N_DISPATCH_AT_ONCE+1, out_way_rz_, TURN_CLOSE_TO); //+1は前方チップの向きと同じであるため、捨てる
180+ UTIL::getWayAngleArr(_ry, ry_prev_, N_DISPATCH_AT_ONCE+1, out_way_ry_, TURN_CLOSE_TO);
181+
175182 }
176183 void MyBunshin::processChangeGeoFinal() {
177184 if (pBase_->is_isolate_mode_) {
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshin.h
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshin.h
@@ -46,6 +46,11 @@ public:
4646 // angle rz_local_copy_;
4747 // bool _is_thunder_lock;
4848 GgafLib::DefaultGeometricActor* pGeo2_;
49+ //前フレームの _rz, _ry レーザー用
50+ angle rz_prev_, ry_prev_;
51+ angle out_way_rz_[N_DISPATCH_AT_ONCE+1];
52+ angle out_way_ry_[N_DISPATCH_AT_ONCE+1];
53+
4954 public:
5055 MyBunshin(const char* prm_name, MyBunshinController* prm_pBunshinController, MyBunshinBase* prm_pBase);
5156
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshinWateringLaserChip001.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/Bunshin/MyBunshinWateringLaserChip001.cpp
@@ -259,14 +259,33 @@ L_PHASE_T2_AFTER:
259259 void MyBunshinWateringLaserChip001::processSettlementBehavior() {
260260 //分身はFKなので、絶対座標の確定が processSettlementBehavior() 以降となるため、ここで初期設定が必要
261261 GgafDx::NaviVehicle* const pNaviVehicle = getNaviVehicle();
262+ //_dispatch_index= 2, 1, 0 なので、[0]根本の次の次、[1]根本の次、[2]根本 の順で処理されることになる。
263+ //n=0, 1, 2 … レーザーチップの [0]根本, [1]根本の次、[2]根本の次の次
264+ int n = _n_dispatch_at_once-1 - _dispatch_index;
265+//_TRACE_("MyBunshinWateringLaserChip001 "<<getName()<<" n="<<n);
266+
267+//if (pOrg_->_rz != pOrg_->rz_prev_) {
268+// _TRACE_("pOrg_->_rz="<<pOrg_->_rz<<" pOrg_->rz_prev_"<<pOrg_->rz_prev_);
269+//}
270+//if (pOrg_->_ry != pOrg_->ry_prev_) {
271+// _TRACE_("pOrg_->_ry="<<pOrg_->_ry<<" pOrg_->ry_prev_"<<pOrg_->ry_prev_);
272+//}
262273 if (hasJustChangedToActive()) {
274+ //ロックオン情報の引き継ぎ
275+ MyBunshinWateringLaserChip001* pF = (MyBunshinWateringLaserChip001*) getInfrontChip();
263276 //チップの初期設定
264277 //活動開始初回フレーム、チップの速度と向きの初期設定
265278 setFaceAngAs(pOrg_);
279+ setPositionAt(pOrg_);
280+
281+
282+ setFaceAngAs(pOrg_);
266283 //setPositionAt(pOrg_);
267- pNaviVehicle->setVeloTwd(_rz, _ry, INITIAL_VELO*_n_dispatch_at_once); //初速はここで
284+ //pNaviVehicle->setVeloTwd(_rz, _ry, INITIAL_VELO*_n_dispatch_at_once); //初速はここで
285+
268286 pNaviVehicle->setAcceZero();
269287 int n = _n_dispatch_at_once-1 - _dispatch_index;
288+ pNaviVehicle->setVeloTwd(pOrg_->out_way_rz_[n], pOrg_->out_way_ry_[n], INITIAL_VELO*_n_dispatch_at_once); //初速はここで
270289 if (n == 0) {
271290 setPositionAt(pOrg_);
272291 } else {
@@ -276,8 +295,27 @@ void MyBunshinWateringLaserChip001::processSettlementBehavior() {
276295 pOrg_->_z + (pNaviVehicle->_velo_vc_z * v) );
277296 }
278297
279- //ロックオン情報の引き継ぎ
280- MyBunshinWateringLaserChip001* pF = (MyBunshinWateringLaserChip001*) getInfrontChip();
298+// if (n == 0) {
299+// _TRACE_("MyBunshinWateringLaserChip001 "<<getName()<<" n="<<n <<" きたーー");
300+// //n == 0 (_dispatch_index=最後) のときに各チップ([n=0]根本, [n=1]根本の次、[n=2]根本の次の次・・・)の初期処理を一斉に行こなう
301+//
302+// MyBunshinWateringLaserChip001* pChip = this;
303+//
304+// for (int i = 0; i < _n_dispatch_at_once; i++) {
305+// if (pChip) {
306+// _TRACE_("MyBunshinWateringLaserChip001 "<<getName()<<" out_way_rz["<<i<<"]="<<out_way_rz[i]<<", out_way_ry["<<i<<"]="<<out_way_ry[i]);
307+//
308+// GgafDx::NaviVehicle* pChipNaviVehicle = pChip->getNaviVehicle();
309+// pChipNaviVehicle->setVeloTwd(out_way_rz[i], out_way_ry[i], INITIAL_VELO*_n_dispatch_at_once); //初速はここで
310+// double v = 1.0*i / _n_dispatch_at_once;
311+// pChip->setPosition(pOrg_->_x + (pChipNaviVehicle->_velo_vc_x * v) ,
312+// pOrg_->_y + (pChipNaviVehicle->_velo_vc_y * v) ,
313+// pOrg_->_z + (pChipNaviVehicle->_velo_vc_z * v) );
314+// pChip = (MyBunshinWateringLaserChip001*) getInfrontChip();
315+// }
316+// }
317+// }
318+
281319 if (pF == nullptr) {
282320 //先端チップ
283321 GgafDx::GeometricActor* pLockonTarget = pLockonCursor_->pTarget_;
@@ -331,7 +369,7 @@ throwCriticalException("pLeaderChip_AimInfo_
331369 //したがって本クラスを継承した場合、継承クラスのprocessSettlementBehavior()では、先頭で呼び出した方が良い。
332370
333371 MyBunshinWateringLaserChip001* pF = (MyBunshinWateringLaserChip001*)getInfrontChip();
334- if (getActiveFrame() > 2) {//FKオブジェクトからのレーザー発射も考慮すると、_tmpXYZ が埋まるのは3フレーム以降。
372+ if (getActiveFrame() > (_n_dispatch_at_once-1)) {
335373 if (pF && pF->isActive()) {
336374 MyBunshinWateringLaserChip001* pB = (MyBunshinWateringLaserChip001*)getBehindChip();
337375 //_pChip_behind == nullptr の判定だけではだめ。_pChip_behind->_is_active_flg と判定すること
@@ -350,10 +388,36 @@ throwCriticalException("pLeaderChip_AimInfo_
350388 _z = _z + (coord)((pB->_z-_z)*0.2 + (pF->_z-_z)*0.4);
351389 }
352390 } else {
353-// //レーザー末尾がはねる(髪の毛がはねるみたいになる)のを若干防ぐ
354-// //一つ前の座標と、自身の座標を直線で結んで、仮想の自分の後ろの点を作成。
355-// //一つ前の座標、自身の座標、仮想の自分の後ろの点で平均を取る
356-// //座標の重みは、(仮想のひとつ前, 自身(末尾), 一つ先)= (0.1, 0.7, 0.2)
391+// _TRACE_("-------------------------------------");
392+// _TRACE_("pF _x,_y,_z="<<pF->_x<<","<<pF->_y<<","<<pF->_z<<"\t_rz,_ry="<<pF->_rz<<","<<pF->_ry);
393+// _TRACE_("_x,_y,_z="<<_x<<","<<_y<<","<<_z<<"\t_rz,_ry="<<_rz<<","<<_ry);
394+ coord d_pF = UTIL::getDistance(this, pF);
395+// _TRACE_("d_pF="<<d_pF);
396+ angle diff_rz = UTIL::getAngDiff(pF->_rz, _rz);
397+ angle diff_ry = UTIL::getAngDiff(pF->_ry, _ry);
398+// _TRACE_("diff_rz_ry="<<diff_rz<<","<<diff_ry);
399+ angle v_b_rz = UTIL::addAng(_rz, diff_rz/2); //半分は気持ち
400+ angle v_b_ry = UTIL::addAng(_ry, diff_ry/2);
401+// _TRACE_("v_b_rz_ry="<<v_b_rz<<","<<v_b_ry);
402+ double v_b_vx, v_b_vy, v_b_vz;
403+ UTIL::convRzRyToVector(v_b_rz,v_b_ry,
404+ v_b_vx, v_b_vy, v_b_vz);
405+// _TRACE_("v_b_v_xyz="<<v_b_vx<<","<<v_b_vy<<","<<v_b_vz);
406+ coord v_b_x = _x - v_b_vx*d_pF;
407+ coord v_b_y = _y - v_b_vy*d_pF;
408+ coord v_b_z = _z - v_b_vz*d_pF;
409+// _TRACE_("v_b_xyz="<<v_b_x<<","<<v_b_y<<","<<v_b_z);
410+ _x = _x + (coord)((v_b_x-_x)*0.2 + (pF->_x-_x)*0.4);
411+ _y = _y + (coord)((v_b_y-_y)*0.2 + (pF->_y-_y)*0.4);
412+ _z = _z + (coord)((v_b_z-_z)*0.2 + (pF->_z-_z)*0.4);
413+// coord v_b_x
414+
415+
416+ //レーザー末尾がはねる(髪の毛がはねるみたいになる)のを若干防ぐ
417+ //一つ前の座標と、自身の座標を直線で結んで、仮想の自分の後ろの点を作成。
418+ //一つ前の座標、自身の座標、仮想の自分の後ろの点で平均を取る
419+ //座標の重みは、(仮想のひとつ前, 自身(末尾), 一つ先)= (0.1, 0.7, 0.2)
420+
357421 // coord v_b_x = _x - (pF->_x - _x);
358422 // coord v_b_y = _y - (pF->_y - _y);
359423 // coord v_b_z = _z - (pF->_z - _z);
--- a/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/MagicMeter/magic/BunshinMagic.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/actor/my/MagicMeter/magic/BunshinMagic.cpp
@@ -61,7 +61,7 @@ void BunshinMagic::processCastBegin(int prm_now_level, int prm_new_level) {
6161 MyShip* pMyShip = pMYSHIP;
6262 MyMagicEnergyCore* pCore = pMyShip->pMyMagicEnergyCore_;
6363 angle* paAng_way = NEW angle[prm_new_level-prm_now_level];
64- UTIL::getRadialAngle2D(0, prm_new_level-prm_now_level, paAng_way);
64+ UTIL::getRadialAngleArr(0, prm_new_level-prm_now_level, paAng_way);
6565 GgafDx::CoordVehicle* const pCoreCoordVehicle = pCore->getCoordVehicle();
6666 velo veloVxMv = pCoreCoordVehicle->_velo_x;
6767 velo veloVyMv = pCoreCoordVehicle->_velo_y;
--- a/VioletVreath/src/jp/gecchi/VioletVreath/util/MyStgUtil.cpp
+++ b/VioletVreath/src/jp/gecchi/VioletVreath/util/MyStgUtil.cpp
@@ -65,9 +65,8 @@ void MyStgUtil::init() {
6565 double x = (double)f;
6666 SHOT_POWER[f] = (3.0 / ( (x/5.0) + 1 ) ) + 0.5;
6767 }
68-
69-
7068 MyStgUtil::_was_MyStgUtil_inited_flg = true;
69+
7170 }
7271
7372 GgafDx::FigureActor* MyStgUtil::shotWayGoldenAng(coord prm_x, coord prm_y, coord prm_z,