void Enemy::EShot(){ for(int i = 0; i < ESNUM; i++){ if(es[i].flag == 1){ es[i].z -= 1.0f; MV1SetPosition( es[i].graph, VGet(es[i].x, es[i].y, es[i].z) ); MV1DrawModel( es[i].graph ); if(es[i].z < -10){ es[i].flag = 0; } } if(es[i].flag == 2 ){ es[i].x -= es[i].rx; es[i].y -= es[i].ry; es[i].z -= es[i].rz; MV1SetPosition( es[i].graph, VGet(es[i].x, es[i].y, es[i].z) ); MV1DrawModel( es[i].graph ); if(es[i].z < -10){ es[i].flag = 0; } } } }
void Character::Draw(){ MV1DrawModel( graph ); MV1SetPosition( graph, VGet(x, y + 1, z ) ) ; MV1SetPosition( targetwindow, VGet( x + -10 * tan(RotateZ * PI/ 180), (y + 10 * tan(RotateX * PI/ 180)), z + 10)); MV1SetRotationXYZ( graph, VGet( -RotateX * DX_PI_F / 180.0f, (RotateY +180) * DX_PI_F / 180.0f, (RotateZ+ RotateZ2 + 180) * DX_PI_F / 180.0f )); MV1SetOpacityRate(graph, !(damaged_timer % 2)); if(life >= 0){ //MV1DrawModel( targetwindow ); MV1DrawModel( boost.graph ); MV1DrawModel( boost2.graph ); } //ブースト関連 boost.playtime += 1.0f; if( boost.playtime >= boost.totaltime ) boost.playtime = 0.0f; MV1SetAttachAnimTime( boost.graph, boost.attach, boost.playtime ); MV1SetPosition( boost.graph, VGet(x , y, z )); MV1SetRotationXYZ( boost.graph, VGet( -RotateX * DX_PI_F / 180.0f, (RotateY +180) * DX_PI_F / 180.0f, (RotateZ+ RotateZ2 + 180) * DX_PI_F / 180.0f )); boost2.playtime += 1.0f; if( boost2.playtime >= boost2.totaltime ) boost2.playtime = 0.0f; MV1SetAttachAnimTime( boost2.graph, boost2.attach, boost2.playtime ); MV1SetPosition( boost2.graph, VGet( x, y, z )); MV1SetRotationXYZ( boost2.graph, VGet( -RotateX * DX_PI_F / 180.0f, (RotateY +180) * DX_PI_F / 180.0f, (RotateZ+ RotateZ2 + 180) * DX_PI_F / 180.0f )); }
void Bullet::Draw() { SetUseLighting(FALSE); //SetUseLighting(TRUE); switch (_bulletType) { case BULLET_TYPE_ENEMY: MV1SetScale(ResourceHandles::getResourceHandles().EnemyBulletHandle, VGet(_size, _size, _size)); MV1SetPosition(ResourceHandles::getResourceHandles().EnemyBulletHandle, _translation); MV1DrawModel(ResourceHandles::getResourceHandles().EnemyBulletHandle); break; case BULLET_TYPE_PLAYER: MV1SetScale(ResourceHandles::getResourceHandles().PlayerBulletHandle, VGet(_size, _size, _size)); MV1SetPosition(ResourceHandles::getResourceHandles().PlayerBulletHandle, _translation); MV1DrawModel(ResourceHandles::getResourceHandles().PlayerBulletHandle); break; case BULLET_TYPE_PLAYER_HORMING: MV1SetScale(ResourceHandles::getResourceHandles().HormingBulletHandle, VGet(_size, _size, _size)); MV1SetPosition(ResourceHandles::getResourceHandles().HormingBulletHandle, _translation); MV1DrawModel(ResourceHandles::getResourceHandles().HormingBulletHandle); break; default: break; } }
// 影用の深度記録画像を使った影を落とす処理も含めたモデルの描画 void DrawModelWithDepthShadow( void ) { int i ; // カメラの設定を行う SetCameraPositionAndTarget_UpVecY( cam.Eye, cam.Target ) ; // モデルの描画にオリジナルのシェーダーを使用するように設定する MV1SetUseOrigShader( TRUE ) ; // 深度記録画像を使った影+ディレクショナルライト一つ描画用のピクセルシェーダーをセット SetUsePixelShader( DirLight_DepthShadow_Step2_PixelShader ) ; // 影用深度記録画像を描画したときのカメラのビュー行列と射影行列を定数に設定する SetVSConstFMtx( 43, LightCamera_ViewMatrix ) ; SetVSConstFMtx( 47, LightCamera_ProjectionMatrix ) ; // 影用深度記録画像をテクスチャ1にセット SetUseTextureToShader( 1, DepthBufferGraphHandle ) ; // 深度記録画像を使った影+ディレクショナルライト一つの剛体メッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Normal_DirLight_DepthShadow_Step2_VertexShader ) ; // ステージモデルの描画 MV1DrawModel( stg.ModelHandle ) ; // 深度記録画像を使った影+ディレクショナルライト一つのスキニングメッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Skin4_DirLight_DepthShadow_Step2_VertexShader ) ; // プレイヤーモデルの描画 MV1DrawModel( pl.CharaInfo.ModelHandle ) ; // プレイヤー以外キャラモデルの描画 for( i = 0 ; i < NOTPLAYER_NUM ; i ++ ) { MV1DrawModel( npl[ i ].CharaInfo.ModelHandle ) ; } // モデルの描画にオリジナルのシェーダーを使用するようにした設定を解除 MV1SetUseOrigShader( FALSE ) ; // 使用テクスチャの設定を解除 SetUseTextureToShader( 1, -1 ) ; // 設定した定数を解除 ResetVSConstF( 43, 8 ) ; }
//自機の描画 void draw_Player() { substance *sub = player.getSub(); if (sub[0].flag == true) { MV1SetPosition(sub[0].MHandle, VGet(sub[0].x, sub[0].y, sub[0].z)); MV1SetRotationXYZ(sub[0].MHandle, VGet(0.0f, sub[0].angy * DX_PI_F / 180.0f, 0.0f)); MV1DrawModel(sub[0].MHandle); } }
void Enemy::Draw(){ MV1DrawModel( graph ); MV1SetPosition( graph, VGet(x, y, z) ) ; timer ++; if(z < 0){ life = -1; } }
void Stage::drawMap(){ for(int d = 0; d < depth; ++d){ for(int w = 0; w < width; ++w){ for(int h = 0; h <= mapchip[d][w].height; ++h){ MV1SetPosition(mapchip[d][w].definition->image, VAdd(VGet(d*chipsize, h*chipheight, w*chipsize), VGet(chipsize/2, -chipheight/2, chipsize/2))); MV1DrawModel(mapchip[d][w].definition->image); } } } }
//敵の描画 void draw_Enemy() { substance *sub = enemy.getSub(); for (int i = 0; i < enemy.getSize(); i++) { if (sub[i].flag == true) { MV1SetPosition(sub[i].MHandle, VGet(sub[i].x, sub[i].y, sub[i].z)); MV1SetRotationXYZ(sub[i].MHandle,VGet(0.0f, sub[i].angy * DX_PI_F / 180.0f, 0.0f)); MV1DrawModel(sub[i].MHandle); } } }
void Boss::HitAnim(){ for (int i = 0; i < 16; i++){ if (HitEffectFlag[i] == 1){ MV1DrawModel(HitEffectGraph[i]); MV1SetPosition(HitEffectGraph[i], HitEffectPosition[i]); MV1SetScale(HitEffectGraph[i], VGet(3, 3, 3)); HitEffect[i].AnimTime++; if (HitEffect[i].AnimTime >= HitEffect[i].TotalTime){ HitEffectFlag[i] = 0; HitEffect[i].AnimTime = 0.0f; } } } }
void MODEL :: display(){ /*DrawCapsule3D( VGet(x+600*sinf(rotateY), y+y0+200.0f-500*sinf(rotateX), z+600*cosf(rotateY)), VGet(x-200*sinf(rotateY), y+y0+200.0f+500*sinf(rotateX), z-200*cosf(rotateY)), 210.0f, 2, GetColor(255,255,255), GetColor(255,255,255), FALSE);*/ playTime += 200.0f; if(playTime >= animTime) playTime = 0.0f; mS->move(); mS->display(); MV1RefreshCollInfo(ModelHandle, 39); MATRIX rot = MMult(MMult(MGetRotX(rotateX), MGetRotZ(rotateZ)),MGetRotY(rotateY)); MATRIX trans = MGetTranslate(VGet(x+x0, y+y0, z+z0)); MV1SetMatrix(ModelHandle, MMult(rot, trans)); MV1SetAttachAnimTime(ModelHandle, attachIndex, playTime); MV1DrawModel(ModelHandle); }
void MANAGIMENT :: freeMode(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); BUILDING buil; //弾の配列の確保 SHOT* mShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); //モデルの読み込み PLAYER* p; p = new PLAYER(VGet(0, 0, 0), 0.0, mShot); //ターゲットの読み込み TARGET t; t.newTarget(); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 p->control(); p->display(); t.display(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); p->doNotMove(t.collision(p->getPos(), p->getRotate())); mShot->collisionTarget(buil.getModelHandle()); if(mShot->collisionTarget(t.getModelHandle()) > 0){ t.delTarget(); t.newTarget(); } //裏画面の内容を表画面に反映 ScreenFlip(); } MV1DeleteModel(ModelHandle); delete mShot; delete p; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //細かい設定色々 ChangeWindowMode(true); SetGraphMode(Window::Width, Window::Height, 32); SetWindowSizeChangeEnableFlag(TRUE); SetWindowSizeExtendRate(1.0); //背景の色替え //SetBackgroundColor(255, 255, 255); int ModelHandle; // DXライブラリ初期化処理(エラーが起きたら直ちに終了) if (DxLib_Init() == -1) return -1; //ウラ画面に描画する SetDrawScreen(DX_SCREEN_BACK); ModelHandle = MV1LoadModel("res/car04.mqo"); MV1SetPosition(ModelHandle, VGet(200.0f, -200.0f, 600.0f)); //メインループ //whileの()にあるProcessMessageを消すと、正常に動かなくなる while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClearDrawScreen(); //画面を消去する MV1DrawModel(ModelHandle); ScreenFlip(); //オモテ画面とウラ画面を入れ替える } //DXライブラリ使用の終了処理 DxLib_End(); //ソフトの終了 return 0; }
void MANAGIMENT :: battleModeC(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); //弾の配列の確保 SHOT* mShot; SHOT* eShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); eShot = new SHOT(GetColor(255, 0, 0), 15.0f, 85.0f); //モデルの読み込み PLAYER* p; ENEMY* e; p = new PLAYER(VGet(0, 0, 3500.0), 0.0f, mShot); e = new ENEMY(VGet(0, 0, -3500), PI, eShot); BUILDING buil; int pH; int eH; while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 //プレイヤー p->control(); p->display(); //敵 VECTOR rotateP = p->getRotate(); e->control(rotateP.y, p->getVector()); e->display(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); e->doNotMove(buil.collision(e->getPos(), e->getRotate())); mShot->collisionTarget(buil.getModelHandle()); eShot->collisionTarget(buil.getModelHandle()); p->doNotMove(p->collision(e->getPos(), e->getRotate())); e->doNotMove(e->collision(p->getPos(), p->getRotate())); pH = p->damageCheck(eShot); eH = e->damageCheck(mShot); if(pH <=0 || eH <= 0) break; mShot->collisionModel(e->getModelHandle()); eShot->collisionModel(p->getModelHandle()); //裏画面の内容を表画面に反映 ScreenFlip(); } while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 SetFontSize(16); fpsDisplay(); p->addCR(0.01f); p->display(); e->display(); SetFontSize(32); pH = p->getHp(); eH = e->getHp(); if(pH == eH) DrawFormatString(300, 350, GetColor(255, 255, 255), "Draw"); else if(pH > eH) DrawFormatString(310, 350, GetColor(255, 255, 255), "Win"); else DrawFormatString(300, 350, GetColor(255, 255, 255), "Loss"); //裏画面の内容を表画面に反映 ScreenFlip(); } SetFontSize(16); MV1DeleteModel(ModelHandle); delete mShot; delete eShot; delete p; delete e; }
inline void TARGET :: display(){ if(dflag) MV1DrawModel(ModelHandle); }
void MANAGIMENT :: battleModeH(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); BUILDING buil; //弾の配列の確保 SHOT* mShot; SHOT* eShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); eShot = new SHOT(GetColor(255, 0, 0), 15.0f, 85.0f); READ_INIT* read; read = new READ_INIT(); char src_ip[32]; int src_port; char sin_ip[32]; int sin_port; VECTOR pPos; VECTOR ePos; float pR, eR; read->read(src_ip, &src_port, sin_ip, &sin_port, &pPos, &ePos, &pR, &eR); delete read; NET_TRANS* net; net = new NET_TRANS(src_ip, src_port, sin_ip, sin_port); net->setBind(); hTh = (HANDLE)_beginthreadex(NULL, 0, &thread_recv, net, 0, &thID); while(1){ DrawFormatString(20, 20, GetColor(0, 0, 0), "通信中"); if(!nflag2) net->send("start"); if(nflag1) net->send("ok"); if(nflag1 && nflag2) break; if(ProcessMessage() != 0 || CheckHitKey(KEY_INPUT_ESCAPE) != 0){ sflag1 = true; WaitForSingleObject(hTh, INFINITE); CloseHandle(hTh); delete net; delete mShot; delete eShot; MV1DeleteModel(ModelHandle); return; } ScreenFlip(); } sflag1 = true; WaitForSingleObject(hTh, INFINITE); CloseHandle(hTh); //モデルの読み込み PLAYER* p; ENEMY_NET* e; p = new PLAYER(pPos, pR, mShot, net); e = new ENEMY_NET(ePos, eR, eShot, net); int pH; int eH; e->start(e); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 //プレイヤー p->control(); p->send(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); mShot->collisionTarget(buil.getModelHandle()); p->display(); e->display(); e->enterCritical(); eShot->collisionTarget(buil.getModelHandle()); pH = p->damageCheck(eShot); e->leaveCritical(); p->doNotMove(p->collision(e->getPos(), e->getRotate())); if(e->getHp() <= 0 || pH <= 0){ break; } eH = e->damageCheck(mShot); //裏画面の内容を表画面に反映 ScreenFlip(); } while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ p->send(); // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 SetFontSize(16); fpsDisplay(); p->addCR(0.01f); p->display(); e->display(); SetFontSize(32); pH = p->getHp(); eH = e->getHp(); if(pH == eH) DrawFormatString(300, 350, GetColor(255, 255, 255), "Draw"); else if(pH > eH) DrawFormatString(310, 350, GetColor(255, 255, 255), "Win"); else DrawFormatString(300, 350, GetColor(255, 255, 255), "Loss"); //裏画面の内容を表画面に反映 ScreenFlip(); } e->stop(); SetFontSize(16); delete net; MV1DeleteModel(ModelHandle); delete mShot; delete eShot; delete p; delete e; }
void Boss::Shot(float px, float py, float pz){ if (timer == 119){ SetAnimPattern(firebomb); flag |= HORIZONTAL; } if (count == 6){ flag &= ~HORIZONTAL + ~VERTICAL; flag |= APPROACH; } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & HORIZONTAL){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px - len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * 2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * -2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK + VERTICAL; flag &= ~HORIZONTAL; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & VERTICAL){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 - len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px ; float sby = y - py + 40 + len * 2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px ; float sby = y - py + 40 + len * -2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; flag &= ~VERTICAL; flag |= HORIZONTAL; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & CROSS){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 - len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len * 2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len * -2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px - len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * 2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * -2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (flag & APPROACH){ if (AnimPattern != flight && !(flag & CONTINUITY)){ SetAnimPattern(flight); flag &= ~HORIZONTAL + ~VERTICAL + ~CROSS; } if (!(flag & CONTINUITY)){ z -= 2; } if (z <= 80 && AnimPattern == flight){ flag |= CONTINUITY; SetAnimPattern(firebomb); } if (AnimPattern == firebomb && AnimTime >= 20 && (int(AnimTime) % 5 == 0) && flag & CONTINUITY){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; count += 100; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } } if (count >= 2100){ count = 0; flag |= LEAVE; flag &= ~APPROACH; } if (flag & LEAVE){ z += 1; if (z >= 130){ flag &= ~LEAVE; flag &= ~CONTINUITY; if (life <= LIFE / 2) { flag |= CROSS; } else{ flag |= HORIZONTAL; } count = 0; } } if (AnimPattern == firebomb && AnimTime == 0) flag &= ~ATTACK; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag) { bs[i].x -= bs[i].rx; bs[i].y -= bs[i].ry; bs[i].z -= bs[i].rz; MV1SetPosition(bs[i].graph, VGet(bs[i].x, bs[i].y, bs[i].z)); MV1DrawModel(bs[i].graph); if (bs[i].z < -10){ bs[i].flag = 0; } } } }
void draw() const { MV1DrawModel(handle); }
// 影用の深度記録画像の準備を行う void SetupDepthImage( void ) { int i ; VECTOR LightDirection ; VECTOR LightPosition ; VECTOR LightTarget ; // 描画先を影用深度記録画像にする SetDrawScreen( DepthBufferGraphHandle ) ; // 影用深度記録画像を真っ白にクリア SetBackgroundColor( 255, 255, 255 ) ; ClearDrawScreen() ; SetBackgroundColor( 0, 0, 0 ) ; // カメラのタイプを正射影タイプにセット、描画範囲も指定 SetupCamera_Ortho( 13250.0f ) ; // 描画する奥行き範囲をセット SetCameraNearFar( 10.0f, 13050.0f ) ; // カメラの向きはライトの向き LightDirection = GetLightDirection() ; // カメラの位置と注視点はステージ全体が見渡せる位置 LightTarget.x = 3620.0f ; LightTarget.y = 0.0f ; LightTarget.z = 3830.0f ; LightPosition = VAdd( LightTarget, VScale( LightDirection, -12400.0f ) ) ; SetCameraPositionAndTarget_UpVecY( LightPosition, LightTarget ) ; // 設定したカメラのビュー行列と射影行列を取得しておく LightCamera_ViewMatrix = GetCameraViewMatrix() ; LightCamera_ProjectionMatrix = GetCameraProjectionMatrix() ; // モデルの描画にオリジナルのシェーダーを使用するように設定する MV1SetUseOrigShader( TRUE ) ; // 深度記録画像への描画用のピクセルシェーダーをセット SetUsePixelShader( DepthShadow_Step1_PixelShader ) ; // 深度記録画像への剛体メッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Normal_DepthShadow_Step1_VertexShader ) ; // ステージを描画 MV1DrawModel( stg.ModelHandle ) ; // 深度記録画像へのスキニングメッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Skin4_DepthShadow_Step1_VertexShader ) ; // プレイヤーモデルの描画 MV1DrawModel( pl.CharaInfo.ModelHandle ) ; // プレイヤー以外キャラモデルの描画 for( i = 0 ; i < NOTPLAYER_NUM ; i ++ ) { MV1DrawModel( npl[ i ].CharaInfo.ModelHandle ) ; } // モデルの描画にオリジナルのシェーダーを使用するようにした設定を解除 MV1SetUseOrigShader( FALSE ) ; // 描画先を裏画面に戻す SetDrawScreen( DX_SCREEN_BACK ) ; }
void Character::Shot(){ static unsigned int pad_timer = 0; if(KeyGet(KEY_INPUT_U)) power = 2; if (input & PAD_INPUT_1) { pad_timer++; } else{ pad_timer = 0; } if (KeyGet(KEY_INPUT_SPACE) % 5 == 1 || pad_timer % 5 == 1 && muteki == 0){ PlaySoundMem( shotsound , DX_PLAYTYPE_BACK ) ; for(int i = 0; i < SNUM; i++){ if(shot[i].flag == 0){ shot[i].flag = 1; shot[i].x = x; shot[i].y = y; shot[i].z = z; shot[i].angleX = RotateX; shot[i].angleY = RotateY; shot[i].angleZ = RotateZ; shot[i].playtime =0.0f; float sbx = 1 * tan((RotateZ * PI/ 180)); float sb = ((sbx * sbx) + 1 * 1); float sby = sb * tan((RotateX * PI/ 180)); shot[i].rx = sbx / sb * 10.0f; shot[i].rz = 1 / sb * 10.0f; shot[i].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i].graph, VGet(( shot[i].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); break; } } } if(KeyGet(KEY_INPUT_SPACE) % 5 == 1 && power == 1 ){ PlaySoundMem( shotsound , DX_PLAYTYPE_BACK ) ; for(int i = 0; i < SNUM; i++){ if(shot[i].flag == 0){ shot[i].flag = 1; shot[i].x = x - 2; shot[i].y = y; shot[i].z = z; shot[i + 1].flag = 1; shot[i + 1].x = x + 2; shot[i + 1].y = y; shot[i + 1].z = z; shot[i].angleX = RotateX; shot[i].angleY = RotateY; shot[i].angleZ = RotateZ; shot[i].playtime =0.0f; shot[i + 1].angleX = RotateX; shot[i + 1].angleY = RotateY; shot[i + 1].angleZ = RotateZ; shot[i + 1].playtime =0.0f; float sbx = 1 * tan((RotateZ * PI/ 180)); float sb = ((sbx * sbx) + 1 * 1); float sby = sb * tan((RotateX * PI/ 180)); shot[i].rx = sbx / sb * 10.0f; shot[i].rz = 1 / sb * 10.0f; shot[i].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i].graph, VGet(( shot[i].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); shot[i + 1].rx = sbx / sb * 10.0f; shot[i + 1].rz = 1 / sb * 10.0f; shot[i + 1].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i + 1].graph, VGet(( shot[i + 1].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i + 1].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); break; } } } if(KeyGet(KEY_INPUT_SPACE) % 5 == 1 && power >= 2 ){ PlaySoundMem( shotsound , DX_PLAYTYPE_BACK ) ; for(int i = 0; i < SNUM; i++){ if(shot[i].flag == 0){ shot[i].flag = 1; shot[i].x = x; shot[i].y = y; shot[i].z = z; shot[i].angleX = RotateX; shot[i].angleY = RotateY; shot[i].angleZ = RotateZ; shot[i].playtime =0.0f; shot[i + 1].flag = 1; shot[i + 1].x = x + 4; shot[i + 1].y = y; shot[i + 1].z = z; shot[i + 1].angleX = RotateX; shot[i + 1].angleY = RotateY; shot[i + 1].angleZ = RotateZ; shot[i + 1].playtime =0.0f; shot[i + 2].flag = 1; shot[i + 2].x = x - 4; shot[i + 2].y = y; shot[i + 2].z = z; shot[i + 2].angleX = RotateX; shot[i + 2].angleY = RotateY; shot[i + 2].angleZ = RotateZ; shot[i + 2].playtime =0.0f; float sbx = 1 * tan((RotateZ * PI/ 180)); float sb = ((sbx * sbx) + 1 * 1); float sby = sb * tan((RotateX * PI/ 180)); shot[i].rx = sbx / sb * 10.0f; shot[i].rz = 1 / sb * 10.0f; shot[i].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i].graph, VGet(( shot[i].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); shot[i + 1].rx = sbx / sb * 10.0f; shot[i + 1].rz = 1 / sb * 10.0f; shot[i + 1].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i + 1].graph, VGet(( shot[i + 1].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i + 1].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); shot[i + 2].rx = sbx / sb * 10.0f; shot[i + 2].rz = 1 / sb * 10.0f; shot[i + 2].ry = sby / sqrt(sb * sb + sby * sby) * 8.0f; MV1SetRotationXYZ( shot[i + 2].graph, VGet(( shot[i + 2].angleX / 1.5)* DX_PI_F / 180.0f, ((shot[i + 2].angleZ + 180 ) * -1) * DX_PI_F / 180.0f, 0 * DX_PI_F / 180.0f )); break; } } } for(int i = 0; i < SNUM; i++){ if(shot[i].flag == 1){ shot[i].z += shot[i].rz; shot[i].x -= shot[i].rx; shot[i].y += shot[i].ry; MV1SetPosition( shot[i].graph, VGet(shot[i].x, shot[i].y, shot[i].z) ); MV1DrawModel( shot[i].graph ); MV1SetAttachAnimTime( shot[i].graph, shot[i].attach, shot[i].playtime ) ; shot[i].playtime += 2.0f; if(shot[i].playtime >= shot[i].shottime ) shot[i].playtime = 0; if(shot[i].z > z + 300.0f){ shot[i].flag = 0; shot[i].playtime = 0.0f; } } if(shot[i].flag == 2){ shot[i].x -= shot[i].rx; shot[i].y -= shot[i].ry; shot[i].z -= shot[i].rz; MV1SetScale(shot[i].graph, VGet(0.05f, 0.05f, 0.005f)); MV1SetPosition( shot[i].graph, VGet(shot[i].x, shot[i].y, shot[i].z) ); MV1DrawModel( shot[i].graph ); if(shot[i].z > 100){ shot[i].flag = 0; } } } }
// 描画する void Room_Draw( Room *self) { MV1DrawModel(self->room); MV1DrawModel(self->door); MV1DrawModel(self->glass); MV1DrawModel(self->hammer); MV1DrawModel(self->paper0); MV1DrawModel(self->pot); MV1DrawModel(self->paper1); MV1DrawModel(self->table); MV1DrawModel(self->bed); MV1DrawModel(self->paper2); MV1DrawModel(self->paper3); }