Violet Vreath is Shooter Game for Windows XP+(個人制作シューティングゲーム)
Revision | 5ec882d5c6815549794ba495ddbea080bd819f0e (tree) |
---|---|
Time | 2023-08-28 23:07:07 |
Author | gecchi <gecchi@boch...> |
Commiter | gecchi |
レーザーチップの末尾処理がうまくいったかもー
@@ -239,10 +239,10 @@ public: | ||
239 | 239 | * TURN_ANTICLOSE_TO ・・・ ターゲットの回転角と距離が遠回りの方の回転方向で取得、左回りで正、又は、右回りの負の値になる。<BR> |
240 | 240 | * TURN_COUNTERCLOCKWISE ・・・ 回転方向が左回りで差異角取得、正の値で返る。<BR> |
241 | 241 | * TURN_CLOCKWISE ・・・ 回転方向が右回りで差異角取得、負の値で返る。<BR> |
242 | - * @param prm_from | |
243 | - * @param prm_to | |
242 | + * @param prm_from 基準のアングル値 | |
243 | + * @param prm_to 差を取る対象のアングル値 | |
244 | 244 | * @param prm_way TURN_CLOSE_TO/TURN_ANTICLOSE_TO/TURN_COUNTERCLOCKWISE/TURN_CLOCKWISE |
245 | - * @return アングル値の差(結果が 反時計周りは正、時計回りは負) | |
245 | + * @return prm_from 〜 prm_to のアングル値の差(結果が 反時計周りは正、時計回りは負を意味する) | |
246 | 246 | */ |
247 | 247 | static angle getAngDiff(angle prm_from, angle prm_to, int prm_way=TURN_CLOSE_TO); |
248 | 248 |
@@ -254,20 +254,26 @@ public: | ||
254 | 254 | * @param prm_clearance [in] 'N'way弾の弾と弾との成す角をアングル値で指定 |
255 | 255 | * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ |
256 | 256 | */ |
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); | |
262 | 258 | |
263 | 259 | /** |
264 | 260 | * 平面上において、'N'way弾(N=整数)の射出アングル値をセット(配列)で取得 . |
265 | 261 | * @param prm_center [in] 'N'way弾の全体として向いている方向のアングル値 |
266 | - * @param prm_ways [in] 'N'way弾の N | |
262 | + * @param prm_ways [in] 'N'way弾の N | |
267 | 263 | * @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弾 のアングル値配列のポインタ | |
269 | 275 | */ |
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); | |
271 | 277 | |
272 | 278 | /** |
273 | 279 | * 平面上において、放射状全方向の'N'way弾(N=整数)のアングル値を配列で取得 . |
@@ -277,7 +283,7 @@ public: | ||
277 | 283 | * @param prm_ways [in] 'N'way弾の N。 |
278 | 284 | * @param out_paAngle [out] 得られる'N'way弾 のアングル値配列のポインタ |
279 | 285 | */ |
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); | |
281 | 287 | |
282 | 288 | static void convRzRyToRyRz(angle prm_rz, angle prm_ry, angle& out_ry, angle& out_rz); |
283 | 289 |
@@ -293,9 +299,9 @@ public: | ||
293 | 299 | * アングル値の加算 . |
294 | 300 | * D360ANG を超えた場合、或いは 0 を下回った場合でも、 |
295 | 301 | * 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 標準化された アングル値 + 加えるアングル値 のアングル値 | |
299 | 305 | */ |
300 | 306 | static angle addAng(angle prm_ang, angle prm_offset); |
301 | 307 |
@@ -282,7 +282,6 @@ void Util::init() { | ||
282 | 282 | Util::RND_CIRCLE_Y[i] = wk3 * sin_phi; |
283 | 283 | } |
284 | 284 | Util::_was_GgafDx_Util_inited_flg = true; |
285 | - | |
286 | 285 | } |
287 | 286 | |
288 | 287 | void Util::calcVecToAng(double prm_x, |
@@ -296,15 +295,15 @@ void Util::calcVecToAng(double prm_x, | ||
296 | 295 | //TODO: |
297 | 296 | } |
298 | 297 | |
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); | |
305 | 304 | } |
306 | 305 | |
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) { | |
308 | 307 | int angstart = Util::addAng(prm_center, ((prm_ways - 1) * prm_clearance) / -2); |
309 | 308 | |
310 | 309 | 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 | ||
312 | 311 | } |
313 | 312 | } |
314 | 313 | |
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) { | |
316 | 323 | for (int i = 0; i < prm_ways; i++) { |
317 | 324 | out_paAngle[i] = Util::addAng(prm_start, (angle)(1.0 * D360ANG / prm_ways * i)); |
318 | 325 | } |
@@ -338,7 +345,7 @@ void Util::convRzRyToRyRz(angle prm_rz, angle prm_ry, angle& out_ry, angle& out_ | ||
338 | 345 | // vy2 = -vz; |
339 | 346 | // vz2 = vy; |
340 | 347 | // |
341 | -// getWayAngle2D(prm_ang_center_rz, prm_ways, prm_clearance, out_paAngleRz); | |
348 | +// getWayAngleArr(prm_ang_center_rz, prm_ways, prm_clearance, out_paAngleRz); | |
342 | 349 | // |
343 | 350 | //} |
344 | 351 |
@@ -75,7 +75,7 @@ public: | ||
75 | 75 | float _power; |
76 | 76 | |
77 | 77 | GgafDx::UvFlipper* _pUvFlipper; |
78 | - /** [r]同時フレーム内で複数 dispatch された場合のdispatch数(1 〜) */ | |
78 | + /** [r]同時フレーム内で複数 dispatch された場合のdispatch数(1 〜)、実際dispatchできたかどうかに関わらず、dispatchN(n) の n が設定される */ | |
79 | 79 | int _n_dispatch_at_once; |
80 | 80 | /** [r]同時フレーム内で複数 dispatch された場合の順番 (0 〜 ) */ |
81 | 81 | int _dispatch_index; |
@@ -1861,7 +1861,7 @@ GgafDx::FigureActor* StgUtil::shotWay002(coord prm_x, coord prm_y, coord prm_z, | ||
1861 | 1861 | void (*pFunc_call_back_dispatched)(GgafDx::FigureActor*, int, int, int)) { |
1862 | 1862 | if (prm_way_N <= 0 || prm_set_num <= 0) { return nullptr; } |
1863 | 1863 | 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); | |
1865 | 1865 | GgafDx::GeoElem* paGeo = NEW GgafDx::GeoElem[prm_way_N]; |
1866 | 1866 | double vx, vy, vz; |
1867 | 1867 | double tx, ty, tz; //最終方向の絶対座標の単位ベクトル |
@@ -1942,8 +1942,8 @@ GgafDx::FigureActor* StgUtil::shotWay003(coord prm_x, coord prm_y, coord prm_z, | ||
1942 | 1942 | angle* paAng_way_N = NEW angle[prm_way_N]; |
1943 | 1943 | angle* paAng_way_M = NEW angle[prm_way_M]; |
1944 | 1944 | 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); | |
1947 | 1947 | GgafDx::GeoElem** papaGeo = NEW GgafDx::GeoElem*[prm_way_N]; |
1948 | 1948 | double vx, vy, vz; |
1949 | 1949 | double tx, ty, tz; //最終方向の絶対座標の単位ベクトル |
@@ -2071,7 +2071,7 @@ GgafDx::FigureActor* StgUtil::shotWay004(coord prm_x, coord prm_y, coord prm_z, | ||
2071 | 2071 | void (*pFunc_call_back_dispatched)(GgafDx::FigureActor*, int, int, int)) { |
2072 | 2072 | if (prm_radial_way_num <= 0 || prm_set_num <= 0) { return nullptr; } |
2073 | 2073 | 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); | |
2075 | 2075 | GgafDx::GeoElem* paGeo = NEW GgafDx::GeoElem[prm_radial_way_num]; |
2076 | 2076 | angle expanse_rz = (D180ANG - prm_expanse_angle)/2; |
2077 | 2077 |
@@ -94,7 +94,7 @@ void EnemyAllas::processBehavior() { | ||
94 | 94 | //放射状ショット |
95 | 95 | int way = RF_EnemyAllas_ShotWay(G_RANK); //ショットWAY数 |
96 | 96 | angle* paAng_way = NEW angle[way]; |
97 | - UTIL::getRadialAngle2D(0, way, paAng_way); | |
97 | + UTIL::getRadialAngleArr(0, way, paAng_way); | |
98 | 98 | GgafDx::FigureActor* pActor_shot; |
99 | 99 | for (int i = 0; i < way; i++) { |
100 | 100 | pActor_shot = (GgafDx::FigureActor*)pDepo_shot_->dispatch(); |
@@ -77,8 +77,8 @@ void EnemyEres::processBehavior() { | ||
77 | 77 | if (iMovePatternNo_ == 0 && getActiveFrame() == 60*30) { |
78 | 78 | |
79 | 79 | 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:毎回求めるのは無駄 | |
82 | 82 | GgafDx::FigureActor* pTama; |
83 | 83 | for (int i = 0; i < 16; i++) { |
84 | 84 | pTama = (GgafDx::FigureActor*)pDepo_shot001_->dispatch(); |
@@ -64,7 +64,7 @@ void EnemyRatislavia::appendGroupChildAsFkOnSurface(GgafDx::GeometricActor* prm_ | ||
64 | 64 | |
65 | 65 | void EnemyRatislavia::addCollisionAreaArea(int prm_nSphere) { |
66 | 66 | angle* paAngRadial = NEW angle[prm_nSphere]; |
67 | - UTIL::getRadialAngle2D(0, prm_nSphere, paAngRadial); | |
67 | + UTIL::getRadialAngleArr(0, prm_nSphere, paAngRadial); | |
68 | 68 | WorldCollisionChecker* pChecker = getWorldCollisionChecker(); |
69 | 69 | pChecker->addCollisionArea(prm_nSphere); |
70 | 70 | for (int i = 0; i < prm_nSphere; i++) { |
@@ -63,7 +63,7 @@ EnemyStraea::EnemyStraea(const char* prm_name) : | ||
63 | 63 | |
64 | 64 | papaPosLaser_ = NEW PosLaser*[laser_way_]; |
65 | 65 | 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); | |
67 | 67 | angle Rz,Ry; |
68 | 68 | double vx, vy, vz; |
69 | 69 | for (int i = 0; i < laser_way_; i++) { |
@@ -155,7 +155,7 @@ void EnemyTamago01::processBehavior() { | ||
155 | 155 | target_RzRy_Rz, target_RzRy_Ry); |
156 | 156 | angle target_RyRz_Ry, target_RyRz_Rz; |
157 | 157 | 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); | |
159 | 159 | GgafDx::FigureActor* pActor; |
160 | 160 | for (int i = 0; i < way; i++) { |
161 | 161 | pActor = (GgafDx::FigureActor*)pDepo_shot_->dispatch(); |
@@ -105,7 +105,7 @@ void EnemyUnomia::processBehavior() { | ||
105 | 105 | // //放射状ショット |
106 | 106 | // int way = RF_EnemyUnomia_ShotWay(G_RANK); //ショットWAY数 |
107 | 107 | // angle* paAng_way = NEW angle[way]; |
108 | -// UTIL::getRadialAngle2D(0, way, paAng_way); | |
108 | +// UTIL::getRadialAngleArr(0, way, paAng_way); | |
109 | 109 | // GgafDx::FigureActor* pActor_shot; |
110 | 110 | // for (int i = 0; i < way; i++) { |
111 | 111 | // pActor_shot = (GgafDx::FigureActor*)pDepo_shot_->dispatch(); |
@@ -97,6 +97,8 @@ MyBunshin::MyBunshin(const char* prm_name, MyBunshinController* prm_pBunshinCont | ||
97 | 97 | |
98 | 98 | std::string name2 = std::string(prm_name) + "'s Geo2"; |
99 | 99 | pGeo2_ = NEW GgafLib::DefaultGeometricActor(name2.c_str()); |
100 | + rz_prev_ = _rz; | |
101 | + ry_prev_ = _ry; | |
100 | 102 | } |
101 | 103 | |
102 | 104 | void MyBunshin::onCreateModel() { |
@@ -123,10 +125,11 @@ void MyBunshin::onActive() { | ||
123 | 125 | } |
124 | 126 | |
125 | 127 | void MyBunshin::processBehavior() { |
126 | - | |
127 | 128 | } |
128 | 129 | |
129 | 130 | void MyBunshin::processSettlementBehavior() { |
131 | + rz_prev_ = _rz; | |
132 | + ry_prev_ = _ry; | |
130 | 133 | |
131 | 134 | changeGeoLocal(); //ローカル座標の操作とする。 |
132 | 135 | GgafDx::LocoVehicle* pLocoVehicle = getLocoVehicle(); |
@@ -172,6 +175,10 @@ void MyBunshin::processSettlementBehavior() { | ||
172 | 175 | changeGeoFinal(); |
173 | 176 | |
174 | 177 | 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 | + | |
175 | 182 | } |
176 | 183 | void MyBunshin::processChangeGeoFinal() { |
177 | 184 | if (pBase_->is_isolate_mode_) { |
@@ -46,6 +46,11 @@ public: | ||
46 | 46 | // angle rz_local_copy_; |
47 | 47 | // bool _is_thunder_lock; |
48 | 48 | 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 | + | |
49 | 54 | public: |
50 | 55 | MyBunshin(const char* prm_name, MyBunshinController* prm_pBunshinController, MyBunshinBase* prm_pBase); |
51 | 56 |
@@ -259,14 +259,33 @@ L_PHASE_T2_AFTER: | ||
259 | 259 | void MyBunshinWateringLaserChip001::processSettlementBehavior() { |
260 | 260 | //分身はFKなので、絶対座標の確定が processSettlementBehavior() 以降となるため、ここで初期設定が必要 |
261 | 261 | 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 | +//} | |
262 | 273 | if (hasJustChangedToActive()) { |
274 | + //ロックオン情報の引き継ぎ | |
275 | + MyBunshinWateringLaserChip001* pF = (MyBunshinWateringLaserChip001*) getInfrontChip(); | |
263 | 276 | //チップの初期設定 |
264 | 277 | //活動開始初回フレーム、チップの速度と向きの初期設定 |
265 | 278 | setFaceAngAs(pOrg_); |
279 | + setPositionAt(pOrg_); | |
280 | + | |
281 | + | |
282 | + setFaceAngAs(pOrg_); | |
266 | 283 | //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 | + | |
268 | 286 | pNaviVehicle->setAcceZero(); |
269 | 287 | 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); //初速はここで | |
270 | 289 | if (n == 0) { |
271 | 290 | setPositionAt(pOrg_); |
272 | 291 | } else { |
@@ -276,8 +295,27 @@ void MyBunshinWateringLaserChip001::processSettlementBehavior() { | ||
276 | 295 | pOrg_->_z + (pNaviVehicle->_velo_vc_z * v) ); |
277 | 296 | } |
278 | 297 | |
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 | + | |
281 | 319 | if (pF == nullptr) { |
282 | 320 | //先端チップ |
283 | 321 | GgafDx::GeometricActor* pLockonTarget = pLockonCursor_->pTarget_; |
@@ -331,7 +369,7 @@ throwCriticalException("pLeaderChip_AimInfo_ | ||
331 | 369 | //したがって本クラスを継承した場合、継承クラスのprocessSettlementBehavior()では、先頭で呼び出した方が良い。 |
332 | 370 | |
333 | 371 | MyBunshinWateringLaserChip001* pF = (MyBunshinWateringLaserChip001*)getInfrontChip(); |
334 | - if (getActiveFrame() > 2) {//FKオブジェクトからのレーザー発射も考慮すると、_tmpXYZ が埋まるのは3フレーム以降。 | |
372 | + if (getActiveFrame() > (_n_dispatch_at_once-1)) { | |
335 | 373 | if (pF && pF->isActive()) { |
336 | 374 | MyBunshinWateringLaserChip001* pB = (MyBunshinWateringLaserChip001*)getBehindChip(); |
337 | 375 | //_pChip_behind == nullptr の判定だけではだめ。_pChip_behind->_is_active_flg と判定すること |
@@ -350,10 +388,36 @@ throwCriticalException("pLeaderChip_AimInfo_ | ||
350 | 388 | _z = _z + (coord)((pB->_z-_z)*0.2 + (pF->_z-_z)*0.4); |
351 | 389 | } |
352 | 390 | } 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 | + | |
357 | 421 | // coord v_b_x = _x - (pF->_x - _x); |
358 | 422 | // coord v_b_y = _y - (pF->_y - _y); |
359 | 423 | // coord v_b_z = _z - (pF->_z - _z); |
@@ -61,7 +61,7 @@ void BunshinMagic::processCastBegin(int prm_now_level, int prm_new_level) { | ||
61 | 61 | MyShip* pMyShip = pMYSHIP; |
62 | 62 | MyMagicEnergyCore* pCore = pMyShip->pMyMagicEnergyCore_; |
63 | 63 | 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); | |
65 | 65 | GgafDx::CoordVehicle* const pCoreCoordVehicle = pCore->getCoordVehicle(); |
66 | 66 | velo veloVxMv = pCoreCoordVehicle->_velo_x; |
67 | 67 | velo veloVyMv = pCoreCoordVehicle->_velo_y; |
@@ -65,9 +65,8 @@ void MyStgUtil::init() { | ||
65 | 65 | double x = (double)f; |
66 | 66 | SHOT_POWER[f] = (3.0 / ( (x/5.0) + 1 ) ) + 0.5; |
67 | 67 | } |
68 | - | |
69 | - | |
70 | 68 | MyStgUtil::_was_MyStgUtil_inited_flg = true; |
69 | + | |
71 | 70 | } |
72 | 71 | |
73 | 72 | GgafDx::FigureActor* MyStgUtil::shotWayGoldenAng(coord prm_x, coord prm_y, coord prm_z, |