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 )); }
inline void TARGET :: newTarget(){ dflag = true; getRand(); MV1SetPosition(ModelHandle, VGet(x, y, z)); MV1SetRotationXYZ(ModelHandle, VGet(0, rotate, 0)); MV1SetupCollInfo(ModelHandle, -1, 8, 8, 8); }
// 動きを計算する void Room_Update( Room *self ) { MV1SetRotationXYZ( self->door, VGet( 0, self->rotY, 0 ) ); MV1SetPosition(self->room, VGet( 200, 0, 300 ) ); MV1SetPosition(self->door, VGet( 1250, 0, -540 ) ); MV1SetPosition(self->glass, VGet( 200 + self->slide, 0, 300) ); MV1SetPosition(self->table, VGet( 200 - 43, 0, 300 + 721) ); MV1SetPosition(self->bed, VGet( 200 + 668, 0, 300 + 632) ); MV1SetPosition(self->hammer, VGet( 200, 0, 300 ) ); MV1SetPosition(self->paper0, VGet( 200 - 1206, 275, 300 - 59 ) ); MV1SetPosition(self->pot, VGet( 200, 0, 300 ) ); MV1SetRotationXYZ( self->paper1, VGet( 0, self->role * PHI / 360, 0 ) ); MV1SetPosition(self->paper1, VGet( 200 - 746, 137, 300 + 741) ); MV1SetRotationXYZ( self->paper2, VGet( 0, self->role * PHI / 360, 0 ) ); MV1SetPosition(self->paper2, VGet( 200 + 528, 22 + 141, 300 + 724) ); MV1SetRotationXYZ( self->paper3, VGet( 0, self->role * PHI / 360, 0 ) ); MV1SetPosition(self->paper3, VGet( 200 + 726, 22 + 83, 300 + 582 ) ); //開く if(self->swit == 1 || self->swit == -1){ door_open(self); } if( self->s_swit == 1 || self->s_swit == -1 ){ slide_glass(self); } self->role++; if(self->door_close_count > 0) { if(self->door_close_count == 1){self->swit = -1;} self->door_close_count--; } /* if(Pad_Get( KEY_INPUT_W ) > 0){ self->x++; } else if(Pad_Get( KEY_INPUT_S ) > 0){ self->x--; } if(Pad_Get( KEY_INPUT_D ) > 0){ self->y++; } else if(Pad_Get( KEY_INPUT_A ) > 0){ self->y--; } if(Pad_Get( KEY_INPUT_V ) > 0){ self->z++; } else if(Pad_Get( KEY_INPUT_B ) > 0){ self->z--; } */ //if(Pad_Get( KEY_INPUT_Q ) == -1){printf("\n x= %d y = %d z = %d \n",self->x,self->y, self->z);} }
//自機の描画 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 BaseObject::MoveManager::setObjectDirection(int model, int dir){ //Z軸の負の向きが始線。回転角は時計回り switch(dir){ case NORTH: MV1SetRotationXYZ(model, VGet(0.0f, DX_PI_F/2, 0.0f)); break; case SOUTH: MV1SetRotationXYZ(model, VGet(0.0f, -DX_PI_F/2, 0.0f)); break; case WEST: MV1SetRotationXYZ(model, VGet(0.0f, 0.0f, 0.0f)); break; case EAST: MV1SetRotationXYZ(model, VGet(0.0f, DX_PI_F, 0.0f)); break; } current_dir = dir; }
//敵の描画 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 Chara_AngleProcess( CHARA *ch ) { float TargetAngle ; // 目標角度 float SaAngle ; // 目標角度と現在の角度との差 // 目標の方向ベクトルから角度値を算出する TargetAngle = atan2( ch->TargetMoveDirection.x, ch->TargetMoveDirection.z ) ; // 目標の角度と現在の角度との差を割り出す { // 最初は単純に引き算 SaAngle = TargetAngle - ch->Angle ; // ある方向からある方向の差が180度以上になることは無いので // 差の値が180度以上になっていたら修正する if( SaAngle < -DX_PI_F ) { SaAngle += DX_TWO_PI_F ; } else if( SaAngle > DX_PI_F ) { SaAngle -= DX_TWO_PI_F ; } } // 角度の差が0に近づける if( SaAngle > 0.0f ) { // 差がプラスの場合は引く SaAngle -= CHARA_ANGLE_SPEED ; if( SaAngle < 0.0f ) { SaAngle = 0.0f ; } } else { // 差がマイナスの場合は足す SaAngle += CHARA_ANGLE_SPEED ; if( SaAngle > 0.0f ) { SaAngle = 0.0f ; } } // モデルの角度を更新 ch->Angle = TargetAngle - SaAngle ; MV1SetRotationXYZ( ch->ModelHandle, VGet( 0.0f, ch->Angle + DX_PI_F, 0.0f ) ) ; }
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; } } } }