X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
Revision | 292 (tree) |
---|---|
Zeit | 2022-03-12 17:11:50 |
Autor | ![]() |
各クラスにおけるメンバー変数の初期化処理を追加、算術関数をfloat型へ変更、当たり判定関数の仕様修正
@@ -38,12 +38,20 @@ | ||
38 | 38 | ctrlid = in_ctrlid; |
39 | 39 | if( in_ObjMgr != NULL ){ ctrlhuman = in_ObjMgr->GetHumanObject(in_ctrlid); } |
40 | 40 | else{ ctrlhuman = NULL; } |
41 | + enemyhuman = NULL; | |
41 | 42 | blocks = in_blocks; |
42 | 43 | Param = in_Param; |
43 | 44 | CollD = in_CollD; |
44 | 45 | GameSound = in_GameSound; |
45 | 46 | |
47 | + AIlevel = 0; | |
46 | 48 | battlemode = AI_NORMAL; |
49 | + NoFight = false; | |
50 | + posx = 0.0f; | |
51 | + posy = 0.0f; | |
52 | + posz = 0.0f; | |
53 | + rx = 0.0f; | |
54 | + ry = 0.0f; | |
47 | 55 | cautionback_posx = 0.0f; |
48 | 56 | cautionback_posz = 0.0f; |
49 | 57 | FaceCaution_flag = false; |
@@ -52,7 +60,10 @@ | ||
52 | 60 | waitcnt = 0; |
53 | 61 | movejumpcnt = 1*((int)GAMEFPS); |
54 | 62 | gotocnt = 0; |
63 | + cautioncnt = 0; | |
64 | + actioncnt = 0; | |
55 | 65 | longattack = false; |
66 | + LevelParam = NULL; | |
56 | 67 | |
57 | 68 | MoveNavi = new AIMoveNavi; |
58 | 69 | ObjDriver = new AIObjectDriver; |
@@ -304,8 +315,8 @@ | ||
304 | 315 | |
305 | 316 | if( GetRand(2) == 0 ){ |
306 | 317 | //前方向のベクトルを計算 |
307 | - vx = cos(rx*-1 + (float)M_PI/2); | |
308 | - vz = sin(rx*-1 + (float)M_PI/2); | |
318 | + vx = cosf(rx*-1 + (float)M_PI/2); | |
319 | + vz = sinf(rx*-1 + (float)M_PI/2); | |
309 | 320 | if( |
310 | 321 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy + HUMAN_MAPCOLLISION_HEIGHT, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == true)|| //腰の高さにブロックがある(ぶつかる) |
311 | 322 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy - 1.0f, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == false) //足元にブロックがない(落ちる) |
@@ -316,8 +327,8 @@ | ||
316 | 327 | } |
317 | 328 | |
318 | 329 | //後方向のベクトルを計算 |
319 | - vx = cos(rx*-1 + (float)M_PI/2 + (float)M_PI); | |
320 | - vz = sin(rx*-1 + (float)M_PI/2 + (float)M_PI); | |
330 | + vx = cosf(rx*-1 + (float)M_PI/2 + (float)M_PI); | |
331 | + vz = sinf(rx*-1 + (float)M_PI/2 + (float)M_PI); | |
321 | 332 | if( |
322 | 333 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy + HUMAN_MAPCOLLISION_HEIGHT, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == true)|| //腰の高さにブロックがある(ぶつかる) |
323 | 334 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy - 1.0f, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == false) //足元にブロックがない(落ちる) |
@@ -329,8 +340,8 @@ | ||
329 | 340 | } |
330 | 341 | else{ |
331 | 342 | // |
332 | - vx = cos(rx*-1); | |
333 | - vz = sin(rx*-1); | |
343 | + vx = cosf(rx*-1); | |
344 | + vz = sinf(rx*-1); | |
334 | 345 | if( |
335 | 346 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy + HUMAN_MAPCOLLISION_HEIGHT, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == true)|| //腰の高さにブロックがある(ぶつかる) |
336 | 347 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy - 1.0f, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == false) //足元にブロックがない(落ちる) |
@@ -340,8 +351,8 @@ | ||
340 | 351 | ObjDriver->SetModeFlag(AI_CTRL_MOVELEFT); |
341 | 352 | } |
342 | 353 | |
343 | - vx = cos(rx*-1 + (float)M_PI); | |
344 | - vz = sin(rx*-1 + (float)M_PI); | |
354 | + vx = cosf(rx*-1 + (float)M_PI); | |
355 | + vz = sinf(rx*-1 + (float)M_PI); | |
345 | 356 | if( |
346 | 357 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy + HUMAN_MAPCOLLISION_HEIGHT, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == true)|| //腰の高さにブロックがある(ぶつかる) |
347 | 358 | (CollD->CheckALLBlockIntersectDummyRay(posx, posy - 1.0f, posz, vx, 0, vz, NULL, NULL, &Dist, HUMAN_MAPCOLLISION_R) == false) //足元にブロックがない(落ちる) |
@@ -502,9 +513,9 @@ | ||
502 | 513 | float new_posx, new_posy, new_posz; |
503 | 514 | |
504 | 515 | //腰付近の当たり判定 |
505 | - new_posx = posx + cos(rx*-1 + (float)M_PI/2) * (AI_CHECKJUMP_DIST + HUMAN_MAPCOLLISION_R); | |
516 | + new_posx = posx + cosf(rx*-1 + (float)M_PI/2) * (AI_CHECKJUMP_DIST + HUMAN_MAPCOLLISION_R); | |
506 | 517 | new_posy = posy + HUMAN_MAPCOLLISION_HEIGHT; |
507 | - new_posz = posz + sin(rx*-1 + (float)M_PI/2) * (AI_CHECKJUMP_DIST + HUMAN_MAPCOLLISION_R); | |
518 | + new_posz = posz + sinf(rx*-1 + (float)M_PI/2) * (AI_CHECKJUMP_DIST + HUMAN_MAPCOLLISION_R); | |
508 | 519 | if( CollD->CheckALLBlockInside(new_posx, new_posy, new_posz) == true ){ |
509 | 520 | ObjMgr->MoveJump(ctrlid); |
510 | 521 | return true; |
@@ -511,9 +522,9 @@ | ||
511 | 522 | } |
512 | 523 | |
513 | 524 | //体全体の当たり判定 |
514 | - new_posx = posx + cos(rx*-1 + (float)M_PI/2) * AI_CHECKJUMP_DIST; | |
525 | + new_posx = posx + cosf(rx*-1 + (float)M_PI/2) * AI_CHECKJUMP_DIST; | |
515 | 526 | new_posy = posy + AI_CHECKJUMP_HEIGHT; |
516 | - new_posz = posz + sin(rx*-1 + (float)M_PI/2) * AI_CHECKJUMP_DIST; | |
527 | + new_posz = posz + sinf(rx*-1 + (float)M_PI/2) * AI_CHECKJUMP_DIST; | |
517 | 528 | if( CollD->CheckALLBlockInside(new_posx, new_posy, new_posz) == true ){ |
518 | 529 | ObjMgr->MoveJump(ctrlid); |
519 | 530 | return true; |
@@ -570,7 +581,7 @@ | ||
570 | 581 | else{ scale = 0.4f; } |
571 | 582 | |
572 | 583 | //距離に応じて高さを変える |
573 | - ty += (sqrt(r) - 200.0f) * scale; | |
584 | + ty += (sqrtf(r) - 200.0f) * scale; | |
574 | 585 | } |
575 | 586 | } |
576 | 587 | else{ |
@@ -583,7 +594,7 @@ | ||
583 | 594 | float z = posz - tz; |
584 | 595 | float r = x * x + z * z; |
585 | 596 | |
586 | - scale = sqrt(r) * 0.12f; | |
597 | + scale = sqrtf(r) * 0.12f; | |
587 | 598 | } |
588 | 599 | |
589 | 600 | //敵の移動を見超す |
@@ -696,7 +707,7 @@ | ||
696 | 707 | float z = posz - tz; |
697 | 708 | |
698 | 709 | //捕まえる (敵を引き付ける) |
699 | - EnemyHuman->AddPosOrder(atan2(z, x), 0.0f, 0.5f); | |
710 | + EnemyHuman->AddPosOrder(atan2f(z, x), 0.0f, 0.5f); | |
700 | 711 | |
701 | 712 | //敵の視点をランダムに動かす |
702 | 713 | float erx, ery; |
@@ -762,7 +773,7 @@ | ||
762 | 773 | } |
763 | 774 | |
764 | 775 | //敵を捉えていれば |
765 | - float atanxy = fabs(atanx) + fabs(atany); | |
776 | + float atanxy = fabsf(atanx) + fabsf(atany); | |
766 | 777 | if( atanxy < ShotAngle ){ |
767 | 778 | int rand = LevelParam->attack; |
768 | 779 | if( longattack == true ){ rand += 1; } |
@@ -1374,7 +1385,7 @@ | ||
1374 | 1385 | if( (fabs(mrx) < search_rx/2)&&(fabs(mry) < search_ry/2) ){ |
1375 | 1386 | float vx, vy, vz; |
1376 | 1387 | |
1377 | - Dist = sqrt(Dist2); | |
1388 | + Dist = sqrtf(Dist2); | |
1378 | 1389 | |
1379 | 1390 | //ベクトルを取得 |
1380 | 1391 | vx = (tx - posx)/Dist; |
@@ -95,17 +95,17 @@ | ||
95 | 95 | x = data.x[j] - cx; |
96 | 96 | y = data.y[j] - cy; |
97 | 97 | z = data.z[j] - cz; |
98 | - rx = atan2(z, x); | |
99 | - ry = atan2(y, sqrt(x*x + z*z)); | |
100 | - r = sqrt(x*x + y*y + z*z); | |
98 | + rx = atan2f(z, x); | |
99 | + ry = atan2f(y, sqrtf(x*x + z*z)); | |
100 | + r = sqrtf(x*x + y*y + z*z); | |
101 | 101 | |
102 | 102 | //大きくする |
103 | 103 | r += COLLISION_ADDSIZE; |
104 | 104 | |
105 | 105 | //座標を再計算 |
106 | - cbdata[i].x[j] = cx + cos(rx) * cos(ry) * r; | |
107 | - cbdata[i].y[j] = cy + sin(ry) * r; | |
108 | - cbdata[i].z[j] = cz + sin(rx) * cos(ry) * r; | |
106 | + cbdata[i].x[j] = cx + cosf(rx) * cosf(ry) * r; | |
107 | + cbdata[i].y[j] = cy + sinf(ry) * r; | |
108 | + cbdata[i].z[j] = cz + sinf(rx) * cosf(ry) * r; | |
109 | 109 | } |
110 | 110 | } |
111 | 111 |
@@ -285,8 +285,8 @@ | ||
285 | 285 | blockdata->Getdata(&bdata, id); |
286 | 286 | |
287 | 287 | //ベクトル算出 |
288 | - vx = cos(rx); | |
289 | - vz = sin(rx); | |
288 | + vx = cosf(rx); | |
289 | + vz = sinf(rx); | |
290 | 290 | |
291 | 291 | //内積 |
292 | 292 | d = bdata.material[face].vx*vx + bdata.material[face].vz*vz; |
@@ -864,7 +864,7 @@ | ||
864 | 864 | struct blockdata bdata; |
865 | 865 | blockdata->Getdata(&bdata, id); |
866 | 866 | |
867 | - float maxDist = sqrt(in_vx*in_vx + in_vy*in_vy + in_vz*in_vz); | |
867 | + float maxDist = sqrtf(in_vx*in_vx + in_vy*in_vy + in_vz*in_vz); | |
868 | 868 | if( maxDist == 0.0f ){ return false; } |
869 | 869 | |
870 | 870 | //内積 |
@@ -871,7 +871,7 @@ | ||
871 | 871 | float Dot = in_vx/maxDist * bdata.material[face].vx + in_vy/maxDist * bdata.material[face].vy + in_vz/maxDist * bdata.material[face].vz; |
872 | 872 | |
873 | 873 | //角度を求める |
874 | - *out_angle = asin(Dot) * -1; | |
874 | + *out_angle = asinf(Dot) * -1; | |
875 | 875 | |
876 | 876 | return true; |
877 | 877 | } |
@@ -901,7 +901,7 @@ | ||
901 | 901 | if( out_vz != NULL ){ *out_vz = in_vz - Dot * bdata.material[face].vz; } |
902 | 902 | |
903 | 903 | //角度を求める |
904 | - if( out_angle != NULL ){ *out_angle = asin(Dot) * -1; } | |
904 | + if( out_angle != NULL ){ *out_angle = asinf(Dot) * -1; } | |
905 | 905 | //if( out_angle != NULL ){ *out_angle = Dot * -1; } |
906 | 906 | |
907 | 907 | return true; |
@@ -968,8 +968,8 @@ | ||
968 | 968 | float caser = x*x + z*z; |
969 | 969 | float minr = (c1_r+c2_r) * (c1_r+c2_r); |
970 | 970 | if( caser < minr ){ |
971 | - if( angle != NULL ){ *angle = atan2(z, x); } | |
972 | - if( length != NULL ){ *length = sqrt(minr) - sqrt(caser); } | |
971 | + if( angle != NULL ){ *angle = atan2f(z, x); } | |
972 | + if( length != NULL ){ *length = sqrtf(minr) - sqrtf(caser); } | |
973 | 973 | return true; |
974 | 974 | } |
975 | 975 | } |
@@ -1061,7 +1061,7 @@ | ||
1061 | 1061 | x = s_x - RayPos_x; |
1062 | 1062 | y = s_y - RayPos_y; |
1063 | 1063 | z = s_z - RayPos_z; |
1064 | - d = sqrt(x*x + y*y + z*z); | |
1064 | + d = sqrtf(x*x + y*y + z*z); | |
1065 | 1065 | |
1066 | 1066 | //レイ始点が半径より近い(=めり込んでいる) |
1067 | 1067 | if( d < s_r ){ |
@@ -1073,8 +1073,8 @@ | ||
1073 | 1073 | MinDist = DistancePosRay(s_x, s_y, s_z, RayPos_x, RayPos_y, RayPos_z, RayDir_x, RayDir_y, RayDir_z); |
1074 | 1074 | |
1075 | 1075 | if( MinDist <= s_r ){ |
1076 | - RayDist = sqrt(d*d - MinDist*MinDist); //(レイ始点から)点に最も近づく距離 | |
1077 | - RDist = sqrt(s_r*s_r - MinDist*MinDist); //(点半径から)点に最も近づく距離 | |
1076 | + RayDist = sqrtf(d*d - MinDist*MinDist); //(レイ始点から)点に最も近づく距離 | |
1077 | + RDist = sqrtf(s_r*s_r - MinDist*MinDist); //(点半径から)点に最も近づく距離 | |
1078 | 1078 | |
1079 | 1079 | *Dist = RayDist - RDist; //レイ視点最短 - 半径最短 = レイ視点から半径までの最短 |
1080 | 1080 |
@@ -1288,7 +1288,7 @@ | ||
1288 | 1288 | //点とレイ始点の距離 |
1289 | 1289 | x = c_x - RayPos_x; |
1290 | 1290 | z = c_z - RayPos_z; |
1291 | - d = sqrt(x*x + z*z); | |
1291 | + d = sqrtf(x*x + z*z); | |
1292 | 1292 | |
1293 | 1293 | //点(円柱の中心)とレイの最短距離を求める |
1294 | 1294 | cMinDist = DistancePosRay(c_x, 0.0f, c_z, RayPos_x, 0.0f, RayPos_z, RayDir_x, 0.0f, RayDir_z); |
@@ -1298,8 +1298,8 @@ | ||
1298 | 1298 | return false; |
1299 | 1299 | } |
1300 | 1300 | |
1301 | - cRayDist = sqrt(d*d - cMinDist*cMinDist); //(レイ始点から)点に最も近づく距離 | |
1302 | - cRDist = sqrt(c_r*c_r - cMinDist*cMinDist); //(点半径から)点に最も近づく距離 | |
1301 | + cRayDist = sqrtf(d*d - cMinDist*cMinDist); //(レイ始点から)点に最も近づく距離 | |
1302 | + cRDist = sqrtf(c_r*c_r - cMinDist*cMinDist); //(点半径から)点に最も近づく距離 | |
1303 | 1303 | |
1304 | 1304 | if( d < c_r ){ |
1305 | 1305 | RayXZ_min = 0; //始点が円の中なら距離ゼロ |
@@ -1311,7 +1311,7 @@ | ||
1311 | 1311 | //点とレイ終点の距離 |
1312 | 1312 | x = c_x - RayPos_x + RayDir_x*maxDist; |
1313 | 1313 | z = c_z - RayPos_z + RayDir_x*maxDist; |
1314 | - d = sqrt(x*x + z*z); | |
1314 | + d = sqrtf(x*x + z*z); | |
1315 | 1315 | |
1316 | 1316 | if( d < c_r ){ |
1317 | 1317 | RayXZ_max = maxDist; //終点が円の中なら最大距離 |
@@ -1321,9 +1321,9 @@ | ||
1321 | 1321 | } |
1322 | 1322 | |
1323 | 1323 | //Y軸と比べる前に、Y軸と比較できるよう変換 (底辺の値を斜辺へ変換) |
1324 | - float Ray_ry = atan2(RayDir_y, sqrt(RayDir_x*RayDir_x + RayDir_z*RayDir_z)); | |
1325 | - Ray_min[0] = RayXZ_min / cos(Ray_ry); | |
1326 | - Ray_max[0] = RayXZ_max / cos(Ray_ry); | |
1324 | + float Ray_ry = atan2f(RayDir_y, sqrtf(RayDir_x*RayDir_x + RayDir_z*RayDir_z)); | |
1325 | + Ray_min[0] = RayXZ_min / cosf(Ray_ry); | |
1326 | + Ray_max[0] = RayXZ_max / cosf(Ray_ry); | |
1327 | 1327 | |
1328 | 1328 | |
1329 | 1329 | //Y軸のみAABBと同様の処理 |
@@ -1414,7 +1414,7 @@ | ||
1414 | 1414 | |
1415 | 1415 | //レイのベクトルが逆方向なら |
1416 | 1416 | if( Dot < 0.0f ){ |
1417 | - return sqrt(x1*x1 + y1*y1 + z1*z1); | |
1417 | + return sqrtf(x1*x1 + y1*y1 + z1*z1); | |
1418 | 1418 | } |
1419 | 1419 | |
1420 | 1420 | //外積 |
@@ -1422,7 +1422,7 @@ | ||
1422 | 1422 | y3 = z1 * x2 - x1 * z2; |
1423 | 1423 | z3 = x1 * y2 - y1 * x2; |
1424 | 1424 | |
1425 | - return sqrt(x3*x3 + y3*y3 + z3*z3) / sqrt(RayDir_x*RayDir_x + RayDir_y*RayDir_y + RayDir_z*RayDir_z); | |
1425 | + return sqrtf(x3*x3 + y3*y3 + z3*z3) / sqrtf(RayDir_x*RayDir_x + RayDir_y*RayDir_y + RayDir_z*RayDir_z); | |
1426 | 1426 | } |
1427 | 1427 | |
1428 | 1428 | //! @brief 線分と線分の当たり判定(2D) |
@@ -1486,7 +1486,7 @@ | ||
1486 | 1486 | bool Get2DLineInBox(int line_x1, int line_y1, int line_x2, int line_y2, int box_x1, int box_y1, int box_x2, int box_y2, int *out_line_x1, int *out_line_y1, int *out_line_x2, int *out_line_y2) |
1487 | 1487 | { |
1488 | 1488 | //四角形指定が異常 |
1489 | - if( (box_x1 >= box_x2)||(box_x1 >= box_x2) ){ return false; } | |
1489 | + if( (box_x1 >= box_x2)||(box_y1 >= box_y2) ){ return false; } | |
1490 | 1490 | |
1491 | 1491 | //上下左右の空間にあるなら、的外れ |
1492 | 1492 | if( (line_x1 < box_x1)&&(line_x2 < box_x1) ){ return false; } |
@@ -1584,7 +1584,7 @@ | ||
1584 | 1584 | //! @param out_ry 対象点への垂直角度を受け取るポインタ(NULL可) |
1585 | 1585 | //! @param out_dist2 対象点への距離<b>の二乗</b>を受け取るポインタ(NULL可) |
1586 | 1586 | //! @return 成功:true 失敗:false |
1587 | -//! @warning out_dist2は距離の<b>二乗</b>です。必要に応じて改めて sqrt()関数 などを用いてください。 | |
1587 | +//! @warning out_dist2は距離の<b>二乗</b>です。必要に応じて改めて sqrtf()関数 などを用いてください。 | |
1588 | 1588 | //! @attention 引数 checkdist に有効な距離を与えた場合は、観測点から対象点への距離判定も行います。指定された距離より離れている場合、角度を計算せずに false を返します。 |
1589 | 1589 | //! @attention 逆に、引数 checkdist に0.0f以下を与えた場合、距離による判定を行いません。関数は常に true を返します。 |
1590 | 1590 | bool CheckTargetAngle(float pos_x, float pos_y, float pos_z, float rx, float ry, float target_x, float target_y, float target_z, float checkdist, float *out_rx, float *out_ry, float *out_dist2) |
@@ -1608,7 +1608,7 @@ | ||
1608 | 1608 | } |
1609 | 1609 | |
1610 | 1610 | if( out_rx != NULL ){ |
1611 | - angleX = atan2(z, x) - rx; | |
1611 | + angleX = atan2f(z, x) - rx; | |
1612 | 1612 | for(; angleX > (float)M_PI; angleX -= (float)M_PI*2){} |
1613 | 1613 | for(; angleX < (float)M_PI*-1; angleX += (float)M_PI*2){} |
1614 | 1614 |
@@ -1615,7 +1615,7 @@ | ||
1615 | 1615 | *out_rx = angleX; |
1616 | 1616 | } |
1617 | 1617 | if( out_ry != NULL ){ |
1618 | - angleY = atan2(y, sqrt(x*x + z*z)) - ry; | |
1618 | + angleY = atan2f(y, sqrtf(x*x + z*z)) - ry; | |
1619 | 1619 | |
1620 | 1620 | *out_ry = angleY; |
1621 | 1621 | } |
@@ -1631,7 +1631,7 @@ | ||
1631 | 1631 | //! @return 正規化前のベクトルの長さ |
1632 | 1632 | float VectorNormalization(float *vx, float *vy, float *vz) |
1633 | 1633 | { |
1634 | - float r = sqrt((*vx) * (*vx) + (*vy) * (*vy) + (*vz) * (*vz)); | |
1634 | + float r = sqrtf((*vx) * (*vx) + (*vy) * (*vy) + (*vz) * (*vz)); | |
1635 | 1635 | if( r > 0.0f ){ |
1636 | 1636 | *vx /= r; |
1637 | 1637 | *vy /= r; |
@@ -1211,7 +1211,7 @@ | ||
1211 | 1211 | //カメラの向きを決定 |
1212 | 1212 | if( fabs(camera_ry) == D3DX_PI/2 ){ |
1213 | 1213 | //真上or真下を向いているならば、カメラの上部指定を横向きにする。 |
1214 | - vUpVecF_x = cos(camera_rx); vUpVecF_y = 0.0f; vUpVecF_z = sin(camera_rx); | |
1214 | + vUpVecF_x = cosf(camera_rx); vUpVecF_y = 0.0f; vUpVecF_z = sinf(camera_rx); | |
1215 | 1215 | } |
1216 | 1216 | else{ |
1217 | 1217 | if( fabs(camera_ry) < D3DX_PI/2 ){ |
@@ -1232,7 +1232,7 @@ | ||
1232 | 1232 | |
1233 | 1233 | //カメラ座標 |
1234 | 1234 | D3DXVECTOR3 vEyePt( camera_x, camera_y, camera_z ); |
1235 | - D3DXVECTOR3 vLookatPt( cos(camera_rx)*cos(camera_ry) + camera_x, sin(camera_ry) + camera_y, sin(camera_rx)*cos(camera_ry) + camera_z ); | |
1235 | + D3DXVECTOR3 vLookatPt( cosf(camera_rx)*cosf(camera_ry) + camera_x, sinf(camera_ry) + camera_y, sinf(camera_rx)*cosf(camera_ry) + camera_z ); | |
1236 | 1236 | D3DXVECTOR3 vUpVec( vUpVecF_x, vUpVecF_y, vUpVecF_z ); |
1237 | 1237 | D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); |
1238 | 1238 | #if GRAPHIC_ENGINE == 0 |
@@ -2162,8 +2162,8 @@ | ||
2162 | 2162 | |
2163 | 2163 | //頂点座標と色などを設定 |
2164 | 2164 | for(int i=0; i<16+1; i++){ |
2165 | - pLineVertices[i].x = (float)x + cos(DegreeToRadian((360.0f/16.0f)) * i) * r; | |
2166 | - pLineVertices[i].y = (float)y + sin(DegreeToRadian((360.0f/16.0f)) * i) * r; | |
2165 | + pLineVertices[i].x = (float)x + cosf(DegreeToRadian((360.0f/16.0f)) * i) * r; | |
2166 | + pLineVertices[i].y = (float)y + sinf(DegreeToRadian((360.0f/16.0f)) * i) * r; | |
2167 | 2167 | |
2168 | 2168 | pLineVertices[i].z = 0.0f; |
2169 | 2169 | pLineVertices[i].rhw = 1.0f; |
@@ -1756,7 +1756,7 @@ | ||
1756 | 1756 | |
1757 | 1757 | glMatrixMode(GL_MODELVIEW); |
1758 | 1758 | glLoadIdentity(); |
1759 | - gluLookAt(camera_x*-1, camera_y, camera_z, camera_x*-1 + cos(camera_rx*-1 + (float)M_PI)*cos(camera_ry), camera_y + sin(camera_ry), camera_z + sin(camera_rx*-1 + (float)M_PI)*cos(camera_ry), 0.0f, camera_y_flag, 0.0f); | |
1759 | + gluLookAt(camera_x*-1, camera_y, camera_z, camera_x*-1 + cosf(camera_rx*-1 + (float)M_PI)*cosf(camera_ry), camera_y + sinf(camera_ry), camera_z + sinf(camera_rx*-1 + (float)M_PI)*cosf(camera_ry), 0.0f, camera_y_flag, 0.0f); | |
1760 | 1760 | } |
1761 | 1761 | |
1762 | 1762 | //! @brief ワールド空間の座標・角度・拡大率を設定 |
@@ -2888,8 +2888,8 @@ | ||
2888 | 2888 | //頂点座標を設定 |
2889 | 2889 | for(int i=0; i<16+1; i++){ |
2890 | 2890 | float x2, y2; |
2891 | - x2 = (float)x + cos((float)M_PI*2/16 * i) * r; | |
2892 | - y2 = (float)y + sin((float)M_PI*2/16 * i) * r; | |
2891 | + x2 = (float)x + cosf((float)M_PI*2/16 * i) * r; | |
2892 | + y2 = (float)y + sinf((float)M_PI*2/16 * i) * r; | |
2893 | 2893 | VertexAry[i*2] = x2; VertexAry[i*2+1] = y2; |
2894 | 2894 | } |
2895 | 2895 |
@@ -192,9 +192,9 @@ | ||
192 | 192 | float rx, ry, rz, a; |
193 | 193 | |
194 | 194 | //光源の角度を設定 |
195 | - lx = cos(LIGHT_RX); | |
196 | - ly = sin(LIGHT_RY); | |
197 | - lz = sin(LIGHT_RX); | |
195 | + lx = cosf(LIGHT_RX); | |
196 | + ly = sinf(LIGHT_RY); | |
197 | + lz = sinf(LIGHT_RX); | |
198 | 198 | |
199 | 199 | //各ブロックの面情報分処理する |
200 | 200 | for(int i=0; i<datas; i++){ |
@@ -222,13 +222,13 @@ | ||
222 | 222 | xs1 = ((data[i].y[ vID[3] ] - data[i].y[ vID[2] ]) * (data[i].z[ vID[0] ] - data[i].z[ vID[2] ])) - ((data[i].y[ vID[0] ] - data[i].y[ vID[2] ]) * (data[i].z[ vID[3] ] - data[i].z[ vID[2] ])); |
223 | 223 | ys1 = ((data[i].z[ vID[3] ] - data[i].z[ vID[2] ]) * (data[i].x[ vID[0] ] - data[i].x[ vID[2] ])) - ((data[i].z[ vID[0] ] - data[i].z[ vID[2] ]) * (data[i].x[ vID[3] ] - data[i].x[ vID[2] ])); |
224 | 224 | zs1 = ((data[i].x[ vID[3] ] - data[i].x[ vID[2] ]) * (data[i].y[ vID[0] ] - data[i].y[ vID[2] ])) - ((data[i].x[ vID[0] ] - data[i].x[ vID[2] ]) * (data[i].y[ vID[3] ] - data[i].y[ vID[2] ])); |
225 | - g1 = (float)sqrt(xs1 * xs1 + ys1 * ys1 + zs1 * zs1); | |
225 | + g1 = (float)sqrtf(xs1 * xs1 + ys1 * ys1 + zs1 * zs1); | |
226 | 226 | |
227 | 227 | //もう一方の三角形でも計算する |
228 | 228 | xs2 = ((data[i].y[ vID[1] ] - data[i].y[ vID[0] ]) * (data[i].z[ vID[2] ] - data[i].z[ vID[0] ])) - ((data[i].y[ vID[2] ] - data[i].y[ vID[0] ]) * (data[i].z[ vID[1] ] - data[i].z[ vID[0] ])); |
229 | 229 | ys2 = ((data[i].z[ vID[1] ] - data[i].z[ vID[0] ]) * (data[i].x[ vID[2] ] - data[i].x[ vID[0] ])) - ((data[i].z[ vID[2] ] - data[i].z[ vID[0] ]) * (data[i].x[ vID[1] ] - data[i].x[ vID[0] ])); |
230 | 230 | zs2 = ((data[i].x[ vID[1] ] - data[i].x[ vID[0] ]) * (data[i].y[ vID[2] ] - data[i].y[ vID[0] ])) - ((data[i].x[ vID[2] ] - data[i].x[ vID[0] ]) * (data[i].y[ vID[1] ] - data[i].y[ vID[0] ])); |
231 | - g2 = (float)sqrt(xs2 * xs2 + ys2 * ys2 + zs2 * zs2); | |
231 | + g2 = (float)sqrtf(xs2 * xs2 + ys2 * ys2 + zs2 * zs2); | |
232 | 232 | |
233 | 233 | //正しい計算結果を採用する |
234 | 234 | if( g1 > g2 ){ |
@@ -253,9 +253,9 @@ | ||
253 | 253 | rx = data[i].material[j].vx + lx; |
254 | 254 | ry = data[i].material[j].vy + ly; |
255 | 255 | rz = data[i].material[j].vz + lz; |
256 | - //a = sqrt(fabs(rx*rx + ry*ry + rz*rz)) / 2.0f; | |
256 | + //a = sqrtf(fabs(rx*rx + ry*ry + rz*rz)) / 2.0f; | |
257 | 257 | //data[i].material[j].shadow = a/2 + 0.5f; |
258 | - a = sqrt(rx*rx + ry*ry + rz*rz) / 3.0f; | |
258 | + a = sqrtf(rx*rx + ry*ry + rz*rz) / 3.0f; | |
259 | 259 | data[i].material[j].shadow = a/2; |
260 | 260 | if( darkflag == false ){ |
261 | 261 | data[i].material[j].shadow += 0.5f; |
@@ -113,10 +113,10 @@ | ||
113 | 113 | z = hz - pos_z; |
114 | 114 | |
115 | 115 | if( reverse == false ){ |
116 | - if( sqrt(x*x + y*y+ + z*z) > dist_r ){ return false; } | |
116 | + if( sqrtf(x*x + y*y+ + z*z) > dist_r ){ return false; } | |
117 | 117 | } |
118 | 118 | else{ |
119 | - if( sqrt(x*x + y*y+ + z*z) < dist_r ){ return false; } | |
119 | + if( sqrtf(x*x + y*y+ + z*z) < dist_r ){ return false; } | |
120 | 120 | } |
121 | 121 | return true; |
122 | 122 | } |
@@ -474,10 +474,31 @@ | ||
474 | 474 | mainmenu::mainmenu() |
475 | 475 | { |
476 | 476 | demopath[0] = '\0'; |
477 | + modescreen = 0; | |
478 | + mainmenu_mouseX = 0; | |
479 | + mainmenu_mouseY = 0; | |
480 | + mainmenu_mouseY_old = mainmenu_mouseY; | |
481 | + gametitle = -1; | |
477 | 482 | |
478 | 483 | #ifdef ENABLE_MENUOPTIONS |
484 | + for( int i=0; i<OPTIONS_P1_DATAS; i++ ){ | |
485 | + Options_p1LinkTextData[i].enable = false; | |
486 | + } | |
487 | + for( int i=0; i<OPTIONS_P2_DATAS; i++ ){ | |
488 | + Options_p2LinkTextData[i].enable = false; | |
489 | + } | |
490 | + for( int i=0; i<OPTIONS_P3_DATAS; i++ ){ | |
491 | + Options_p3LinkTextData[i].enable = false; | |
492 | + } | |
493 | + Options_p2LinkTextID = -1; | |
494 | + Options_FullscreenFlag_old = GameConfig.GetFullscreenFlag(); | |
495 | + Options_KeyConfigID = -1; | |
496 | + Options_KeyConfigCnt = 0; | |
497 | + licenseinfo[0] = ""; | |
479 | 498 | licenseinfobuf = new char[100*18]; |
480 | - licenseinfobuf[0] = '\0'; | |
499 | + for( int i=0; i<OPTIONS_LICENSELINE; i++ ){ | |
500 | + licenseinfobuf[i] = '\0'; | |
501 | + } | |
481 | 502 | #endif |
482 | 503 | } |
483 | 504 |
@@ -1546,7 +1567,11 @@ | ||
1546 | 1567 | |
1547 | 1568 | //! @brief コンストラクタ |
1548 | 1569 | briefing::briefing() |
1549 | -{} | |
1570 | +{ | |
1571 | + TwoTexture = false; | |
1572 | + TextureA = -1; | |
1573 | + TextureB = -1; | |
1574 | +} | |
1550 | 1575 | |
1551 | 1576 | //! @brief ディストラクタ |
1552 | 1577 | briefing::~briefing() |
@@ -1684,11 +1709,40 @@ | ||
1684 | 1709 | //! @brief コンストラクタ |
1685 | 1710 | maingame::maingame() |
1686 | 1711 | { |
1712 | + SkyNumber = 0; | |
1713 | + DarkScreenFlag = false; | |
1714 | + FogFlag = true; | |
1715 | + mouse_rx = 0.0f; | |
1716 | + mouse_ry = 0.0f; | |
1717 | + view_rx = 0.0f; | |
1718 | + view_ry = 0.0f; | |
1687 | 1719 | add_camera_rx = 0.0f; |
1688 | 1720 | add_camera_ry = 0.0f; |
1689 | 1721 | ShowInfo_Debugmode = false; |
1722 | + Camera_Debugmode = false; | |
1723 | + tag = false; | |
1724 | + radar = false; | |
1725 | + wireframe = false; | |
1726 | + nomodel = false; | |
1727 | + CenterLine = false; | |
1728 | + Camera_Blind = true; | |
1729 | + Camera_F1mode = false; | |
1690 | 1730 | Camera_F2mode = 0; |
1691 | 1731 | Camera_HOMEmode = false; |
1732 | + Cmd_F5 = false; | |
1733 | + InvincibleID = -1; | |
1734 | + PlayerAI = false; | |
1735 | + AIstop = false; | |
1736 | + AINoFight = false; | |
1737 | + AIdebuginfoID = -1; | |
1738 | + start_framecnt = 0; | |
1739 | + end_framecnt = 0; | |
1740 | + EventStop = false; | |
1741 | + GameSpeed = 1; | |
1742 | + message_id = -1; | |
1743 | + message_cnt = 0; | |
1744 | + redflash_flag = false; | |
1745 | + time = 0; | |
1692 | 1746 | time_input = 0; |
1693 | 1747 | time_process_object = 0; |
1694 | 1748 | time_process_ai = 0; |
@@ -1695,6 +1749,15 @@ | ||
1695 | 1749 | time_process_event = 0; |
1696 | 1750 | time_sound = 0; |
1697 | 1751 | time_render = 0; |
1752 | + memcpy(&MainGameInfo, &GameInfoData, sizeof(GameInfo)); | |
1753 | + | |
1754 | +#ifdef ENABLE_DEBUGCONSOLE | |
1755 | + Show_Console = false; | |
1756 | + InfoConsoleData = NULL; | |
1757 | + InputConsoleData = NULL; | |
1758 | + NewCommand[0] = '\0'; | |
1759 | + ScreenShot = 0; | |
1760 | +#endif | |
1698 | 1761 | } |
1699 | 1762 | |
1700 | 1763 | //! @brief ディストラクタ |
@@ -2336,9 +2399,9 @@ | ||
2336 | 2399 | } |
2337 | 2400 | |
2338 | 2401 | //プレイヤーの目の前の座標を取得 |
2339 | - x += cos(r*-1 + (float)M_PI/2)*10.0f; | |
2402 | + x += cosf(r*-1 + (float)M_PI/2)*10.0f; | |
2340 | 2403 | y += 5.0f; |
2341 | - z += sin(r*-1 + (float)M_PI/2)*10.0f; | |
2404 | + z += sinf(r*-1 + (float)M_PI/2)*10.0f; | |
2342 | 2405 | |
2343 | 2406 | //人を追加 |
2344 | 2407 | id = ObjMgr.AddHumanIndex(x, y, z, r, param, team, weapon_paramid, 0, false); |
@@ -2395,22 +2458,22 @@ | ||
2395 | 2458 | |
2396 | 2459 | //キー操作によりカメラ座標を計算 |
2397 | 2460 | if( CheckInputControl(KEY_MOVEFORWARD, 0) ){ |
2398 | - camera_x += cos(camera_rx)*cos(camera_ry)*dist; | |
2399 | - camera_y += sin(camera_ry)*dist; | |
2400 | - camera_z += sin(camera_rx)*cos(camera_ry)*dist; | |
2461 | + camera_x += cosf(camera_rx)*cosf(camera_ry)*dist; | |
2462 | + camera_y += sinf(camera_ry)*dist; | |
2463 | + camera_z += sinf(camera_rx)*cosf(camera_ry)*dist; | |
2401 | 2464 | } |
2402 | 2465 | if( CheckInputControl(KEY_MOVEBACKWARD, 0) ){ |
2403 | - camera_x -= cos(camera_rx)*cos(camera_ry)*dist; | |
2404 | - camera_y -= sin(camera_ry)*dist; | |
2405 | - camera_z -= sin(camera_rx)*cos(camera_ry)*dist; | |
2466 | + camera_x -= cosf(camera_rx)*cosf(camera_ry)*dist; | |
2467 | + camera_y -= sinf(camera_ry)*dist; | |
2468 | + camera_z -= sinf(camera_rx)*cosf(camera_ry)*dist; | |
2406 | 2469 | } |
2407 | 2470 | if( CheckInputControl(KEY_MOVELEFT, 0) ){ |
2408 | - camera_x += cos(camera_rx + (float)M_PI/2)*dist; | |
2409 | - camera_z += sin(camera_rx + (float)M_PI/2)*dist; | |
2471 | + camera_x += cosf(camera_rx + (float)M_PI/2)*dist; | |
2472 | + camera_z += sinf(camera_rx + (float)M_PI/2)*dist; | |
2410 | 2473 | } |
2411 | 2474 | if( CheckInputControl(KEY_MOVERIGHT, 0) ){ |
2412 | - camera_x += cos(camera_rx - (float)M_PI/2)*dist; | |
2413 | - camera_z += sin(camera_rx - (float)M_PI/2)*dist; | |
2475 | + camera_x += cosf(camera_rx - (float)M_PI/2)*dist; | |
2476 | + camera_z += sinf(camera_rx - (float)M_PI/2)*dist; | |
2414 | 2477 | } |
2415 | 2478 | } |
2416 | 2479 |
@@ -2529,9 +2592,9 @@ | ||
2529 | 2592 | |
2530 | 2593 | camera_rx += DegreeToRadian(1.0f); |
2531 | 2594 | camera_ry = ry; |
2532 | - camera_x = x + cos(camera_rx)*r; | |
2595 | + camera_x = x + cosf(camera_rx)*r; | |
2533 | 2596 | camera_y = y + 33.3f; |
2534 | - camera_z = z + sin(camera_rx)*r; | |
2597 | + camera_z = z + sinf(camera_rx)*r; | |
2535 | 2598 | } |
2536 | 2599 | else if( Camera_F1mode == true ){ |
2537 | 2600 | float crx, cry; |
@@ -2540,14 +2603,14 @@ | ||
2540 | 2603 | //カメラの注視点を計算 |
2541 | 2604 | crx = camera_rx*0.8f + (view_rx + mouse_rx*-1 + (float)M_PI/2)*0.2f; // 8 : 2 |
2542 | 2605 | cry = camera_ry*0.8f + (view_ry + mouse_ry)*0.2f - (float)M_PI/2; // 8 : 2 |
2543 | - ccx = x - cos(crx)*cos(cry)*3.0f; | |
2544 | - ccy = y + HUMAN_HEIGHT-0.5f + sin(cry*-1)*2.5f; | |
2545 | - ccz = z - sin(crx)*cos(cry)*3.0f; | |
2606 | + ccx = x - cosf(crx)*cosf(cry)*3.0f; | |
2607 | + ccy = y + HUMAN_HEIGHT-0.5f + sinf(cry*-1)*2.5f; | |
2608 | + ccz = z - sinf(crx)*cosf(cry)*3.0f; | |
2546 | 2609 | |
2547 | 2610 | //注視点からカメラまでの当たり判定 |
2548 | 2611 | cry += (float)M_PI/2; |
2549 | 2612 | float dist; |
2550 | - if( CollD.CheckALLBlockIntersectRay(ccx, ccy, ccz, cos(crx)*cos(cry)*-1, sin(cry*-1), sin(crx)*cos(cry)*-1, NULL, NULL, &dist, VIEW_F1MODE_DIST) == true ){ | |
2613 | + if( CollD.CheckALLBlockIntersectRay(ccx, ccy, ccz, cosf(crx)*cosf(cry)*-1, sinf(cry*-1), sinf(crx)*cosf(cry)*-1, NULL, NULL, &dist, VIEW_F1MODE_DIST) == true ){ | |
2551 | 2614 | dist -= 1.0f; |
2552 | 2615 | } |
2553 | 2616 | else{ |
@@ -2555,9 +2618,9 @@ | ||
2555 | 2618 | } |
2556 | 2619 | |
2557 | 2620 | //カメラ座標を再計算 |
2558 | - camera_x = ccx - cos(crx)*cos(cry)*(dist); | |
2559 | - camera_y = ccy + sin(cry*-1)*dist; | |
2560 | - camera_z = ccz - sin(crx)*cos(cry)*(dist); | |
2621 | + camera_x = ccx - cosf(crx)*cosf(cry)*(dist); | |
2622 | + camera_y = ccy + sinf(cry*-1)*dist; | |
2623 | + camera_z = ccz - sinf(crx)*cosf(cry)*(dist); | |
2561 | 2624 | camera_rx = crx; |
2562 | 2625 | camera_ry = cry; |
2563 | 2626 | } |
@@ -2565,9 +2628,9 @@ | ||
2565 | 2628 | float crx = view_rx + mouse_rx*-1 + (float)M_PI/2; |
2566 | 2629 | float cry = view_ry + mouse_ry; |
2567 | 2630 | |
2568 | - camera_x = x + cos(crx)*cos(cry)*VIEW_DIST; | |
2569 | - camera_y = y + VIEW_HEIGHT + sin(cry)*VIEW_DIST; | |
2570 | - camera_z = z + sin(crx)*cos(cry)*VIEW_DIST; | |
2631 | + camera_x = x + cosf(crx)*cosf(cry)*VIEW_DIST; | |
2632 | + camera_y = y + VIEW_HEIGHT + sinf(cry)*VIEW_DIST; | |
2633 | + camera_z = z + sinf(crx)*cosf(cry)*VIEW_DIST; | |
2571 | 2634 | camera_rx = crx; |
2572 | 2635 | camera_ry = cry; |
2573 | 2636 | } |
@@ -2864,22 +2927,22 @@ | ||
2864 | 2927 | if( scopemode == 2 ){ addang = VIEWANGLE_SCOPE_2 / 4; } |
2865 | 2928 | |
2866 | 2929 | //上 |
2867 | - if( CollD.CheckALLBlockInside(camera_x + cos(camera_rx)*cos(camera_ry + addang) * adddist, camera_y + sin(camera_ry + addang) * adddist, camera_z + sin(camera_rx)*cos(camera_ry + addang) * adddist) == true ){ | |
2930 | + if( CollD.CheckALLBlockInside(camera_x + cosf(camera_rx)*cosf(camera_ry + addang) * adddist, camera_y + sinf(camera_ry + addang) * adddist, camera_z + sinf(camera_rx)*cosf(camera_ry + addang) * adddist) == true ){ | |
2868 | 2931 | d3dg->Draw2DBox(0, 0, GameConfig.GetScreenWidth(), GameConfig.GetScreenHeight()/2, d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f)); |
2869 | 2932 | } |
2870 | 2933 | |
2871 | 2934 | //下 |
2872 | - if( CollD.CheckALLBlockInside(camera_x + cos(camera_rx)*cos(camera_ry - addang) * adddist, camera_y + sin(camera_ry - addang) * adddist, camera_z + sin(camera_rx)*cos(camera_ry - addang) * adddist) == true ){ | |
2935 | + if( CollD.CheckALLBlockInside(camera_x + cosf(camera_rx)*cosf(camera_ry - addang) * adddist, camera_y + sinf(camera_ry - addang) * adddist, camera_z + sinf(camera_rx)*cosf(camera_ry - addang) * adddist) == true ){ | |
2873 | 2936 | d3dg->Draw2DBox(0, GameConfig.GetScreenHeight()/2, GameConfig.GetScreenWidth(), GameConfig.GetScreenHeight(), d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f)); |
2874 | 2937 | } |
2875 | 2938 | |
2876 | 2939 | //左 |
2877 | - if( CollD.CheckALLBlockInside(camera_x + cos(camera_rx + addang)*cos(camera_ry) * adddist, camera_y + sin(camera_ry) * adddist, camera_z + sin(camera_rx + addang)*cos(camera_ry) * adddist) == true ){ | |
2940 | + if( CollD.CheckALLBlockInside(camera_x + cosf(camera_rx + addang)*cosf(camera_ry) * adddist, camera_y + sinf(camera_ry) * adddist, camera_z + sinf(camera_rx + addang)*cosf(camera_ry) * adddist) == true ){ | |
2878 | 2941 | d3dg->Draw2DBox(0, 0, GameConfig.GetScreenWidth()/2, GameConfig.GetScreenHeight(), d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f)); |
2879 | 2942 | } |
2880 | 2943 | |
2881 | 2944 | //右 |
2882 | - if( CollD.CheckALLBlockInside(camera_x + cos(camera_rx - addang)*cos(camera_ry) * adddist, camera_y + sin(camera_ry) * adddist, camera_z + sin(camera_rx - addang)*cos(camera_ry) * adddist) == true ){ | |
2945 | + if( CollD.CheckALLBlockInside(camera_x + cosf(camera_rx - addang)*cosf(camera_ry) * adddist, camera_y + sinf(camera_ry) * adddist, camera_z + sinf(camera_rx - addang)*cosf(camera_ry) * adddist) == true ){ | |
2883 | 2946 | d3dg->Draw2DBox(GameConfig.GetScreenWidth()/2, 0, GameConfig.GetScreenWidth(), GameConfig.GetScreenHeight(), d3dg->GetColorCode(0.0f,0.0f,0.0f,1.0f)); |
2884 | 2947 | } |
2885 | 2948 | } |
@@ -3220,20 +3283,20 @@ | ||
3220 | 3283 | //近ければ処理する |
3221 | 3284 | if( (check == false) || ((fabs(x) < RadarWorldR*2)&&(fabs(z) < RadarWorldR*2)&&(fabs(y) < 80.0f)) ){ |
3222 | 3285 | //角度を距離を計算 |
3223 | - rx = atan2(z, x); | |
3224 | - r = sqrt(x*x + z*z); | |
3286 | + rx = atan2f(z, x); | |
3287 | + r = sqrtf(x*x + z*z); | |
3225 | 3288 | |
3226 | 3289 | //カメラ基準の座標を再計算 |
3227 | 3290 | rx2 = (rx - camera_rx)*-1 - (float)M_PI/2; |
3228 | - x2 = cos(rx2) * r; | |
3229 | - z2 = sin(rx2) * r; | |
3291 | + x2 = cosf(rx2) * r; | |
3292 | + z2 = sinf(rx2) * r; | |
3230 | 3293 | |
3231 | 3294 | //収まるか判定 |
3232 | 3295 | if( (check == false) || ((fabs(x2) < RadarWorldR)&&(fabs(z2) < RadarWorldR)) ){ |
3233 | 3296 | //描画座標を計算 |
3234 | 3297 | r2 = r / RadarWorldR * (RadarSize/2); |
3235 | - *out_x = (int)(RadarPosX+RadarSize/2 + cos(rx2) * r2); | |
3236 | - *out_y = (int)(RadarPosY+RadarSize/2 + sin(rx2) * r2); | |
3298 | + *out_x = (int)(RadarPosX+RadarSize/2 + cosf(rx2) * r2); | |
3299 | + *out_y = (int)(RadarPosY+RadarSize/2 + sinf(rx2) * r2); | |
3237 | 3300 | if( local_y != NULL ){ *local_y = y; } |
3238 | 3301 | outf = true; |
3239 | 3302 | } |
@@ -3277,7 +3340,7 @@ | ||
3277 | 3340 | //各面ごとに処理する |
3278 | 3341 | for(int j=0; j<6; j++){ |
3279 | 3342 | //登れない斜面か判定 ※地面や階段などの傾斜を除外する |
3280 | - float angle = acos(bdata.material[j].vy); | |
3343 | + float angle = acosf(bdata.material[j].vy); | |
3281 | 3344 | if( (HUMAN_MAPCOLLISION_SLOPEANGLE < angle)&&(angle < DegreeToRadian(120)) ){ |
3282 | 3345 | |
3283 | 3346 | //ブロック頂点データの関連付けを取得 |
@@ -4208,7 +4271,7 @@ | ||
4208 | 4271 | //小物を新規配置 |
4209 | 4272 | if( GetCommandNum("newobj", &id) == true ){ |
4210 | 4273 | if( (0 <= id)&&(id < TOTAL_PARAMETERINFO_SMALLOBJECT) ){ |
4211 | - int dataid = ObjMgr.AddSmallObjectIndex(camera_x + cos(camera_rx)*20.0f, camera_y, camera_z + sin(camera_rx)*20.0f, camera_rx*-1, id, true); | |
4274 | + int dataid = ObjMgr.AddSmallObjectIndex(camera_x + cosf(camera_rx)*20.0f, camera_y, camera_z + sinf(camera_rx)*20.0f, camera_rx*-1, id, true); | |
4212 | 4275 | if( dataid != -1 ){ |
4213 | 4276 | sprintf(str, "Add SmallObject[%d].", dataid); |
4214 | 4277 | AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str); |
@@ -88,7 +88,7 @@ | ||
88 | 88 | |
89 | 89 | //BorlandC++ Compiler用の処理 |
90 | 90 | #ifdef __BORLANDC__ |
91 | - #define sqrtf(df) sqrt(df) | |
91 | + #define sqrtf(df) sqrtf(df) | |
92 | 92 | int _matherr(struct _exception *__e) { return 1; } |
93 | 93 | #endif |
94 | 94 |
@@ -97,6 +97,17 @@ | ||
97 | 97 | #define UNREFERENCED_PARAMETER(P) ((P)=(P)) |
98 | 98 | #endif |
99 | 99 | |
100 | +//float型の算術関数用意 | |
101 | +#ifndef _MSC_VER | |
102 | + #define sinf(x) (float)sin(x) //!< sinf(x) | |
103 | + #define cosf(x) (float)cos(x) //!< cosf(x) | |
104 | + #define atan2f(y,x) (float)atan2(y,x) //!< atan2f(y,x) | |
105 | + #define sqrtf(x) (float)sqrt(x) //!< sqrtf(x) | |
106 | + #define floorf(x) (float)floor(x) //!< floorf(x) | |
107 | + #define ceilf(x) (float)ceil(x) //!< ceilf(x) | |
108 | + #define fabsf(x) (float)fabs(x) //!< fabsf(x) | |
109 | +#endif | |
110 | + | |
100 | 111 | #define SetFlag(value, bit) value = value | bit //!< ビットによるフラグ 設定 |
101 | 112 | #define DelFlag(value, bit) value = value & (~bit) //!< ビットによるフラグ 解除 |
102 | 113 | #define GetFlag(value, bit) (value & bit) //!< ビットによるフラグ 取得 |
@@ -211,6 +211,7 @@ | ||
211 | 211 | totalmove = 0.0f; |
212 | 212 | StateGunsightErrorRange = 0; |
213 | 213 | ReactionGunsightErrorRange = 0; |
214 | + Invincible = false; | |
214 | 215 | |
215 | 216 | MotionCtrl = new HumanMotionControl; |
216 | 217 | } |
@@ -950,9 +951,9 @@ | ||
950 | 951 | //! @param speed 速度 |
951 | 952 | void human::AddPosOrder(float rx, float ry, float speed) |
952 | 953 | { |
953 | - move_x += cos(rx) * cos(ry) * speed; | |
954 | - move_y += sin(ry) * speed; | |
955 | - move_z += sin(rx) * cos(ry) * speed; | |
954 | + move_x += cosf(rx) * cosf(ry) * speed; | |
955 | + move_y += sinf(ry) * speed; | |
956 | + move_z += sinf(rx) * cosf(ry) * speed; | |
956 | 957 | } |
957 | 958 | |
958 | 959 | //! @brief 弾が 頭 にヒット |
@@ -1164,9 +1165,9 @@ | ||
1164 | 1165 | weaponreloadcnt = 0; |
1165 | 1166 | |
1166 | 1167 | //次のフレームの頭の座標を取得 |
1167 | - check_posx = pos_x + cos(rotation_x*-1 - (float)M_PI/2) * sin(add_ry) * HUMAN_HEIGHT; | |
1168 | - check_posy = pos_y + cos(add_ry) * HUMAN_HEIGHT; | |
1169 | - check_posz = pos_z + sin(rotation_x*-1 - (float)M_PI/2) * sin(add_ry) * HUMAN_HEIGHT; | |
1168 | + check_posx = pos_x + cosf(rotation_x*-1 - (float)M_PI/2) * sinf(add_ry) * HUMAN_HEIGHT; | |
1169 | + check_posy = pos_y + cosf(add_ry) * HUMAN_HEIGHT; | |
1170 | + check_posz = pos_z + sinf(rotation_x*-1 - (float)M_PI/2) * sinf(add_ry) * HUMAN_HEIGHT; | |
1170 | 1171 | |
1171 | 1172 | if( CollD->CheckALLBlockInside(check_posx, check_posy, check_posz) == true ){ |
1172 | 1173 | deadstate = 2; |
@@ -1209,9 +1210,9 @@ | ||
1209 | 1210 | } |
1210 | 1211 | else{ |
1211 | 1212 | //次のフレームの頭の座標を取得 |
1212 | - check_posx = pos_x + cos(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1213 | - check_posy = pos_y + cos(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1214 | - check_posz = pos_z + sin(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1213 | + check_posx = pos_x + cosf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1214 | + check_posy = pos_y + cosf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1215 | + check_posz = pos_z + sinf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1215 | 1216 | |
1216 | 1217 | if( CollD->CheckALLBlockInside(check_posx, check_posy, check_posz) == true ){ |
1217 | 1218 | deadstate = 3; |
@@ -1267,9 +1268,9 @@ | ||
1267 | 1268 | } |
1268 | 1269 | |
1269 | 1270 | //次のフレームの足の座標を取得 |
1270 | - check_posx = pos_x - cos(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1271 | + check_posx = pos_x - cosf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1271 | 1272 | check_posy = pos_y + 0.1f; |
1272 | - check_posz = pos_z - sin(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1273 | + check_posz = pos_z - sinf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1273 | 1274 | |
1274 | 1275 | if( CollD->CheckALLBlockInside(check_posx, check_posy, check_posz) == true ){ |
1275 | 1276 | deadstate = 4; |
@@ -1277,9 +1278,9 @@ | ||
1277 | 1278 | } |
1278 | 1279 | |
1279 | 1280 | //次のフレームの頭の座標を取得 |
1280 | - check_posx = pos_x - cos(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1281 | - check_posy = pos_y + cos(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1282 | - check_posz = pos_z - sin(rotation_x*-1 - (float)M_PI/2) * sin(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1281 | + check_posx = pos_x - cosf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1282 | + check_posy = pos_y + cosf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1283 | + check_posz = pos_z - sinf(rotation_x*-1 - (float)M_PI/2) * sinf(rotation_y + add_ry) * HUMAN_HEIGHT; | |
1283 | 1284 | |
1284 | 1285 | if( CollD->CheckALLBlockInside(check_posx, check_posy, check_posz) == true ){ |
1285 | 1286 | deadstate = 4; |
@@ -1287,8 +1288,8 @@ | ||
1287 | 1288 | } |
1288 | 1289 | |
1289 | 1290 | //足の座標を移動 |
1290 | - pos_x -= cos(rotation_x*-1 - (float)M_PI/2) * sin(add_ry) * HUMAN_HEIGHT; | |
1291 | - pos_z -= sin(rotation_x*-1 - (float)M_PI/2) * sin(add_ry) * HUMAN_HEIGHT; | |
1291 | + pos_x -= cosf(rotation_x*-1 - (float)M_PI/2) * sinf(add_ry) * HUMAN_HEIGHT; | |
1292 | + pos_z -= sinf(rotation_x*-1 - (float)M_PI/2) * sinf(add_ry) * HUMAN_HEIGHT; | |
1292 | 1293 | |
1293 | 1294 | rotation_y += add_ry; |
1294 | 1295 | return 2; |
@@ -1457,7 +1458,7 @@ | ||
1457 | 1458 | dist_y = pos_y - pos_y2; |
1458 | 1459 | dist_z = pos_z - pos_z2; |
1459 | 1460 | |
1460 | - speed = sqrt(dist_x*dist_x + dist_z*dist_z); | |
1461 | + speed = sqrtf(dist_x*dist_x + dist_z*dist_z); | |
1461 | 1462 | if( (speed != 0.0f)||(move_y != 0.0f) ){ |
1462 | 1463 | |
1463 | 1464 | //頭部で当たり判定 |
@@ -1497,7 +1498,7 @@ | ||
1497 | 1498 | inblockdata->Getdata(&bdata, id); |
1498 | 1499 | |
1499 | 1500 | //斜面に立っているならば、上昇無効 |
1500 | - if( acos(bdata.material[face].vy) > HUMAN_MAPCOLLISION_SLOPEANGLE ){ | |
1501 | + if( acosf(bdata.material[face].vy) > HUMAN_MAPCOLLISION_SLOPEANGLE ){ | |
1501 | 1502 | flag = true; |
1502 | 1503 | } |
1503 | 1504 | } |
@@ -1538,7 +1539,7 @@ | ||
1538 | 1539 | FallFlag = false; |
1539 | 1540 | for(int i=0; i<3; i++){ |
1540 | 1541 | int cnt = 0; |
1541 | - float ang = atan2(move_z, move_x); | |
1542 | + float ang = atan2f(move_z, move_x); | |
1542 | 1543 | float x, y, z; |
1543 | 1544 | |
1544 | 1545 | //落下 |
@@ -1550,32 +1551,32 @@ | ||
1550 | 1551 | y = pos_y + HUMAN_MAPCOLLISION_GROUND_HEIGHT; |
1551 | 1552 | |
1552 | 1553 | //4方向判定 No.1 |
1553 | - x = pos_x + cos(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1554 | - z = pos_z + sin(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1554 | + x = pos_x + cosf(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1555 | + z = pos_z + sinf(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1555 | 1556 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1556 | - x = pos_x - cos(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1557 | - z = pos_z - sin(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1557 | + x = pos_x - cosf(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1558 | + z = pos_z - sinf(ang)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1558 | 1559 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1559 | - x = pos_x + cos(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1560 | - z = pos_z + sin(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1560 | + x = pos_x + cosf(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1561 | + z = pos_z + sinf(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1561 | 1562 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1562 | - x = pos_x + cos(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1563 | - z = pos_z + sin(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1563 | + x = pos_x + cosf(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1564 | + z = pos_z + sinf(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R1; | |
1564 | 1565 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1565 | 1566 | if( cnt == 4 ){ FallFlag = true; break; } |
1566 | 1567 | |
1567 | 1568 | //4方向判定 No.2 |
1568 | - x = pos_x + cos(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1569 | - z = pos_z + sin(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1569 | + x = pos_x + cosf(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1570 | + z = pos_z + sinf(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1570 | 1571 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1571 | - x = pos_x - cos(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1572 | - z = pos_z - sin(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1572 | + x = pos_x - cosf(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1573 | + z = pos_z - sinf(ang)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1573 | 1574 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1574 | - x = pos_x + cos(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1575 | - z = pos_z + sin(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1575 | + x = pos_x + cosf(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1576 | + z = pos_z + sinf(ang + (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1576 | 1577 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1577 | - x = pos_x + cos(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1578 | - z = pos_z + sin(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1578 | + x = pos_x + cosf(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1579 | + z = pos_z + sinf(ang - (float)M_PI/2)*HUMAN_MAPCOLLISION_GROUND_R2; | |
1579 | 1580 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ cnt += 1; } |
1580 | 1581 | if( cnt == 4 ){ FallFlag = true; break; } |
1581 | 1582 | } |
@@ -1588,8 +1589,8 @@ | ||
1588 | 1589 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ FallFlag = true; break; } |
1589 | 1590 | |
1590 | 1591 | //外側へ少し外して判定 |
1591 | - x = pos_x + cos(ang)*HUMAN_MAPCOLLISION_GROUND_R3; | |
1592 | - z = pos_z + sin(ang)*HUMAN_MAPCOLLISION_GROUND_R3; | |
1592 | + x = pos_x + cosf(ang)*HUMAN_MAPCOLLISION_GROUND_R3; | |
1593 | + z = pos_z + sinf(ang)*HUMAN_MAPCOLLISION_GROUND_R3; | |
1593 | 1594 | if( CollD->CheckALLBlockInside(x, y, z) == true ){ FallFlag = true; break; } |
1594 | 1595 | } |
1595 | 1596 |
@@ -1633,7 +1634,7 @@ | ||
1633 | 1634 | inblockdata->Getdata(&bdata, id); |
1634 | 1635 | |
1635 | 1636 | //斜面に立っているならば、斜面を滑らせる処理 |
1636 | - if( acos(bdata.material[face].vy) > HUMAN_MAPCOLLISION_SLOPEANGLE ){ | |
1637 | + if( acosf(bdata.material[face].vy) > HUMAN_MAPCOLLISION_SLOPEANGLE ){ | |
1637 | 1638 | move_x = bdata.material[face].vx * 1.2f; |
1638 | 1639 | move_y = bdata.material[face].vy * -0.5f; |
1639 | 1640 | move_z = bdata.material[face].vz * 1.2f; |
@@ -1657,11 +1658,11 @@ | ||
1657 | 1658 | dist_y = pos_y - pos_y2; |
1658 | 1659 | dist_z = pos_z - pos_z2; |
1659 | 1660 | |
1660 | - Dist = sqrt(dist_x*dist_x + dist_z*dist_z); | |
1661 | - speed = sqrt((move_x*2)*(move_x*2) + (move_z*2)*(move_z*2)); | |
1661 | + Dist = sqrtf(dist_x*dist_x + dist_z*dist_z); | |
1662 | + speed = sqrtf((move_x*2)*(move_x*2) + (move_z*2)*(move_z*2)); | |
1662 | 1663 | |
1663 | 1664 | //明らかに移動量がおかしいならば元に戻す |
1664 | - if( (sqrt(dist_x*dist_x + dist_y*dist_y + dist_z*dist_z) > HUMAN_MAPCOLLISION_CHECK_MAXDIST)||(Dist - speed > 1.0f) ){ | |
1665 | + if( (sqrtf(dist_x*dist_x + dist_y*dist_y + dist_z*dist_z) > HUMAN_MAPCOLLISION_CHECK_MAXDIST)||(Dist - speed > 1.0f) ){ | |
1665 | 1666 | pos_x = pos_x2; |
1666 | 1667 | pos_y = pos_y2; |
1667 | 1668 | pos_z = pos_z2; |
@@ -1668,7 +1669,7 @@ | ||
1668 | 1669 | } |
1669 | 1670 | |
1670 | 1671 | if( player == true ){ |
1671 | - speed = sqrt(dist_x*dist_x + dist_y*dist_y + dist_z*dist_z); | |
1672 | + speed = sqrtf(dist_x*dist_x + dist_y*dist_y + dist_z*dist_z); | |
1672 | 1673 | |
1673 | 1674 | //移動先との間にブロックがあるならば元に戻す |
1674 | 1675 | if( |
@@ -1910,9 +1911,9 @@ | ||
1910 | 1911 | |
1911 | 1912 | //腕を描画 |
1912 | 1913 | if( rotation_y != 0.0f ){ //死亡して倒れている or 倒れ始めた |
1913 | - float x = pos_x + cos(rotation_x*-1 - (float)M_PI/2)*sin(rotation_y)*16.0f; | |
1914 | - float y = pos_y + cos(rotation_y)*16.0f; | |
1915 | - float z = pos_z + sin(rotation_x*-1 - (float)M_PI/2)*sin(rotation_y)*16.0f; | |
1914 | + float x = pos_x + cosf(rotation_x*-1 - (float)M_PI/2)*sinf(rotation_y)*16.0f; | |
1915 | + float y = pos_y + cosf(rotation_y)*16.0f; | |
1916 | + float z = pos_z + sinf(rotation_x*-1 - (float)M_PI/2)*sinf(rotation_y)*16.0f; | |
1916 | 1917 | d3dg->SetWorldTransform(x, y, z, rotation_x + (float)M_PI, armrotation_y + rotation_y, armmodel_size); |
1917 | 1918 | d3dg->RenderModel(armmodel, id_texture, DarkModelFlag, NoModel); |
1918 | 1919 | } |
@@ -2043,12 +2044,12 @@ | ||
2043 | 2044 | void weapon::Dropoff(float x, float y, float z, float rx, float speed) |
2044 | 2045 | { |
2045 | 2046 | //描画する座標と角度を設定 |
2046 | - move_x = cos(rx*-1 + (float)M_PI/2) * speed; | |
2047 | + move_x = cosf(rx*-1 + (float)M_PI/2) * speed; | |
2047 | 2048 | move_y = 0.0f; |
2048 | - move_z = sin(rx*-1 + (float)M_PI/2) * speed; | |
2049 | - pos_x = x + cos(rx*-1 + (float)M_PI/2) * 5.0f; | |
2049 | + move_z = sinf(rx*-1 + (float)M_PI/2) * speed; | |
2050 | + pos_x = x + cosf(rx*-1 + (float)M_PI/2) * 5.0f; | |
2050 | 2051 | pos_y = y + 16.0f + move_y; |
2051 | - pos_z = z + sin(rx*-1 + (float)M_PI/2) * 5.0f; | |
2052 | + pos_z = z + sinf(rx*-1 + (float)M_PI/2) * 5.0f; | |
2052 | 2053 | rotation_x = rx + (float)M_PI; |
2053 | 2054 | |
2054 | 2055 | //未使用(未装備)に設定し、座標移動を有効に |
@@ -2206,7 +2207,7 @@ | ||
2206 | 2207 | } |
2207 | 2208 | |
2208 | 2209 | //水平の移動速度を求める |
2209 | - maxDist = sqrt(move_x*move_x + move_z*move_z); | |
2210 | + maxDist = sqrtf(move_x*move_x + move_z*move_z); | |
2210 | 2211 | if( maxDist < 0.1f ){ |
2211 | 2212 | maxDist = 0.0f; |
2212 | 2213 | move_x = 0.0f; |
@@ -2467,9 +2468,9 @@ | ||
2467 | 2468 | cnt = jump - jump_cnt; |
2468 | 2469 | |
2469 | 2470 | //姿勢から座標・角度を計算 |
2470 | - pos_x += cos(jump_rx) * move_rx; | |
2471 | + pos_x += cosf(jump_rx) * move_rx; | |
2471 | 2472 | pos_y += jump_cnt * 0.1f; |
2472 | - pos_z += sin(jump_rx) * move_rx; | |
2473 | + pos_z += sinf(jump_rx) * move_rx; | |
2473 | 2474 | rotation_x += add_rx; |
2474 | 2475 | rotation_y += add_ry; |
2475 | 2476 |
@@ -2507,6 +2508,15 @@ | ||
2507 | 2508 | id_model = modelid; |
2508 | 2509 | id_texture = textureid; |
2509 | 2510 | EnableFlag = false; |
2511 | + | |
2512 | + rotation_y = 0.0f; | |
2513 | + attacks = 0; | |
2514 | + penetration = 0; | |
2515 | + speed = 0; | |
2516 | + teamid = 0; | |
2517 | + humanid = 0; | |
2518 | + ontargetcnt = 0; | |
2519 | + cnt = 0; | |
2510 | 2520 | } |
2511 | 2521 | |
2512 | 2522 | //! @brief ディストラクタ |
@@ -2595,9 +2605,9 @@ | ||
2595 | 2605 | } |
2596 | 2606 | |
2597 | 2607 | //移動処理 |
2598 | - pos_x += cos(rotation_x)*cos(rotation_y)*speed; | |
2599 | - pos_y += sin(rotation_y)*speed; | |
2600 | - pos_z += sin(rotation_x)*cos(rotation_y)*speed; | |
2608 | + pos_x += cosf(rotation_x)*cosf(rotation_y)*speed; | |
2609 | + pos_y += sinf(rotation_y)*speed; | |
2610 | + pos_z += sinf(rotation_x)*cosf(rotation_y)*speed; | |
2601 | 2611 | cnt += 1; |
2602 | 2612 | |
2603 | 2613 | return 0; |
@@ -2632,6 +2642,10 @@ | ||
2632 | 2642 | model_size = ParamData.size; |
2633 | 2643 | } |
2634 | 2644 | } |
2645 | + | |
2646 | + move_x = 0.0f; | |
2647 | + move_y = 0.0f; | |
2648 | + move_z = 0.0f; | |
2635 | 2649 | } |
2636 | 2650 | |
2637 | 2651 | //! @brief ディストラクタ |
@@ -2647,9 +2661,9 @@ | ||
2647 | 2661 | //! @attention 先に SetPosData() を実行してください。 |
2648 | 2662 | void grenade::SetParamData(float speed, int _teamid, int _humanid, float _ontargetcnt, bool init) |
2649 | 2663 | { |
2650 | - move_x = cos(rotation_x) * cos(rotation_y) * speed; | |
2651 | - move_y = sin(rotation_y) * speed; | |
2652 | - move_z = sin(rotation_x) * cos(rotation_y) * speed; | |
2664 | + move_x = cosf(rotation_x) * cosf(rotation_y) * speed; | |
2665 | + move_y = sinf(rotation_y) * speed; | |
2666 | + move_z = sinf(rotation_x) * cosf(rotation_y) * speed; | |
2653 | 2667 | teamid = _teamid; |
2654 | 2668 | humanid = _humanid; |
2655 | 2669 | ontargetcnt = _ontargetcnt; |
@@ -2676,7 +2690,7 @@ | ||
2676 | 2690 | //! @return 速度 |
2677 | 2691 | float grenade::GetSpeed() |
2678 | 2692 | { |
2679 | - return sqrt(move_x*move_x + move_y*move_y + move_z*move_z); | |
2693 | + return sqrtf(move_x*move_x + move_y*move_y + move_z*move_z); | |
2680 | 2694 | } |
2681 | 2695 | |
2682 | 2696 | //! @brief 計算を実行(手榴弾の進行・爆発) |
@@ -2700,7 +2714,7 @@ | ||
2700 | 2714 | |
2701 | 2715 | int id, face; |
2702 | 2716 | float Dist; |
2703 | - float maxDist = sqrt(move_x*move_x + move_y*move_y + move_z*move_z); | |
2717 | + float maxDist = sqrtf(move_x*move_x + move_y*move_y + move_z*move_z); | |
2704 | 2718 | |
2705 | 2719 | //マップに対して当たり判定を実行 |
2706 | 2720 | if( CollD->CheckALLBlockIntersectRay(pos_x, pos_y, pos_z, move_x/maxDist, move_y/maxDist, move_z/maxDist, &id, &face, &Dist, maxDist) == true ){ |
@@ -582,8 +582,8 @@ | ||
582 | 582 | vz = data.material[face].vz; |
583 | 583 | |
584 | 584 | //角度を求める |
585 | - rx = atan2(vz, vx)*-1 + (float)M_PI; | |
586 | - ry = atan2(vy, sqrt(vx*vx + vz*vz))*-1; | |
585 | + rx = atan2f(vz, vx)*-1 + (float)M_PI; | |
586 | + ry = atan2f(vy, sqrtf(vx*vx + vz*vz))*-1; | |
587 | 587 | |
588 | 588 | //エフェクト作成 |
589 | 589 | for(int i=0; i<MAX_EFFECT; i++){ |
@@ -622,7 +622,7 @@ | ||
622 | 622 | if( flowing == true ){ |
623 | 623 | for(int i=0; i<(damage/10); i++){ |
624 | 624 | float rx = DegreeToRadian(10)*GetRand(36); |
625 | - AddEffect(x + cos(rx)*1.0f, y + (float)(GetRand(20)-10)/10, z + sin(rx)*1.0f, cos(rx)*0.5f, GetRand(5)*0.1f + 0.5f, sin(rx)*0.5f, -0.09f, DegreeToRadian(10)*GetRand(36), 0.0f, GetRand(40)*0.1f+0.1f, 0.1f, Resource->GetEffectBloodTexture(), 10, 0, 1.0f, 0.0f, addtype, (int)(GAMEFPS * 0.5f)); | |
625 | + AddEffect(x + cosf(rx)*1.0f, y + (float)(GetRand(20)-10)/10, z + sinf(rx)*1.0f, cosf(rx)*0.5f, GetRand(5)*0.1f + 0.5f, sinf(rx)*0.5f, -0.09f, DegreeToRadian(10)*GetRand(36), 0.0f, GetRand(40)*0.1f+0.1f, 0.1f, Resource->GetEffectBloodTexture(), 10, 0, 1.0f, 0.0f, addtype, (int)(GAMEFPS * 0.5f)); | |
626 | 626 | } |
627 | 627 | } |
628 | 628 | } |
@@ -693,9 +693,9 @@ | ||
693 | 693 | //弾丸の座標を取得し、ベクトルを算出。 |
694 | 694 | in_bullet->GetPosData(&bx, &by, &bz, &brx, &bry); |
695 | 695 | in_bullet->GetParamData(&attacks, &penetration, &speed, &teamid, &humanid, &ontargetcnt); |
696 | - vx = cos(brx)*cos(bry); | |
697 | - vy = sin(bry); | |
698 | - vz = sin(brx)*cos(bry); | |
696 | + vx = cosf(brx)*cosf(bry); | |
697 | + vy = sinf(bry); | |
698 | + vz = sinf(brx)*cosf(bry); | |
699 | 699 | |
700 | 700 | //マップとの当たり判定(弾道上にブロックがあるか) |
701 | 701 | if( CollD->CheckALLBlockIntersectRay(bx, by, bz, vx, vy, vz, NULL, NULL, &Dist, (float)speed) == true ){ |
@@ -1051,7 +1051,7 @@ | ||
1051 | 1051 | x = hx - gx; |
1052 | 1052 | y = hy - gy; |
1053 | 1053 | z = hz - gz; |
1054 | - r = sqrt(x*x + y*y + z*z); | |
1054 | + r = sqrtf(x*x + y*y + z*z); | |
1055 | 1055 | |
1056 | 1056 | //100.0より遠ければ計算しない |
1057 | 1057 | if( r > MAX_DAMAGE_GRENADE_DISTANCE + HUMAN_HEIGHT ){ continue; } |
@@ -1062,7 +1062,7 @@ | ||
1062 | 1062 | |
1063 | 1063 | //足元に当たり判定 |
1064 | 1064 | y = hy + 2.0f - gy; |
1065 | - r = sqrt(x*x + y*y + z*z); | |
1065 | + r = sqrtf(x*x + y*y + z*z); | |
1066 | 1066 | //ブロックが遮っていなければ (レイで当たり判定を行い、当たっていなければ) |
1067 | 1067 | if( CollD->CheckALLBlockIntersectRay(gx, gy, gz, x/r, y/r, z/r, NULL, NULL, &dummy, r) == false ){ |
1068 | 1068 | //ダメージ量を計算 |
@@ -1074,7 +1074,7 @@ | ||
1074 | 1074 | |
1075 | 1075 | //頭に当たり判定 |
1076 | 1076 | y = hy + (HUMAN_HEIGHT-2.0f) - gy; |
1077 | - r = sqrt(x*x + y*y + z*z); | |
1077 | + r = sqrtf(x*x + y*y + z*z); | |
1078 | 1078 | //ブロックが遮っていなければ (レイで当たり判定を行い、当たっていなければ) |
1079 | 1079 | if( CollD->CheckALLBlockIntersectRay(gx, gy, gz, x/r, y/r, z/r, NULL, NULL, &dummy, r) == false ){ |
1080 | 1080 | //ダメージ量を計算 |
@@ -1112,11 +1112,11 @@ | ||
1112 | 1112 | z = gz - hz; |
1113 | 1113 | |
1114 | 1114 | //角度を求める |
1115 | - arx = atan2(z, x); | |
1115 | + arx = atan2f(z, x); | |
1116 | 1116 | |
1117 | - if( sin(atan2(y, sqrt(x*x + z*z))) < 0.0f ){ //上方向に飛ぶなら、角度を計算 | |
1117 | + if( sinf(atan2f(y, sqrtf(x*x + z*z))) < 0.0f ){ //上方向に飛ぶなら、角度を計算 | |
1118 | 1118 | y2 = gy - (hy + HUMAN_HEIGHT); |
1119 | - ary = atan2(y2, sqrt(x*x + z*z)) + (float)M_PI; | |
1119 | + ary = atan2f(y2, sqrtf(x*x + z*z)) + (float)M_PI; | |
1120 | 1120 | } |
1121 | 1121 | else{ //下方向に飛ぶなら、垂直角度は無効。(爆風で地面にめり込むのを防止) |
1122 | 1122 | ary = 0.0f; |
@@ -1140,7 +1140,7 @@ | ||
1140 | 1140 | #endif |
1141 | 1141 | |
1142 | 1142 | //爆風による風圧 |
1143 | - HumanIndex[i].AddPosOrder(arx, ary, 2.2f/MAX_DAMAGE_GRENADE_DISTANCE * (MAX_DAMAGE_GRENADE_DISTANCE - sqrt(x*x + y*y + z*z))); | |
1143 | + HumanIndex[i].AddPosOrder(arx, ary, 2.2f/MAX_DAMAGE_GRENADE_DISTANCE * (MAX_DAMAGE_GRENADE_DISTANCE - sqrtf(x*x + y*y + z*z))); | |
1144 | 1144 | |
1145 | 1145 | //ログ関係の処理 |
1146 | 1146 | if( (hp_old > 0)&&(HumanIndex[i].GetHP() <= 0) ){ |
@@ -1169,7 +1169,7 @@ | ||
1169 | 1169 | x = sx - gx; |
1170 | 1170 | y = sy - gy; |
1171 | 1171 | z = sz - gz; |
1172 | - r = sqrt(x*x + y*y + z*z); | |
1172 | + r = sqrtf(x*x + y*y + z*z); | |
1173 | 1173 | |
1174 | 1174 | //100.0より遠ければ計算しない |
1175 | 1175 | if( r > MAX_DAMAGE_GRENADE_DISTANCE ){ continue; } |
@@ -1247,8 +1247,8 @@ | ||
1247 | 1247 | hry = in_human->GetDeadRy(); |
1248 | 1248 | |
1249 | 1249 | //腰辺りの座標を算出 |
1250 | - hx += cos(hrx*-1 - (float)M_PI/2) * sin(hry) * HUMAN_HEIGHT/2; | |
1251 | - hz += sin(hrx*-1 - (float)M_PI/2) * sin(hry) * HUMAN_HEIGHT/2; | |
1250 | + hx += cosf(hrx*-1 - (float)M_PI/2) * sinf(hry) * HUMAN_HEIGHT/2; | |
1251 | + hz += sinf(hrx*-1 - (float)M_PI/2) * sinf(hry) * HUMAN_HEIGHT/2; | |
1252 | 1252 | |
1253 | 1253 | //エフェクト(煙)の描画 |
1254 | 1254 | float rnd = DegreeToRadian(10)*GetRand(18); |
@@ -1288,7 +1288,7 @@ | ||
1288 | 1288 | if( (move_x == 0.0f)&&(move_y == 0.0f)&&(move_z == 0.0f) ){ return false; } |
1289 | 1289 | |
1290 | 1290 | //ベクトルを求める |
1291 | - dist = sqrt(move_x*move_x + move_y*move_y + move_z*move_z); | |
1291 | + dist = sqrtf(move_x*move_x + move_y*move_y + move_z*move_z); | |
1292 | 1292 | vx = move_x / dist; |
1293 | 1293 | vy = move_y / dist; |
1294 | 1294 | vz = move_z / dist; |
@@ -1976,8 +1976,8 @@ | ||
1976 | 1976 | int len; |
1977 | 1977 | float a = DegreeToRadian(10) * GetRand(36); |
1978 | 1978 | len = GetRand(5)*2+5; |
1979 | - rx2 = rx + cos(a)*len * DegreeToRadian(0.15f); | |
1980 | - ry2 = ry + sin(a)*len * DegreeToRadian(0.15f); | |
1979 | + rx2 = rx + cosf(a)*len * DegreeToRadian(0.15f); | |
1980 | + ry2 = ry + sinf(a)*len * DegreeToRadian(0.15f); | |
1981 | 1981 | } |
1982 | 1982 | else{ |
1983 | 1983 | //そのまま攻撃力と命中時のカウント数を反映 |
@@ -2062,14 +2062,14 @@ | ||
2062 | 2062 | |
2063 | 2063 | //煙の移動ベクトルを決定 |
2064 | 2064 | rx = rotation_x*-1 + (float)M_PI/2; |
2065 | - emx = cos(rx)*cos(armrotation_y); | |
2066 | - emy = sin(armrotation_y); | |
2067 | - emz = sin(rx)*cos(armrotation_y); | |
2065 | + emx = cosf(rx)*cosf(armrotation_y); | |
2066 | + emy = sinf(armrotation_y); | |
2067 | + emz = sinf(rx)*cosf(armrotation_y); | |
2068 | 2068 | |
2069 | 2069 | //薬莢の移動量を決定 |
2070 | - mx = cos(rx - (float)M_PI/2) * ParamData.yakkyou_sx * 0.12f; | |
2070 | + mx = cosf(rx - (float)M_PI/2) * ParamData.yakkyou_sx * 0.12f; | |
2071 | 2071 | my = (ParamData.yakkyou_sy + (GetRand(3)-1)) * 0.12f; |
2072 | - mz = sin(rx - (float)M_PI/2) * ParamData.yakkyou_sx * 0.12f; | |
2072 | + mz = sinf(rx - (float)M_PI/2) * ParamData.yakkyou_sx * 0.12f; | |
2073 | 2073 | |
2074 | 2074 | //行列でエフェクト座標を計算 |
2075 | 2075 | d3dg->SetWorldTransformHumanWeapon(pos_x, pos_y + 16.0f, pos_z, ParamData.flashx/10, ParamData.flashy/10, ParamData.flashz/10, rotation_x, armrotation_y*-1, 1.0f); |
@@ -2350,9 +2350,9 @@ | ||
2350 | 2350 | if( mteam == tteam ){ return false; } |
2351 | 2351 | |
2352 | 2352 | //攻撃ポイント(腕の先端)を求める |
2353 | - AttackPoint_x = mx + cos(mrx*-1 + (float)M_PI/2) * 2.0f; | |
2353 | + AttackPoint_x = mx + cosf(mrx*-1 + (float)M_PI/2) * 2.0f; | |
2354 | 2354 | AttackPoint_y = my + VIEW_HEIGHT - 0.5f; |
2355 | - AttackPoint_z = mz + sin(mrx*-1 + (float)M_PI/2) * 2.0f; | |
2355 | + AttackPoint_z = mz + sinf(mrx*-1 + (float)M_PI/2) * 2.0f; | |
2356 | 2356 | ax = AttackPoint_x - tx; |
2357 | 2357 | az = AttackPoint_z - tz; |
2358 | 2358 |
@@ -2396,7 +2396,7 @@ | ||
2396 | 2396 | ty += VIEW_HEIGHT; |
2397 | 2397 | |
2398 | 2398 | //敵が攻撃を受けた角度を求める |
2399 | - arx = atan2(mz - tz, mx - tx); | |
2399 | + arx = atan2f(mz - tz, mx - tx); | |
2400 | 2400 | |
2401 | 2401 | //ロボットかどうか判定 |
2402 | 2402 | EnemyHuman->GetParamData(¶mid, NULL, NULL, NULL); |
@@ -2571,7 +2571,7 @@ | ||
2571 | 2571 | *color = d3dg->GetColorCode(1.0f,0.0f,0.0f,1.0f); |
2572 | 2572 | sprintf(infostr, "Human[%d] HP %d : Enemy", i, HumanIndex[i].GetHP()); |
2573 | 2573 | } |
2574 | - dist = sqrt(r); | |
2574 | + dist = sqrtf(r); | |
2575 | 2575 | } |
2576 | 2576 | } |
2577 | 2577 | } |
@@ -2591,7 +2591,7 @@ | ||
2591 | 2591 | if( (fabs(rx) < DegreeToRadian(10))&&(fabs(ry) < DegreeToRadian(10)) ){ |
2592 | 2592 | *color = d3dg->GetColorCode(0.0f,1.0f,0.0f,1.0f); |
2593 | 2593 | sprintf(infostr, "Weapon[%d] %d:%d", i, lnbs, (nbs - lnbs)); |
2594 | - dist = sqrt(r); | |
2594 | + dist = sqrtf(r); | |
2595 | 2595 | } |
2596 | 2596 | } |
2597 | 2597 | } |
@@ -2608,7 +2608,7 @@ | ||
2608 | 2608 | if( (fabs(rx) < DegreeToRadian(10))&&(fabs(ry) < DegreeToRadian(10)) ){ |
2609 | 2609 | *color = d3dg->GetColorCode(1.0f,1.0f,0.0f,1.0f); |
2610 | 2610 | sprintf(infostr, "SmallObject[%d] HP %d", i, SmallObjectIndex[i].GetHP()); |
2611 | - dist = sqrt(r); | |
2611 | + dist = sqrtf(r); | |
2612 | 2612 | } |
2613 | 2613 | } |
2614 | 2614 | } |
@@ -2713,9 +2713,9 @@ | ||
2713 | 2713 | //弾の座標と角度を取得 |
2714 | 2714 | BulletIndex[i].GetParamData(NULL, NULL, &speed, &teamid, NULL, NULL); |
2715 | 2715 | BulletIndex[i].GetPosData(&bx, &by, &bz, &brx, &bry); |
2716 | - mx = cos(brx)*cos(bry)*speed; | |
2717 | - my = sin(bry)*speed; | |
2718 | - mz = sin(brx)*cos(bry)*speed; | |
2716 | + mx = cosf(brx)*cosf(bry)*speed; | |
2717 | + my = sinf(bry)*speed; | |
2718 | + mz = sinf(brx)*cosf(bry)*speed; | |
2719 | 2719 | GameSound->PassingBullet(bx, by, bz, mx, my, mz, teamid); |
2720 | 2720 | } |
2721 | 2721 | } |
@@ -133,7 +133,7 @@ | ||
133 | 133 | void SoundControl::SetCamera(float x, float y, float z, float rx) |
134 | 134 | { |
135 | 135 | p3DListener->SetPosition(x, y, z, DS3D_IMMEDIATE); |
136 | - p3DListener->SetOrientation(cos(rx), 0.0f, sin(rx), 0.0f, 1.0f, 0.0f, DS3D_IMMEDIATE); | |
136 | + p3DListener->SetOrientation(cosf(rx), 0.0f, sinf(rx), 0.0f, 1.0f, 0.0f, DS3D_IMMEDIATE); | |
137 | 137 | } |
138 | 138 | |
139 | 139 | //! @brief サウンドを読み込む |
@@ -594,7 +594,7 @@ | ||
594 | 594 | return false; |
595 | 595 | } |
596 | 596 | |
597 | - *out_dist = sqrt(dist); | |
597 | + *out_dist = sqrtf(dist); | |
598 | 598 | return true; |
599 | 599 | } |
600 | 600 |
@@ -247,7 +247,7 @@ | ||
247 | 247 | //左右のパン(再生バランス)の決定 |
248 | 248 | float vx = x - camera_x; |
249 | 249 | float vz = z - camera_z; |
250 | - float rx = (atan2(vz, vx) - camera_rx) * -1; | |
250 | + float rx = (atan2f(vz, vx) - camera_rx) * -1; | |
251 | 251 | for(; rx > (float)M_PI; rx -= (float)M_PI*2){} |
252 | 252 | for(; rx < (float)M_PI*-1; rx += (float)M_PI*2){} |
253 | 253 | pan = (int)((float)10 / M_PI * rx); |
@@ -319,7 +319,7 @@ | ||
319 | 319 | return false; |
320 | 320 | } |
321 | 321 | |
322 | - *out_dist = sqrt(dist); | |
322 | + *out_dist = sqrtf(dist); | |
323 | 323 | return true; |
324 | 324 | } |
325 | 325 |
@@ -523,13 +523,13 @@ | ||
523 | 523 | float min_dist, dist; |
524 | 524 | |
525 | 525 | //移動速度を求める |
526 | - speed = (float)sqrt(plist->move_x*plist->move_x + plist->move_y*plist->move_y + plist->move_z*plist->move_z); | |
526 | + speed = (float)sqrtf(plist->move_x*plist->move_x + plist->move_y*plist->move_y + plist->move_z*plist->move_z); | |
527 | 527 | |
528 | 528 | //最短距離の座標を求める |
529 | 529 | min_dist = DistancePosRay(camera_x, camera_y, camera_z, plist->x, plist->y, plist->z, plist->move_x/speed, plist->move_y/speed, plist->move_z/speed); |
530 | 530 | |
531 | 531 | //最短距離時の座標を求める |
532 | - dist = (float)sqrt(dist2 - min_dist*min_dist); | |
532 | + dist = (float)sqrtf(dist2 - min_dist*min_dist); | |
533 | 533 | *min_x = plist->x + plist->move_x/speed * dist; |
534 | 534 | *min_y = plist->y + plist->move_y/speed * dist; |
535 | 535 | *min_z = plist->z + plist->move_z/speed * dist; |
@@ -356,7 +356,7 @@ | ||
356 | 356 | //! @return 値 |
357 | 357 | float Round(float r) |
358 | 358 | { |
359 | - return (r > 0.0f) ? floor(r + 0.5f) : ceil(r - 0.5f); | |
359 | + return (r > 0.0f) ? floorf(r + 0.5f) : ceilf(r - 0.5f); | |
360 | 360 | } |
361 | 361 | |
362 | 362 | #ifdef ENABLE_PATH_DELIMITER_SLASH |