Esempio n. 1
0
	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);
    }
}
Esempio n. 3
0
	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;
	}
Esempio n. 4
0
	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() );
	}
Esempio n. 5
0
	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() );
	}
Esempio n. 6
0
	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;
	}