/******************************************************************************* 関数名: void DrawGame(void) 引数: なし 戻り値: なし 説明: ゲームの描画関数 *******************************************************************************/ void DrawGame(void) { //カメラの設置 SetCamera(); //ステージの描画処理 DrawStageManager(); DrawMeshDome(); //DrawModel(); DrawParticle(); DrawEnemy(); DrawEnemyBullet(); DrawItemBullet(); if( IsDebugMode()) DrawPlayer(); DrawPlayerBullet(); DrawGun(); DrawShadow(); //DrawBillBoard(); DrawTime(); DrawGunSight(); DrawNumBullet(); DrawNumLife(); DrawClock(); DrawEnemyNum(); }
char *GetLogTypeName( long logType, char *txt ) { switch( logType&0xff ) { case LOGFORMAT_COMMON: mystrcpy( txt, "Common" ); break; case LOGFORMAT_NCSA: mystrcpy( txt, "NCSA Extended" ); break; case LOGFORMAT_MACHTTP: mystrcpy( txt, "Webstar" ); break; case LOGFORMAT_PURVEYER: mystrcpy( txt, "Purveyer" ); break; case LOGFORMAT_NETSCAPE: mystrcpy( txt, "Netscape" ); break; case LOGFORMAT_IIS: mystrcpy( txt, "MS-IIS" ); break; case LOGFORMAT_NETCACHE: mystrcpy( txt, "NetCache NetApp" ); break; case LOGFORMAT_WEBSITE: mystrcpy( txt, "Website" ); break; case LOGFORMAT_FILEMAKER: mystrcpy( txt, "Filemaker" ); break; case LOGFORMAT_FIRSTCLASS: mystrcpy( txt, "FirstClass" ); break; case LOGFORMAT_IIS4: mystrcpy( txt, "W3C" ); break; case LOGFORMAT_W3C: mystrcpy( txt, "W3C" ); break; case LOGFORMAT_MSISA: mystrcpy( txt, "MS-ISA" ); break; case LOGFORMAT_WELCOME: mystrcpy( txt, "Welcome" ); break; case LOGFORMAT_HOTLINE: mystrcpy( txt, "Hotline" ); break; case LOGFORMAT_OPENMARKET: mystrcpy( txt, "OpenMarket" ); break; case LOGFORMAT_SENDMAIL: mystrcpy( txt, "Sendmail" ); break; case LOGFORMAT_WUFTPD: mystrcpy( txt, "Wu.FTPd Server" ); break; case LOGFORMAT_REALSERVER: mystrcpy( txt, "RealServer" ); break; case LOGFORMAT_QTSS: mystrcpy( txt, "QTSS" ); break; case LOGFORMAT_WINDOWSMEDIA:mystrcpy( txt, "WindowsMedia" ); break; case LOGFORMAT_UNIXFTPD: mystrcpy( txt, "UnixFTP" ); break; case LOGFORMAT_HOMEDOOR: mystrcpy( txt, "HomeDoor" ); break; case LOGFORMAT_ZEUS: mystrcpy( txt, "Zeus" ); break; case LOGFORMAT_BOUNCE: mystrcpy( txt, "Bounce" ); break; case LOGFORMAT_SQUID: mystrcpy( txt, "Squid" ); break; case LOGFORMAT_IISPROXY: mystrcpy( txt, "MSproxy" ); break; case LOGFORMAT_WSPROXY: mystrcpy( txt, "WSproxy" ); break; case LOGFORMAT_RADIUS: mystrcpy( txt, "Radius" ); break; case LOGFORMAT_CISCO: mystrcpy( txt, "Cisco" ); break; case LOGFORMAT_FIREWALL1: mystrcpy( txt, "FireWall-1" ); break; case LOGFORMAT_RAPTOR: mystrcpy( txt, "Raptor Firewall" ); break; case LOGFORMAT_CUSTOM: mystrcpy( txt, "Custom" ); break; case LOGFORMAT_V4DATABASE: mystrcpy( txt, "FWA DB" ); break; case LOGFORMAT_V5DATABASE: mystrcpy( txt, "FWA XDB" ); break; case LOGFORMAT_UNKNOWN: default: mystrcpy( txt, "[Unknown]" ); return txt; } // Show Virtual Host status inthe log name too if ( IsDebugMode() ){ if ( logType & FWA_VHOST_LOG_MASK ) strcat( txt, " Vhost" ); } return txt; }
void ProjectExportDialog::OnExportBtClicked(wxCommandEvent& event) { wxDir dir(GetExportDir()); if (dir.IsOpened() && dir.HasFiles()) { if (wxMessageBox( wxString::Format(wxString("The export folder (%s) is not empty: all files in this folder will be erased.\nAre you sure you want to continue?"), GetExportDir().c_str()), _("The export folder is not empty"), wxYES_NO | wxICON_WARNING) == wxNO) return; } project.SetLastCompilationDirectory(GetExportDir()); wxConfigBase::Get()->Write("Export/JS platform/LatestExportType", exportChoice->GetSelection()); wxConfigBase::Get()->Write("Export/JS platform/LatestDebugMode", IsDebugMode()); EndModal(1); }
//============================================================================= // 更新処理 //============================================================================= void UpdateEnemy(float fTimeSpeed) { CAMERA *pCamera = GetCamera(); PLAYER *pPlayer = GetPlayer(); int nCountAlive = 0; //PrintDebugProc("enemy mark %d\n", g_enemy[0].nSeePFrame); for(int nCntEnemy = 0; nCntEnemy < MAX_ENEMY; nCntEnemy++) { if(g_enemy[nCntEnemy].bUse) { nCountAlive++; {//プレイヤーに気づく判断処理 if( !HitCheckMeshWall( g_enemy[nCntEnemy].pos, pCamera->posV, NULL, NULL) && pPlayer->bAlive && //壁に遮られたか //HitCheckBall( g_enemy[nCntEnemy].pos, 1000.0f, pCamera->posV, 20.0f) && //一定の距離以内 HitCheckViewArea( g_enemy[nCntEnemy].pos, pCamera->posV, g_enemy[nCntEnemy].rot, D3DXToRadian( 90.0f) ) && //後ろには見えない !IsDebugMode()) //デバッグモードのときに、当たり判定はなし { if( g_enemy[nCntEnemy].nSeePFrame <= 1000) g_enemy[nCntEnemy].nSeePFrame++; if( g_enemy[nCntEnemy].nSeePFrame >= 50) { g_enemy[nCntEnemy].bSeePlayer = true; //プレイヤーを見た時の情報を保存 if( g_enemy[nCntEnemy].bPatrol) { //びっくりマークを設定 SetFlashMessage(MSG_EXCLAMATION); g_enemy[nCntEnemy].bPatrol = false; g_enemy[nCntEnemy].posPatrol = g_enemy[nCntEnemy].pos; g_enemy[nCntEnemy].rotPatrol = g_enemy[nCntEnemy].rotTarget; } } } else if( HitCheckBall( g_enemy[nCntEnemy].pos, 120.0f, pCamera->posV, 20.0f) ) //一定の距離以内 { if( g_enemy[nCntEnemy].nSeePFrame <= 65535) g_enemy[nCntEnemy].nSeePFrame++; if( g_enemy[nCntEnemy].nSeePFrame >= 50) { g_enemy[nCntEnemy].bSeePlayer = true; //プレイヤーを見た時の情報を保存 if( g_enemy[nCntEnemy].bPatrol) { g_enemy[nCntEnemy].bPatrol = false; g_enemy[nCntEnemy].posPatrol = g_enemy[nCntEnemy].pos; g_enemy[nCntEnemy].rotPatrol = g_enemy[nCntEnemy].rotTarget; } } } else { if( g_enemy[nCntEnemy].nSeePFrame > 0) { g_enemy[nCntEnemy].nSeePFrame--; } g_enemy[nCntEnemy].bSeePlayer = false; } } //CoolDown if( g_enemy[nCntEnemy].nCoolDown > 0) { g_enemy[nCntEnemy].nCoolDown -= 1 * fTimeSpeed; if(g_enemy[nCntEnemy].nCoolDown <= 0) { g_enemy[nCntEnemy].nCoolDown = -1; g_enemy[nCntEnemy].bShot = false; } } //プレイヤーに気づいたら、行動処理 if( g_enemy[nCntEnemy].bSeePlayer || g_enemy[nCntEnemy].nSeePFrame >= 50) { if( !g_enemy[nCntEnemy].bEscaping) { //向き g_enemy[nCntEnemy].rotTarget = GetRotationAngle( g_enemy[nCntEnemy].pos, pCamera->posV, g_enemy[nCntEnemy].rot); } //弾を発射 if(!g_enemy[nCntEnemy].bShot) { //向き g_enemy[nCntEnemy].rot = GetRotationAngle( g_enemy[nCntEnemy].pos, pCamera->posV, g_enemy[nCntEnemy].rot); if(g_enemy[nCntEnemy].type == ENEMY_RED) { for(int cnt = 0; cnt < 3; cnt++) { SetEnemyBullet( g_enemy[nCntEnemy].pos, pCamera->posV + D3DXVECTOR3( rand() % 60 - 30, rand() % 40 - 20, rand() % 60 - 30)); } g_enemy[nCntEnemy].bShot = true; g_enemy[nCntEnemy].nCoolDown = COOLDOWN + rand() % 60; PlaySound(SOUND_LABEL_SE_ESHOT); } else if(g_enemy[nCntEnemy].type == ENEMY_BLUE) { SetEnemyBullet( g_enemy[nCntEnemy].pos, pCamera->posV); g_enemy[nCntEnemy].bShot = true; g_enemy[nCntEnemy].nCoolDown = COOLDOWN/2 + rand() % 60; PlaySound(SOUND_LABEL_SE_ESHOT); } else { SetEnemyBullet( g_enemy[nCntEnemy].pos, pCamera->posV); g_enemy[nCntEnemy].bShot = true; g_enemy[nCntEnemy].nCoolDown = COOLDOWN + rand() % 60; PlaySound(SOUND_LABEL_SE_ESHOT); } } } else { if( g_enemy[nCntEnemy].bPatrol) { //nothing } else { //パトロールに戻る g_enemy[nCntEnemy].rotTarget = GetRotationAngle( g_enemy[nCntEnemy].pos, g_enemy[nCntEnemy].posPatrol, g_enemy[nCntEnemy].rot); D3DXVECTOR3 vec = g_enemy[nCntEnemy].pos - g_enemy[nCntEnemy].posPatrol; if( D3DXVec3Length( &vec) < VALUE_MOVE) { g_enemy[nCntEnemy].bPatrol = true; g_enemy[nCntEnemy].pos = g_enemy[nCntEnemy].posPatrol; g_enemy[nCntEnemy].rotTarget = g_enemy[nCntEnemy].rotPatrol; } } } //弾キレ、逃げる処理 //if( g_enemy[nCntEnemy].bShot && !g_enemy[nCntEnemy].bEscaping) //{ // float movRot = rand() % 180 - 90; // g_enemy[nCntEnemy].rotTarget.y = g_enemy[nCntEnemy].rot.y + D3DXToRadian(movRot); // if( g_enemy[nCntEnemy].rotTarget.y > D3DX_PI) // { // g_enemy[nCntEnemy].rotTarget.y -= D3DX_PI * 2.0f; // } // g_enemy[nCntEnemy].bEscaping = true; //} bool bMove = true; //プレイヤーに近づき過ぎないように D3DXVECTOR3 vec = g_enemy[nCntEnemy].pos - pPlayer->pos; if( (D3DXVec3Length(&vec) < 200.0f) && g_enemy[nCntEnemy].bSeePlayer) { bMove = false; } {//移動処理 if( bMove) { //移動慣性の初期化 g_enemy[nCntEnemy].move.x = VALUE_MOVE; g_enemy[nCntEnemy].move.z = VALUE_MOVE; if(g_enemy[nCntEnemy].type == ENEMY_BLUE) { g_enemy[nCntEnemy].move.x = 0; g_enemy[nCntEnemy].move.z = 0; } } //時計回り、または逆時計回りを決める g_enemy[nCntEnemy].rotAngle = Get2VecRotAngle( g_enemy[nCntEnemy].rot, g_enemy[nCntEnemy].rotTarget, DIVIDE_ROTATE, -1); //回転慣性 g_enemy[nCntEnemy].rotAngle += (-g_enemy[nCntEnemy].rotAngle) * 0.001f; //モデルY軸角度修正 if(g_enemy[nCntEnemy].rot.y > D3DX_PI) { g_enemy[nCntEnemy].rot.y = g_enemy[nCntEnemy].rot.y - D3DX_PI*2; } else if(g_enemy[nCntEnemy].rot.y < 0.0f - D3DX_PI) { g_enemy[nCntEnemy].rot.y = g_enemy[nCntEnemy].rot.y + D3DX_PI*2; } //次の回転位置に到着したら if( fabs(g_enemy[nCntEnemy].rot.y - g_enemy[nCntEnemy].rotTarget.y) < VALUE_ROTATE && fabs(g_enemy[nCntEnemy].rot.x - g_enemy[nCntEnemy].rotTarget.x) < VALUE_ROTATE && fabs(g_enemy[nCntEnemy].rot.z - g_enemy[nCntEnemy].rotTarget.z) < VALUE_ROTATE ) { g_enemy[nCntEnemy].rot = g_enemy[nCntEnemy].rotTarget; g_enemy[nCntEnemy].rotAngle = D3DXVECTOR3( 0, 0, 0); } else //次の回転位置にまだ到着してない { g_enemy[nCntEnemy].rot += g_enemy[nCntEnemy].rotAngle * fTimeSpeed; } //回転していない時 if(g_enemy[nCntEnemy].rotAngle == D3DXVECTOR3( 0, 0, 0)) { //慣性処理 g_enemy[nCntEnemy].move.x -= g_enemy[nCntEnemy].move.x * 0.05f; g_enemy[nCntEnemy].move.z -= g_enemy[nCntEnemy].move.z * 0.05f; D3DXVECTOR3 tNextPos = g_enemy[nCntEnemy].pos; tNextPos.x += g_enemy[nCntEnemy].move.x * sinf(g_enemy[nCntEnemy].rot.y); tNextPos.z += g_enemy[nCntEnemy].move.z * cosf(g_enemy[nCntEnemy].rot.y); D3DXVECTOR3 tSphere = D3DXVECTOR3( 0, 0, 0); D3DXVECTOR3 front = tNextPos - g_enemy[nCntEnemy].pos; D3DXVec3Normalize( &tSphere, &front); tSphere *= MODEL_SPHERE; //壁の法線ベクトルを取得変数の初期化 D3DXVECTOR3 wall_nor = D3DXVECTOR3(0,0,0); //Side g_enemy[nCntEnemy].posLSide.x = g_enemy[nCntEnemy].pos.x + 15.0f * sinf(g_enemy[nCntEnemy].rotTarget.y + D3DXToRadian(-90.0f)); g_enemy[nCntEnemy].posLSide.z = g_enemy[nCntEnemy].pos.z + 15.0f * cosf(g_enemy[nCntEnemy].rotTarget.y + D3DXToRadian(-90.0f)); g_enemy[nCntEnemy].posRSide.x = g_enemy[nCntEnemy].pos.x + 15.0f * sinf(g_enemy[nCntEnemy].rotTarget.y + D3DXToRadian(90.0f)); g_enemy[nCntEnemy].posRSide.z = g_enemy[nCntEnemy].pos.z + 15.0f * cosf(g_enemy[nCntEnemy].rotTarget.y + D3DXToRadian(90.0f)); //壁に当たったら if( HitCheckMeshWall( g_enemy[nCntEnemy].posLSide, g_enemy[nCntEnemy].posLSide + tSphere, &wall_nor, NULL) || HitCheckMeshWall( g_enemy[nCntEnemy].posRSide, g_enemy[nCntEnemy].posRSide + tSphere, &wall_nor, NULL) ) { if( g_enemy[nCntEnemy].bSeePlayer || !g_enemy[nCntEnemy].bPatrol) { //壁ずり処理:移動ベクトルを修正 GetWallScratchVector( &front, front, wall_nor); D3DXVec3Normalize( &tSphere, &front); tSphere *= MODEL_SPHERE; if( !HitCheckMeshWall( g_enemy[nCntEnemy].pos, g_enemy[nCntEnemy].pos + tSphere, &wall_nor, NULL) ) { //移動処理 g_enemy[nCntEnemy].pos += front; } } if( g_enemy[nCntEnemy].bPatrol) { //180反転 g_enemy[nCntEnemy].rotTarget.y = g_enemy[nCntEnemy].rot.y + D3DXToRadian(180.0f); if( g_enemy[nCntEnemy].rotTarget.y > D3DX_PI) { g_enemy[nCntEnemy].rotTarget.y -= D3DX_PI * 2.0f; } } } else { //移動処理 g_enemy[nCntEnemy].pos += front * fTimeSpeed; } } } //shadow SetPositionShadow( g_enemy[nCntEnemy].nIdxShadow, g_enemy[nCntEnemy].pos); } } if( nCountAlive == 0) { PlaySound( SOUND_LABEL_SE_CLEAR); SetGameStep(STEP_CLEAR); } //PrintDebugProc("\n敵の位置:(X:%f, Y:%f, Z:%f)\n", g_enemy[0].pos.x, g_enemy[0].pos.y, g_enemy[0].pos.z); //PrintDebugProc("敵の向き :(X:%f, Y:%f, Z:%f)\n", g_enemy[0].rot.x, D3DXToDegree(g_enemy[0].rot.y), g_enemy[0].rot.z); //if( g_enemy[0].bSeePlayer) PrintDebugProc("see Player\n"); //if( g_enemy[0].bPatrol)PrintDebugProc("patral\n"); }