BeamShotM::BeamShotM( std::shared_ptr < ResourceMap > pMap, int id ) : EnemyShot( pMap, id ) { m_AlphaBlendingMode = MAPIL::ALPHA_BLEND_MODE_ADD_SEMI_TRANSPARENT; m_GUData.m_ColRadiusBase = GameUnit( -5 ); m_GUData.m_ColRadius = m_GUData.m_ColRadiusBase; m_Line.SetThickness( m_GUData.m_ColRadius.GetFloat() ); m_Length = GameUnit( 750 ); m_StatusFlags.set( NOT_DELETE_BY_PLAYER_DAMAGE ); m_StatusFlags.set( NOT_DELETE_BY_PLAYER_SKILL ); }
void GameObjectManager::addUnit(const char* filename, const char* name, GameObjectConstructorProc constructor) { if (filename != NULL) { AutoRef<Scene> scene = Scene::load(filename)->Auto(); Node* root = Node::create("root"); root->setTag("dynamic"); Node* child = scene->getFirstNode(); Node* childNext; while (child != NULL) { childNext = child->getNextSibling(); root->addChild(child); child = childNext; } root->setScale(CHARACTER_SCALE, CHARACTER_SCALE, CHARACTER_SCALE); scene->addNode(root); root = root->clone(); Node* node = root->getFirstChild(); while (node) { Animation* animation = node->getAnimation("animations"); if (!animation) { animation = node->getAnimation(NULL); } if (animation) { std::string scenePath = Scene::getGPBPath(filename); int pos = scenePath.find_last_of('.'); if (pos > 2) { std::string animationPath = scenePath.substr(0, pos); animationPath.append(".animation"); animation->createClips(animationPath.c_str()); } } node = node->getNextSibling(); } if (!_store) { _store = Scene::create("store")->Auto(); } _store->addNode(root); _units[name] = GameUnit(root, constructor); } else { _units[name] = GameUnit(NULL, constructor); } }
bool GloriousShot::Update() { if( m_StatusFlags[ PAUSED ] ){ return true; } // メッセージ処理 ProcessMessages(); // 最初の位置を保存 if( m_Counter == 0 ){ m_BeginPosX = m_GUData.m_PosX; m_BeginPosY = m_GUData.m_PosY; MAPIL::PlayStaticBuffer( m_pResourceMap->m_pGlobalResourceMap->m_SEMap[ LAUNCH_EFFECT_SE_ID ] ); } // 死亡判定処理 if( m_StatusFlags[ DEAD ] ){ ++m_DeadCounter; if( m_DeadCounter >= 20 ){ return false; } } else{ m_GUData.m_PosX += m_GUData.m_Speed * CosGU( m_GUData.m_Angle ); m_GUData.m_PosY -= m_GUData.m_Speed * SinGU( m_GUData.m_Angle ); m_Circle.SetCenterX( m_GUData.m_PosX.GetFloat() ); m_Circle.SetCenterY( m_GUData.m_PosY.GetFloat() ); if( m_GUData.m_PosX < GameUnit( 0 ) || m_GUData.m_PosX > GameUnit( 640 ) || m_GUData.m_PosY < GameUnit( -30 ) || m_GUData.m_PosY > GameUnit( 500 ) ){ return false; } } ++m_Counter; return true; }
ElipseShotS::ElipseShotS( std::shared_ptr < ResourceMap > pMap, int id ) : NormalShot( pMap, id ) { m_GUData.m_ColRadiusBase = GameUnit( 2 ); m_GUData.m_ColRadius = m_GUData.m_ColRadiusBase; m_Circle.SetRadius( m_GUData.m_ColRadius.GetFloat() ); }
BubbleShotM::BubbleShotM( std::shared_ptr < ResourceMap > pMap, int id ) : NoRotateShot( pMap, id ) { m_GUData.m_ColRadiusBase = GameUnit( 4 ); m_GUData.m_ColRadius = m_GUData.m_ColRadiusBase; m_Circle.SetRadius( m_GUData.m_ColRadius.GetFloat() ); }
bool BeamShotM::Update() { if( m_StatusFlags[ PAUSED ] ){ return true; } // メッセージ処理 ProcessMessages(); // 最初の位置を保存 if( m_Counter == 0 ){ m_BeginPosX = m_GUData.m_PosX; m_BeginPosY = m_GUData.m_PosY; } // 効果音 if( m_Counter == 20 ){ MAPIL::PlayStaticBuffer( m_pResourceMap->m_pGlobalResourceMap->m_SEMap[ LAUNCH_EFFECT_SE_ID ] ); } // 衝突半径 switch( m_Counter ){ case 20: m_GUData.m_ColRadiusBase = GameUnit( -5 ); m_GUData.m_ColRadius = m_GUData.m_ColRadiusBase * m_ImgScale; m_Line.SetThickness( m_GUData.m_ColRadius.GetFloat() ); break; case 60: m_GUData.m_ColRadiusBase = GameUnit( 2 ); m_GUData.m_ColRadius = m_GUData.m_ColRadiusBase * m_ImgScale; m_Line.SetThickness( m_GUData.m_ColRadius.GetFloat() ); break; } // 死亡判定処理 if( m_StatusFlags[ DEAD ] ){ m_GUData.m_ColRadius = GameUnit( -5 ); ++m_DeadCounter; if( m_DeadCounter >= 20 ){ return false; } } else{ m_GUData.m_PosX += m_GUData.m_Speed * CosGU( m_GUData.m_Angle ); m_GUData.m_PosY -= m_GUData.m_Speed * SinGU( m_GUData.m_Angle ); if( m_GUData.m_PosX < GameUnit( 0 ) || m_GUData.m_PosX > GameUnit( 640 ) || m_GUData.m_PosY < GameUnit( -30 ) || m_GUData.m_PosY > GameUnit( 500 ) ){ return false; } float sx = m_GUData.m_PosX.GetFloat(); float sy = m_GUData.m_PosY.GetFloat(); float ex = m_GUData.m_PosX.GetFloat() + m_Length.GetFloat() * cos( MAPIL::DegToRad( m_GUData.m_Angle.GetFloat() ) ); float ey = m_GUData.m_PosY.GetFloat() - m_Length.GetFloat() * sin( MAPIL::DegToRad( m_GUData.m_Angle.GetFloat() ) ); m_Line.SetStartX( sx ); m_Line.SetStartY( sy ); m_Line.SetEndX( ex ); m_Line.SetEndY( ey ); } m_ImgRotAngle = MAPIL::DegToRad( m_GUData.m_Angle.GetFloat() + 90.0f ); ++m_Counter; return true; }